diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2019-04-15 13:53:38 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2019-04-15 13:53:38 +0000 |
commit | a460d82bbd2fd2d7e6ac869ac399815516029960 (patch) | |
tree | 3dee128883ef21bb278346c18a03f09eb5047584 | |
parent | 3d4706d8c5c1cc3630b3536532dda1ed41e9d9ca (diff) | |
download | gitlab-ce-a460d82bbd2fd2d7e6ac869ac399815516029960.tar.gz |
EE: Split `.gitlab-ci.yml` into multiple includes
-rw-r--r-- | .gitlab-ci.yml | 1331 | ||||
-rw-r--r-- | .gitlab/ci/cng.gitlab-ci.yml | 16 | ||||
-rw-r--r-- | .gitlab/ci/docs.gitlab-ci.yml | 76 | ||||
-rw-r--r-- | .gitlab/ci/frontend.gitlab-ci.yml | 237 | ||||
-rw-r--r-- | .gitlab/ci/global.gitlab-ci.yml | 62 | ||||
-rw-r--r-- | .gitlab/ci/pages.gitlab-ci.yml | 27 | ||||
-rw-r--r-- | .gitlab/ci/qa.gitlab-ci.yml | 20 | ||||
-rw-r--r-- | .gitlab/ci/rails.gitlab-ci.yml | 425 | ||||
-rw-r--r-- | .gitlab/ci/reports.gitlab-ci.yml | 60 | ||||
-rw-r--r-- | .gitlab/ci/review.gitlab-ci.yml | 232 | ||||
-rw-r--r-- | .gitlab/ci/setup.gitlab-ci.yml | 43 | ||||
-rw-r--r-- | .gitlab/ci/test-metadata.gitlab-ci.yml | 118 |
12 files changed, 1330 insertions, 1317 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 93f61ea83d8..71d7b7c4ab6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,35 +1,5 @@ image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.5.3-golang-1.11-git-2.18-chrome-71.0-node-10.x-yarn-1.12-postgresql-9.6-graphicsmagick-1.3.29" -include: - - local: /lib/gitlab/ci/templates/Code-Quality.gitlab-ci.yml - -.dedicated-runner: &dedicated-runner - retry: - max: 1 # This is confusing but this means "2 runs at max". - when: - - unknown_failure - - api_failure - - runner_system_failure - tags: - - gitlab-org - -.default-cache: &default-cache - key: "debian-stretch-ruby-2.5.3-node-10.x" - paths: - - vendor/ruby - - .yarn-cache/ - - vendor/gitaly-ruby - -.push-cache: &push-cache - cache: - <<: *default-cache - policy: push - -.pull-cache: &pull-cache - cache: - <<: *default-cache - policy: pull - variables: MYSQL_ALLOW_EMPTY_PASSWORD: "1" RAILS_ENV: "test" @@ -41,12 +11,13 @@ variables: KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master.json FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json BUILD_ASSETS_IMAGE: "false" + ## EE specific variables ## # This hack is needed to make ES not that memory hungry ES_JAVA_OPTS: "-Xms256m -Xmx256m" ELASTIC_URL: "http://elastic:changeme@docker.elastic.co-elasticsearch-elasticsearch:9200" EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master-ee.json - + before_script: - bundle --version - date @@ -67,1289 +38,15 @@ stages: - pages - post-cleanup -# Predefined scopes -.tests-metadata-state: &tests-metadata-state - <<: *dedicated-runner - variables: - TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache" - before_script: - - source scripts/utils.sh - artifacts: - expire_in: 31d - paths: - - knapsack/ - - rspec_flaky/ - - rspec_profiling/ - -.use-pg: &use-pg - services: - - name: postgres:9.6 - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - - name: redis:alpine - -.use-pg-10: &use-pg-10 - services: - - name: postgres:10.0 - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - - name: redis:alpine - -.use-mysql: &use-mysql - services: - - mysql:5.7.24 - - redis:alpine - -# BEGIN EE-only service helpers - -.use-pg-9-6: &use-pg-9-6 - services: - - postgres:9.6 - - redis:alpine - -.use-pg-10-2: &use-pg-10-2 - services: - - postgres:10.2 - - redis:alpine - -.use-pg-with-elasticsearch: &use-pg-with-elasticsearch - services: - - postgres:9.6 - - redis:alpine - - docker.elastic.co/elasticsearch/elasticsearch:5.6.12 - -.use-mysql-with-elasticsearch: &use-mysql-with-elasticsearch - services: - - mysql:5.7.24 - - redis:alpine - - docker.elastic.co/elasticsearch/elasticsearch:5.6.12 - -# END EE-only service helpers - -# Skip all jobs except the ones that begin with 'docs/'. -# Used for commits including ONLY documentation changes. -# https://docs.gitlab.com/ce/development/documentation/#testing -.except-docs: &except-docs - except: - - /(^docs[\/-].*|.*-docs$)/ - -.except-qa: &except-qa - except: - - /(^qa[\/-].*|.*-qa$)/ - -.except-docs-and-qa: &except-docs-and-qa - except: - - /(^docs[\/-].*|.*-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ - -.only-schedules-master: &only-schedules-master - only: - - schedules@gitlab-org/gitlab-ce - - schedules@gitlab-org/gitlab-ee - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - master@gitlab/gitlabhq - - master@gitlab/gitlab-ee - -# Jobs that only need to pull cache -.dedicated-no-docs-pull-cache-job: &dedicated-no-docs-pull-cache-job - <<: *dedicated-runner - <<: *except-docs - <<: *pull-cache - dependencies: - - setup-test-env - stage: test - -# Jobs that do not need a DB -.dedicated-no-docs-no-db-pull-cache-job: &dedicated-no-docs-no-db-pull-cache-job - <<: *dedicated-no-docs-pull-cache-job - variables: - SETUP_DB: "false" - -.dedicated-no-docs-and-no-qa-pull-cache-job: &dedicated-no-docs-and-no-qa-pull-cache-job - <<: *dedicated-no-docs-pull-cache-job - <<: *except-docs-and-qa - -.single-script-job: &single-script-job - image: ruby:2.5-alpine - stage: test - cache: {} - dependencies: [] - variables: &single-script-job-variables - GIT_STRATEGY: none - before_script: - # We don't clone the repo by using GIT_STRATEGY: none and only download the - # single script we need here so it's much faster than cloning. - - export SCRIPT_NAME="${SCRIPT_NAME:-$CI_JOB_NAME}" - - apk add --update openssl - - wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/$SCRIPT_NAME - - chmod 755 $(basename $SCRIPT_NAME) - -.rake-exec: &rake-exec - <<: *dedicated-no-docs-no-db-pull-cache-job - script: - - bundle exec rake $CI_JOB_NAME - -.rspec-metadata: &rspec-metadata - <<: *dedicated-runner - <<: *except-docs-and-qa - <<: *pull-cache - stage: test - script: - - JOB_NAME=( $CI_JOB_NAME ) - - TEST_TOOL=${JOB_NAME[0]} - - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export KNAPSACK_GENERATE_REPORT=true - - export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH} - - export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export FLAKY_RSPEC_GENERATE_REPORT=true - - export CACHE_CLASSES=true - - cp ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH} - - '[[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}' - - '[[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}' - - scripts/gitaly-test-spawn - - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag ~geo" - artifacts: - expire_in: 31d - when: always - paths: - - coverage/ - - knapsack/ - - rspec_flaky/ - - rspec_profiling/ - - tmp/capybara/ - reports: - junit: junit_rspec.xml - -.rspec-metadata-pg: &rspec-metadata-pg - <<: *rspec-metadata - <<: *use-pg - -.rspec-metadata-pg-10: &rspec-metadata-pg-10 - <<: *rspec-metadata - <<: *use-pg-10 - image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.5.3-golang-1.11-git-2.18-chrome-71.0-node-10.x-yarn-1.12-postgresql-10-graphicsmagick-1.3.29" - -.rspec-metadata-mysql: &rspec-metadata-mysql - <<: *rspec-metadata - <<: *use-mysql - -.rspec-metadata-ee: &rspec-metadata-ee - <<: *rspec-metadata - stage: test - script: - - JOB_NAME=( $CI_JOB_NAME ) - - TEST_TOOL=${JOB_NAME[0]} - - export KNAPSACK_TEST_FILE_PATTERN="ee/spec/**{,/*/**}/*_spec.rb" KNAPSACK_GENERATE_REPORT=true CACHE_CLASSES=true - - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - cp ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH} - - scripts/gitaly-test-spawn - - knapsack rspec "-Ispec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag ~geo" - -.rspec-ee-pg: &rspec-ee-pg - <<: *rspec-metadata-ee - <<: *use-pg-with-elasticsearch - -.rspec-ee-mysql: &rspec-ee-mysql - <<: *rspec-metadata-ee - <<: *use-mysql-with-elasticsearch - -.rspec-geo-pg-9-6: &rspec-metadata-pg-geo-9-6 - <<: *rspec-metadata - <<: *use-pg-9-6 - stage: test - script: - - export NO_KNAPSACK=1 - - export CACHE_CLASSES=true - - source scripts/prepare_postgres_fdw.sh - - scripts/gitaly-test-spawn - - bundle exec rspec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag geo ee/spec/ - -.rspec-geo-pg-10-2: &rspec-metadata-pg-geo-10-2 - <<: *rspec-metadata - <<: *use-pg-10-2 - stage: test - script: - - export NO_KNAPSACK=1 - - export CACHE_CLASSES=true - - source scripts/prepare_postgres_fdw.sh - - scripts/gitaly-test-spawn - - bundle exec rspec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag geo ee/spec/ - -.only-canonical-masters: &only-canonical-masters - only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - master@gitlab/gitlabhq - - master@gitlab/gitlab-ee - -.gitlab-setup: &gitlab-setup - <<: *dedicated-no-docs-and-no-qa-pull-cache-job - <<: *use-pg - variables: - SETUP_DB: "false" - script: - # Manually clone gitlab-test and only seed this project in - # db/fixtures/development/04_project.rb thanks to SIZE=1 below - - git clone https://gitlab.com/gitlab-org/gitlab-test.git - /home/git/repositories/gitlab-org/gitlab-test.git - - scripts/gitaly-test-spawn - - force=yes SIZE=1 FIXTURE_PATH="db/fixtures/development" bundle exec rake gitlab:setup - artifacts: - when: on_failure - expire_in: 1d - paths: - - log/development.log - -# DB migration, rollback, and seed jobs -.db-migrate-reset: &db-migrate-reset - <<: *dedicated-no-docs-and-no-qa-pull-cache-job - script: - - bundle exec rake db:migrate:reset - -.migration-paths: &migration-paths - <<: *dedicated-no-docs-and-no-qa-pull-cache-job - variables: - SETUP_DB: "false" - script: - - git fetch https://gitlab.com/gitlab-org/gitlab-ee.git v9.3.0-ee - - git checkout -f FETCH_HEAD - - sed -i "s/gem 'oj', '~> 2.17.4'//" Gemfile - - bundle update google-protobuf grpc - - bundle install $BUNDLE_INSTALL_FLAGS - - date - - cp config/gitlab.yml.example config/gitlab.yml - - bundle exec rake db:drop db:create db:schema:load db:seed_fu - - date - - git checkout -f $CI_COMMIT_SHA - - bundle install $BUNDLE_INSTALL_FLAGS - - date - - . scripts/prepare_build.sh - - date - - bundle exec rake db:migrate - -.migration-paths-upgrade-ce-to-ee: &migration-paths-upgrade-ce-to-ee - <<: *dedicated-no-docs-and-no-qa-pull-cache-job - variables: - SETUP_DB: "false" - script: - - ruby -r./scripts/ee_specific_check/ee_specific_check -e'EESpecificCheck.fetch_remote_ce_branch' - - git checkout -f FETCH_HEAD - - . scripts/utils.sh - - . scripts/prepare_build.sh - - date - - setup_db - - date - - git checkout -f $CI_COMMIT_SHA - - date - - . scripts/prepare_build.sh - - date - - bundle exec rake db:migrate - -## -# Trigger a package build in omnibus-gitlab repository -# -package-and-qa: - image: ruby:2.5-alpine - stage: test - before_script: [] - dependencies: [] - cache: {} - variables: - GIT_DEPTH: "1" - API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" - retry: 0 - script: - - apk add --update openssl curl jq - - gem install gitlab --no-document - - source ./scripts/review_apps/review-apps.sh - - wait_for_job_to_be_done "gitlab:assets:compile" - - ./scripts/trigger-build omnibus - when: manual - only: - - /.+/@gitlab-org/gitlab-ce - - /.+/@gitlab-org/gitlab-ee - -# Review docs base -.review-docs: &review-docs - <<: *dedicated-runner - <<: *single-script-job - variables: - <<: *single-script-job-variables - SCRIPT_NAME: trigger-build-docs - environment: - name: review-docs/$CI_COMMIT_REF_SLUG - # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables - # Discussion: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14236/diffs#note_40140693 - url: http://$CI_ENVIRONMENT_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX - on_stop: review-docs-cleanup - -# Trigger a manual docs build in gitlab-docs only on non docs-only branches. -# Useful to preview the docs changes live. -review-docs-deploy-manual: - <<: *review-docs - stage: build - script: - - gem install gitlab --no-document - - ./$SCRIPT_NAME deploy - when: manual - only: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee - <<: *except-docs-and-qa - -# Always trigger a docs build in gitlab-docs only on docs-only branches. -# Useful to preview the docs changes live. -review-docs-deploy: - <<: *review-docs - stage: post-test - script: - - gem install gitlab --no-document - - ./$SCRIPT_NAME deploy - only: - - /(^docs[\/-].*|.*-docs$)/@gitlab-org/gitlab-ce - - /(^docs[\/-].*|.*-docs$)/@gitlab-org/gitlab-ee - <<: *except-qa - -# Cleanup remote environment of gitlab-docs -review-docs-cleanup: - <<: *review-docs - stage: post-cleanup - environment: - name: review-docs/$CI_COMMIT_REF_SLUG - action: stop - script: - - gem install gitlab --no-document - - ./$SCRIPT_NAME cleanup - when: manual - only: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee - -## -# Trigger a docker image build in CNG (Cloud Native GitLab) repository -# -cloud-native-image: - image: ruby:2.5-alpine - before_script: [] - dependencies: [] - stage: post-test - allow_failure: true - variables: - GIT_DEPTH: "1" - cache: {} - when: manual - script: - - gem install gitlab --no-document - - CNG_PROJECT_PATH="gitlab-org/build/CNG" BUILD_TRIGGER_TOKEN=$CI_JOB_TOKEN ./scripts/trigger-build cng - only: - - tags@gitlab-org/gitlab-ce - - tags@gitlab-org/gitlab-ee - -# Retrieve knapsack and rspec_flaky reports -retrieve-tests-metadata: - <<: *tests-metadata-state - <<: *except-docs-and-qa - stage: prepare - cache: - key: tests_metadata - policy: pull - script: - - mkdir -p knapsack/${CI_PROJECT_NAME}/ - - wget -O $KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $KNAPSACK_RSPEC_SUITE_REPORT_PATH - - '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}' - - mkdir -p rspec_flaky/ - - mkdir -p rspec_profiling/ - - wget -O $FLAKY_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$FLAKY_RSPEC_SUITE_REPORT_PATH || rm $FLAKY_RSPEC_SUITE_REPORT_PATH - - '[[ -f $FLAKY_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_SUITE_REPORT_PATH}' - - wget -O $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH - - '[[ -f $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH}' - -.ee-specific-check: &ee-specific-check - <<: *dedicated-runner - stage: test - dependencies: [] - before_script: [] - cache: {} - retry: 0 - only: - - branches - - branches@gitlab-org/gitlab-ee - except: - - master - - tags - - /[\d-]+-stable(-ee)?/ - - /^security-/ - - /\bce\-to\-ee\b/ - - /(^docs[\/-].*|.*-docs$)/ - -ee-files-location-check: - <<: *ee-specific-check - script: - - scripts/ee-files-location-check - -ee-specific-lines-check: - <<: *ee-specific-check - script: - - scripts/ee-specific-lines-check - -update-tests-metadata: - <<: *tests-metadata-state - <<: *only-canonical-masters - stage: post-test - cache: - key: tests_metadata - paths: - - knapsack/ - - rspec_flaky/ - policy: push - script: - - retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document - - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec-pg_node_*.json - - scripts/merge-reports ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec-pg-ee_node_*.json - - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json - - FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH} - - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' - - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH' - - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH' - - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json - - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json - - scripts/insert-rspec-profiling-data - -flaky-examples-check: - <<: *dedicated-runner - image: ruby:2.5-alpine - services: [] - before_script: [] - variables: - SETUP_DB: "false" - USE_BUNDLE_INSTALL: "false" - NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json - stage: post-test - allow_failure: true - retry: 0 - only: - - branches - except: - - master - - /(^docs[\/-].*|.*-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ - artifacts: - expire_in: 30d - paths: - - rspec_flaky/ - script: - - '[[ -f $NEW_FLAKY_SPECS_REPORT ]] || echo "{}" > ${NEW_FLAKY_SPECS_REPORT}' - - scripts/merge-reports ${NEW_FLAKY_SPECS_REPORT} rspec_flaky/new_*_*.json - - scripts/detect-new-flaky-examples $NEW_FLAKY_SPECS_REPORT - -.assets-compile-cache: &assets-compile-cache - cache: - key: "assets-compile:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v5" - paths: - - vendor/ruby/ - - .yarn-cache/ - - tmp/cache/assets/sprockets - -compile-assets: - <<: *dedicated-runner - <<: *except-docs - <<: *use-pg - stage: prepare - script: - - node --version - - yarn install --frozen-lockfile --cache-folder .yarn-cache - - free -m - - bundle exec rake gitlab:assets:compile - - scripts/clean-old-cached-assets - variables: - # we override the max_old_space_size to prevent OOM errors - NODE_OPTIONS: --max_old_space_size=3584 - artifacts: - expire_in: 7d - paths: - - node_modules - - public/assets - <<: *assets-compile-cache - -setup-test-env: - <<: *dedicated-runner - <<: *except-docs - <<: *use-pg - stage: prepare - cache: - <<: *default-cache - script: - - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' - - scripts/gitaly-test-build # Do not use 'bundle exec' here - artifacts: - expire_in: 7d - paths: - - tmp/tests - - config/secrets.yml - - vendor/gitaly-ruby - -# GitLab Review apps -.review-only: &review-only - only: - refs: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee - kubernetes: active - except: - refs: - - master - - /(^docs[\/-].*|.*-docs$)/ - -.review-schedules-only: &review-schedules-only - only: - refs: - - schedules@gitlab-org/gitlab-ce - - schedules@gitlab-org/gitlab-ee - kubernetes: active - variables: - - $REVIEW_APP_CLEANUP - except: - refs: - - tags - - /(^docs[\/-].*|.*-docs$)/ - -.review-base: &review-base - <<: *dedicated-no-docs-no-db-pull-cache-job - <<: *review-only - image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base - stage: test - cache: {} - dependencies: [] - environment: &review-environment - name: review/${CI_COMMIT_REF_NAME} - url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} - before_script: [] - -.review-docker: &review-docker - <<: *review-base - image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine - services: - - docker:stable-dind - tags: - - gitlab-org - - docker - variables: &review-docker-variables - GIT_DEPTH: "1" - DOCKER_DRIVER: overlay2 - DOCKER_HOST: tcp://docker:2375 - LATEST_QA_IMAGE: "gitlab/${CI_PROJECT_NAME}-qa:nightly" - QA_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/${CI_PROJECT_NAME}-qa:${CI_COMMIT_REF_SLUG}" - -build-qa-image: - <<: *review-docker - variables: - <<: *review-docker-variables - GIT_DEPTH: "20" - stage: prepare - script: - - time docker build --cache-from ${LATEST_QA_IMAGE} --tag ${QA_IMAGE} ./qa/ - - echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - - time docker push ${QA_IMAGE} - -danger-review: - <<: *pull-cache - image: registry.gitlab.com/gitlab-org/gitlab-build-images:danger - stage: test - dependencies: [] - before_script: [] - only: - variables: - - $DANGER_GITLAB_API_TOKEN - except: - refs: - - master - variables: - - $CI_COMMIT_REF_NAME =~ /^ce-to-ee-.*/ - - $CI_COMMIT_REF_NAME =~ /.*-stable(-ee)?-prepare-.*/ - script: - - git version - - node --version - - yarn install --frozen-lockfile --cache-folder .yarn-cache - - danger --fail-on-errors=true - -rspec-pg: - <<: *rspec-metadata-pg - parallel: 50 - -rspec-pg-10: - <<: *rspec-metadata-pg-10 - <<: *only-schedules-master - parallel: 50 - -rspec-mysql: - <<: *rspec-metadata-mysql - <<: *only-schedules-master - parallel: 50 - -rspec-fast-spec-helper: - <<: *rspec-metadata-pg - script: - - bundle exec rspec spec/fast_spec_helper.rb - -.rspec-quarantine: &rspec-quarantine - <<: *only-schedules-master - script: - - export CACHE_CLASSES=true - - scripts/gitaly-test-spawn - - bin/rspec --color --format documentation --tag quarantine spec/ - -rspec-pg-quarantine: - <<: *rspec-metadata-pg - <<: *rspec-quarantine - allow_failure: true - -rspec-mysql-quarantine: - <<: *rspec-metadata-mysql - <<: *rspec-quarantine - allow_failure: true - -# EE jobs START -rspec-pg-ee: - <<: *rspec-ee-pg - parallel: 10 - -rspec-mysql-ee: - <<: *rspec-ee-mysql - <<: *only-schedules-master - parallel: 10 - -rspec-pg geo: *rspec-metadata-pg-geo-9-6 -rspec-pg-10 geo: *rspec-metadata-pg-geo-10-2 - -.rspec-quarantine-ee: &rspec-quarantine-ee - <<: *only-schedules-master - script: - - export CACHE_CLASSES=true - - scripts/gitaly-test-spawn - - bin/rspec --color --format documentation --tag quarantine ee/spec/ - -rspec-pg-quarantine-ee: - <<: *rspec-metadata-pg - <<: *rspec-quarantine-ee - allow_failure: true - -rspec-mysql-quarantine-ee: - <<: *rspec-metadata-mysql - <<: *rspec-quarantine-ee - allow_failure: true -# EE jobs END - -static-analysis: - <<: *dedicated-no-docs-no-db-pull-cache-job - dependencies: - - compile-assets - - setup-test-env - script: - - scripts/static-analysis - cache: - key: "debian-stretch-ruby-2.5.3-node-10.x-and-rubocop" - paths: - - vendor/ruby - - .yarn-cache/ - - tmp/rubocop_cache - -# Documentation checks: -# - Check validity of relative links, and anchors -# - Make sure cURL examples in API docs use the full switches -docs lint: - <<: *dedicated-runner - <<: *except-qa - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-docs-lint" - stage: test - variables: - SETUP_DB: "false" - cache: {} - dependencies: [] - before_script: [] - script: - - scripts/lint-doc.sh - - scripts/lint-changelog-yaml - - mv doc/ /tmp/gitlab-docs/content/$DOCS_GITLAB_REPO_SUFFIX - - cd /tmp/gitlab-docs - # Build HTML from Markdown - - bundle exec nanoc - # Check the internal links - - bundle exec nanoc check internal_links - # Check the internal anchor links - - bundle exec nanoc check internal_anchors - -downtime_check: - <<: *rake-exec - except: - - master - - tags - - /^[\d-]+-stable(-ee)?$/ - - /(^docs[\/-].*|.*-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ - -ee_compat_check: - <<: *rake-exec - dependencies: [] - except: - - master - - tags - - /[\d-]+-stable(-ee)?/ - - /^security-/ - - branches@gitlab-org/gitlab-ee - - branches@gitlab/gitlab-ee - retry: 0 - artifacts: - name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}" - when: always - expire_in: 10d - paths: - - ee_compat_check/patches/*.patch - -db:migrate:reset-pg: - <<: *db-migrate-reset - <<: *use-pg - -db:migrate:reset-mysql: - <<: *db-migrate-reset - <<: *use-mysql - -db:check-schema-pg: - <<: *db-migrate-reset - <<: *use-pg - script: - - source scripts/schema_changed.sh - -migration:path-pg: - <<: *migration-paths - <<: *use-pg - -migration:path-mysql: - <<: *migration-paths - <<: *use-mysql - -migration:upgrade-pg-ce-to-ee: - <<: *migration-paths-upgrade-ce-to-ee - <<: *use-pg - -migration:upgrade-mysql-ce-to-ee: - <<: *migration-paths-upgrade-ce-to-ee - <<: *use-mysql - -.db-rollback: &db-rollback - <<: *dedicated-no-docs-and-no-qa-pull-cache-job - script: - - bundle exec rake db:migrate VERSION=20170523121229 - - bundle exec rake db:migrate - -db:rollback-pg: - <<: *db-rollback - <<: *use-pg - -db:rollback-mysql: - <<: *db-rollback - <<: *use-mysql - -db:rollback-pg-geo: - <<: *db-rollback - <<: *use-pg - script: - - bundle exec rake geo:db:migrate VERSION=20170627195211 - - bundle exec rake geo:db:migrate - -gitlab:setup-pg: - <<: *gitlab-setup - <<: *use-pg - -gitlab:setup-mysql: - <<: *gitlab-setup - <<: *use-mysql - -# Frontend-related jobs -gitlab:assets:compile: - <<: *dedicated-no-docs-pull-cache-job - image: dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.5.3-git-2.18-chrome-71.0-node-8.x-yarn-1.12-graphicsmagick-1.3.29-docker-18.06.1 - dependencies: - - setup-test-env - services: - - docker:stable-dind - variables: - NODE_ENV: "production" - RAILS_ENV: "production" - SETUP_DB: "false" - SKIP_STORAGE_VALIDATION: "true" - WEBPACK_REPORT: "true" - # we override the max_old_space_size to prevent OOM errors - NODE_OPTIONS: --max_old_space_size=3584 - DOCKER_DRIVER: overlay2 - DOCKER_HOST: tcp://docker:2375 - script: - - node --version - - yarn install --frozen-lockfile --production --cache-folder .yarn-cache - - free -m - - bundle exec rake gitlab:assets:compile - - time scripts/build_assets_image - - scripts/clean-old-cached-assets - artifacts: - name: webpack-report - expire_in: 31d - paths: - - webpack-report/ - - public/assets/ - <<: *assets-compile-cache - only: - - /.+/@gitlab-org/gitlab-ce - - /.+/@gitlab-org/gitlab-ee - - /.+/@gitlab/gitlabhq - - /.+/@gitlab/gitlab-ee - tags: - - docker - - gitlab-org - -gitlab:ui:visual: - tags: - - gitlab-org - before_script: [] - allow_failure: true - dependencies: - - compile-assets - script: - # Remove node modules from GitLab that may conflict with gitlab-ui - - rm -r node_modules - - git clone https://gitlab.com/gitlab-org/gitlab-ui.git - - cp public/assets/application-*.css gitlab-ui/styles/application.css - - cd gitlab-ui - - yarn install - - CSS_URL=./application.css yarn test - only: - changes: - - app/assets/stylesheets/*.scss - - app/assets/stylesheets/**/*.scss - - app/assets/stylesheets/**/**/*.scss - except: - refs: - - /(^docs[\/-].*|.*-docs$)/ - - master - variables: - - $CI_COMMIT_MESSAGE =~ /\[skip visual\]/i - artifacts: - paths: - - tests/__image_snapshots__/ - -karma: - <<: *dedicated-no-docs-pull-cache-job - <<: *use-pg - dependencies: - - compile-assets - - setup-test-env - variables: - # we override the max_old_space_size to prevent OOM errors - NODE_OPTIONS: --max_old_space_size=3584 - script: - - export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log - - date - - scripts/gitaly-test-spawn - - date - - bundle exec rake karma - coverage: '/^Statements *: (\d+\.\d+%)/' - artifacts: - name: coverage-javascript - expire_in: 31d - when: always - paths: - - chrome_debug.log - - coverage-javascript/ - reports: - junit: junit_karma.xml - -jest: - <<: *dedicated-no-docs-and-no-qa-pull-cache-job - <<: *use-pg - dependencies: - - compile-assets - - setup-test-env - script: - - scripts/gitaly-test-spawn - - date - - bundle exec rake karma:fixtures - - date - - yarn jest --ci --coverage - artifacts: - name: coverage-frontend - expire_in: 31d - when: always - paths: - - coverage-frontend/ - - junit_jest.xml - reports: - junit: junit_jest.xml - cache: - key: jest - paths: - - tmp/jest/jest/ - -code_quality: - <<: *dedicated-no-docs-no-db-pull-cache-job - # gitlab-org runners set `privileged: false` but we need to have it set to true - # since we're using Docker in Docker - tags: [] - before_script: [] - cache: {} - dependencies: [] - variables: - SETUP_DB: "false" - -sast: - <<: *dedicated-no-docs-no-db-pull-cache-job - image: docker:stable - variables: - SAST_CONFIDENCE_LEVEL: 2 - DOCKER_DRIVER: overlay2 - allow_failure: true - tags: [] - before_script: [] - cache: {} - dependencies: [] - services: - - docker:stable-dind - script: - - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - - docker run - --env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}" - --volume "$PWD:/code" - --volume /var/run/docker.sock:/var/run/docker.sock - "registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code - artifacts: - reports: - sast: gl-sast-report.json - -dependency_scanning: - <<: *dedicated-no-docs-no-db-pull-cache-job - image: docker:stable - variables: - DOCKER_DRIVER: overlay2 - allow_failure: true - tags: [] - before_script: [] - cache: {} - dependencies: [] - services: - - docker:stable-dind - script: - - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - - docker run - --env DEP_SCAN_DISABLE_REMOTE_CHECKS="${DEP_SCAN_DISABLE_REMOTE_CHECKS:-false}" - --volume "$PWD:/code" - --volume /var/run/docker.sock:/var/run/docker.sock - "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$SP_VERSION" /code - artifacts: - reports: - dependency_scanning: gl-dependency-scanning-report.json - -qa:internal: - <<: *dedicated-no-docs-no-db-pull-cache-job - services: [] - script: - - cd qa/ - - bundle install - - bundle exec rspec - -qa:selectors: - <<: *dedicated-no-docs-no-db-pull-cache-job - services: [] - script: - - cd qa/ - - bundle install - - bundle exec bin/qa Test::Sanity::Selectors - -.qa-frontend-node: &qa-frontend-node - <<: *dedicated-no-docs-no-db-pull-cache-job - stage: test - cache: - key: "$CI_JOB_NAME" - paths: - - .yarn-cache/ - dependencies: [] - before_script: [] - script: - - date - - yarn install --frozen-lockfile --cache-folder .yarn-cache - - date - - yarn run webpack-prod - -qa-frontend-node:8: - <<: *qa-frontend-node - image: node:8-alpine - -qa-frontend-node:10: - <<: *qa-frontend-node - image: node:10-alpine - -qa-frontend-node:latest: - <<: *qa-frontend-node - image: node:alpine - allow_failure: true - -coverage: - # Don't include dedicated-no-docs-no-db-pull-cache-job here since we need to - # download artifacts from all the rspec jobs instead of from setup-test-env only - <<: *dedicated-runner - <<: *except-docs-and-qa - <<: *pull-cache - variables: - SETUP_DB: "false" - stage: post-test - script: - - bundle exec scripts/merge-simplecov - coverage: '/LOC \((\d+\.\d+%)\) covered.$/' - artifacts: - name: coverage - expire_in: 31d - paths: - - coverage/index.html - - coverage/assets/ - -lint:javascript:report: - <<: *dedicated-no-docs-and-no-qa-pull-cache-job - stage: post-test - dependencies: [] - before_script: [] - script: - - date - - yarn run eslint-report || true # ignore exit code - artifacts: - name: eslint-report - expire_in: 31d - paths: - - eslint-report.html - -jsdoc: - <<: *dedicated-no-docs-pull-cache-job - stage: post-test - dependencies: - - compile-assets - before_script: [] - script: - - date - - yarn run jsdoc || true # ignore exit code - artifacts: - name: jsdoc - expire_in: 31d - paths: - - jsdoc/ - -pages: - <<: *dedicated-no-docs-no-db-pull-cache-job - before_script: [] - stage: pages - dependencies: - - coverage - - karma - - gitlab:assets:compile - - lint:javascript:report - - jsdoc - script: - - mv public/ .public/ - - mkdir public/ - - mv coverage/ public/coverage-ruby/ || true - - mv coverage-javascript/ public/coverage-javascript/ || true - - mv eslint-report.html public/ || true - - mv webpack-report/ public/webpack-report/ || true - - cp .public/assets/application-*.css public/application.css || true - - cp .public/assets/application-*.css.gz public/application.css.gz || true - - mv jsdoc/ public/jsdoc/ || true - artifacts: - paths: - - public - only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - -# Insurance in case a gem needed by one of our releases gets yanked from -# rubygems.org in the future. -cache gems: - <<: *dedicated-no-docs-no-db-pull-cache-job - script: - - bundle package --all --all-platforms - artifacts: - paths: - - vendor/cache - only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - tags - -gitlab_git_test: - <<: *dedicated-runner - <<: *except-docs-and-qa - variables: - SETUP_DB: "false" - before_script: [] - dependencies: [] - cache: {} - script: - - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes - -no_ee_check: - <<: *dedicated-runner - <<: *except-docs-and-qa - variables: - SETUP_DB: "false" - before_script: [] - dependencies: [] - cache: {} - script: - - scripts/no-ee-check - only: - - /.+/@gitlab-org/gitlab-ce - -# GitLab Review apps -.review-build-cng-base: &review-build-cng-base - image: ruby:2.5-alpine - stage: test - before_script: [] - dependencies: [] - cache: {} - variables: - API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" - script: - - apk add --update openssl curl jq - - gem install gitlab --no-document - - source ./scripts/review_apps/review-apps.sh - - wait_for_job_to_be_done "gitlab:assets:compile" - - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng - -review-build-cng: - <<: *review-only - <<: *review-build-cng-base - -schedule:review-build-cng: - <<: *review-schedules-only - <<: *review-build-cng-base - -.review-deploy-base: &review-deploy-base - <<: *review-base - allow_failure: true - variables: - HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" - DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "master" - API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" - environment: - <<: *review-environment - on_stop: review-stop - before_script: - - export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION) - - export GITALY_VERSION=$(<GITALY_SERVER_VERSION) - - export GITLAB_WORKHORSE_VERSION=$(<GITLAB_WORKHORSE_VERSION) - - apk update && apk add jq - - gem install gitlab --no-document - - source ./scripts/review_apps/review-apps.sh - script: - - wait_for_job_to_be_done "review-build-cng" - - perform_review_app_deployment - -review-deploy: - <<: *review-deploy-base - -schedule:review-deploy: - <<: *review-deploy-base - <<: *review-schedules-only - script: - - wait_for_job_to_be_done "schedule:review-build-cng" - - perform_review_app_deployment - -.review-qa-base: &review-qa-base - <<: *review-docker - allow_failure: true - variables: - <<: *review-docker-variables - API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" - QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa" - QA_CAN_TEST_GIT_PROTOCOL_V2: "false" - GITLAB_USERNAME: "root" - GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" - GITLAB_ADMIN_USERNAME: "root" - GITLAB_ADMIN_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" - GITHUB_ACCESS_TOKEN: "${REVIEW_APPS_QA_GITHUB_ACCESS_TOKEN}" - EE_LICENSE: "${REVIEW_APPS_EE_LICENSE}" - QA_DEBUG: "true" - artifacts: - paths: - - ./qa/gitlab-qa-run-* - expire_in: 7 days - when: always - before_script: - - echo "${QA_IMAGE}" - - echo "${CI_ENVIRONMENT_URL}" - - apk update && apk add curl jq - - source ./scripts/review_apps/review-apps.sh - - gem install gitlab-qa --no-document ${GITLAB_QA_VERSION:+ --version ${GITLAB_QA_VERSION}} - -review-qa-smoke: - <<: *review-qa-base - script: - - wait_for_job_to_be_done "review-deploy" - - gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" - -review-qa-all: - <<: *review-qa-base - script: - - wait_for_job_to_be_done "review-deploy" - - gitlab-qa Test::Instance::Any "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" - when: manual - - -.review-performance-base: &review-performance-base - <<: *review-qa-base - script: - - wait_for_job_to_be_done "review-deploy" - - mkdir -p gitlab-exporter - - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js - - mkdir sitespeed-results - - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "$CI_ENVIRONMENT_URL" - - mv sitespeed-results/data/performance.json performance.json - artifacts: - paths: - - sitespeed-results/ - reports: - performance: performance.json - -review-performance: - <<: *review-performance-base - -review-stop: - <<: *review-base - <<: *single-script-job - image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base - allow_failure: true - variables: - <<: *single-script-job-variables - SCRIPT_NAME: "review_apps/review-apps.sh" - when: manual - environment: - <<: *review-environment - action: stop - script: - - source $(basename "${SCRIPT_NAME}") - - delete - - cleanup - -schedule:review-cleanup: - <<: *review-base - <<: *review-schedules-only - stage: build - allow_failure: true - variables: - GIT_DEPTH: "1" - environment: - name: review/auto-cleanup - before_script: - - gem install gitlab --no-document - script: - - ruby -rrubygems scripts/review_apps/automated_cleanup.rb - -schedule:review-performance: - <<: *review-performance-base - <<: *review-schedules-only - script: - - wait_for_job_to_be_done "schedule:review-deploy" +include: + - local: .gitlab/ci/global.gitlab-ci.yml + - local: .gitlab/ci/cng.gitlab-ci.yml + - local: .gitlab/ci/docs.gitlab-ci.yml + - local: .gitlab/ci/frontend.gitlab-ci.yml + - local: .gitlab/ci/pages.gitlab-ci.yml + - local: .gitlab/ci/qa.gitlab-ci.yml + - local: .gitlab/ci/reports.gitlab-ci.yml + - local: .gitlab/ci/rails.gitlab-ci.yml + - local: .gitlab/ci/review.gitlab-ci.yml + - local: .gitlab/ci/setup.gitlab-ci.yml + - local: .gitlab/ci/test-metadata.gitlab-ci.yml diff --git a/.gitlab/ci/cng.gitlab-ci.yml b/.gitlab/ci/cng.gitlab-ci.yml new file mode 100644 index 00000000000..e15f8ed91e0 --- /dev/null +++ b/.gitlab/ci/cng.gitlab-ci.yml @@ -0,0 +1,16 @@ +cloud-native-image: + image: ruby:2.5-alpine + before_script: [] + dependencies: [] + stage: post-test + allow_failure: true + variables: + GIT_DEPTH: "1" + cache: {} + when: manual + script: + - gem install gitlab --no-document + - CNG_PROJECT_PATH="gitlab-org/build/CNG" BUILD_TRIGGER_TOKEN=$CI_JOB_TOKEN ./scripts/trigger-build cng + only: + - tags@gitlab-org/gitlab-ce + - tags@gitlab-org/gitlab-ee diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml new file mode 100644 index 00000000000..5aa1a856405 --- /dev/null +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -0,0 +1,76 @@ +.review-docs: &review-docs + extends: .single-script-job-dedicated-runner + variables: + SCRIPT_NAME: trigger-build-docs + environment: + name: review-docs/$CI_COMMIT_REF_SLUG + # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables + # Discussion: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14236/diffs#note_40140693 + url: http://$CI_ENVIRONMENT_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX + on_stop: review-docs-cleanup + +# Trigger a manual docs build in gitlab-docs only on non docs-only branches. +# Useful to preview the docs changes live. +review-docs-deploy-manual: + <<: *review-docs + stage: build + script: + - gem install gitlab --no-document + - ./$SCRIPT_NAME deploy + when: manual + only: + - branches@gitlab-org/gitlab-ce + - branches@gitlab-org/gitlab-ee + except: + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + +# Always trigger a docs build in gitlab-docs only on docs-only branches. +# Useful to preview the docs changes live. +review-docs-deploy: + <<: *review-docs + stage: post-test + script: + - gem install gitlab --no-document + - ./$SCRIPT_NAME deploy + only: + - /(^docs[\/-].*|.*-docs$)/@gitlab-org/gitlab-ce + - /(^docs[\/-].*|.*-docs$)/@gitlab-org/gitlab-ee + except: + - /(^qa[\/-].*|.*-qa$)/ + +# Cleanup remote environment of gitlab-docs +review-docs-cleanup: + <<: *review-docs + stage: post-cleanup + environment: + name: review-docs/$CI_COMMIT_REF_SLUG + action: stop + script: + - gem install gitlab --no-document + - ./$SCRIPT_NAME cleanup + when: manual + only: + - branches@gitlab-org/gitlab-ce + - branches@gitlab-org/gitlab-ee + +docs lint: + extends: .dedicated-runner + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-docs-lint" + stage: test + cache: {} + dependencies: [] + before_script: [] + script: + - scripts/lint-doc.sh + - scripts/lint-changelog-yaml + - mv doc/ /tmp/gitlab-docs/content/$DOCS_GITLAB_REPO_SUFFIX + - cd /tmp/gitlab-docs + # Build HTML from Markdown + - bundle exec nanoc + # Check the internal links + - bundle exec nanoc check internal_links + # Check the internal anchor links + - bundle exec nanoc check internal_anchors + except: + - /(^qa[\/-].*|.*-qa$)/ diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml new file mode 100644 index 00000000000..e38b878972d --- /dev/null +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -0,0 +1,237 @@ +.assets-compile-cache: &assets-compile-cache + cache: + key: "assets-compile:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v5" + paths: + - vendor/ruby/ + - .yarn-cache/ + - tmp/cache/assets/sprockets + policy: pull-push + +.use-pg: &use-pg + services: + - name: postgres:9.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + +gitlab:assets:compile: + <<: *assets-compile-cache + extends: .dedicated-no-docs-pull-cache-job + image: dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.5.3-git-2.18-chrome-71.0-node-8.x-yarn-1.12-graphicsmagick-1.3.29-docker-18.06.1 + dependencies: + - setup-test-env + services: + - docker:stable-dind + variables: + NODE_ENV: "production" + RAILS_ENV: "production" + SETUP_DB: "false" + SKIP_STORAGE_VALIDATION: "true" + WEBPACK_REPORT: "true" + # we override the max_old_space_size to prevent OOM errors + NODE_OPTIONS: --max_old_space_size=3584 + DOCKER_DRIVER: overlay2 + DOCKER_HOST: tcp://docker:2375 + script: + - node --version + - yarn install --frozen-lockfile --production --cache-folder .yarn-cache + - free -m + - bundle exec rake gitlab:assets:compile + - time scripts/build_assets_image + - scripts/clean-old-cached-assets + artifacts: + name: webpack-report + expire_in: 31d + paths: + - webpack-report/ + - public/assets/ + only: + - /.+/@gitlab-org/gitlab-ce + - /.+/@gitlab-org/gitlab-ee + - /.+/@gitlab/gitlabhq + - /.+/@gitlab/gitlab-ee + tags: + - docker + - gitlab-org + +compile-assets: + extends: .dedicated-runner + <<: *use-pg + <<: *assets-compile-cache + stage: prepare + script: + - node --version + - yarn install --frozen-lockfile --cache-folder .yarn-cache + - free -m + - bundle exec rake gitlab:assets:compile + - scripts/clean-old-cached-assets + variables: + # we override the max_old_space_size to prevent OOM errors + NODE_OPTIONS: --max_old_space_size=3584 + artifacts: + expire_in: 7d + paths: + - node_modules + - public/assets + except: + refs: + - /(^docs[\/-].*|.*-docs$)/ + +gitlab:ui:visual: + extends: .dedicated-runner + before_script: [] + allow_failure: true + dependencies: + - compile-assets + script: + # Remove node modules from GitLab that may conflict with gitlab-ui + - rm -r node_modules + - git clone https://gitlab.com/gitlab-org/gitlab-ui.git + - cp public/assets/application-*.css gitlab-ui/styles/application.css + - cd gitlab-ui + - yarn install + - CSS_URL=./application.css yarn test + only: + changes: + - app/assets/stylesheets/*.scss + - app/assets/stylesheets/**/*.scss + - app/assets/stylesheets/**/**/*.scss + except: + refs: + - /(^docs[\/-].*|.*-docs$)/ + - master + variables: + - $CI_COMMIT_MESSAGE =~ /\[skip visual\]/i + artifacts: + paths: + - tests/__image_snapshots__/ + +karma: + extends: .dedicated-no-docs-pull-cache-job + <<: *use-pg + dependencies: + - compile-assets + - setup-test-env + variables: + # we override the max_old_space_size to prevent OOM errors + NODE_OPTIONS: --max_old_space_size=3584 + script: + - export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log + - date + - scripts/gitaly-test-spawn + - date + - bundle exec rake karma + coverage: '/^Statements *: (\d+\.\d+%)/' + artifacts: + name: coverage-javascript + expire_in: 31d + when: always + paths: + - chrome_debug.log + - coverage-javascript/ + reports: + junit: junit_karma.xml + +jest: + extends: .dedicated-no-docs-and-no-qa-pull-cache-job + <<: *use-pg + dependencies: + - compile-assets + - setup-test-env + script: + - scripts/gitaly-test-spawn + - date + - bundle exec rake karma:fixtures + - date + - yarn jest --ci --coverage + artifacts: + name: coverage-frontend + expire_in: 31d + when: always + paths: + - coverage-frontend/ + - junit_jest.xml + reports: + junit: junit_jest.xml + cache: + key: jest + paths: + - tmp/jest/jest/ + policy: pull-push + +qa:internal: + extends: .dedicated-no-docs-no-db-pull-cache-job + services: [] + script: + - cd qa/ + - bundle install + - bundle exec rspec + dependencies: + - setup-test-env + +qa:selectors: + extends: .dedicated-no-docs-no-db-pull-cache-job + services: [] + script: + - cd qa/ + - bundle install + - bundle exec bin/qa Test::Sanity::Selectors + dependencies: + - setup-test-env + +.qa-frontend-node: &qa-frontend-node + extends: .dedicated-no-docs-no-db-pull-cache-job + stage: test + cache: + key: "$CI_JOB_NAME" + paths: + - .yarn-cache/ + policy: pull-push + dependencies: [] + before_script: [] + script: + - date + - yarn install --frozen-lockfile --cache-folder .yarn-cache + - date + - yarn run webpack-prod + +qa-frontend-node:8: + <<: *qa-frontend-node + image: node:8-alpine + +qa-frontend-node:10: + <<: *qa-frontend-node + image: node:10-alpine + +qa-frontend-node:latest: + <<: *qa-frontend-node + image: node:alpine + allow_failure: true + +lint:javascript:report: + extends: .dedicated-no-docs-no-db-pull-cache-job + stage: post-test + dependencies: [] + before_script: [] + script: + - date + - yarn run eslint-report || true # ignore exit code + artifacts: + name: eslint-report + expire_in: 31d + paths: + - eslint-report.html + +jsdoc: + extends: .dedicated-no-docs-no-db-pull-cache-job + stage: post-test + dependencies: + - compile-assets + before_script: [] + script: + - date + - yarn run jsdoc || true # ignore exit code + artifacts: + name: jsdoc + expire_in: 31d + paths: + - jsdoc/
\ No newline at end of file diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml new file mode 100644 index 00000000000..c48672183b9 --- /dev/null +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -0,0 +1,62 @@ +.dedicated-runner: + retry: + max: 1 # This is confusing but this means "2 runs at max". + when: + - unknown_failure + - api_failure + - runner_system_failure + tags: + - gitlab-org + +.default-cache: &default-cache + key: "debian-stretch-ruby-2.5.3-node-10.x" + paths: + - vendor/ruby + - .yarn-cache/ + - vendor/gitaly-ruby + +.dedicated-runner-default-cache: + extends: .dedicated-runner + cache: + <<: *default-cache + +# Jobs that only need to pull cache +.dedicated-pull-cache-job: + extends: .dedicated-runner + cache: + <<: *default-cache + policy: pull + stage: test + +.dedicated-no-docs-pull-cache-job: + extends: .dedicated-pull-cache-job + except: + - /(^docs[\/-].*|.*-docs$)/ + +.dedicated-no-docs-and-no-qa-pull-cache-job: + extends: .dedicated-pull-cache-job + except: + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + +# Jobs that do not need a DB +.dedicated-no-docs-no-db-pull-cache-job: + extends: .dedicated-no-docs-pull-cache-job + variables: + SETUP_DB: "false" + +.single-script-job-dedicated-runner: + extends: .dedicated-runner + image: ruby:2.5-alpine + stage: test + cache: {} + dependencies: [] + variables: + GIT_STRATEGY: none + before_script: + # We don't clone the repo by using GIT_STRATEGY: none and only download the + # single script we need here so it's much faster than cloning. + - export SCRIPT_NAME="${SCRIPT_NAME:-$CI_JOB_NAME}" + - apk add --update openssl + - wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/$SCRIPT_NAME + - chmod 755 $(basename $SCRIPT_NAME) diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml new file mode 100644 index 00000000000..7d9136b8213 --- /dev/null +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -0,0 +1,27 @@ + +pages: + extends: .dedicated-no-docs-no-db-pull-cache-job + before_script: [] + stage: pages + dependencies: + - coverage + - karma + - gitlab:assets:compile + - lint:javascript:report + - jsdoc + script: + - mv public/ .public/ + - mkdir public/ + - mv coverage/ public/coverage-ruby/ || true + - mv coverage-javascript/ public/coverage-javascript/ || true + - mv eslint-report.html public/ || true + - mv webpack-report/ public/webpack-report/ || true + - cp .public/assets/application-*.css public/application.css || true + - cp .public/assets/application-*.css.gz public/application.css.gz || true + - mv jsdoc/ public/jsdoc/ || true + artifacts: + paths: + - public + only: + - master@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml new file mode 100644 index 00000000000..07b38c9aa85 --- /dev/null +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -0,0 +1,20 @@ +package-and-qa: + image: ruby:2.5-alpine + stage: test + before_script: [] + dependencies: [] + cache: {} + variables: + GIT_DEPTH: "1" + API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" + retry: 0 + script: + - apk add --update openssl curl jq + - gem install gitlab --no-document + - source ./scripts/review_apps/review-apps.sh + - wait_for_job_to_be_done "gitlab:assets:compile" + - ./scripts/trigger-build omnibus + when: manual + only: + - /.+/@gitlab-org/gitlab-ce + - /.+/@gitlab-org/gitlab-ee diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml new file mode 100644 index 00000000000..2d1c48fac06 --- /dev/null +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -0,0 +1,425 @@ +.use-pg: &use-pg + services: + - name: postgres:9.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + +.use-pg-10: &use-pg-10 + services: + - name: postgres:10.0 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + +.use-mysql: &use-mysql + services: + - mysql:5.7.24 + - redis:alpine + +.only-schedules-master: &only-schedules-master + only: + - schedules@gitlab-org/gitlab-ce + - schedules@gitlab-org/gitlab-ee + - master@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee + - master@gitlab/gitlabhq + - master@gitlab/gitlab-ee + +.gitlab-setup: &gitlab-setup + extends: .dedicated-no-docs-and-no-qa-pull-cache-job + <<: *use-pg + variables: + SETUP_DB: "false" + script: + # Manually clone gitlab-test and only seed this project in + # db/fixtures/development/04_project.rb thanks to SIZE=1 below + - git clone https://gitlab.com/gitlab-org/gitlab-test.git + /home/git/repositories/gitlab-org/gitlab-test.git + - scripts/gitaly-test-spawn + - force=yes SIZE=1 FIXTURE_PATH="db/fixtures/development" bundle exec rake gitlab:setup + artifacts: + when: on_failure + expire_in: 1d + paths: + - log/development.log + +.rake-exec: &rake-exec + extends: .dedicated-no-docs-no-db-pull-cache-job + script: + - bundle exec rake $CI_JOB_NAME + +.rspec-metadata: &rspec-metadata + extends: .dedicated-pull-cache-job + stage: test + script: + - JOB_NAME=( $CI_JOB_NAME ) + - TEST_TOOL=${JOB_NAME[0]} + - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - export KNAPSACK_GENERATE_REPORT=true + - export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH} + - export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - export FLAKY_RSPEC_GENERATE_REPORT=true + - export CACHE_CLASSES=true + - cp ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH} + - '[[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}' + - '[[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}' + - scripts/gitaly-test-spawn + - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag ~geo" + artifacts: + expire_in: 31d + when: always + paths: + - coverage/ + - knapsack/ + - rspec_flaky/ + - rspec_profiling/ + - tmp/capybara/ + reports: + junit: junit_rspec.xml + except: + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + +.rspec-metadata-pg: &rspec-metadata-pg + <<: *rspec-metadata + <<: *use-pg + +.rspec-metadata-pg-10: &rspec-metadata-pg-10 + <<: *rspec-metadata + <<: *use-pg-10 + image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.5.3-golang-1.11-git-2.18-chrome-71.0-node-10.x-yarn-1.12-postgresql-10-graphicsmagick-1.3.29" + +.rspec-metadata-mysql: &rspec-metadata-mysql + <<: *rspec-metadata + <<: *use-mysql + +# DB migration, rollback, and seed jobs +.db-migrate-reset: &db-migrate-reset + extends: .dedicated-no-docs-and-no-qa-pull-cache-job + script: + - bundle exec rake db:migrate:reset + dependencies: + - setup-test-env + +.migration-paths: &migration-paths + extends: .dedicated-no-docs-and-no-qa-pull-cache-job + variables: + SETUP_DB: "false" + script: + - git fetch https://gitlab.com/gitlab-org/gitlab-ee.git v9.3.0-ee + - git checkout -f FETCH_HEAD + - sed -i "s/gem 'oj', '~> 2.17.4'//" Gemfile + - bundle update google-protobuf grpc + - bundle install $BUNDLE_INSTALL_FLAGS + - date + - cp config/gitlab.yml.example config/gitlab.yml + - bundle exec rake db:drop db:create db:schema:load db:seed_fu + - date + - git checkout -f $CI_COMMIT_SHA + - bundle install $BUNDLE_INSTALL_FLAGS + - date + - . scripts/prepare_build.sh + - date + - bundle exec rake db:migrate + dependencies: + - setup-test-env + +setup-test-env: + extends: .dedicated-runner-default-cache + <<: *use-pg + stage: prepare + script: + - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' + - scripts/gitaly-test-build # Do not use 'bundle exec' here + artifacts: + expire_in: 7d + paths: + - tmp/tests + - config/secrets.yml + - vendor/gitaly-ruby + except: + - /(^docs[\/-].*|.*-docs$)/ + +rspec-pg: + <<: *rspec-metadata-pg + parallel: 50 + +rspec-pg-10: + <<: *rspec-metadata-pg-10 + <<: *only-schedules-master + parallel: 50 + +rspec-mysql: + <<: *rspec-metadata-mysql + <<: *only-schedules-master + parallel: 50 + +rspec-fast-spec-helper: + <<: *rspec-metadata-pg + script: + - bundle exec rspec spec/fast_spec_helper.rb + +.rspec-quarantine: &rspec-quarantine + <<: *only-schedules-master + script: + - export CACHE_CLASSES=true + - scripts/gitaly-test-spawn + - bin/rspec --color --format documentation --tag quarantine spec/ + +rspec-pg-quarantine: + <<: *rspec-metadata-pg + <<: *rspec-quarantine + allow_failure: true + +rspec-mysql-quarantine: + <<: *rspec-metadata-mysql + <<: *rspec-quarantine + allow_failure: true + +static-analysis: + extends: .dedicated-no-docs-no-db-pull-cache-job + dependencies: + - compile-assets + - setup-test-env + script: + - scripts/static-analysis + cache: + key: "debian-stretch-ruby-2.5.3-node-10.x-and-rubocop" + paths: + - vendor/ruby + - .yarn-cache/ + - tmp/rubocop_cache + policy: pull-push + +downtime_check: + <<: *rake-exec + except: + - master + - tags + - /^[\d-]+-stable(-ee)?$/ + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + dependencies: + - setup-test-env + +ee_compat_check: + <<: *rake-exec + dependencies: [] + except: + - master + - tags + - /[\d-]+-stable(-ee)?/ + - /^security-/ + - branches@gitlab-org/gitlab-ee + - branches@gitlab/gitlab-ee + retry: 0 + artifacts: + name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}" + when: always + expire_in: 10d + paths: + - ee_compat_check/patches/*.patch + +db:migrate:reset-pg: + <<: *db-migrate-reset + <<: *use-pg + +db:migrate:reset-mysql: + <<: *db-migrate-reset + <<: *use-mysql + +db:check-schema-pg: + <<: *db-migrate-reset + <<: *use-pg + script: + - source scripts/schema_changed.sh + +migration:path-pg: + <<: *migration-paths + <<: *use-pg + +migration:path-mysql: + <<: *migration-paths + <<: *use-mysql + +.db-rollback: &db-rollback + extends: .dedicated-no-docs-and-no-qa-pull-cache-job + script: + - bundle exec rake db:migrate VERSION=20170523121229 + - bundle exec rake db:migrate + dependencies: + - setup-test-env + +db:rollback-pg: + <<: *db-rollback + <<: *use-pg + +db:rollback-mysql: + <<: *db-rollback + <<: *use-mysql + +gitlab:setup-pg: + <<: *gitlab-setup + <<: *use-pg + dependencies: + - setup-test-env + +gitlab:setup-mysql: + <<: *gitlab-setup + <<: *use-mysql + dependencies: + - setup-test-env + +coverage: + # Don't include dedicated-no-docs-no-db-pull-cache-job here since we need to + # download artifacts from all the rspec jobs instead of from setup-test-env only + extends: .dedicated-runner-default-cache + cache: + policy: pull + variables: + SETUP_DB: "false" + stage: post-test + script: + - bundle exec scripts/merge-simplecov + coverage: '/LOC \((\d+\.\d+%)\) covered.$/' + artifacts: + name: coverage + expire_in: 31d + paths: + - coverage/index.html + - coverage/assets/ + except: + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + +## EE-specific content + +.use-pg-9-6: &use-pg-9-6 + services: + - postgres:9.6 + - redis:alpine + +.use-pg-10-2: &use-pg-10-2 + services: + - postgres:10.2 + - redis:alpine + +.use-pg-with-elasticsearch: &use-pg-with-elasticsearch + services: + - postgres:9.6 + - redis:alpine + - docker.elastic.co/elasticsearch/elasticsearch:5.6.12 + +.use-mysql-with-elasticsearch: &use-mysql-with-elasticsearch + services: + - mysql:5.7.24 + - redis:alpine + - docker.elastic.co/elasticsearch/elasticsearch:5.6.12 + +.rspec-metadata-ee: &rspec-metadata-ee + <<: *rspec-metadata + stage: test + script: + - JOB_NAME=( $CI_JOB_NAME ) + - TEST_TOOL=${JOB_NAME[0]} + - export KNAPSACK_TEST_FILE_PATTERN="ee/spec/**{,/*/**}/*_spec.rb" KNAPSACK_GENERATE_REPORT=true CACHE_CLASSES=true + - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - cp ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH} + - scripts/gitaly-test-spawn + - knapsack rspec "-Ispec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag ~geo" + +.rspec-ee-pg: &rspec-ee-pg + <<: *rspec-metadata-ee + <<: *use-pg-with-elasticsearch + +.rspec-ee-mysql: &rspec-ee-mysql + <<: *rspec-metadata-ee + <<: *use-mysql-with-elasticsearch + +.rspec-geo-pg-9-6: &rspec-metadata-pg-geo-9-6 + <<: *rspec-metadata + <<: *use-pg-9-6 + stage: test + script: + - export NO_KNAPSACK=1 + - export CACHE_CLASSES=true + - source scripts/prepare_postgres_fdw.sh + - scripts/gitaly-test-spawn + - bundle exec rspec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag geo ee/spec/ + +.rspec-geo-pg-10-2: &rspec-metadata-pg-geo-10-2 + <<: *rspec-metadata + <<: *use-pg-10-2 + stage: test + script: + - export NO_KNAPSACK=1 + - export CACHE_CLASSES=true + - source scripts/prepare_postgres_fdw.sh + - scripts/gitaly-test-spawn + - bundle exec rspec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag geo ee/spec/ + +.migration-paths-upgrade-ce-to-ee: &migration-paths-upgrade-ce-to-ee + extends: .dedicated-no-docs-and-no-qa-pull-cache-job + variables: + SETUP_DB: "false" + script: + - ruby -r./scripts/ee_specific_check/ee_specific_check -e'EESpecificCheck.fetch_remote_ce_branch' + - git checkout -f FETCH_HEAD + - . scripts/utils.sh + - . scripts/prepare_build.sh + - date + - setup_db + - date + - git checkout -f $CI_COMMIT_SHA + - date + - . scripts/prepare_build.sh + - date + - bundle exec rake db:migrate + dependencies: + - setup-test-env + +rspec-pg-ee: + <<: *rspec-ee-pg + parallel: 10 + +rspec-mysql-ee: + <<: *rspec-ee-mysql + <<: *only-schedules-master + parallel: 10 + +rspec-pg geo: *rspec-metadata-pg-geo-9-6 +rspec-pg-10 geo: *rspec-metadata-pg-geo-10-2 + +.rspec-quarantine-ee: &rspec-quarantine-ee + <<: *only-schedules-master + script: + - export CACHE_CLASSES=true + - scripts/gitaly-test-spawn + - bin/rspec --color --format documentation --tag quarantine ee/spec/ + +rspec-pg-quarantine-ee: + <<: *rspec-metadata-pg + <<: *rspec-quarantine-ee + allow_failure: true + +rspec-mysql-quarantine-ee: + <<: *rspec-metadata-mysql + <<: *rspec-quarantine-ee + allow_failure: true + +migration:upgrade-pg-ce-to-ee: + <<: *migration-paths-upgrade-ce-to-ee + <<: *use-pg + +migration:upgrade-mysql-ce-to-ee: + <<: *migration-paths-upgrade-ce-to-ee + <<: *use-mysql + +db:rollback-pg-geo: + <<: *db-rollback + <<: *use-pg + script: + - bundle exec rake geo:db:migrate VERSION=20170627195211 + - bundle exec rake geo:db:migrate + +## END of EE-specific content diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml new file mode 100644 index 00000000000..9655498073e --- /dev/null +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -0,0 +1,60 @@ +include: + - local: /lib/gitlab/ci/templates/Code-Quality.gitlab-ci.yml + +code_quality: + extends: .dedicated-runner + # gitlab-org runners set `privileged: false` but we need to have it set to true + # since we're using Docker in Docker + tags: [] + before_script: [] + cache: {} + dependencies: [] + variables: + SETUP_DB: "false" + +sast: + extends: .dedicated-runner + image: docker:stable + variables: + SAST_CONFIDENCE_LEVEL: 2 + DOCKER_DRIVER: overlay2 + allow_failure: true + tags: [] + before_script: [] + cache: {} + dependencies: [] + services: + - docker:stable-dind + script: + - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') + - docker run + --env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}" + --volume "$PWD:/code" + --volume /var/run/docker.sock:/var/run/docker.sock + "registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code + artifacts: + reports: + sast: gl-sast-report.json + +dependency_scanning: + extends: .dedicated-runner + image: docker:stable + variables: + DOCKER_DRIVER: overlay2 + allow_failure: true + tags: [] + before_script: [] + cache: {} + dependencies: [] + services: + - docker:stable-dind + script: + - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') + - docker run + --env DEP_SCAN_DISABLE_REMOTE_CHECKS="${DEP_SCAN_DISABLE_REMOTE_CHECKS:-false}" + --volume "$PWD:/code" + --volume /var/run/docker.sock:/var/run/docker.sock + "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$SP_VERSION" /code + artifacts: + reports: + dependency_scanning: gl-dependency-scanning-report.json diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml new file mode 100644 index 00000000000..a7f6caedd37 --- /dev/null +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -0,0 +1,232 @@ +.review-only: &review-only + only: + refs: + - branches@gitlab-org/gitlab-ce + - branches@gitlab-org/gitlab-ee + kubernetes: active + except: + refs: + - master + - /(^docs[\/-].*|.*-docs$)/ + +.review-schedules-only: &review-schedules-only + only: + refs: + - schedules@gitlab-org/gitlab-ce + - schedules@gitlab-org/gitlab-ee + kubernetes: active + variables: + - $REVIEW_APP_CLEANUP + except: + refs: + - tags + - /(^docs[\/-].*|.*-docs$)/ + +.review-base: &review-base + extends: .dedicated-runner + <<: *review-only + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base + stage: test + cache: {} + dependencies: [] + environment: &review-environment + name: review/${CI_COMMIT_REF_NAME} + url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} + before_script: [] + +.review-docker: &review-docker + <<: *review-base + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine + services: + - docker:stable-dind + tags: + - gitlab-org + - docker + variables: &review-docker-variables + GIT_DEPTH: "1" + DOCKER_DRIVER: overlay2 + DOCKER_HOST: tcp://docker:2375 + LATEST_QA_IMAGE: "gitlab/${CI_PROJECT_NAME}-qa:nightly" + QA_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/${CI_PROJECT_NAME}-qa:${CI_COMMIT_REF_SLUG}" + +build-qa-image: + <<: *review-docker + variables: + <<: *review-docker-variables + GIT_DEPTH: "20" + stage: prepare + script: + - time docker build --cache-from ${LATEST_QA_IMAGE} --tag ${QA_IMAGE} ./qa/ + - echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} + - time docker push ${QA_IMAGE} + +.review-build-cng-base: &review-build-cng-base + image: ruby:2.5-alpine + stage: test + before_script: [] + dependencies: [] + cache: {} + variables: + API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" + script: + - apk add --update openssl curl jq + - gem install gitlab --no-document + - source ./scripts/review_apps/review-apps.sh + - wait_for_job_to_be_done "gitlab:assets:compile" + - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng + +review-build-cng: + <<: *review-only + <<: *review-build-cng-base + +schedule:review-build-cng: + <<: *review-schedules-only + <<: *review-build-cng-base + + +.review-deploy-base: &review-deploy-base + <<: *review-base + allow_failure: true + variables: + HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" + DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" + GITLAB_HELM_CHART_REF: "master" + API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" + environment: + <<: *review-environment + on_stop: review-stop + before_script: + - export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION) + - export GITALY_VERSION=$(<GITALY_SERVER_VERSION) + - export GITLAB_WORKHORSE_VERSION=$(<GITLAB_WORKHORSE_VERSION) + - apk update && apk add jq + - gem install gitlab --no-document + - source ./scripts/review_apps/review-apps.sh + script: + - wait_for_job_to_be_done "review-build-cng" + - perform_review_app_deployment + +review-deploy: + <<: *review-deploy-base + +schedule:review-deploy: + <<: *review-deploy-base + <<: *review-schedules-only + script: + - wait_for_job_to_be_done "schedule:review-build-cng" + - perform_review_app_deployment + +.review-qa-base: &review-qa-base + <<: *review-docker + allow_failure: true + variables: + <<: *review-docker-variables + API_TOKEN: "${GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN}" + QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa" + QA_CAN_TEST_GIT_PROTOCOL_V2: "false" + GITLAB_USERNAME: "root" + GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" + GITLAB_ADMIN_USERNAME: "root" + GITLAB_ADMIN_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" + GITHUB_ACCESS_TOKEN: "${REVIEW_APPS_QA_GITHUB_ACCESS_TOKEN}" + EE_LICENSE: "${REVIEW_APPS_EE_LICENSE}" + QA_DEBUG: "true" + artifacts: + paths: + - ./qa/gitlab-qa-run-* + expire_in: 7 days + when: always + before_script: + - echo "${QA_IMAGE}" + - echo "${CI_ENVIRONMENT_URL}" + - apk update && apk add curl jq + - source ./scripts/review_apps/review-apps.sh + - gem install gitlab-qa --no-document ${GITLAB_QA_VERSION:+ --version ${GITLAB_QA_VERSION}} + +review-qa-smoke: + <<: *review-qa-base + script: + - wait_for_job_to_be_done "review-deploy" + - gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" + +review-qa-all: + <<: *review-qa-base + script: + - wait_for_job_to_be_done "review-deploy" + - gitlab-qa Test::Instance::Any "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" + when: manual + +.review-performance-base: &review-performance-base + <<: *review-qa-base + script: + - wait_for_job_to_be_done "review-deploy" + - mkdir -p gitlab-exporter + - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js + - mkdir sitespeed-results + - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "$CI_ENVIRONMENT_URL" + - mv sitespeed-results/data/performance.json performance.json + artifacts: + paths: + - sitespeed-results/ + reports: + performance: performance.json + +review-performance: + <<: *review-performance-base + +review-stop: + extends: .single-script-job-dedicated-runner + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base + allow_failure: true + variables: + SCRIPT_NAME: "review_apps/review-apps.sh" + when: manual + environment: + <<: *review-environment + action: stop + script: + - source $(basename "${SCRIPT_NAME}") + - delete + - cleanup + +schedule:review-cleanup: + <<: *review-base + <<: *review-schedules-only + stage: build + allow_failure: true + variables: + GIT_DEPTH: "1" + environment: + name: review/auto-cleanup + before_script: + - gem install gitlab --no-document + script: + - ruby -rrubygems scripts/review_apps/automated_cleanup.rb + +schedule:review-performance: + <<: *review-performance-base + <<: *review-schedules-only + script: + - wait_for_job_to_be_done "schedule:review-deploy" + +danger-review: + extends: .dedicated-pull-cache-job + image: registry.gitlab.com/gitlab-org/gitlab-build-images:danger + stage: test + dependencies: [] + before_script: [] + only: + variables: + - $DANGER_GITLAB_API_TOKEN + except: + refs: + - master + variables: + - $CI_COMMIT_REF_NAME =~ /^ce-to-ee-.*/ + - $CI_COMMIT_REF_NAME =~ /.*-stable(-ee)?-prepare-.*/ + script: + - git version + - node --version + - yarn install --frozen-lockfile --cache-folder .yarn-cache + - danger --fail-on-errors=true + diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml new file mode 100644 index 00000000000..debc90a1cb0 --- /dev/null +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -0,0 +1,43 @@ +# Insurance in case a gem needed by one of our releases gets yanked from +# rubygems.org in the future. +cache gems: + extends: .dedicated-no-docs-no-db-pull-cache-job + script: + - bundle package --all --all-platforms + artifacts: + paths: + - vendor/cache + only: + - master@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee + - tags + dependencies: + - setup-test-env + +gitlab_git_test: + extends: .dedicated-runner + variables: + SETUP_DB: "false" + before_script: [] + dependencies: [] + cache: {} + script: + - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes + except: + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + +no_ee_check: + extends: .dedicated-runner + variables: + SETUP_DB: "false" + before_script: [] + dependencies: [] + cache: {} + script: + - scripts/no-ee-check + only: + - /.+/@gitlab-org/gitlab-ce + except: + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml new file mode 100644 index 00000000000..938db90d438 --- /dev/null +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -0,0 +1,118 @@ +.tests-metadata-state: &tests-metadata-state + extends: .dedicated-runner + variables: + TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache" + before_script: + - source scripts/utils.sh + artifacts: + expire_in: 31d + paths: + - knapsack/ + - rspec_flaky/ + - rspec_profiling/ + +retrieve-tests-metadata: + <<: *tests-metadata-state + stage: prepare + cache: + key: tests_metadata + policy: pull + script: + - mkdir -p knapsack/${CI_PROJECT_NAME}/ + - wget -O $KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $KNAPSACK_RSPEC_SUITE_REPORT_PATH + - '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}' + - mkdir -p rspec_flaky/ + - mkdir -p rspec_profiling/ + - wget -O $FLAKY_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$FLAKY_RSPEC_SUITE_REPORT_PATH || rm $FLAKY_RSPEC_SUITE_REPORT_PATH + - '[[ -f $FLAKY_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_SUITE_REPORT_PATH}' + - wget -O $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH + - '[[ -f $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH}' + except: + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + +update-tests-metadata: + <<: *tests-metadata-state + stage: post-test + cache: + key: tests_metadata + paths: + - knapsack/ + - rspec_flaky/ + policy: push + script: + - retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document + - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec-pg_node_*.json + - scripts/merge-reports ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec-pg-ee_node_*.json + - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json + - FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH} + - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' + - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH' + - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH' + - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json + - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json + - scripts/insert-rspec-profiling-data + only: + - master@gitlab-org/gitlab-ce + - master@gitlab-org/gitlab-ee + - master@gitlab/gitlabhq + - master@gitlab/gitlab-ee + +flaky-examples-check: + extends: .dedicated-runner + image: ruby:2.5-alpine + services: [] + before_script: [] + variables: + SETUP_DB: "false" + USE_BUNDLE_INSTALL: "false" + NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json + stage: post-test + allow_failure: true + retry: 0 + only: + - branches + except: + - master + - /(^docs[\/-].*|.*-docs$)/ + - /(^qa[\/-].*|.*-qa$)/ + artifacts: + expire_in: 30d + paths: + - rspec_flaky/ + script: + - '[[ -f $NEW_FLAKY_SPECS_REPORT ]] || echo "{}" > ${NEW_FLAKY_SPECS_REPORT}' + - scripts/merge-reports ${NEW_FLAKY_SPECS_REPORT} rspec_flaky/new_*_*.json + - scripts/detect-new-flaky-examples $NEW_FLAKY_SPECS_REPORT + +## EE-specific content + +.ee-specific-check: &ee-specific-check + extends: .dedicated-runner + stage: test + dependencies: [] + before_script: [] + cache: {} + retry: 0 + only: + - branches + - branches@gitlab-org/gitlab-ee + except: + - master + - tags + - /[\d-]+-stable(-ee)?/ + - /^security-/ + - /\bce\-to\-ee\b/ + - /(^docs[\/-].*|.*-docs$)/ + +ee-files-location-check: + <<: *ee-specific-check + script: + - scripts/ee-files-location-check + +ee-specific-lines-check: + <<: *ee-specific-check + script: + - scripts/ee-specific-lines-check + +# END of EE-specific content |