diff options
Diffstat (limited to '.gitlab')
29 files changed, 453 insertions, 224 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index ae697582623..095601ba825 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -13,7 +13,6 @@ /doc/.vale/ @marcel.amirault @eread @aqualls @cnorris /doc/administration/geo/ @axil /doc/administration/gitaly/ @eread -/doc/administration/integration/ @aqualls /doc/administration/lfs/ @aqualls /doc/administration/monitoring/ @ngaskill /doc/administration/operations/ @axil @eread @marcia @@ -25,6 +24,8 @@ /doc/administration/reference_architectures/ @axil /doc/administration/snippets/ @aqualls /doc/administration/troubleshooting @axil @marcia @eread +/doc/api/graphql/ @msedlakjakubowski @kpaizee +/doc/api/graphql/reference/ @kpaizee /doc/api/group_activity_analytics.md @msedlakjakubowski /doc/ci/ @marcel.amirault @sselhorn /doc/ci/environments/ @axil @@ -34,18 +35,19 @@ /doc/development/documentation/ @cnorris /doc/development/i18n/ @ngaskill /doc/development/value_stream_analytics.md @msedlakjakubowski -/doc/gitlab-basics/ @marcia +/doc/gitlab-basics/ @aqualls /doc/install/ @axil -/doc/integration/ @aqualls @eread /doc/operations/ @ngaskill @axil /doc/push_rules/ @aqualls /doc/ssh/ @eread /doc/subscriptions/ @sselhorn -/doc/topics/autodevops/ @ngaskill @marcia +/doc/topics/autodevops/ @marcia /doc/topics/git/ @aqualls /doc/update/ @axil @marcia /doc/user/analytics/ @msedlakjakubowski @ngaskill -/doc/user/application_security @rdickenson +/doc/user/application_security/ @rdickenson +/doc/user/application_security/container_scanning/ @ngaskill +/doc/user/application_security/cluster_image_scanning/ @ngaskill /doc/user/clusters/ @marcia /doc/user/compliance/ @rdickenson @eread /doc/user/group/ @msedlakjakubowski @@ -57,12 +59,12 @@ /doc/user/group/value_stream_analytics/ @msedlakjakubowski /doc/user/infrastructure/ @marcia /doc/user/packages/ @ngaskill +/doc/user/packages/infrastructure_registry/ @marcia +/doc/user/packages/terraform_module_registry/ @marcia /doc/user/profile/ @msedlakjakubowski @eread /doc/user/project/ @aqualls @axil @eread @msedlakjakubowski @ngaskill -/doc/user/project/clusters/ @ngaskill +/doc/user/project/clusters/ @marcia /doc/user/project/import/ @ngaskill @msedlakjakubowski -/doc/user/project/integrations/ @aqualls -/doc/user/project/integrations/prometheus_library/ @ngaskill /doc/user/project/issues/ @msedlakjakubowski /doc/user/project/merge_requests/ @aqualls @eread /doc/user/project/milestones/ @msedlakjakubowski @@ -138,6 +140,12 @@ /doc/user/project/settings/import_export.md @aqualls /doc/user/snippets.md @aqualls +[Docs Ecosystem] +/doc/administration/integration/ @kpaizee +/doc/integration/ @kpaizee +/doc/user/project/integrations/ @kpaizee +/doc/user/project/integrations/prometheus_library/ @ngaskill + [Docs Growth] /doc/administration/instance_review.md @kpaizee /doc/api/invitations.md @kpaizee @@ -152,8 +160,6 @@ *.js @gitlab-org/maintainers/frontend /app/assets/ @gitlab-org/maintainers/frontend /ee/app/assets/ @gitlab-org/maintainers/frontend -/spec/javascripts/ @gitlab-org/maintainers/frontend -/ee/spec/javascripts/ @gitlab-org/maintainers/frontend /spec/frontend/ @gitlab-org/maintainers/frontend /ee/spec/frontend/ @gitlab-org/maintainers/frontend /spec/frontend_integration/ @gitlab-org/maintainers/frontend @@ -201,9 +207,9 @@ Dangerfile @gl-quality/eng-prod /lib/gitlab/auth/ldap/ @dblessing @mkozono [Templates] -/lib/gitlab/ci/templates/ @nolith @shinya.maeda @matteeyah +/lib/gitlab/ci/templates/ @gitlab-org/maintainers/cicd-templates /lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @DylanGriffith @mayra-cabrera @tkuah -/lib/gitlab/ci/templates/Security/ @gonzoyumo @twoodham @sethgitlab @thiagocsf +/lib/gitlab/ci/templates/Security/ @gonzoyumo @twoodham @sethgitlab @thiagocsf /lib/gitlab/ci/templates/Security/Container-Scanning.*.yml @gitlab-org/protect/container-security-backend [Project Alias] diff --git a/.gitlab/changelog_config.yml b/.gitlab/changelog_config.yml index 6069cd17a08..f6a041cced9 100644 --- a/.gitlab/changelog_config.yml +++ b/.gitlab/changelog_config.yml @@ -11,6 +11,8 @@ categories: security: Security performance: Performance other: Other +include_groups: + - gitlab-org/gitlab-core-team/community-members template: | {% if categories %} {% each categories %} @@ -18,7 +20,7 @@ template: | {% each entries %} - [{{ title }}]({{ commit.reference }})\ - {% if author.contributor %} by {{ author.reference }}{% end %}\ + {% if author.credit %} by {{ author.reference }}{% end %}\ {% if commit.trailers.MR %}\ ([merge request]({{ commit.trailers.MR }}))\ {% else %}\ diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index ea3e3ac450b..c585047f916 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -53,7 +53,7 @@ docs-lint markdown: docs-lint links: extends: - .docs:rules:docs-lint - image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-html:alpine-3.13-ruby-2.7.2-d2b92621 + image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-html:alpine-3.14-ruby-2.7.4-db71f027 stage: test needs: [] script: @@ -75,3 +75,17 @@ ui-docs-links lint: needs: [] script: - bundle exec haml-lint -i DocumentationLinks + +deprecations-doc check: + variables: + SETUP_DB: "false" + extends: + - .default-retry + - .rails-cache + - .default-before_script + - .docs:rules:deprecations + stage: test + needs: [] + script: + - bundle exec rake gitlab:docs:check_deprecations + allow_failure: true diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index bfc38e73bb5..48f85219ff4 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -11,7 +11,7 @@ - .default-retry - .default-before_script - .assets-compile-cache - image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-git-2.31-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.36 + image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7-git-2.31-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.36 variables: SETUP_DB: "false" WEBPACK_VENDOR_DLL: "true" @@ -132,6 +132,7 @@ rspec frontend_fixture: extends: - .frontend-fixtures-base - .frontend:rules:default-frontend-jobs + parallel: 2 rspec frontend_fixture as-if-foss: extends: @@ -171,6 +172,8 @@ graphql-schema-dump: # Disable warnings in browserslist which can break on backports # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384 BROWSERSLIST_IGNORE_OLD_DATA: "true" + before_script: + - *yarn-install stage: test eslint-as-if-foss: @@ -180,55 +183,19 @@ eslint-as-if-foss: - .as-if-foss needs: [] script: - - *yarn-install - run_timed_command "yarn run lint:eslint:all" -.karma-base: - extends: .frontend-test-base - script: - - export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log - - *yarn-install - - run_timed_command "yarn karma" - -karma: - extends: - - .karma-base - - .frontend:rules:default-frontend-jobs - needs: - - job: "rspec frontend_fixture" - - job: "rspec-ee frontend_fixture" - optional: true - coverage: '/^Statements *: (\d+\.\d+%)/' - artifacts: - name: coverage-javascript - expire_in: 31d - when: always - paths: - - chrome_debug.log - - coverage-javascript/ - - tmp/tests/frontend/ - reports: - junit: junit_karma.xml - cobertura: coverage-javascript/cobertura-coverage.xml - -karma-as-if-foss: - extends: - - .karma-base - - .frontend:rules:default-frontend-jobs-as-if-foss - - .as-if-foss - needs: ["rspec frontend_fixture as-if-foss"] - .jest-base: extends: .frontend-test-base script: - - *yarn-install - - run_timed_command "yarn jest --ci --coverage --testSequencer ./scripts/frontend/parallel_ci_sequencer.js" + - run_timed_command "yarn jest:ci" jest: extends: - .jest-base - - .frontend:rules:default-frontend-jobs + - .frontend:rules:jest needs: + - job: "detect-tests" - job: "rspec frontend_fixture" - job: "rspec-ee frontend_fixture" optional: true @@ -244,12 +211,18 @@ jest: junit: junit_jest.xml parallel: 5 +jest minimal: + extends: + - jest + - .frontend:rules:jest:minimal + script: + - run_timed_command "yarn jest:ci:minimal" + jest-integration: extends: - .frontend-test-base - .frontend:rules:default-frontend-jobs script: - - *yarn-install - run_timed_command "yarn jest:integration --ci" needs: - job: "rspec frontend_fixture" @@ -270,7 +243,11 @@ coverage-frontend: - .default-retry - .yarn-cache - .frontend:rules:ee-mr-and-default-branch-only - needs: ["jest"] + needs: + - job: "jest" + optional: true + - job: "jest minimal" + optional: true stage: post-test before_script: - *yarn-install @@ -298,9 +275,13 @@ coverage-frontend: - *yarn-install - run_timed_command "retry yarn run webpack-prod" -qa-frontend-node:10: +qa-frontend-node:12: + extends: .qa-frontend-node + image: ${GITLAB_DEPENDENCY_PROXY}node:12 + +qa-frontend-node:14: extends: .qa-frontend-node - image: ${GITLAB_DEPENDENCY_PROXY}node:dubnium + image: ${GITLAB_DEPENDENCY_PROXY}node:14 qa-frontend-node:latest: extends: @@ -351,7 +332,6 @@ bundle-size-review: extends: - .frontend-test-base script: - - *yarn-install - run_timed_command "yarn generate:startup_css" - yarn check:startup_css @@ -379,7 +359,6 @@ startup-css-check as-if-foss: - .frontend-test-base - .storybook-yarn-cache script: - - *yarn-install # storybook depends on the global webpack config, so we must install global deps. - *storybook-yarn-install - yarn run storybook:build diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 860397b9437..d9978a44ffb 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -200,7 +200,7 @@ - *storybook-node-modules-cache-push .use-pg11: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" services: - name: postgres:11.6 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -209,7 +209,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg12: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" services: - name: postgres:12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -218,7 +218,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg13: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36" services: - name: postgres:13 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -227,7 +227,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg11-ee: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" services: - name: postgres:11.6 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -238,7 +238,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg12-ee: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" services: - name: postgres:12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -249,7 +249,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg13-ee: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36" services: - name: postgres:13 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index 2f43e974cf6..6f96d84b8e3 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -12,7 +12,6 @@ pages: needs: - job: "rspec:coverage" - job: "coverage-frontend" - - job: "karma" - job: "compile-production-assets" - job: "compile-storybook" # `update-tests-metadata` only runs on GitLab.com's EE schedules pipelines @@ -27,7 +26,6 @@ pages: - mkdir -p public/$(dirname "$KNAPSACK_RSPEC_SUITE_REPORT_PATH") public/$(dirname "$FLAKY_RSPEC_SUITE_REPORT_PATH") public/$(dirname "$RSPEC_PACKED_TESTS_MAPPING_PATH") - mv coverage/ public/coverage-ruby/ || true - mv coverage-frontend/ public/coverage-frontend/ || true - - mv coverage-javascript/ public/coverage-javascript/ || true - mv storybook/public public/storybook || true - cp .public/assets/application-*.css public/application.css || true - mv $KNAPSACK_RSPEC_SUITE_REPORT_PATH public/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || true diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index c3e6de76894..88e732c2e75 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -7,6 +7,7 @@ variables: USE_BUNDLE_INSTALL: "false" SETUP_DB: "false" + QA_EXPORT_TEST_METRICS: "false" before_script: - !reference [.default-before_script, before_script] - cd qa/ diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index f4b001ed1ba..00f65ab7ca8 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -23,6 +23,10 @@ variables: RSPEC_TESTS_MAPPING_ENABLED: "true" +.decomposed-database-rspec: + variables: + DECOMPOSED_DB: "true" + .rspec-base: extends: .rails-job-base stage: test @@ -225,65 +229,6 @@ update-gitaly-binaries-cache: SETUP_DB: "false" USE_BUNDLE_INSTALL: "false" -.static-analysis-base: - extends: - - .default-retry - - .default-before_script - - .static-analysis-cache - needs: [] - variables: - SETUP_DB: "false" - ENABLE_SPRING: "1" - # Disable warnings in browserslist which can break on backports - # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384 - BROWSERSLIST_IGNORE_OLD_DATA: "true" - -update-static-analysis-cache: - extends: - - .static-analysis-base - - .static-analysis-cache-push - - .shared:rules:update-cache - stage: prepare - script: - - run_timed_command "bundle exec rubocop --parallel" # For the moment we only cache `tmp/rubocop_cache` so we don't need to run all the tasks. - -static-analysis: - extends: - - .static-analysis-base - - .static-analysis:rules:ee-and-foss - stage: test - parallel: 4 - script: - - run_timed_command "retry yarn install --frozen-lockfile" - - scripts/static-analysis - artifacts: - expire_in: 31d - when: always - paths: - - tmp/feature_flags/ - -static-analysis as-if-foss: - extends: - - static-analysis - - .static-analysis:rules:as-if-foss - - .as-if-foss - -zeitwerk-check: - extends: - - .rails-cache - - .default-before_script - - .rails:rules:ee-and-foss-unit - variables: - BUNDLE_WITHOUT: "" - SETUP_DB: "false" - needs: [] - stage: test - script: - - sed -i -e "s/config\.autoloader = :classic/config\.autoloader = :zeitwerk/" config/application.rb - - RAILS_ENV=test bundle exec rake zeitwerk:check - - RAILS_ENV=development bundle exec rake zeitwerk:check - - RAILS_ENV=production bundle exec rake zeitwerk:check - rspec migration pg12: extends: - .rspec-base-pg12 @@ -296,6 +241,12 @@ rspec migration pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-and-foss-migration:minimal +rspec migration pg12 decomposed: + extends: + - rspec migration pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec unit pg12: extends: - .rspec-base-pg12 @@ -308,6 +259,12 @@ rspec unit pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-and-foss-unit:minimal +rspec unit pg12 decomposed: + extends: + - rspec unit pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec integration pg12: extends: - .rspec-base-pg12 @@ -320,6 +277,12 @@ rspec integration pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-and-foss-integration:minimal +rspec integration pg12 decomposed: + extends: + - rspec integration pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec system pg12: extends: - .rspec-base-pg12 @@ -332,6 +295,12 @@ rspec system pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-and-foss-system:minimal +rspec system pg12 decomposed: + extends: + - rspec system pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + # Dedicated job to test DB library code against PG11. # Note that these are already tested against PG12 in the `rspec unit pg12` / `rspec-ee unit pg12` jobs. rspec db-library-code pg11: @@ -382,18 +351,12 @@ db:migrate-from-previous-major-version: USE_BUNDLE_INSTALL: "false" SETUP_DB: "false" PROJECT_TO_CHECKOUT: "gitlab-foss" - TAG_TO_CHECKOUT: "v12.10.14" + TAG_TO_CHECKOUT: "v13.12.9" script: - '[[ -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab"' - '[[ -d "ee/" ]] || export TAG_TO_CHECKOUT="${TAG_TO_CHECKOUT}-ee"' - retry 'git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT' - git checkout -f FETCH_HEAD - # Patch Gemfile of the previous major version for compatibility. - - sed -i -e "s/gem 'grpc', '~> 1.24.0'/gem 'grpc', '~> 1.30.2'/" Gemfile # Update gRPC for Ruby 2.7 - - sed -i -e "s/gem 'google-protobuf', '~> 3.8.0'/gem 'google-protobuf', '~> 3.12'/" Gemfile - - sed -i -e "s/gem 'nokogiri', '~> 1.10.5'/gem 'nokogiri', '~> 1.11.0'/" Gemfile - - sed -i -e "s/gem 'mimemagic', '~> 0.3.2'/gem 'ruby-magic', '~> 0.4.0'/" Gemfile - - run_timed_command "bundle update --bundler google-protobuf nokogiri grpc mimemagic bootsnap" - SETUP_DB=false USE_BUNDLE_INSTALL=true bash scripts/prepare_build.sh - run_timed_command "bundle exec rake db:drop db:create db:structure:load db:migrate db:seed_fu" - git checkout -f $CI_COMMIT_SHA @@ -554,6 +517,12 @@ rspec migration pg12-as-if-foss minimal: - .minimal-rspec-tests - .rails:rules:as-if-foss-migration:minimal +rspec migration pg12-as-if-foss decomposed: + extends: + - rspec migration pg12-as-if-foss + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec unit pg12-as-if-foss: extends: - .rspec-base-pg12-as-if-foss @@ -566,6 +535,12 @@ rspec unit pg12-as-if-foss minimal: - .minimal-rspec-tests - .rails:rules:as-if-foss-unit:minimal +rspec unit pg12-as-if-foss decomposed: + extends: + - rspec unit pg12-as-if-foss + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec integration pg12-as-if-foss: extends: - .rspec-base-pg12-as-if-foss @@ -578,6 +553,12 @@ rspec integration pg12-as-if-foss minimal: - .minimal-rspec-tests - .rails:rules:as-if-foss-integration:minimal +rspec integration pg12-as-if-foss decomposed: + extends: + - rspec integration pg12-as-if-foss + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec system pg12-as-if-foss: extends: - .rspec-base-pg12-as-if-foss @@ -590,6 +571,12 @@ rspec system pg12-as-if-foss minimal: - .minimal-rspec-tests - .rails:rules:as-if-foss-system:minimal +rspec system pg12-as-if-foss decomposed: + extends: + - rspec system pg12-as-if-foss + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec-ee migration pg12: extends: - .rspec-ee-base-pg12 @@ -603,6 +590,12 @@ rspec-ee migration pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-only-migration:minimal +rspec-ee migration pg12 decomposed: + extends: + - rspec-ee migration pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec-ee unit pg12: extends: - .rspec-ee-base-pg12 @@ -615,6 +608,12 @@ rspec-ee unit pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-only-unit:minimal +rspec-ee unit pg12 decomposed: + extends: + - rspec-ee unit pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec-ee integration pg12: extends: - .rspec-ee-base-pg12 @@ -627,6 +626,12 @@ rspec-ee integration pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-only-integration:minimal +rspec-ee integration pg12 decomposed: + extends: + - rspec-ee integration pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec-ee system pg12: extends: - .rspec-ee-base-pg12 @@ -639,6 +644,12 @@ rspec-ee system pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-only-system:minimal +rspec-ee system pg12 decomposed: + extends: + - rspec-ee system pg12 + - .decomposed-database-rspec + - .rails:rules:decomposed-databases + rspec-ee unit pg12 geo: extends: - .rspec-ee-base-geo-pg12 diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 7fb4e54c4d6..a5403073e1b 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -27,14 +27,11 @@ code_quality: variables: SAST_BRAKEMAN_LEVEL: 2 # GitLab-specific SAST_EXCLUDED_PATHS: "qa, spec, doc, ee/spec, config/gitlab.yml.example, tmp" # GitLab-specific - SAST_EXCLUDED_ANALYZERS: bandit, flawfinder, phpcs-security-audit, pmd-apex, security-code-scan, spotbugs + SAST_EXCLUDED_ANALYZERS: bandit, flawfinder, phpcs-security-audit, pmd-apex, security-code-scan, spotbugs, eslint brakeman-sast: rules: !reference [".reports:rules:sast", rules] -eslint-sast: - rules: !reference [".reports:rules:sast", rules] - nodejs-scan-sast: rules: !reference [".reports:rules:sast", rules] diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index c22b468d674..f20f3276867 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -46,7 +46,7 @@ review-build-cng: variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "v5.1.0" + GITLAB_HELM_CHART_REF: "v5.2.1" environment: name: review/${CI_COMMIT_REF_SLUG}${FREQUENCY} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 53420dfe31a..a4a932c7dd0 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -46,6 +46,12 @@ .if-merge-request-title-run-all-rspec: &if-merge-request-title-run-all-rspec if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-all-rspec/' +.if-merge-request-title-run-all-jest: &if-merge-request-title-run-all-jest + if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-all-jest/' + +.if-merge-request-run-decomposed: &if-merge-request-run-decomposed + if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-decomposed/' + .if-security-merge-request: &if-security-merge-request if: '$CI_PROJECT_NAMESPACE == "gitlab-org/security" && $CI_MERGE_REQUEST_IID' @@ -117,6 +123,7 @@ - "scripts/review_apps/base-config.yaml" - "scripts/review_apps/review-apps.sh" - "scripts/trigger-build" + - "{,ee/,jh/}{bin,config}/**/*.rb" .ci-qa-patterns: &ci-qa-patterns - ".gitlab-ci.yml" @@ -136,7 +143,6 @@ - ".gitlab-ci.yml" - ".gitlab/ci/**/*.yml" - "lib/gitlab/ci/templates/**/*.yml" - - "{,ee/,jh/}changelogs/**/*.yml" .docs-patterns: &docs-patterns - ".gitlab/route-map.yml" @@ -144,6 +150,13 @@ - ".markdownlint.yml" - "scripts/lint-doc.sh" +.docs-deprecations-patterns: &docs-deprecations-patterns + - "doc/deprecations/index.md" + - "data/deprecations/*.yml" + - "data/deprecations/templates/_deprecation_template.md.erb" + - "lib/tasks/gitlab/docs/compile_deprecations.rake" + - "tooling/deprecations/docs.rb" + .bundler-patterns: &bundler-patterns - '{Gemfile.lock,*/Gemfile.lock,*/*/Gemfile.lock}' @@ -197,7 +210,7 @@ - "{,ee/,jh/}app/assets/stylesheets/startup/**/*" .backend-patterns: &backend-patterns - - "Gemfile{,.lock}" + - "{,jh/}Gemfile{,.lock}" - "Rakefile" - "config.ru" # List explicitly all the app/ dirs that are backend (i.e. all except app/assets). @@ -216,6 +229,7 @@ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/background_migration/**/*" - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/background_migration{,_spec}.rb" - "{,ee/,jh/}spec/support/helpers/database/**/*" + - "lib/gitlab/markdown_cache/active_record/**/*" - "config/prometheus/common_metrics.yml" # Used by Gitlab::DatabaseImporters::CommonMetrics::Importer - "{,ee/,jh/}app/models/project_statistics.rb" # Used to calculate sizes in migration specs - "GITALY_SERVER_VERSION" # Has interactions with background migrations:https://gitlab.com/gitlab-org/gitlab/-/issues/336538 @@ -250,7 +264,7 @@ - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,rubocop_manual_todo}.yml" - "*_VERSION" - - "Gemfile{,.lock}" + - "{,jh/}Gemfile{,.lock}" - "Rakefile" - "tests.yml" - "config.ru" @@ -276,7 +290,7 @@ - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,rubocop_manual_todo}.yml" - "*_VERSION" - - "Gemfile{,.lock}" + - "{,jh/}Gemfile{,.lock}" - "Rakefile" - "tests.yml" - "config.ru" @@ -305,7 +319,7 @@ - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,rubocop_manual_todo}.yml" - "*_VERSION" - - "Gemfile{,.lock}" + - "{,jh/}Gemfile{,.lock}" - "Rakefile" - "tests.yml" - "config.ru" @@ -330,7 +344,7 @@ - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,rubocop_manual_todo}.yml" - "*_VERSION" - - "Gemfile{,.lock}" + - "{,jh/}Gemfile{,.lock}" - "Rakefile" - "tests.yml" - "config.ru" @@ -354,6 +368,14 @@ - "danger/**/*" - "tooling/danger/**/*" +.core-frontend-patterns: &core-frontend-patterns + - "{package.json,yarn.lock}" + - "babel.config.js" + - "jest.config.{base,integration,unit}.js" + - "config/helpers/**/*.js" + - "vendor/assets/javascripts/**/*" + - "{,ee/,jh/}app/assets/**/*.graphql" + ################ # Shared rules # ################ @@ -449,6 +471,12 @@ changes: *docs-patterns when: on_success +.docs:rules:deprecations: + rules: + - <<: *if-default-refs + changes: *docs-deprecations-patterns + when: on_success + ################## # GraphQL rules # ################## @@ -480,8 +508,8 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request # Always run for MRs since `compile-test-assets as-if-foss` is either needed by `rspec foss-impact` or the `rspec * as-if-foss` jobs. - changes: *code-backstage-qa-patterns + - changes: *code-backstage-qa-patterns + - <<: *if-merge-request-title-run-all-rspec .frontend:rules:default-frontend-jobs: rules: @@ -508,6 +536,42 @@ - <<: *if-merge-request changes: *ci-patterns +.frontend:rules:jest: + rules: + - <<: *if-merge-request-title-run-all-jest + - <<: *if-default-refs + changes: *core-frontend-patterns + - <<: *if-merge-request + changes: *ci-patterns + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + - <<: *if-default-refs + changes: *backend-patterns + - <<: *if-merge-request-not-approved + when: never + - <<: *if-default-refs + changes: *code-backstage-patterns + +.frontend:rules:jest:minimal: + rules: + - <<: *if-merge-request-approved + when: never + - <<: *if-automated-merge-request + when: never + - <<: *if-merge-request-title-run-all-jest + when: never + - <<: *if-default-refs + changes: *core-frontend-patterns + when: never + - <<: *if-default-refs + changes: *backend-patterns + when: never + - <<: *if-merge-request + changes: *ci-patterns + when: never + - <<: *if-merge-request + changes: *code-backstage-patterns + .frontend:rules:eslint-as-if-foss: rules: - <<: *if-not-ee @@ -607,11 +671,18 @@ ############### # Rails rules # ############### +.rails:rules:decomposed-databases: + rules: + - <<: *if-merge-request-run-decomposed + allow_failure: true + .rails:rules:ee-and-foss-migration: rules: - <<: *if-merge-request-title-run-all-rspec - <<: *if-merge-request changes: *ci-patterns + - <<: *if-merge-request + changes: *db-patterns - <<: *if-automated-merge-request changes: *db-patterns - <<: *if-merge-request-not-approved @@ -631,6 +702,7 @@ when: never - <<: *if-merge-request changes: *db-patterns + when: never .rails:rules:ee-and-foss-mr-with-migration: rules: @@ -758,6 +830,8 @@ - <<: *if-merge-request-title-run-all-rspec - <<: *if-merge-request changes: *ci-patterns + - <<: *if-merge-request + changes: *db-patterns - <<: *if-automated-merge-request changes: *db-patterns - <<: *if-merge-request-not-approved @@ -779,6 +853,7 @@ when: never - <<: *if-merge-request changes: *db-patterns + when: never .rails:rules:ee-only-unit: rules: @@ -874,14 +949,14 @@ - <<: *if-merge-request-title-run-all-rspec - <<: *if-merge-request changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *db-patterns - - <<: *if-merge-request-not-approved - when: never - <<: *if-security-merge-request changes: *db-patterns - <<: *if-merge-request-title-as-if-foss changes: *db-patterns + - <<: *if-automated-merge-request + changes: *db-patterns + - <<: *if-merge-request-not-approved + when: never .rails:rules:as-if-foss-migration:minimal: rules: @@ -896,8 +971,10 @@ when: never - <<: *if-security-merge-request changes: *db-patterns + when: never - <<: *if-merge-request-title-as-if-foss changes: *db-patterns + when: never .rails:rules:as-if-foss-unit: rules: @@ -1212,7 +1289,7 @@ rules: - if: '$DAST_DISABLED || $GITLAB_FEATURES !~ /\bdast\b/' when: never - - <<: *if-default-branch-schedule-nightly + - <<: *if-dot-com-ee-nightly-schedule allow_failure: true .reports:rules:package_hunter-yarn: @@ -1405,8 +1482,6 @@ changes: *code-qa-patterns when: manual allow_failure: true - - <<: *if-dot-com-gitlab-org-schedule - allow_failure: true .review:rules:danger: rules: diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index f2d5d872d64..60a1ad54cff 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -70,11 +70,16 @@ verify-tests-yml: - install_gitlab_gem - install_tff_gem - retrieve_tests_mapping - - 'if [ -n "$CI_MERGE_REQUEST_IID" ]; then tooling/bin/find_tests ${MATCHED_TESTS_FILE}; fi' - - 'if [ -n "$CI_MERGE_REQUEST_IID" ]; then echo "test files affected: $(cat $MATCHED_TESTS_FILE)"; fi' + - | + if [ -n "$CI_MERGE_REQUEST_IID" ]; then + tooling/bin/find_changes ${CHANGES_FILE}; + tooling/bin/find_tests ${CHANGES_FILE} ${MATCHED_TESTS_FILE}; + echo "related rspec tests: $(cat $MATCHED_TESTS_FILE)"; + fi artifacts: expire_in: 7d paths: + - ${CHANGES_FILE} - ${MATCHED_TESTS_FILE} detect-tests: @@ -83,6 +88,7 @@ detect-tests: - .rails:rules:detect-tests variables: RSPEC_TESTS_MAPPING_ENABLED: "true" + CHANGES_FILE: tmp/changed_files.txt MATCHED_TESTS_FILE: tmp/matching_tests.txt detect-tests as-if-foss: @@ -91,6 +97,7 @@ detect-tests as-if-foss: - .rails:rules:detect-tests - .as-if-foss variables: + CHANGES_FILE: tmp/changed_foss_files.txt MATCHED_TESTS_FILE: tmp/matching_foss_tests.txt before_script: - '[ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb' diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml new file mode 100644 index 00000000000..1394085b6e4 --- /dev/null +++ b/.gitlab/ci/static-analysis.gitlab-ci.yml @@ -0,0 +1,42 @@ +.static-analysis-base: + extends: + - .default-retry + - .default-before_script + - .static-analysis-cache + needs: [] + variables: + SETUP_DB: "false" + ENABLE_SPRING: "1" + # Disable warnings in browserslist which can break on backports + # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384 + BROWSERSLIST_IGNORE_OLD_DATA: "true" + +update-static-analysis-cache: + extends: + - .static-analysis-base + - .static-analysis-cache-push + - .shared:rules:update-cache + stage: prepare + script: + - run_timed_command "bundle exec rubocop --parallel" # For the moment we only cache `tmp/rubocop_cache` so we don't need to run all the tasks. + +static-analysis: + extends: + - .static-analysis-base + - .static-analysis:rules:ee-and-foss + stage: test + parallel: 4 + script: + - run_timed_command "retry yarn install --frozen-lockfile" + - scripts/static-analysis + artifacts: + expire_in: 31d + when: always + paths: + - tmp/feature_flags/ + +static-analysis as-if-foss: + extends: + - static-analysis + - .static-analysis:rules:as-if-foss + - .as-if-foss diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index 135bf8b6a8c..ac719977975 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -26,6 +26,7 @@ update-tests-metadata: - .test-metadata:rules:update-tests-metadata stage: post-test dependencies: + - retrieve-tests-metadata - setup-test-env - rspec migration pg12 - rspec frontend_fixture diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml index ba4523f3bf7..0da0a334699 100644 --- a/.gitlab/ci/workhorse.gitlab-ci.yml +++ b/.gitlab/ci/workhorse.gitlab-ci.yml @@ -23,10 +23,10 @@ workhorse:verify: - apt-get update && apt-get -y install libimage-exiftool-perl - make -C workhorse test -workhorse:test using go 1.15: - extends: .workhorse:test - image: ${GITLAB_DEPENDENCY_PROXY}golang:1.15 - workhorse:test using go 1.16: extends: .workhorse:test image: ${GITLAB_DEPENDENCY_PROXY}golang:1.16 + +workhorse:test using go 1.17: + extends: .workhorse:test + image: ${GITLAB_DEPENDENCY_PROXY}golang:1.17 diff --git a/.gitlab/ci/yaml.gitlab-ci.yml b/.gitlab/ci/yaml.gitlab-ci.yml index a0961866465..b25ad55e0ce 100644 --- a/.gitlab/ci/yaml.gitlab-ci.yml +++ b/.gitlab/ci/yaml.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Yamllint of CI-related yaml and changelogs. +# Yamllint of CI-related yaml. # This uses rules from project root `.yamllint`. lint-yaml: extends: @@ -8,6 +8,6 @@ lint-yaml: stage: test needs: [] variables: - LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates changelogs + LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates script: - yamllint -f colored $LINT_PATHS diff --git a/.gitlab/issue_templates/Actionable Insight.md b/.gitlab/issue_templates/Actionable Insight.md index df519f81799..f4724d66a1b 100644 --- a/.gitlab/issue_templates/Actionable Insight.md +++ b/.gitlab/issue_templates/Actionable Insight.md @@ -1,4 +1,4 @@ -<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Learn more in the handbook here: https://about.gitlab.com/handbook/engineering/ux/ux-research-training/research-insights/#actionable-insights --> +<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Please follow the tasks outlined in this issue for best results. Learn more in the handbook here: https://about.gitlab.com/handbook/engineering/ux/ux-research-training/research-insights/#actionable-insights --> ### Insight <!-- Describe the insight itself: often the problem, finding, or observation. --> @@ -17,12 +17,14 @@ - :footprints: [Follow-up issue or epic](Paste URL for follow-up issue or epic here) ### Tasks + <!--Fill out these tasks in order to consider an Actionable Insight complete. Actionable Insights are created as confidential by default, but can be made non-confidential if the insight does not include information about competitors from a Competitor Evaluation or any other confidential information. --> - [ ] Assign this issue to the appropriate Product Manager, Product Designer, or UX Researcher. - [ ] Add the appropriate `Group` (such as `~"group::source code"`) label to the issue. This helps identify and track actionable insights at the group level. - [ ] Link this issue back to the original research issue in the GitLab UX Research project and the Dovetail project. +- [ ] Adjust confidentiality of this issue if applicable - +/confidential /label ~"Actionable Insight" diff --git a/.gitlab/issue_templates/experiment_tracking_template.md b/.gitlab/issue_templates/Experiment Rollout.md index c653a3a2d40..c5fdc739943 100644 --- a/.gitlab/issue_templates/experiment_tracking_template.md +++ b/.gitlab/issue_templates/Experiment Rollout.md @@ -1,16 +1,14 @@ -<!-- Title suggestion: [Experiment Tracking] experiment-key - description of experiment --> +<!-- Title suggestion: [Experiment Rollout] experiment-key - description of experiment --> -## What +## Summary -Track the status of an experiment through to removal. +This issue tracks the rollout and status of an experiment through to removal. -1. Experiment key: `<experiment-key>` -1. Framework: `experimentation.rb` | `gitlab_experiment` -1. Feature flag name: <experiment-key>_experiment_percentage` | `<experiment-key>` - -This is an experiment tracking issue for: `<issue or epic link>` -using the scoped [experiment label](https://about.gitlab.com/handbook/engineering/development/growth/#experiment-tracking-issue). +1. Experiment key / feature flag name: `<experiment-key>` +1. Epic or issue link: `<issue or epic link>` +This is an experiment rollout issue +using the scoped [experiment label](https://about.gitlab.com/handbook/engineering/development/growth/experimentation/#experiment-rollout-issue). As well as defining the experiment rollout and cleanup, this issue incorporates the relevant [`Feature Flag Roll Out`](https://gitlab.com/gitlab-org/gitlab/-/edit/master/.gitlab/issue_templates/Feature%20Flag%20Roll%20Out.md) steps. @@ -19,49 +17,65 @@ As well as defining the experiment rollout and cleanup, this issue incorporates - Team: `group::TEAM_NAME` - Most appropriate slack channel to reach out to: `#g_TEAM_NAME` - Best individual to reach out to: NAME +- Product manager (PM): NAME + +### Stakeholders + +<!-- +Are there any other stages or teams involved that need to be kept in the loop? + +- PM: Name +- Group: `group::TEAM_NAME` +- The Support Team +- The Delivery Team +--> ## Expectations ### What are we expecting to happen? +<!-- Describe the expected outcome when rolling out this experiment. --> + ### What might happen if this goes wrong? +<!-- Any MRs that need to be rolled back? Communication that needs to happen? What are some things you can think of that could go wrong - data loss or broken pages? --> + ### What can we monitor to detect problems with this? -<!-- Which dashboards from https://dashboards.gitlab.net are most relevant? Sentry errors reports can also be useful to review --> -### Tracked data +<!-- Which dashboards from https://dashboards.gitlab.net are most relevant? --> + +## Tracked data <!-- brief description or link to issue or Sisense dashboard --> - - Note: you can utilize [CXL calculator](https://cxl.com/ab-test-calculator/) to determine if your experiment has reached signifigance, it also includes an estimate for how much longer an experiment will need to run for before reaching signifigance. -### Staging Test -<!-- For experiments using `experimentation.rb`: To force this experiment on staging use `?force_experiment=<experiment-key>` --> -<!-- list any steps required to setup this experiment, and link to a separate Staging environment test issue is applicable --> +Note: you can use the [CXL calculator](https://cxl.com/ab-test-calculator/) to determine if your experiment has reached significance. The calculator includes an estimate for how much longer an experiment must run for before reaching significance. -<!-- uncomment if testing with specific groups/projects on GitLab.com -## Beta groups/projects +## Rollout plan +<!-- Add an overview and method for modifying the feature flag --> -If applicable, any groups/projects that are happy to have this feature turned on early. Some organizations may wish to test big changes they are interested in with a small subset of users ahead of time for example. +- Runtime in days, or until we expect to reach statistical significance: `30` +- We will roll this out behind a feature flag and expose this to `<rollout-percentage>`% of actors to start then ramp it up from there. -- `gitlab-org/gitlab` project -- `gitlab-org`/`gitlab-com` groups -- ... ---> +`/chatops run feature set <experiment-key> <rollout-percentage> --actors` -### Experiment tracking log -<!-- Add an overview and method for modifying the feature flag +### Status -* Runtime: 30 days or until we reach statistical significance -* We will roll this out behind a feature flag and expose this to 20% of users to start then ramp it up from there. -* feature flag based on experiment key `<experiment-key>` (see `experimentation.rb` in GitLab, append '_experiment_percentage') -`/chatops run feature set <experiment-key>_experiment_percentage <INITIAL_PERCENTAGE>` ---> -<!-- Add bullet points to track changes to the rollout of this experiment (feature flag changes) +#### Preferred workflow -* YYYY-MM-DD UTC - initial rollout to 20% of users -* TBD - review - increase to 50% of users ---> +The issue should be assigned to the Product manager (PM) or Engineer (Eng) as follows: + +1. PM determines and manages the status of the experiment (assign this issue to the PM) +1. PM asks for initial rollout on production, or changes to the status (assign to an Eng) +1. Eng changes the status using `chatops` (reassign to the PM) +1. When concluded, PM updates the 'Roll Out Steps' and adds a milestone (assigns to an Eng) + +The current status and history can be viewed using the: + +- [API](https://gitlab.com/api/v4/experiments) (GitLab team members) +- [Feature flag log](https://gitlab.com/gitlab-com/gl-infra/feature-flag-log/-/issues?scope=all&utf8=%E2%9C%93&state=all) (GitLab team members) +- [Experiment rollout board](https://gitlab.com/groups/gitlab-org/-/boards/1352542) + +In this rollout issue, ensure the scoped `experiment::` label is kept accurate. ### Experiment Results <!-- update when experiment in/validated, set the scoped `~experiment::` status accordingly --> @@ -69,7 +83,7 @@ If applicable, any groups/projects that are happy to have this feature turned on ## Roll Out Steps - [ ] Confirm that QA tests pass with the feature flag enabled (if you're unsure how, contact the relevant [stable counterpart in the Quality department](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors)) -- [ ] Enable on staging (`/chatops run feature set feature_name true --staging`) +- [ ] Enable on staging (`/chatops run feature set <experiment-key> true --staging`) - [ ] Test on staging - [ ] Ensure that documentation has been updated - [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour (`/chatops run feature set --project=gitlab-org/gitlab feature_name true`) @@ -88,8 +102,8 @@ If applicable, any groups/projects that are happy to have this feature turned on - [ ] This feature can be disabled by running the following Chatops command: ``` -/chatops run feature set feature_name false +/chatops run feature set <experiment-key> false ``` -/label ~"feature flag" ~"devops::growth" ~"growth experiment" ~"experiment tracking" ~Engineering ~"workflow::scheduling" ~"experiment::pending" - +/label ~"feature flag" ~"devops::growth" ~"growth experiment" ~"experiment-rollout" ~Engineering ~"workflow::scheduling" ~"experiment::pending" +/milestone %"Next 1-3 releases" diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md index ec6e5dfd7d4..1576f6e8f53 100644 --- a/.gitlab/issue_templates/Feature Flag Roll Out.md +++ b/.gitlab/issue_templates/Feature Flag Roll Out.md @@ -38,6 +38,8 @@ Are there any other stages or teams involved that need to be kept in the loop? <!-- If applicable, any groups/projects that are happy to have this feature turned on early. Some organizations may wish to test big changes they are interested in with a small subset of users ahead of time for example. --> - `gitlab-org/gitlab` project +- `gitlab-org/gitlab-foss` project +- `gitlab-com/www-gitlab-com` project - `gitlab-org`/`gitlab-com` groups - ... @@ -79,19 +81,24 @@ Are there any other stages or teams involved that need to be kept in the loop? - [ ] Ensure that documentation has been updated ([More info](https://docs.gitlab.com/ee/development/documentation/feature_flags.html#features-that-became-enabled-by-default)). - [ ] Announce on [the feature issue](ISSUE LINK) an estimated time this will be enabled on GitLab.com. - [ ] If the feature might impact the user experience, notify `#support_gitlab-com` and your team channel ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#communicate-the-change)). -- [ ] If the feature flag in code has [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), enable it on GitLab.com for [testing groups/projects](#testing-groupsprojectsusers). - - [ ] `/chatops run feature set --<actor-type>=<actor> <feature-flag-name> true` -- [ ] Verify that the feature works as expected. Posting the QA result in this issue is preferable. ### Global rollout on production +All `/chatops` commands that target production should be done in the `#production` slack channel for visibility. + +- [ ] Confirm the feature flag is enabled on `staging` without incident +- [ ] Roll out the feature to targeted testing projects/groups first + - [ ] `/chatops run feature set --project=gitlab-org/gitlab <feature-flag-name> true` + - [ ] `/chatops run feature set --project=gitlab-org/gitlab-foss <feature-flag-name> true` + - [ ] `/chatops run feature set --project=gitlab-com/www-gitlab-com <feature-flag-name> true` + - [ ] [Incrementally roll out](https://docs.gitlab.com/ee/development/feature_flags/controls.html#process) the feature. - If the feature flag in code has [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform **actor-based** rollout. - [ ] `/chatops run feature set <feature-flag-name> <rollout-percentage> --actors` - If the feature flag in code does **NOT** have [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform time-based rollout (**random** rollout). - [ ] `/chatops run feature set <feature-flag-name> <rollout-percentage>` - - Enable the feature globally on production environment. - - [ ] `/chatops run feature set <feature-flag-name> true` +- [ ] Verify the change has the desired outcome with the limited rollout before enabling the feature globally on production. +- [ ] Enable the feature globally on production environment. `/chatops run feature set <feature-flag-name> true` - [ ] Announce on [the feature issue](ISSUE LINK) that the feature has been globally enabled. - [ ] Wait for [at least one day for the verification term](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release). diff --git a/.gitlab/issue_templates/Feature proposal - detailed.md b/.gitlab/issue_templates/Feature proposal - detailed.md index 9b72ed5a01c..9759bb7e2dc 100644 --- a/.gitlab/issue_templates/Feature proposal - detailed.md +++ b/.gitlab/issue_templates/Feature proposal - detailed.md @@ -91,7 +91,7 @@ See the test engineering planning process and reach out to your counterpart Soft <!-- Define both the success metrics and acceptance criteria. Note that success metrics indicate the desired business outcomes, while acceptance criteria indicate when the solution is working correctly. If there is no way to measure success, link to an issue that will implement a way to measure this. -Create tracking issue using the the Snowplow event tracking template. See https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Snowplow%20event%20tracking.md +Create tracking issue using the Snowplow event tracking template. See https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Snowplow%20event%20tracking.md --> ### What is the type of buyer? diff --git a/.gitlab/issue_templates/Geo Replicate a new Git repository type.md b/.gitlab/issue_templates/Geo Replicate a new Git repository type.md index 73233644d37..476ee14a632 100644 --- a/.gitlab/issue_templates/Geo Replicate a new Git repository type.md +++ b/.gitlab/issue_templates/Geo Replicate a new Git repository type.md @@ -826,5 +826,7 @@ Individual Cool Widget replication and verification data should now be available feature_flag: :geo_cool_widget_replication # REMOVE THIS LINE ``` +- [ ] Run `bundle exec rake gitlab:graphql:compile_docs` after the step above to regenerate the GraphQL docs. + - [ ] Add a row for Cool Widgets to the `Data types` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#data-types) - [ ] Add a row for Cool Widgets to the `Limitations on replication/verification` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#limitations-on-replicationverification). If the row already exists, then update it to show that Replication and Verification is released in the current version. diff --git a/.gitlab/issue_templates/Geo Replicate a new blob type.md b/.gitlab/issue_templates/Geo Replicate a new blob type.md index cc5a606d68b..aef983f6495 100644 --- a/.gitlab/issue_templates/Geo Replicate a new blob type.md +++ b/.gitlab/issue_templates/Geo Replicate a new blob type.md @@ -794,5 +794,7 @@ Individual Cool Widget replication and verification data should now be available feature_flag: :geo_cool_widget_replication # REMOVE THIS LINE ``` +- [ ] Run `bundle exec rake gitlab:graphql:compile_docs` after the step above to regenerate the GraphQL docs. + - [ ] Add a row for Cool Widgets to the `Data types` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#data-types) - [ ] Add a row for Cool Widgets to the `Limitations on replication/verification` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#limitations-on-replicationverification). If the row already exists, then update it to show that Replication and Verification is released in the current version. diff --git a/.gitlab/issue_templates/InfraDev.md b/.gitlab/issue_templates/InfraDev.md new file mode 100644 index 00000000000..bc0e65c3c22 --- /dev/null +++ b/.gitlab/issue_templates/InfraDev.md @@ -0,0 +1,56 @@ +<!-- +Triage of infradev Issues is desired to occur asynchronously. +For maximum efficiency, please ensure the following, so that your infradev issues can gain maximum traction. + +https://about.gitlab.com/handbook/engineering/workflow/#a-guide-to-creating-effective-infradev-issues +--> + +## Summary +<!-- +Clearly state the scope of the problem, and how it affects GitLab.com +--> + + +## Impact +<!-- +- Quantify the effect of the problem to help ensure that correct prioritization occurs. +- Include costs to availability. The Incident Budget Explorer dashboard can help here. +- Include the number of times alerts have fired owing to the problem, how much time was spent dealing with the problem, and how many people were involved. +- Link to affected incidents, and cross-reference them as related issues. +- Include screenshots of visualization from Grafana or Kibana. +- Always include a permalink to the source of the screenshot so that others can investigate further. +--> + + +## Recommendation +<!-- +Provide a clear, unambiguous, self-contained solution to the problem. +--> + + +## Verification +<!-- +Provide a method for validating that the original issue still exists. + +Having a way of checking validity can save on a great deal of back-and-forth discussion between Infradev Triage participants including Engineering Managers, Directors and Product Managers and make space for other non-resolved issues to get scheduled sooner. + +Ideally, provide a link to a Thanos query or an ELK query and clear instructions on how to interpret the results to determine whether the problem is still occurring. +--> + + +<!-- +Workflow and other relevant labels + +/label ~"severity::" +/label ~"priority::" +/label ~"group::" +/label ~"devops::" + +See also: +- https://about.gitlab.com/handbook/engineering/quality/issue-triage/#availability +- https://about.gitlab.com/handbook/product/categories/ +- https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml +--> + +/label ~"infradev" +/label ~"bug" diff --git a/.gitlab/issue_templates/Navigation - Left Sidebar Proposals.md b/.gitlab/issue_templates/Navigation - Left Sidebar Proposals.md new file mode 100644 index 00000000000..57d6d12267c --- /dev/null +++ b/.gitlab/issue_templates/Navigation - Left Sidebar Proposals.md @@ -0,0 +1,15 @@ +<!-- This template is used for proposing changes to the left sidebar contextual navigation. This could include additions, removals, or general changes to overall hierarchy.--> + +### Proposal + +<!-- Use this section to explain the proposed changes, including details around usage and business drivers. --> + +### Checklist + +- [ ] If your proposal includes changes to the top-level menu items within the left sidebar, engage the [Foundations Product Design Manager](https://about.gitlab.com/handbook/product/categories/#foundations-group) for approval. The Foundations DRI will work with UX partners in product design, research, and technical writing, as applicable. +- [ ] Follow the [product development workflow](https://about.gitlab.com/handbook/product-development-flow/#validation-phase-2-problem-validation) validation process to ensure you are solving a well understood problem and that the proposed change is understandable and non-disruptive to users. Navigation-specific research is strongly encouraged. +- [ ] Engage the [Editor](https://about.gitlab.com/handbook/engineering/development/dev/create-editor/) team to ensure your proposal is in alignment with holistic changes happening to the left side bar. +- [ ] Consider whether you need to communicate the change somehow, or if you will have an interim period in the UI where your nav item will live in more than one place. +- [ ] Once implemented, update this [navigation map in Mural](https://app.mural.co/t/gitlab2474/m/gitlab2474/1589571490215/261462d0beb3043979374623710d3f2d6cfec1cb) with your navigation change. + +/label ~UX ~"UI text" ~"documentation" ~"documentation" ~"Category:Navigation & Settings" ~"Category:Foundations" ~navigation diff --git a/.gitlab/issue_templates/Security developer workflow.md b/.gitlab/issue_templates/Security developer workflow.md index 51e8ec378b2..7f2c54f4f49 100644 --- a/.gitlab/issue_templates/Security developer workflow.md +++ b/.gitlab/issue_templates/Security developer workflow.md @@ -29,6 +29,7 @@ After your merge request has been approved according to our [approval guidelines ## Backports - [ ] Once the MR is ready to be merged, create MRs targeting the latest 3 stable branches + * The 3 stable branches correspond to the versions in the title of the Security Release Tracking Issue. * At this point, it might be easy to squash the commits from the MR into one * You can use the script `bin/secpick` instead of the following steps, to help you cherry-picking. See the [secpick documentation] - [ ] Create each MR targeting the stable branch `X-Y-stable`, using the [Security Release merge request template]. diff --git a/.gitlab/issue_templates/Technical Evaluation.md b/.gitlab/issue_templates/Technical Evaluation.md index 533a1343820..cf939725a78 100644 --- a/.gitlab/issue_templates/Technical Evaluation.md +++ b/.gitlab/issue_templates/Technical Evaluation.md @@ -5,6 +5,13 @@ <!-- Describe the related issue and challenge we need to establish a proof of concept for--> * [Link to other Issue](link) +### Tasks prior to evaluation + +<!-- Pre-evaluation tasks are critical and should be completed or confirmed by product managers if available --> + +- [ ] Clearly document the topic to evaluated in this issue description +- [ ] Determine specific scope including time-bounds for investigation + ### Tasks to Evaluate <!-- Outline the tasks with issues that you need to evaluate as a part of the implementation issue --> diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md index e97ae9a0c43..66c1eff412b 100644 --- a/.gitlab/merge_request_templates/Documentation.md +++ b/.gitlab/merge_request_templates/Documentation.md @@ -1,13 +1,3 @@ -<!-- - Follow the documentation workflow https://docs.gitlab.com/ee/development/documentation/workflow.html - Additional information is located at https://docs.gitlab.com/ee/development/documentation/ - To find the designated Tech Writer for the stage/group, see - https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers - - Mention "documentation" or "docs" in the MR title - For changing documentation location use the Change Documentation Location.md template ---> - ## What does this MR do? <!-- Briefly describe what this MR is about. --> @@ -18,11 +8,13 @@ ## Author's checklist +- [ ] Consider taking [the GitLab Technical Writing Fundamentals course](https://gitlab.edcast.com/pathways/ECL-02528ee2-c334-4e16-abf3-e9d8b8260de4) - [ ] Follow the: - - [Documentation Guidelines](https://docs.gitlab.com/ee/development/documentation/). + - [Documentation process](https://docs.gitlab.com/ee/development/documentation/workflow.html). + - [Documentation guidelines](https://docs.gitlab.com/ee/development/documentation/). - [Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide/). - [ ] Ensure that the [product tier badge](https://docs.gitlab.com/ee/development/documentation/styleguide/index.html#product-tier-badges) is added to topic's `h1`. -- [ ] [Request a review](https://docs.gitlab.com/ee/development/code_review.html#dogfooding-the-reviewers-feature) based on the: +- [ ] [Request a review](https://docs.gitlab.com/ee/development/code_review.html#dogfooding-the-reviewers-feature) based on: - The documentation page's [metadata](https://docs.gitlab.com/ee/development/documentation/#metadata). - The [associated Technical Writer](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments). diff --git a/.gitlab/merge_request_templates/Quarantine End to End Test.md b/.gitlab/merge_request_templates/Quarantine End to End Test.md index 772167af3e9..4edfd2a8c8e 100644 --- a/.gitlab/merge_request_templates/Quarantine End to End Test.md +++ b/.gitlab/merge_request_templates/Quarantine End to End Test.md @@ -22,6 +22,7 @@ the noise (due to constantly failing tests, flaky tests, and so on) so that new - [ ] Follow the [Quarantining Tests guide](https://about.gitlab.com/handbook/engineering/quality/guidelines/debugging-qa-test-failures/#quarantining-tests). - [ ] Confirm the test has a [`quarantine:` tag with the specified quarantine type](https://about.gitlab.com/handbook/engineering/quality/guidelines/debugging-qa-test-failures/#quarantined-test-types). - [ ] Note if the test should be [quarantined for a specific environment](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/execution_context_selection.html#quarantine-a-test-for-a-specific-environment). + - [ ] (Optionally) In case of an emergency (e.g. blocked deployments), consider adding labels to pick into auto-deploy (~"Pick into auto-deploy" ~"priority::1" ~"severity::1"). - [ ] Dequarantine test check-list - [ ] Follow the [Dequarantining Tests guide](https://about.gitlab.com/handbook/engineering/quality/guidelines/debugging-qa-test-failures/#dequarantining-tests). - [ ] Confirm the test consistently passes on the target GitLab environment(s). @@ -31,9 +32,6 @@ the noise (due to constantly failing tests, flaky tests, and so on) so that new <!-- Base labels. --> /label ~"Quality" ~"QA" ~"feature" ~"feature::maintenance" -<!-- Labels to pick into auto-deploy. --> -/label ~"Pick into auto-deploy" ~"priority::1" ~"severity::1" - <!-- Choose the stage that appears in the test path, e.g. ~"devops::create" for `qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb`. diff --git a/.gitlab/merge_request_templates/Security Release.md b/.gitlab/merge_request_templates/Security Release.md index 33c0a5b98a8..7684546b91c 100644 --- a/.gitlab/merge_request_templates/Security Release.md +++ b/.gitlab/merge_request_templates/Security Release.md @@ -14,7 +14,6 @@ See [the general developer security release guidelines](https://gitlab.com/gitla - [ ] **On "Related issues" section, write down the [GitLab Security] issue it belongs to (i.e. `Related to <issue_id>`).** - [ ] Merge request targets `master`, or a versioned stable branch (`X-Y-stable-ee`). -- [ ] Milestone is set for the version this merge request applies to. A closed milestone can be assigned via [quick actions]. - [ ] Title of this merge request is the same as for all backports. - [ ] A [CHANGELOG entry] has been included, with `Changelog` trailer set to `security`. - [ ] For the MR targeting `master`: @@ -24,6 +23,7 @@ See [the general developer security release guidelines](https://gitlab.com/gitla - Please see the security release [Code reviews and Approvals](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#code-reviews-and-approvals) documentation for details on which AppSec team member to ping for approval. - Trigger the [`package-and-qa` build]. The docker image generated will be used by the AppSec engineer to validate the security vulnerability has been remediated. - [ ] For a backport MR targeting a versioned stable branch (`X-Y-stable-ee`) + - [ ] Milestone is set to the version this backport applies to. A closed milestone can be assigned via [quick actions]. - [ ] Ensure it's approved by a maintainer. **Note:** Reviewer/maintainer should not be a Release Manager |