Generate .gitlab.yaml via .gitlab.jsonnet
This commit is contained in:
parent
165486180d
commit
24044df945
6 changed files with 379 additions and 137 deletions
98
.gitlab-ci.jsonnet
Normal file
98
.gitlab-ci.jsonnet
Normal file
|
@ -0,0 +1,98 @@
|
|||
local utils = import '.gitlab-ci/utils.libsonnet';
|
||||
local vars = import '.gitlab-ci/vars.libsonnet';
|
||||
local mergeJob = utils.ci.mergeJob;
|
||||
local images = vars.images;
|
||||
local baseJob = (import '.gitlab-ci/base_jobs.libsonnet')(vars);
|
||||
|
||||
local stages_list = [
|
||||
// gitlab-ci stages
|
||||
'docker_base',
|
||||
'docker_build',
|
||||
'unit_tests',
|
||||
'integration',
|
||||
'docker_release',
|
||||
'teardown',
|
||||
];
|
||||
local stages = utils.set(stages_list);
|
||||
|
||||
// List CI jobs
|
||||
local jobs = {
|
||||
// Helpers
|
||||
local onlyMaster = {
|
||||
only: ['master', 'tags'],
|
||||
},
|
||||
local onlyBranch = {
|
||||
only: ['branches'],
|
||||
},
|
||||
|
||||
'container-base-build': baseJob.dockerBuild + onlyMaster {
|
||||
// ! Only master/tags
|
||||
// Update the base container
|
||||
stage: stages.docker_base,
|
||||
script: [
|
||||
'docker build --cache-from quay.io/quay/quay-base:latest' +
|
||||
' -t %s -f quay-base.dockerfile .' % images.base.name,
|
||||
'docker push %s' % images.base.name,
|
||||
],
|
||||
},
|
||||
|
||||
'container-build': baseJob.dockerBuild {
|
||||
// Build and push the quay container.
|
||||
// Docker Tag is the branch/tag name
|
||||
stage: stages.docker_build,
|
||||
script: [
|
||||
'docker build -t %s -f quay.dockerfile .' % images.quayci.name,
|
||||
'docker push %s' % images.quayci.name],
|
||||
},
|
||||
|
||||
'container-release': baseJob.dockerBuild + onlyMaster {
|
||||
// ! Only master/tags
|
||||
// push the container to the 'prod' repository
|
||||
local repo_with_sha = images.release.name,
|
||||
stage: stages.docker_release,
|
||||
script: [
|
||||
'docker pull %s' % images.quayci.name,
|
||||
'docker tag %s %s' % [images.quayci.name, repo_with_sha],
|
||||
'docker push %s' % [repo_with_sha], # @TODO(ant31) add signing
|
||||
],
|
||||
},
|
||||
|
||||
// Unit-tests
|
||||
local unittest_stage = baseJob.QuayTest {
|
||||
stage: stages.unit_tests },
|
||||
'unit-tests': unittest_stage {
|
||||
script: [
|
||||
'py.test --timeout=7200 --verbose --show-count ./ --color=no -x'] },
|
||||
|
||||
'registry-tests': unittest_stage {
|
||||
script: [
|
||||
'py.test --timeout=7200 --verbose --show-count ./test/registry_tests.py --color=no -x'] },
|
||||
|
||||
// UI tests
|
||||
'karma-tests': unittest_stage {
|
||||
script: [
|
||||
'curl -Ss https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -',
|
||||
'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list',
|
||||
'apt-get update -yqqq',
|
||||
'apt-get install -y google-chrome-stable',
|
||||
'yarn test'
|
||||
] },
|
||||
|
||||
// Unit-tests with real databases
|
||||
local db_stage = { stage: stages.unit_tests },
|
||||
local dbname = 'quay',
|
||||
postgres: db_stage + baseJob.dbTest('postgresql',
|
||||
image='postgres:9.6',
|
||||
env={ POSTGRES_PASSWORD: dbname, POSTGRES_USER: dbname }),
|
||||
|
||||
mysql: db_stage + baseJob.dbTest('mysql+pymysql',
|
||||
image='mysql:latest',
|
||||
env={ [key]: dbname for key in ['MYSQL_ROOT_PASSWORD', 'MYSQL_DATABASE',
|
||||
'MYSQL_USER', 'MYSQL_PASSWORD'] }),
|
||||
|
||||
};
|
||||
|
||||
{
|
||||
stages: stages_list,
|
||||
variables: vars.global,
|
||||
} + jobs
|
Reference in a new issue