Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-06-20 13:43:29 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-20 13:43:29 +0300
commit3b1af5cc7ed2666ff18b718ce5d30fa5a2756674 (patch)
tree3bc4a40e0ee51ec27eabf917c537033c0c5b14d4 /.gitlab
parent9bba14be3f2c211bf79e15769cd9b77bc73a13bc (diff)
Add latest changes from gitlab-org/gitlab@16-1-stable-eev16.1.0-rc42
Diffstat (limited to '.gitlab')
-rw-r--r--.gitlab/CODEOWNERS267
-rw-r--r--.gitlab/ci/as-if-jh.gitlab-ci.yml1
-rw-r--r--.gitlab/ci/build-images.gitlab-ci.yml27
-rw-r--r--.gitlab/ci/caching.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/ci-templates.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/cng/main.gitlab-ci.yml61
-rw-r--r--.gitlab/ci/database.gitlab-ci.yml3
-rw-r--r--.gitlab/ci/dev-fixtures.gitlab-ci.yml6
-rw-r--r--.gitlab/ci/docs.gitlab-ci.yml4
-rw-r--r--.gitlab/ci/frontend.gitlab-ci.yml14
-rw-r--r--.gitlab/ci/glfm.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/global.gitlab-ci.yml133
-rw-r--r--.gitlab/ci/graphql.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/memory.gitlab-ci.yml4
-rw-r--r--.gitlab/ci/notify.gitlab-ci.yml25
-rw-r--r--.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml112
-rw-r--r--.gitlab/ci/package-and-test/main.gitlab-ci.yml307
-rw-r--r--.gitlab/ci/preflight.gitlab-ci.yml28
-rw-r--r--.gitlab/ci/qa-common/main.gitlab-ci.yml124
-rw-r--r--.gitlab/ci/qa-common/rules.gitlab-ci.yml51
-rw-r--r--.gitlab/ci/qa-common/variables.gitlab-ci.yml1
-rw-r--r--.gitlab/ci/qa.gitlab-ci.yml93
-rw-r--r--.gitlab/ci/rails.gitlab-ci.yml592
-rw-r--r--.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb2
-rw-r--r--.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb4
-rw-r--r--.gitlab/ci/rails/shared.gitlab-ci.yml59
-rw-r--r--.gitlab/ci/release-environments/main.gitlab-ci.yml68
-rw-r--r--.gitlab/ci/reports.gitlab-ci.yml9
-rw-r--r--.gitlab/ci/review-apps/main.gitlab-ci.yml56
-rw-r--r--.gitlab/ci/review-apps/qa.gitlab-ci.yml48
-rw-r--r--.gitlab/ci/review.gitlab-ci.yml27
-rw-r--r--.gitlab/ci/rules.gitlab-ci.yml252
-rw-r--r--.gitlab/ci/setup.gitlab-ci.yml47
-rw-r--r--.gitlab/ci/static-analysis.gitlab-ci.yml4
-rw-r--r--.gitlab/ci/test-metadata.gitlab-ci.yml21
-rw-r--r--.gitlab/ci/test-on-gdk/main.gitlab-ci.yml189
-rw-r--r--.gitlab/ci/workhorse.gitlab-ci.yml4
-rw-r--r--.gitlab/issue_templates/AI Project Proposal.md2
-rw-r--r--.gitlab/issue_templates/Design Sprint.md33
-rw-r--r--.gitlab/issue_templates/Documentation.md2
-rw-r--r--.gitlab/issue_templates/Experiment Implementation.md4
-rw-r--r--.gitlab/issue_templates/Feature Proposal - lean.md33
-rw-r--r--.gitlab/issue_templates/Feature proposal - detailed.md35
-rw-r--r--.gitlab/issue_templates/Fulfillment Group UX Issue.md33
-rw-r--r--.gitlab/issue_templates/Geo Replicate a new Git repository type.md46
-rw-r--r--.gitlab/issue_templates/Geo Replicate a new blob type.md39
-rw-r--r--.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md2
-rw-r--r--.gitlab/issue_templates/Pipeline Security issue implementation98
-rw-r--r--.gitlab/issue_templates/Problem Validation.md2
-rw-r--r--.gitlab/issue_templates/Remote Development Group - issue.md68
-rw-r--r--.gitlab/issue_templates/Service Ping reporting and monitoring.md6
-rw-r--r--.gitlab/merge_request_templates/Default.md8
-rw-r--r--.gitlab/merge_request_templates/Deprecations.md4
-rw-r--r--.gitlab/merge_request_templates/Removals.md4
54 files changed, 1941 insertions, 1129 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index 0d6bf442a92..5db7ba5b109 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -30,6 +30,8 @@ GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend
/doc/.markdownlint/ @marcel.amirault @eread @aqualls @gitlab-org/tw-leadership
/doc/.vale/ @marcel.amirault @eread @aqualls @gitlab-org/tw-leadership
/lib/tasks/gitlab/tw/codeowners.rake @aqualls @gitlab-org/tw-leadership
+/scripts/lint-doc.sh @marcel.amirault @eread @axil @sarahgerman @gitlab-org/tw-leadership
+/scripts/lint-docs-metadata.sh @marcel.amirault @eread @axil @sarahgerman @gitlab-org/tw-leadership
^[Source code editing]
.solargraph.yml.example @igor.drozdov
@@ -65,6 +67,7 @@ GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend
/.gitlab/ci/docs.gitlab-ci.yml @gl-quality/eng-prod @gl-docsteam
/.gitlab/ci/package-and-test/ @gl-quality/eng-prod @gl-quality/qe-maintainers
/.gitlab/ci/qa.gitlab-ci.yml @gl-quality/eng-prod @gl-quality/qe-maintainers
+/.gitlab/ci/qa-common/ @gl-quality/eng-prod @gl-quality/qe-maintainers
/.gitlab/ci/releases.gitlab-ci.yml @gl-quality/eng-prod @gitlab-org/delivery
/.gitlab/ci/reports.gitlab-ci.yml @gl-quality/eng-prod @gitlab-com/gl-security/appsec
/.gitlab/ci/review-apps/qa.gitlab-ci.yml @gl-quality/eng-prod @gl-quality/qe-maintainers
@@ -254,7 +257,7 @@ Dangerfile
/ee/app/workers/merge_requests/ @garyh @patrickbajao @marc_shaw @kerrizor @dskim_gitlab
/ee/app/workers/merge_request_reset_approvals_worker.rb @garyh @patrickbajao @marc_shaw @kerrizor @dskim_gitlab
-^[Merge Requests frontend] @viktomas @jboyson @iamphill @thomasrandolph
+^[Merge Requests frontend] @slashmanov @iamphill @thomasrandolph
/app/assets/javascripts/diffs
/app/assets/javascripts/batch_comments/
/app/assets/javascripts/notes
@@ -278,7 +281,7 @@ Dangerfile
/ee/app/assets/javascripts/vue_shared/components/customizable_dashboard/panels_base.vue
/ee/app/assets/javascripts/product_analytics/
-^[Analytics Instrumentation] @gitlab-org/analytics-section/product-intelligence/engineers
+^[Analytics Instrumentation] @gitlab-org/analytics-section/analytics-instrumentation/engineers
/ee/lib/gitlab/usage_data_counters/
/ee/lib/ee/gitlab/usage_data.rb
/lib/gitlab/usage_data.rb
@@ -311,8 +314,6 @@ Dangerfile
/ee/spec/lib/ee/api/entities/experiment_spec.rb
^[Growth] @gitlab-org/growth/engineers
-/ee/app/workers/onboarding/
-/ee/spec/workers/onboarding/
/app/models/onboarding/
/spec/models/onboarding/
/app/services/onboarding/
@@ -359,7 +360,8 @@ Dangerfile
^[Legal] @gitlab-org/legal-reviewers
/config/dependency_decisions.yml
-^[Workhorse] @nolith @patrickbajao @igor.drozdov
+# https://gitlab.com/groups/gitlab-org/maintainers/gitlab-workhorse/-/group_members?with_inherited_permissions=exclude
+^[Workhorse] @gitlab-org/maintainers/gitlab-workhorse
/workhorse/
[Application Security] @gitlab-com/gl-security/appsec
@@ -377,6 +379,7 @@ Dangerfile
/lib/gitlab/url_blocker.rb
/lib/gitlab/url_blockers/
/lib/gitlab/utils.rb
+/lib/gitlab/path_traversal.rb
^[Gitaly] @proglottis @toon
lib/gitlab/git_access.rb
@@ -400,42 +403,42 @@ lib/gitlab/checks/**
/doc/administration/audit_reports.md @eread
/doc/administration/auditor_users.md @jglassman1
/doc/administration/auth/ @jglassman1
-/doc/administration/cicd.md @drcatherinepope
+/doc/administration/cicd.md @marcel.amirault
/doc/administration/clusters/ @phillipwells
/doc/administration/compliance.md @eread
/doc/administration/configure.md @axil
/doc/administration/consul.md @axil
-/doc/administration/dedicated/ @drcatherinepope
/doc/administration/docs_self_host.md @axil
/doc/administration/encrypted_configuration.md @axil
/doc/administration/environment_variables.md @axil
-/doc/administration/external_pipeline_validation.md @drcatherinepope
+/doc/administration/external_pipeline_validation.md @marcel.amirault
/doc/administration/feature_flags.md @axil
/doc/administration/file_hooks.md @eread @ashrafkhamis
/doc/administration/geo/ @axil
/doc/administration/get_started.md @kpaizee
-/doc/administration/git_protocol.md @aqualls
+/doc/administration/git_protocol.md @aqualls @msedlakjakubowski
/doc/administration/gitaly/ @eread
/doc/administration/housekeeping.md @eread
/doc/administration/inactive_project_deletion.md @eread
/doc/administration/incoming_email.md @msedlakjakubowski
/doc/administration/index.md @axil
/doc/administration/instance_limits.md @axil
+/doc/administration/integration/diagrams_net.md @aqualls @msedlakjakubowski
/doc/administration/integration/kroki.md @msedlakjakubowski
/doc/administration/integration/mailgun.md @msedlakjakubowski
-/doc/administration/integration/plantuml.md @aqualls
+/doc/administration/integration/plantuml.md @aqualls @msedlakjakubowski
/doc/administration/integration/terminal.md @phillipwells
/doc/administration/invalidate_markdown_cache.md @msedlakjakubowski
/doc/administration/issue_closing_pattern.md @aqualls
/doc/administration/job_artifacts.md @marcel.amirault
/doc/administration/job_logs.md @fneill
-/doc/administration/lfs/ @aqualls
+/doc/administration/lfs/ @aqualls @msedlakjakubowski
/doc/administration/libravatar.md @axil
/doc/administration/load_balancer.md @axil
/doc/administration/logs/ @axil
/doc/administration/logs/index.md @msedlakjakubowski
/doc/administration/maintenance_mode/ @axil
-/doc/administration/merge_request_diffs.md @aqualls
+/doc/administration/merge_request_diffs.md @aqualls @msedlakjakubowski
/doc/administration/monitoring/github_imports.md @eread @ashrafkhamis
/doc/administration/monitoring/index.md @msedlakjakubowski
/doc/administration/monitoring/ip_allowlist.md @jglassman1
@@ -447,16 +450,17 @@ lib/gitlab/checks/**
/doc/administration/monitoring/prometheus/index.md @axil
/doc/administration/monitoring/prometheus/pgbouncer_exporter.md @aqualls
/doc/administration/monitoring/prometheus/postgres_exporter.md @aqualls
-/doc/administration/monitoring/prometheus/registry_exporter.md @marcel.amirault
+/doc/administration/monitoring/prometheus/registry_exporter.md @phillipwells
/doc/administration/monitoring/prometheus/web_exporter.md @jglassman1
/doc/administration/nfs.md @axil
/doc/administration/object_storage.md @axil
/doc/administration/operations/ @axil
-/doc/administration/operations/fast_ssh_key_lookup.md @aqualls
-/doc/administration/operations/gitlab_sshd.md @aqualls
+/doc/administration/operations/fast_ssh_key_lookup.md @aqualls @msedlakjakubowski
+/doc/administration/operations/gitlab_sshd.md @aqualls @msedlakjakubowski
/doc/administration/operations/moving_repositories.md @eread
/doc/administration/package_information/ @axil
/doc/administration/packages/ @marcel.amirault
+/doc/administration/packages/index.md @phillipwells
/doc/administration/polling.md @axil
/doc/administration/postgresql/ @aqualls
/doc/administration/postgresql/multiple_databases.md @lciutacu
@@ -477,7 +481,7 @@ lib/gitlab/checks/**
/doc/administration/sidekiq/sidekiq_memory_killer.md @jglassman1
/doc/administration/silent_mode/ @axil
/doc/administration/smime_signing_email.md @axil
-/doc/administration/snippets/ @aqualls
+/doc/administration/snippets/ @aqualls @msedlakjakubowski
/doc/administration/static_objects_external_storage.md @ashrafkhamis
/doc/administration/system_hooks.md @eread @ashrafkhamis
/doc/administration/terraform_state.md @phillipwells
@@ -496,10 +500,10 @@ lib/gitlab/checks/**
/doc/api/avatar.md @jglassman1
/doc/api/award_emoji.md @msedlakjakubowski
/doc/api/boards.md @msedlakjakubowski
-/doc/api/branches.md @aqualls
+/doc/api/branches.md @aqualls @msedlakjakubowski
/doc/api/bulk_imports.md @eread @ashrafkhamis
/doc/api/cluster_agents.md @phillipwells
-/doc/api/commits.md @aqualls
+/doc/api/commits.md @aqualls @msedlakjakubowski
/doc/api/container_registry.md @marcel.amirault
/doc/api/custom_attributes.md @msedlakjakubowski
/doc/api/dependencies.md @rdickenson
@@ -507,14 +511,13 @@ lib/gitlab/checks/**
/doc/api/deploy_keys.md @phillipwells
/doc/api/deploy_tokens.md @phillipwells
/doc/api/deployments.md @phillipwells
-/doc/api/discussions.md @aqualls
+/doc/api/discussions.md @aqualls @msedlakjakubowski
/doc/api/dora/ @lciutacu
/doc/api/draft_notes.md @aqualls
/doc/api/environments.md @phillipwells
/doc/api/epic_issues.md @msedlakjakubowski
/doc/api/epic_links.md @msedlakjakubowski
/doc/api/epics.md @msedlakjakubowski
-/doc/api/error_tracking.md @drcatherinepope
/doc/api/events.md @eread
/doc/api/feature_flag_user_lists.md @phillipwells
/doc/api/feature_flags.md @phillipwells
@@ -523,7 +526,7 @@ lib/gitlab/checks/**
/doc/api/geo_nodes.md @axil
/doc/api/geo_sites.md @axil
/doc/api/graphql/audit_report.md @eread
-/doc/api/graphql/branch_rules.md @aqualls
+/doc/api/graphql/branch_rules.md @aqualls @msedlakjakubowski
/doc/api/graphql/custom_emoji.md @msedlakjakubowski
/doc/api/graphql/getting_started.md @eread @ashrafkhamis
/doc/api/graphql/index.md @eread @ashrafkhamis
@@ -542,7 +545,7 @@ lib/gitlab/checks/**
/doc/api/group_labels.md @msedlakjakubowski
/doc/api/group_level_variables.md @marcel.amirault
/doc/api/group_milestones.md @msedlakjakubowski
-/doc/api/group_protected_branches.md @aqualls
+/doc/api/group_protected_branches.md @aqualls @msedlakjakubowski
/doc/api/group_protected_environments.md @phillipwells
/doc/api/group_relations_export.md @eread @ashrafkhamis
/doc/api/group_releases.md @phillipwells
@@ -558,20 +561,19 @@ lib/gitlab/checks/**
/doc/api/issues_statistics.md @msedlakjakubowski
/doc/api/iterations.md @msedlakjakubowski
/doc/api/job_artifacts.md @marcel.amirault
-/doc/api/jobs.md @drcatherinepope
-/doc/api/keys.md @aqualls
+/doc/api/jobs.md @marcel.amirault
+/doc/api/keys.md @aqualls @msedlakjakubowski
/doc/api/labels.md @msedlakjakubowski
/doc/api/license.md @fneill
/doc/api/linked_epics.md @msedlakjakubowski
/doc/api/lint.md @marcel.amirault
-/doc/api/managed_licenses.md @fneill
/doc/api/markdown.md @msedlakjakubowski
/doc/api/member_roles.md @jglassman1
/doc/api/members.md @jglassman1
-/doc/api/merge_request_approvals.md @aqualls
+/doc/api/merge_request_approvals.md @aqualls @msedlakjakubowski
/doc/api/merge_request_context_commits.md @aqualls
/doc/api/merge_requests.md @aqualls
-/doc/api/merge_trains.md @drcatherinepope
+/doc/api/merge_trains.md @marcel.amirault
/doc/api/metadata.md @phillipwells
/doc/api/metrics_dashboard_annotations.md @msedlakjakubowski
/doc/api/metrics_user_starred_dashboards.md @msedlakjakubowski
@@ -581,35 +583,36 @@ lib/gitlab/checks/**
/doc/api/notification_settings.md @msedlakjakubowski
/doc/api/oauth2.md @jglassman1
/doc/api/openapi/ @eread @ashrafkhamis
-/doc/api/packages.md @marcel.amirault
-/doc/api/packages/ @marcel.amirault
+/doc/api/packages.md @phillipwells
+/doc/api/packages/ @phillipwells
/doc/api/personal_access_tokens.md @eread
-/doc/api/pipeline_schedules.md @drcatherinepope
-/doc/api/pipeline_triggers.md @drcatherinepope
-/doc/api/pipelines.md @drcatherinepope
+/doc/api/pipeline_schedules.md @marcel.amirault
+/doc/api/pipeline_triggers.md @marcel.amirault
+/doc/api/pipelines.md @marcel.amirault
/doc/api/plan_limits.md @jglassman1
/doc/api/product_analytics.md @lciutacu
/doc/api/project_access_tokens.md @jglassman1
-/doc/api/project_aliases.md @aqualls
-/doc/api/project_badges.md @aqualls
+/doc/api/project_aliases.md @aqualls @msedlakjakubowski
+/doc/api/project_badges.md @aqualls @msedlakjakubowski
/doc/api/project_clusters.md @phillipwells
-/doc/api/project_import_export.md @aqualls
+/doc/api/project_import_export.md @aqualls @msedlakjakubowski
+/doc/api/project_job_token_scopes.md @marcel.amirault
/doc/api/project_level_variables.md @marcel.amirault
/doc/api/project_relations_export.md @eread @ashrafkhamis
/doc/api/project_repository_storage_moves.md @eread
-/doc/api/project_snippets.md @aqualls
-/doc/api/project_statistics.md @aqualls
-/doc/api/project_templates.md @aqualls
+/doc/api/project_snippets.md @aqualls @msedlakjakubowski
+/doc/api/project_statistics.md @aqualls @msedlakjakubowski
+/doc/api/project_templates.md @aqualls @msedlakjakubowski
/doc/api/project_vulnerabilities.md @rdickenson
/doc/api/projects.md @lciutacu
-/doc/api/protected_branches.md @aqualls
+/doc/api/protected_branches.md @aqualls @msedlakjakubowski
/doc/api/protected_environments.md @phillipwells
-/doc/api/protected_tags.md @aqualls
+/doc/api/protected_tags.md @aqualls @msedlakjakubowski
/doc/api/releases/ @phillipwells
-/doc/api/remote_mirrors.md @aqualls
-/doc/api/repositories.md @aqualls
-/doc/api/repository_files.md @aqualls
-/doc/api/repository_submodules.md @aqualls
+/doc/api/remote_mirrors.md @aqualls @msedlakjakubowski
+/doc/api/repositories.md @aqualls @msedlakjakubowski
+/doc/api/repository_files.md @aqualls @msedlakjakubowski
+/doc/api/repository_submodules.md @aqualls @msedlakjakubowski
/doc/api/resource_groups.md @phillipwells
/doc/api/resource_iteration_events.md @msedlakjakubowski
/doc/api/resource_label_events.md @eread
@@ -621,18 +624,19 @@ lib/gitlab/checks/**
/doc/api/saml.md @jglassman1
/doc/api/scim.md @jglassman1
/doc/api/search.md @ashrafkhamis
+/doc/api/search_admin.md @ashrafkhamis
/doc/api/secure_files.md @marcel.amirault
/doc/api/settings.md @jglassman1
/doc/api/sidekiq_metrics.md @axil
-/doc/api/snippet_repository_storage_moves.md @aqualls
-/doc/api/snippets.md @aqualls
+/doc/api/snippet_repository_storage_moves.md @aqualls @msedlakjakubowski
+/doc/api/snippets.md @aqualls @msedlakjakubowski
/doc/api/statistics.md @jglassman1
/doc/api/status_checks.md @eread
-/doc/api/suggestions.md @aqualls
+/doc/api/suggestions.md @aqualls @msedlakjakubowski
/doc/api/system_hooks.md @eread @ashrafkhamis
-/doc/api/tags.md @aqualls
-/doc/api/templates/dockerfiles.md @aqualls
-/doc/api/templates/gitignores.md @aqualls
+/doc/api/tags.md @aqualls @msedlakjakubowski
+/doc/api/templates/dockerfiles.md @aqualls @msedlakjakubowski
+/doc/api/templates/gitignores.md @aqualls @msedlakjakubowski
/doc/api/templates/gitlab_ci_ymls.md @marcel.amirault
/doc/api/templates/licenses.md @rdickenson
/doc/api/todos.md @msedlakjakubowski
@@ -640,72 +644,47 @@ lib/gitlab/checks/**
/doc/api/usage_data.md @lciutacu
/doc/api/users.md @jglassman1
/doc/api/version.md @phillipwells
-/doc/api/visual_review_discussions.md @drcatherinepope
+/doc/api/visual_review_discussions.md @marcel.amirault
/doc/api/vulnerabilities.md @rdickenson
/doc/api/vulnerability_exports.md @rdickenson
/doc/api/vulnerability_findings.md @rdickenson
/doc/architecture/blueprints/cells/ @lciutacu
/doc/architecture/blueprints/database/scalability/patterns/ @aqualls
/doc/architecture/blueprints/database_scaling/ @aqualls
-/doc/ci/ @drcatherinepope
-/doc/ci/caching/ @marcel.amirault
-/doc/ci/chatops/ @eread @ashrafkhamis
+/doc/ci/ @marcel.amirault
+/doc/ci/chatops/ @phillipwells
/doc/ci/cloud_deployment/ @phillipwells
-/doc/ci/cloud_services/ @marcel.amirault
-/doc/ci/components/ @marcel.amirault
-/doc/ci/directed_acyclic_graph/ @marcel.amirault
/doc/ci/docker/using_docker_images.md @fneill
/doc/ci/environments/ @phillipwells
-/doc/ci/examples/authenticating-with-hashicorp-vault/ @marcel.amirault
/doc/ci/examples/deployment/ @phillipwells
-/doc/ci/examples/semantic-release.md @marcel.amirault
+/doc/ci/examples/semantic-release.md @phillipwells
/doc/ci/interactive_web_terminal/ @fneill
-/doc/ci/introduction/ @marcel.amirault
-/doc/ci/jobs/ @marcel.amirault
/doc/ci/large_repositories/ @fneill
-/doc/ci/lint.md @marcel.amirault
-/doc/ci/migration/ @marcel.amirault
-/doc/ci/pipeline_editor/ @marcel.amirault
-/doc/ci/pipelines/downstream_pipelines.md @marcel.amirault
-/doc/ci/pipelines/index.md @marcel.amirault
-/doc/ci/pipelines/pipeline_architectures.md @marcel.amirault
-/doc/ci/pipelines/pipeline_artifacts.md @marcel.amirault
-/doc/ci/quick_start/ @marcel.amirault
/doc/ci/resource_groups/ @phillipwells
/doc/ci/runners/ @fneill
-/doc/ci/secrets/ @marcel.amirault
-/doc/ci/secure_files/ @marcel.amirault
/doc/ci/services/ @fneill
-/doc/ci/ssh_keys/ @marcel.amirault
/doc/ci/test_cases/ @msedlakjakubowski
/doc/ci/testing/code_quality.md @rdickenson
-/doc/ci/triggers/ @marcel.amirault
-/doc/ci/troubleshooting.md @marcel.amirault
-/doc/ci/variables/ @marcel.amirault
-/doc/ci/yaml/ @marcel.amirault
-/doc/ci/yaml/artifacts_reports.md @drcatherinepope
/doc/development/advanced_search.md @ashrafkhamis
/doc/development/application_limits.md @axil
/doc/development/audit_event_guide/ @eread
/doc/development/auto_devops.md @phillipwells
/doc/development/backend/ @sselhorn
-/doc/development/backend/create_source_code_be/ @aqualls
+/doc/development/backend/create_source_code_be/ @aqualls @msedlakjakubowski
/doc/development/build_test_package.md @axil
/doc/development/bulk_import.md @eread @ashrafkhamis
/doc/development/cached_queries.md @jglassman1
/doc/development/cascading_settings.md @jglassman1
-/doc/development/chatops_on_gitlabcom.md @eread @ashrafkhamis
+/doc/development/chatops_on_gitlabcom.md @phillipwells
/doc/development/cicd/ @marcel.amirault
-/doc/development/cicd/cicd_tables.md @drcatherinepope
-/doc/development/cicd/index.md @drcatherinepope
/doc/development/code_intelligence/ @aqualls
-/doc/development/code_owners/ @aqualls
+/doc/development/code_owners/ @aqualls @msedlakjakubowski
/doc/development/contributing/ @sselhorn
/doc/development/database/ @aqualls
/doc/development/database/filtering_by_label.md @msedlakjakubowski
/doc/development/database/multiple_databases.md @lciutacu
/doc/development/database_review.md @aqualls
-/doc/development/developing_with_solargraph.md @aqualls
+/doc/development/developing_with_solargraph.md @aqualls @msedlakjakubowski
/doc/development/development_processes.md @sselhorn
/doc/development/distributed_tracing.md @msedlakjakubowski
/doc/development/distribution/ @axil
@@ -715,46 +694,51 @@ lib/gitlab/checks/**
/doc/development/fe_guide/dark_mode.md @sselhorn
/doc/development/fe_guide/graphql.md @sselhorn
/doc/development/fe_guide/merge_request_widget_extensions.md @aqualls
-/doc/development/fe_guide/source_editor.md @aqualls
+/doc/development/fe_guide/source_editor.md @aqualls @msedlakjakubowski
/doc/development/fe_guide/view_component.md @sselhorn
/doc/development/feature_categorization/ @sselhorn
/doc/development/feature_development.md @sselhorn
/doc/development/feature_flags/ @sselhorn
-/doc/development/fips_compliance.md @aqualls
+/doc/development/fips_compliance.md @aqualls @msedlakjakubowski
/doc/development/geo.md @axil
/doc/development/geo/ @axil
/doc/development/git_object_deduplication.md @eread
/doc/development/gitaly.md @eread
/doc/development/gitlab_flavored_markdown/ @ashrafkhamis
-/doc/development/gitlab_shell/ @aqualls
+/doc/development/gitlab_shell/ @aqualls @msedlakjakubowski
/doc/development/graphql_guide/ @eread @ashrafkhamis
/doc/development/graphql_guide/batchloader.md @aqualls
/doc/development/i18n/ @eread @ashrafkhamis
+/doc/development/identity_verification.md @phillipwells
/doc/development/image_scaling.md @lciutacu
/doc/development/import_export.md @eread @ashrafkhamis
/doc/development/index.md @sselhorn
/doc/development/integrations/ @eread @ashrafkhamis
/doc/development/integrations/secure.md @rdickenson
/doc/development/integrations/secure_partner_integration.md @rdickenson
-/doc/development/internal_api/ @aqualls
+/doc/development/internal_api/ @aqualls @msedlakjakubowski
/doc/development/internal_users.md @sselhorn
/doc/development/issuable-like-models.md @msedlakjakubowski
/doc/development/issue_types.md @msedlakjakubowski
/doc/development/kubernetes.md @phillipwells
/doc/development/labels/ @sselhorn
-/doc/development/lfs.md @aqualls
+/doc/development/lfs.md @aqualls @msedlakjakubowski
/doc/development/logging.md @msedlakjakubowski
/doc/development/maintenance_mode.md @axil
/doc/development/merge_request_concepts/ @aqualls
+/doc/development/merge_request_concepts/rate_limits.md @aqualls @msedlakjakubowski
/doc/development/migration_style_guide.md @aqualls
/doc/development/navigation_sidebar.md @sselhorn
/doc/development/omnibus.md @axil
/doc/development/organization/ @lciutacu
-/doc/development/packages/ @marcel.amirault
+/doc/development/packages/ @phillipwells
+/doc/development/packages/cleanup_policies.md @marcel.amirault
+/doc/development/packages/dependency_proxy.md @marcel.amirault
/doc/development/permissions.md @jglassman1
/doc/development/policies.md @jglassman1
-/doc/development/project_templates.md @aqualls
+/doc/development/project_templates.md @aqualls @msedlakjakubowski
/doc/development/prometheus_metrics.md @msedlakjakubowski
+/doc/development/rails_endpoints/ @aqualls @msedlakjakubowski
/doc/development/real_time.md @jglassman1
/doc/development/rubocop_development_guide.md @sselhorn
/doc/development/search/ @ashrafkhamis
@@ -769,10 +753,10 @@ lib/gitlab/checks/**
/doc/development/value_stream_analytics/ @lciutacu
/doc/development/work_items.md @msedlakjakubowski
/doc/development/work_items_widgets.md @msedlakjakubowski
-/doc/development/workhorse/ @aqualls
+/doc/development/workhorse/ @aqualls @msedlakjakubowski
/doc/downgrade_ee_to_ce/ @axil
/doc/drawers/ @ashrafkhamis
-/doc/gitlab-basics/ @aqualls
+/doc/gitlab-basics/ @aqualls @msedlakjakubowski
/doc/install/ @axil
/doc/install/postgresql_extensions.md @aqualls
/doc/integration/ @jglassman1
@@ -792,34 +776,33 @@ lib/gitlab/checks/**
/doc/integration/recaptcha.md @phillipwells
/doc/integration/security_partners/ @rdickenson
/doc/integration/slash_commands.md @eread @ashrafkhamis
-/doc/integration/sourcegraph.md @aqualls
+/doc/integration/sourcegraph.md @aqualls @msedlakjakubowski
/doc/integration/trello_power_up.md @eread @ashrafkhamis
/doc/integration/vault.md @phillipwells
-/doc/operations/error_tracking.md @drcatherinepope
/doc/operations/feature_flags.md @phillipwells
/doc/operations/incident_management/ @msedlakjakubowski
/doc/operations/index.md @msedlakjakubowski
-/doc/operations/metrics/ @msedlakjakubowski
/doc/policy/ @axil
/doc/raketasks/ @axil
/doc/raketasks/generate_sample_prometheus_data.md @msedlakjakubowski
/doc/raketasks/migrate_snippets.md @ashrafkhamis
/doc/raketasks/spdx.md @rdickenson
-/doc/raketasks/x509_signatures.md @aqualls
+/doc/raketasks/x509_signatures.md @aqualls @msedlakjakubowski
/doc/security/ @jglassman1
/doc/security/email_verification.md @phillipwells
+/doc/security/identity_verification.md @phillipwells
/doc/subscriptions/ @fneill
-/doc/subscriptions/gitlab_dedicated/ @drcatherinepope
/doc/topics/authentication/ @jglassman1
/doc/topics/autodevops/ @phillipwells
/doc/topics/data_seeder.md @sselhorn
-/doc/topics/git/ @aqualls
-/doc/topics/gitlab_flow.md @aqualls
+/doc/topics/git/ @aqualls @msedlakjakubowski
+/doc/topics/gitlab_flow.md @aqualls @msedlakjakubowski
/doc/topics/offline/ @axil
/doc/topics/plan_and_track.md @msedlakjakubowski
/doc/tutorials/ @kpaizee
/doc/tutorials/boards_for_teams/ @msedlakjakubowski
/doc/tutorials/compliance_pipeline/ @eread
+/doc/tutorials/configure_gitlab_runner_to_use_gke/ @fneill
/doc/tutorials/convert_personal_namespace_to_group/ @lciutacu
/doc/tutorials/fuzz_testing/ @rdickenson
/doc/tutorials/move_personal_project_to_group/ @lciutacu
@@ -828,37 +811,37 @@ lib/gitlab/checks/**
/doc/update/background_migrations.md @aqualls
/doc/user/admin_area/analytics/ @lciutacu
/doc/user/admin_area/credentials_inventory.md @jglassman1
-/doc/user/admin_area/custom_project_templates.md @aqualls
-/doc/user/admin_area/diff_limits.md @aqualls
+/doc/user/admin_area/custom_project_templates.md @aqualls @msedlakjakubowski
+/doc/user/admin_area/diff_limits.md @aqualls @msedlakjakubowski
/doc/user/admin_area/external_users.md @jglassman1
/doc/user/admin_area/geo_sites.md @axil
/doc/user/admin_area/labels.md @msedlakjakubowski
/doc/user/admin_area/license.md @fneill
/doc/user/admin_area/license_file.md @fneill
-/doc/user/admin_area/merge_requests_approvals.md @aqualls
+/doc/user/admin_area/merge_requests_approvals.md @aqualls @msedlakjakubowski
/doc/user/admin_area/moderate_users.md @jglassman1
/doc/user/admin_area/monitoring/ @msedlakjakubowski
/doc/user/admin_area/reporting/git_abuse_rate_limit.md @phillipwells
/doc/user/admin_area/reporting/spamcheck.md @axil
/doc/user/admin_area/review_abuse_reports.md @phillipwells
-/doc/user/admin_area/settings/account_and_limit_settings.md @aqualls
-/doc/user/admin_area/settings/continuous_integration.md @drcatherinepope
-/doc/user/admin_area/settings/deprecated_api_rate_limits.md @aqualls
+/doc/user/admin_area/settings/account_and_limit_settings.md @aqualls @msedlakjakubowski
+/doc/user/admin_area/settings/continuous_integration.md @marcel.amirault
+/doc/user/admin_area/settings/deprecated_api_rate_limits.md @aqualls @msedlakjakubowski
/doc/user/admin_area/settings/email.md @msedlakjakubowski
/doc/user/admin_area/settings/external_authorization.md @jglassman1
-/doc/user/admin_area/settings/files_api_rate_limits.md @aqualls
-/doc/user/admin_area/settings/git_lfs_rate_limits.md @aqualls
+/doc/user/admin_area/settings/files_api_rate_limits.md @aqualls @msedlakjakubowski
+/doc/user/admin_area/settings/git_lfs_rate_limits.md @aqualls @msedlakjakubowski
/doc/user/admin_area/settings/gitaly_timeouts.md @eread
/doc/user/admin_area/settings/import_export_rate_limits.md @eread @ashrafkhamis
/doc/user/admin_area/settings/incident_management_rate_limits.md @msedlakjakubowski
-/doc/user/admin_area/settings/index.md @aqualls
-/doc/user/admin_area/settings/instance_template_repository.md @aqualls
-/doc/user/admin_area/settings/package_registry_rate_limits.md @marcel.amirault
+/doc/user/admin_area/settings/index.md @aqualls @msedlakjakubowski
+/doc/user/admin_area/settings/instance_template_repository.md @aqualls @msedlakjakubowski
+/doc/user/admin_area/settings/package_registry_rate_limits.md @phillipwells
/doc/user/admin_area/settings/project_integration_management.md @eread @ashrafkhamis
-/doc/user/admin_area/settings/push_event_activities_limit.md @aqualls
+/doc/user/admin_area/settings/push_event_activities_limit.md @aqualls @msedlakjakubowski
/doc/user/admin_area/settings/rate_limit_on_issues_creation.md @msedlakjakubowski
/doc/user/admin_area/settings/rate_limit_on_notes_creation.md @msedlakjakubowski
-/doc/user/admin_area/settings/rate_limit_on_pipelines_creation.md @drcatherinepope
+/doc/user/admin_area/settings/rate_limit_on_pipelines_creation.md @marcel.amirault
/doc/user/admin_area/settings/rate_limit_on_projects_api.md @lciutacu
/doc/user/admin_area/settings/rate_limit_on_users_api.md @jglassman1
/doc/user/admin_area/settings/scim_setup.md @jglassman1
@@ -866,11 +849,11 @@ lib/gitlab/checks/**
/doc/user/admin_area/settings/terraform_limits.md @phillipwells
/doc/user/admin_area/settings/third_party_offers.md @lciutacu
/doc/user/admin_area/settings/usage_statistics.md @lciutacu
-/doc/user/admin_area/settings/visibility_and_access_controls.md @aqualls
+/doc/user/admin_area/settings/visibility_and_access_controls.md @aqualls @msedlakjakubowski
/doc/user/analytics/ @lciutacu
/doc/user/analytics/ci_cd_analytics.md @phillipwells
/doc/user/application_security/ @rdickenson
-/doc/user/asciidoc.md @aqualls
+/doc/user/asciidoc.md @aqualls @msedlakjakubowski
/doc/user/award_emojis.md @msedlakjakubowski
/doc/user/clusters/ @phillipwells
/doc/user/compliance/ @rdickenson
@@ -880,36 +863,33 @@ lib/gitlab/checks/**
/doc/user/discussions/ @aqualls
/doc/user/enterprise_user/ @jglassman1
/doc/user/feature_flags.md @sselhorn
-/doc/user/group/access_and_permissions.md @lciutacu
+/doc/user/group/ @lciutacu
/doc/user/group/clusters/ @phillipwells
/doc/user/group/compliance_frameworks.md @eread
-/doc/user/group/contribution_analytics/ @lciutacu
-/doc/user/group/custom_project_templates.md @aqualls
-/doc/user/group/devops_adoption/ @lciutacu
+/doc/user/group/custom_project_templates.md @aqualls @msedlakjakubowski
/doc/user/group/epics/ @msedlakjakubowski
/doc/user/group/import/ @eread @ashrafkhamis
-/doc/user/group/index.md @lciutacu
-/doc/user/group/insights/ @lciutacu
/doc/user/group/issues_analytics/ @msedlakjakubowski
/doc/user/group/iterations/ @msedlakjakubowski
-/doc/user/group/manage.md @lciutacu
/doc/user/group/moderate_users.md @phillipwells
/doc/user/group/planning_hierarchy/ @msedlakjakubowski
/doc/user/group/reporting/ @phillipwells
-/doc/user/group/repositories_analytics/ @drcatherinepope
+/doc/user/group/repositories_analytics/ @marcel.amirault
/doc/user/group/roadmap/ @msedlakjakubowski
/doc/user/group/saml_sso/ @jglassman1
/doc/user/group/settings/ @jglassman1
-/doc/user/group/subgroups/ @lciutacu
-/doc/user/group/value_stream_analytics/ @lciutacu
/doc/user/infrastructure/ @phillipwells
+/doc/user/infrastructure/clusters/manage/management_project_applications/ @phillipwells
/doc/user/infrastructure/clusters/manage/management_project_applications/runner.md @fneill
/doc/user/markdown.md @msedlakjakubowski
/doc/user/namespace/ @lciutacu
/doc/user/okrs.md @msedlakjakubowski
/doc/user/operations_dashboard/ @phillipwells
/doc/user/organization/ @lciutacu
-/doc/user/packages/ @marcel.amirault
+/doc/user/packages/ @phillipwells
+/doc/user/packages/container_registry/ @marcel.amirault
+/doc/user/packages/dependency_proxy/ @marcel.amirault
+/doc/user/packages/harbor_container_registry/ @marcel.amirault
/doc/user/permissions.md @jglassman1
/doc/user/product_analytics/ @lciutacu
/doc/user/profile/account/ @jglassman1
@@ -920,47 +900,48 @@ lib/gitlab/checks/**
/doc/user/profile/notifications.md @msedlakjakubowski
/doc/user/profile/personal_access_tokens.md @jglassman1
/doc/user/profile/user_passwords.md @jglassman1
-/doc/user/project/autocomplete_characters.md @aqualls
+/doc/user/project/autocomplete_characters.md @aqualls @msedlakjakubowski
/doc/user/project/badges.md @lciutacu
-/doc/user/project/changelogs.md @aqualls
+/doc/user/project/changelogs.md @aqualls @msedlakjakubowski
/doc/user/project/clusters/ @phillipwells
/doc/user/project/code_intelligence.md @aqualls
-/doc/user/project/codeowners/ @aqualls
+/doc/user/project/codeowners/ @aqualls @msedlakjakubowski
/doc/user/project/deploy_boards.md @phillipwells
/doc/user/project/deploy_keys/ @phillipwells
/doc/user/project/deploy_tokens/ @phillipwells
/doc/user/project/description_templates.md @msedlakjakubowski
-/doc/user/project/file_lock.md @aqualls
-/doc/user/project/git_attributes.md @aqualls
-/doc/user/project/highlighting.md @aqualls
+/doc/user/project/file_lock.md @aqualls @msedlakjakubowski
+/doc/user/project/git_attributes.md @aqualls @msedlakjakubowski
+/doc/user/project/highlighting.md @aqualls @msedlakjakubowski
/doc/user/project/import/ @eread @ashrafkhamis
/doc/user/project/import/jira.md @msedlakjakubowski
/doc/user/project/index.md @lciutacu
/doc/user/project/insights/ @lciutacu
/doc/user/project/integrations/ @eread @ashrafkhamis
-/doc/user/project/integrations/prometheus.md @msedlakjakubowski
-/doc/user/project/integrations/prometheus_library/ @msedlakjakubowski
/doc/user/project/issue_board.md @msedlakjakubowski
/doc/user/project/issues/ @msedlakjakubowski
/doc/user/project/issues/csv_import.md @eread @ashrafkhamis
/doc/user/project/labels.md @msedlakjakubowski
/doc/user/project/members/ @lciutacu
/doc/user/project/merge_requests/ @aqualls
+/doc/user/project/merge_requests/approvals/ @aqualls @msedlakjakubowski
+/doc/user/project/merge_requests/cherry_pick_changes.md @aqualls @msedlakjakubowski
/doc/user/project/merge_requests/csv_export.md @eread
+/doc/user/project/merge_requests/methods/ @aqualls @msedlakjakubowski
+/doc/user/project/merge_requests/squash_and_merge.md @aqualls @msedlakjakubowski
/doc/user/project/merge_requests/status_checks.md @eread
/doc/user/project/milestones/ @msedlakjakubowski
/doc/user/project/organize_work_with_projects.md @lciutacu
-/doc/user/project/protected_branches.md @aqualls
-/doc/user/project/protected_tags.md @aqualls
-/doc/user/project/push_options.md @aqualls
+/doc/user/project/protected_branches.md @aqualls @msedlakjakubowski
+/doc/user/project/protected_tags.md @aqualls @msedlakjakubowski
+/doc/user/project/push_options.md @aqualls @msedlakjakubowski
/doc/user/project/quick_actions.md @msedlakjakubowski
/doc/user/project/releases/ @phillipwells
/doc/user/project/releases/release_evidence.md @eread
/doc/user/project/remote_development/ @ashrafkhamis
-/doc/user/project/repository/ @aqualls
+/doc/user/project/repository/ @aqualls @msedlakjakubowski
/doc/user/project/repository/file_finder.md @ashrafkhamis
/doc/user/project/repository/managing_large_repositories.md @axil
-/doc/user/project/repository/reducing_the_repo_size_using_git.md @eread
/doc/user/project/repository/vscode.md @ashrafkhamis
/doc/user/project/repository/web_editor.md @ashrafkhamis
/doc/user/project/requirements/ @msedlakjakubowski
@@ -969,7 +950,7 @@ lib/gitlab/checks/**
/doc/user/project/settings/import_export_troubleshooting.md @eread @ashrafkhamis
/doc/user/project/settings/index.md @lciutacu
/doc/user/project/settings/project_access_tokens.md @jglassman1
-/doc/user/project/system_notes.md @aqualls
+/doc/user/project/system_notes.md @aqualls @msedlakjakubowski
/doc/user/project/time_tracking.md @msedlakjakubowski
/doc/user/project/web_ide/ @ashrafkhamis
/doc/user/project/working_with_projects.md @lciutacu
@@ -978,7 +959,7 @@ lib/gitlab/checks/**
/doc/user/reserved_names.md @lciutacu
/doc/user/search/ @ashrafkhamis
/doc/user/shortcuts.md @ashrafkhamis
-/doc/user/snippets.md @aqualls
+/doc/user/snippets.md @aqualls @msedlakjakubowski
/doc/user/ssh.md @jglassman1
/doc/user/tasks.md @msedlakjakubowski
/doc/user/todos.md @msedlakjakubowski
@@ -1299,7 +1280,6 @@ lib/gitlab/checks/**
/ee/app/views/ci_minutes_usage_mailer/
/ee/app/views/projects/pipelines/
/ee/app/views/projects/settings/ci_cd/
-/ee/app/workers/clear_shared_runners_minutes_worker.rb
/ee/lib/api/merge_trains.rb
/ee/lib/ee/api/entities/merge_train.rb
@@ -1464,6 +1444,11 @@ ee/lib/ee/api/entities/project.rb
/lib/sidebars/
/ee/lib/sidebars/
+[Global Search] @gitlab-org/search-team/migration-maintainers
+/ee/elastic/migrate/
+/ee/spec/elastic/migrate/
+/ee/spec/support/elastic.rb
+
# JiHu GitLab rules. See https://gitlab.com/gitlab-jh/gitlab-jh-enablement/-/issues/213#note_1024367528
[JH Frontend] @jihulab/maintainers/frontend
diff --git a/.gitlab/ci/as-if-jh.gitlab-ci.yml b/.gitlab/ci/as-if-jh.gitlab-ci.yml
index ae589ddfc2c..ec9acdb5d4d 100644
--- a/.gitlab/ci/as-if-jh.gitlab-ci.yml
+++ b/.gitlab/ci/as-if-jh.gitlab-ci.yml
@@ -16,6 +16,7 @@ add-jh-files:
- .as-if-jh:rules:prepare-as-if-jh
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
stage: prepare
+ needs: []
before_script:
- source ./scripts/utils.sh
- source ./scripts/setup/as-if-jh.sh
diff --git a/.gitlab/ci/build-images.gitlab-ci.yml b/.gitlab/ci/build-images.gitlab-ci.yml
index b866446c6e0..1361f1fe412 100644
--- a/.gitlab/ci/build-images.gitlab-ci.yml
+++ b/.gitlab/ci/build-images.gitlab-ci.yml
@@ -29,33 +29,20 @@ build-qa-image as-if-foss:
- .as-if-foss
- .build-images:rules:build-qa-image-as-if-foss
-# Prepares an image with GDK configured based on code in master. This saves some time in MRs because some installation
-# and complilation will have already been performed.
-build-qa-on-gdk-master-image:
+build-gdk-image:
extends:
- .base-image-build-buildx
- - .build-images:rules:build-qa-on-gdk-master-image
+ - .build-images:rules:build-gdk-image
tags:
- - e2e
+ - high-cpu
stage: build-images
needs: []
- variables:
- QA_GDK_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-qa-gdk"
- before_script:
- - !reference [.use-buildx, before_script]
- - sysctl -n -w fs.inotify.max_user_watches=524288
script:
- - |
- docker buildx build \
- --cache-to=type=inline \
- --cache-from ${QA_GDK_IMAGE}:master \
- --platform=${ARCH:-amd64} \
- --add-host gdk.test:127.0.0.1 \
- --tag ${QA_GDK_IMAGE}:master \
- --file="qa/gdk/Dockerfile" \
- --push \
- ${CI_PROJECT_DIR}
+ - run_timed_command "scripts/build_gdk_image"
+# NOTE: release-tools verifies the presence on this job for a commit that is
+# candidate to an auto-deploy package. This job name can't be changed without
+# changing the code in release-tools.
build-assets-image:
extends:
- .base-image-build
diff --git a/.gitlab/ci/caching.gitlab-ci.yml b/.gitlab/ci/caching.gitlab-ci.yml
index 31975e481bc..ae4bb94b301 100644
--- a/.gitlab/ci/caching.gitlab-ci.yml
+++ b/.gitlab/ci/caching.gitlab-ci.yml
@@ -2,7 +2,7 @@ cache-workhorse:
extends:
- .default-retry
- .default-before_script
- - .rails-cache
+ - .ruby-cache
- .setup-test-env-cache
- .caching:rules:cache-workhorse
stage: prepare
diff --git a/.gitlab/ci/ci-templates.gitlab-ci.yml b/.gitlab/ci/ci-templates.gitlab-ci.yml
index c6681db9685..a00de8cb533 100644
--- a/.gitlab/ci/ci-templates.gitlab-ci.yml
+++ b/.gitlab/ci/ci-templates.gitlab-ci.yml
@@ -4,7 +4,7 @@ templates-shellcheck:
- .default-before_script
- .default-retry
- .ruby-cache
- - .use-pg14
+ - .use-pg15
stage: test
needs:
- setup-test-env
diff --git a/.gitlab/ci/cng/main.gitlab-ci.yml b/.gitlab/ci/cng/main.gitlab-ci.yml
new file mode 100644
index 00000000000..325b06d59cd
--- /dev/null
+++ b/.gitlab/ci/cng/main.gitlab-ci.yml
@@ -0,0 +1,61 @@
+---
+default:
+ interruptible: true
+
+stages:
+ - prepare
+ - deploy
+
+include:
+ - local: .gitlab/ci/global.gitlab-ci.yml
+
+review-build-cng-env:
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.16
+ stage: prepare
+ needs:
+ # We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream CNG pipeline.
+ - pipeline: $PARENT_PIPELINE_ID
+ job: build-assets-image
+ variables:
+ BUILD_ENV: build.env
+ before_script:
+ - source ./scripts/utils.sh
+ - install_gitlab_gem
+ script:
+ - 'ruby -r./scripts/trigger-build.rb -e "puts Trigger.variables_for_env_file(Trigger::CNG.new.variables)" > $BUILD_ENV'
+ - echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
+ - ruby -e 'puts "FULL_RUBY_VERSION=#{RUBY_VERSION}"' >> build.env
+ - cat $BUILD_ENV
+ artifacts:
+ reports:
+ dotenv: $BUILD_ENV
+ paths:
+ - $BUILD_ENV
+ expire_in: 7 days
+ when: always
+
+review-build-cng:
+ stage: prepare
+ inherit:
+ variables: false
+ variables:
+ GITLAB_REF_SLUG: "${GITLAB_REF_SLUG}"
+ # CNG pipeline specific variables
+ GITLAB_VERSION: "${GITLAB_VERSION}"
+ GITLAB_TAG: "${GITLAB_TAG}"
+ GITLAB_ASSETS_TAG: "${GITLAB_ASSETS_TAG}"
+ FORCE_RAILS_IMAGE_BUILDS: "${FORCE_RAILS_IMAGE_BUILDS}"
+ CE_PIPELINE: "${CE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$CE_PIPELINE'` will evaluate to `false` when this variable is empty
+ EE_PIPELINE: "${EE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$EE_PIPELINE'` will evaluate to `false` when this variable is empty
+ GITLAB_ELASTICSEARCH_INDEXER_VERSION: "${GITLAB_ELASTICSEARCH_INDEXER_VERSION}"
+ GITLAB_KAS_VERSION: "${GITLAB_KAS_VERSION}"
+ GITLAB_METRICS_EXPORTER_VERSION: "${GITLAB_METRICS_EXPORTER_VERSION}"
+ GITLAB_PAGES_VERSION: "${GITLAB_PAGES_VERSION}"
+ GITLAB_SHELL_VERSION: "${GITLAB_SHELL_VERSION}"
+ GITLAB_WORKHORSE_VERSION: "${GITLAB_WORKHORSE_VERSION}"
+ GITALY_SERVER_VERSION: "${GITALY_SERVER_VERSION}"
+ RUBY_VERSION: "${FULL_RUBY_VERSION}"
+ trigger:
+ project: gitlab-org/build/CNG-mirror
+ branch: $TRIGGER_BRANCH
+ strategy: depend
diff --git a/.gitlab/ci/database.gitlab-ci.yml b/.gitlab/ci/database.gitlab-ci.yml
index 941cb9224fb..37befd78bb5 100644
--- a/.gitlab/ci/database.gitlab-ci.yml
+++ b/.gitlab/ci/database.gitlab-ci.yml
@@ -72,6 +72,7 @@ db:check-schema-single-db:
db:check-migrations:
extends:
- .db-job-base
+ - .use-pg13 # Should match the db same version used by GDK
- .rails:rules:ee-and-foss-mr-with-migration
script:
- git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME --depth 20
@@ -127,7 +128,7 @@ db:backup_and_restore:
script:
- . scripts/prepare_build.sh
- bundle exec rake db:drop db:create db:schema:load db:seed_fu
- - mkdir -p tmp/tests/public/uploads tmp/tests/{artifacts,pages,lfs-objects,terraform_state,registry,packages}
+ - mkdir -p tmp/tests/public/uploads tmp/tests/{artifacts,pages,lfs-objects,terraform_state,registry,packages,ci_secure_files}
- bundle exec rake gitlab:backup:create
- date
- bundle exec rake gitlab:backup:restore
diff --git a/.gitlab/ci/dev-fixtures.gitlab-ci.yml b/.gitlab/ci/dev-fixtures.gitlab-ci.yml
index 891a5dd79ad..642bad53772 100644
--- a/.gitlab/ci/dev-fixtures.gitlab-ci.yml
+++ b/.gitlab/ci/dev-fixtures.gitlab-ci.yml
@@ -1,9 +1,9 @@
.run-dev-fixtures:
extends:
- .default-retry
- - .rails-cache
+ - .ruby-cache
- .default-before_script
- - .use-pg13
+ - .use-pg14
stage: test
needs: ["setup-test-env"]
variables:
@@ -29,7 +29,7 @@ run-dev-fixtures-ee:
extends:
- .run-dev-fixtures
- .dev-fixtures:rules:ee-only
- - .use-pg13-es7-ee
+ - .use-pg14-es7-ee
script:
- cp ee/db/fixtures/development/* $FIXTURE_PATH
- *run-dev-fixtures-script
diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml
index a52372a7bb4..6c426749af3 100644
--- a/.gitlab/ci/docs.gitlab-ci.yml
+++ b/.gitlab/ci/docs.gitlab-ci.yml
@@ -42,7 +42,7 @@ review-docs-cleanup:
docs-lint links:
extends:
- .docs:rules:docs-lint
- image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-docs/lint-html:alpine-3.17-ruby-3.2.1-f53af000
+ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-docs/lint-html:alpine-3.17-ruby-3.2.2-c24946ab
stage: lint
needs: []
script:
@@ -116,7 +116,7 @@ docs-lint deprecations-and-removals:
SETUP_DB: "false"
extends:
- .default-retry
- - .rails-cache
+ - .ruby-cache
- .default-before_script
- .docs:rules:deprecations-and-removals
stage: lint
diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml
index 708069d9b61..34c29a9e902 100644
--- a/.gitlab/ci/frontend.gitlab-ci.yml
+++ b/.gitlab/ci/frontend.gitlab-ci.yml
@@ -3,7 +3,7 @@
- .default-retry
- .default-before_script
- .assets-compile-cache
- image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-16.14:rubygems-${RUBYGEMS_VERSION}-git-2.33-lfs-2.9-yarn-1.22-graphicsmagick-1.3.36
+ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-18.16:rubygems-${RUBYGEMS_VERSION}-git-2.33-lfs-2.9-yarn-1.22-graphicsmagick-1.3.36
variables:
SETUP_DB: "false"
WEBPACK_VENDOR_DLL: "true"
@@ -12,6 +12,7 @@
BROWSERSLIST_IGNORE_OLD_DATA: "true"
WEBPACK_COMPILE_LOG_PATH: "tmp/webpack-output.log"
stage: prepare
+ needs: []
script:
- yarn_install_script
- export GITLAB_ASSETS_HASH=$(bin/rake gitlab:assets:hash_sum)
@@ -109,6 +110,7 @@ retrieve-frontend-fixtures:
- .default-retry
- .frontend:rules:default-frontend-jobs
stage: prepare
+ needs: []
script:
- source scripts/utils.sh
- source scripts/gitlab_component_helpers.sh
@@ -128,8 +130,8 @@ retrieve-frontend-fixtures:
extends:
- .default-retry
- .default-before_script
- - .rails-cache
- - .use-pg13
+ - .ruby-cache
+ - .use-pg14
stage: fixtures
needs: ["setup-test-env", "retrieve-tests-metadata", "retrieve-frontend-fixtures"]
variables:
@@ -206,7 +208,7 @@ graphql-schema-dump:
SETUP_DB: "false"
extends:
- .default-retry
- - .rails-cache
+ - .ruby-cache
- .default-before_script
- .frontend:rules:default-frontend-jobs
stage: fixtures
@@ -260,7 +262,7 @@ jest:
- tmp/tests/frontend/
reports:
junit: junit_jest.xml
- parallel: 7
+ parallel: 12
jest predictive:
extends:
@@ -278,7 +280,7 @@ jest as-if-foss:
- .frontend:rules:jest:as-if-foss
- .as-if-foss
needs: ["rspec-all frontend_fixture as-if-foss"]
- parallel: 4
+ parallel: 10
jest predictive as-if-foss:
extends:
diff --git a/.gitlab/ci/glfm.gitlab-ci.yml b/.gitlab/ci/glfm.gitlab-ci.yml
index 008bb03de25..3f9ddaa791c 100644
--- a/.gitlab/ci/glfm.gitlab-ci.yml
+++ b/.gitlab/ci/glfm.gitlab-ci.yml
@@ -2,7 +2,7 @@ glfm-verify:
extends:
- .rails-job-base
- .glfm:rules:glfm-verify
- - .use-pg13
+ - .use-pg14
stage: test
needs: ["setup-test-env"]
script:
diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml
index 4362269103b..b5578c25518 100644
--- a/.gitlab/ci/global.gitlab-ci.yml
+++ b/.gitlab/ci/global.gitlab-ci.yml
@@ -146,10 +146,6 @@
cache:
- *ruby-gems-cache
-.rails-cache:
- cache:
- - *ruby-gems-cache
-
.static-analysis-cache:
cache:
- *ruby-gems-cache
@@ -222,6 +218,8 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-12-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -232,6 +230,8 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.2-alpine
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -242,20 +242,36 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.2-alpine
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "14"
+.use-pg15:
+ services:
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-15-pgvector-0.4.1
+ command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
+ alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
+ - name: redis:6.2-alpine
+ variables:
+ POSTGRES_HOST_AUTH_METHOD: trust
+ PG_VERSION: "15"
+
.use-pg12-es7-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-12-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
- name: elasticsearch:7.17.6
command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -268,10 +284,12 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.2-alpine
- name: elasticsearch:7.17.6
command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -284,10 +302,12 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.2-alpine
- name: elasticsearch:7.17.6
command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -295,14 +315,34 @@
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
+.use-pg15-es7-ee:
+ services:
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-15-pgvector-0.4.1
+ command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
+ alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
+ - name: redis:6.2-alpine
+ - name: elasticsearch:7.17.6
+ command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
+ alias: zoekt-ci-image
+ variables:
+ POSTGRES_HOST_AUTH_METHOD: trust
+ PG_VERSION: "15"
+ ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
+ ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
+
.use-pg13-es8-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
- name: elasticsearch:8.6.2
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -317,9 +357,11 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
- name: elasticsearch:8.6.2
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -329,16 +371,37 @@
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
+.use-pg15-es8-ee:
+ services:
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-15-pgvector-0.4.1
+ command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
+ alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
+ - name: redis:6.0-alpine
+ - name: elasticsearch:8.6.2
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
+ alias: zoekt-ci-image
+ variables:
+ POSTGRES_HOST_AUTH_METHOD: trust
+ PG_VERSION: "15"
+ ES_SETTING_DISCOVERY_TYPE: "single-node"
+ ES_SETTING_XPACK_SECURITY_ENABLED: "false"
+ ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
+ ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
+
.use-pg13-opensearch1-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:1.3.5
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -351,11 +414,13 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:2.2.1
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -368,11 +433,13 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:1.3.5
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -385,11 +452,13 @@
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:2.2.1
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
@@ -397,6 +466,44 @@
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
+.use-pg15-opensearch1-ee:
+ services:
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-15-pgvector-0.4.1
+ command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
+ alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
+ - name: redis:6.0-alpine
+ - name: opensearchproject/opensearch:1.3.5
+ alias: elasticsearch
+ command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
+ alias: zoekt-ci-image
+ variables:
+ POSTGRES_HOST_AUTH_METHOD: trust
+ PG_VERSION: "15"
+ ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
+ ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
+
+.use-pg15-opensearch2-ee:
+ services:
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-15-pgvector-0.4.1
+ command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
+ alias: postgres
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
+ alias: rediscluster # configure connections in config/redis.yml
+ - name: redis:6.0-alpine
+ - name: opensearchproject/opensearch:2.2.1
+ alias: elasticsearch
+ command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
+ - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.1
+ alias: zoekt-ci-image
+ variables:
+ POSTGRES_HOST_AUTH_METHOD: trust
+ PG_VERSION: "15"
+ ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
+ ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
+
.use-kaniko:
image:
name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:kaniko
diff --git a/.gitlab/ci/graphql.gitlab-ci.yml b/.gitlab/ci/graphql.gitlab-ci.yml
index c4c4d500fb5..e67a7753da7 100644
--- a/.gitlab/ci/graphql.gitlab-ci.yml
+++ b/.gitlab/ci/graphql.gitlab-ci.yml
@@ -3,7 +3,7 @@ graphql-verify:
SETUP_DB: "false"
extends:
- .default-retry
- - .rails-cache
+ - .ruby-cache
- .default-before_script
- .graphql:rules:graphql-verify
stage: test
diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml
index afef2b11ee7..33fbed15a23 100644
--- a/.gitlab/ci/memory.gitlab-ci.yml
+++ b/.gitlab/ci/memory.gitlab-ci.yml
@@ -1,7 +1,7 @@
.only-code-memory-job-base:
extends:
- .default-retry
- - .rails-cache
+ - .ruby-cache
- .default-before_script
- .memory:rules
variables:
@@ -20,7 +20,7 @@ memory-on-boot:
extends:
- .only-code-memory-job-base
- .production
- - .use-pg13
+ - .use-pg14
stage: test
needs: ["setup-test-env", "compile-test-assets"]
variables:
diff --git a/.gitlab/ci/notify.gitlab-ci.yml b/.gitlab/ci/notify.gitlab-ci.yml
index 1afc4eb8c97..b8f51a2540d 100644
--- a/.gitlab/ci/notify.gitlab-ci.yml
+++ b/.gitlab/ci/notify.gitlab-ci.yml
@@ -3,31 +3,6 @@
dependencies: []
cache: {}
-create-issues-for-failing-tests:
- extends:
- - .notify-defaults
- - .notify:rules:create-issues-for-failing-tests
- image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
- variables:
- FAILED_TESTS_DIR: "${CI_PROJECT_DIR}/tmp/failed_tests"
- FAILING_ISSUES_PROJECT: "gitlab-org/quality/engineering-productivity/flaky-tests-playground"
- FAILING_ISSUE_JSON_DIR: "${CI_PROJECT_DIR}/tmp/issues"
- before_script:
- - source ./scripts/utils.sh
- - source ./scripts/rspec_helpers.sh
- - install_gitlab_gem
- script:
- - mkdir -p "${FAILING_ISSUE_JSON_DIR}"
- - retrieve_failed_tests "${FAILED_TESTS_DIR}" "json" "latest"
- - scripts/pipeline/create_test_failure_issues.rb --project "${FAILING_ISSUES_PROJECT}" --tests-report-file "${FAILED_TESTS_DIR}/rspec_failed_tests.json" --issues-json-folder "${FAILING_ISSUE_JSON_DIR}" --api-token "${FAILING_ISSUES_PROJECT_TOKEN}"
- - scripts/pipeline/create_test_failure_issues.rb --project "${FAILING_ISSUES_PROJECT}" --tests-report-file "${FAILED_TESTS_DIR}/rspec_ee_failed_tests.json" --issues-json-folder "${FAILING_ISSUE_JSON_DIR}" --api-token "${FAILING_ISSUES_PROJECT_TOKEN}"
- artifacts:
- paths:
- - ${FAILED_TESTS_DIR}/
- - ${FAILING_ISSUE_JSON_DIR}/
- when: always
- expire_in: 2 days
-
notify-package-and-test-failure:
extends:
- .notify-defaults
diff --git a/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml b/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml
index a5474d00cb6..34b4e853415 100644
--- a/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml
@@ -5,7 +5,7 @@ include:
workflow:
rules:
- - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly"'
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $SCHEDULE_TYPE == "nightly"'
.ce:
variables:
@@ -18,48 +18,84 @@ workflow:
# ==========================================
# Prepare stage
# ==========================================
-# TODO: enable once ee jobs are added
-# trigger-omnibus-env:
-# extends:
-# - .trigger-omnibus-env
+download-knapsack-report:
+ extends:
+ - .download-knapsack-report
+ - .rules:download-knapsack
+
+# ==========================================
+# Test stage
+# ==========================================
+
+# ------------------------------------------
+# Network limiting jobs
+# ------------------------------------------
+airgapped:
+ extends:
+ - .qa
+ - .ee
+ - .parallel
+ variables:
+ QA_SCENARIO: "Test::Instance::Airgapped"
+ QA_RSPEC_TAGS: "--tag '~github' --tag '~external_api_calls' --tag '~skip_live_env'"
+
+instance-image-slow-network:
+ extends:
+ - .qa
+ - .ee
+ - .parallel
+ variables:
+ QA_SIMULATE_SLOW_CONNECTION: "true"
-trigger-omnibus-env-ce:
+# ------------------------------------------
+# N+1 jobs
+# ------------------------------------------
+nplus1-instance-image:
extends:
- - .trigger-omnibus-env-ce
+ - .qa
+ - .ee
+ - .parallel
variables:
- FOSS_ONLY: "1" # set FOSS_ONLY because we don't pass it via trigger job
+ CACHE_NAMESPACE_NAME: "false"
+ GITLAB_QA_OPTS: "--enable-feature gitaly_enforce_requests_limits"
-# TODO: enable once ee jobs are added
-# trigger-omnibus:
-# extends:
-# - .trigger-omnibus
-# needs:
-# - trigger-omnibus-env
+# ------------------------------------------
+# Elasticsearch compatibility jobs
+# ------------------------------------------
+integration-elasticsearch-compatibility-version-7:
+ extends:
+ - .qa
+ - .ee
+ variables:
+ ELASTIC_VERSION: "7.17.0"
+ QA_SCENARIO: "Test::Integration::Elasticsearch"
-trigger-omnibus-ce:
+integration-elasticsearch-compatibility-version-8:
extends:
- - .trigger-omnibus-ce
- needs:
- - trigger-omnibus-env-ce
+ - .qa
+ - .ee
+ variables:
+ ELASTIC_VERSION: "8.6.2"
+ QA_SCENARIO: "Test::Integration::Elasticsearch"
-# TODO: enable when first parallel job is added
-# download-knapsack-report:
-# extends:
-# - .download-knapsack-report
-# - .rules:download-knapsack
+# ------------------------------------------
+# Opensearch compatibility jobs
+# ------------------------------------------
+integration-opensearch-compatibility-version-1:
+ extends:
+ - .qa
+ - .ee
+ variables:
+ OPENSEARCH_VERSION: "1.3.3"
+ QA_SCENARIO: "Test::Integration::Opensearch"
-# ==========================================
-# Test stage
-# ==========================================
-update-ee-to-ce:
+integration-opensearch-compatibility-version-2:
extends:
- .qa
- - .update-script
- - .ce
+ - .ee
variables:
- UPDATE_TYPE: minor
- UPDATE_FROM_EDITION: ee
- QA_RSPEC_TAGS: --tag smoke
+ OPENSEARCH_VERSION: "2.0.1"
+ QA_SCENARIO: "Test::Integration::Opensearch"
# ==========================================
# Post test stage
@@ -68,19 +104,17 @@ e2e-test-report:
extends:
- .e2e-test-report
-# TODO: enable when first parallel job is added
-# upload-knapsack-report:
-# extends:
-# - .upload-knapsack-report
-# - .rules:report:process-results
+upload-knapsack-report:
+ extends:
+ - .upload-knapsack-report
export-test-metrics:
extends:
- .export-test-metrics
-relate-test-failures:
+generate-test-session:
extends:
- - .relate-test-failures
+ - .generate-test-session
notify-slack:
extends:
diff --git a/.gitlab/ci/package-and-test/main.gitlab-ci.yml b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
index e90c0bbc7c4..fcea49e3103 100644
--- a/.gitlab/ci/package-and-test/main.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
@@ -20,30 +20,6 @@ check-release-set:
echo "Omnibus installation image is set to '$RELEASE'"
fi
-trigger-omnibus-env:
- extends:
- - .trigger-omnibus-env
- - .rules:omnibus-build
-
-trigger-omnibus-env-ce:
- extends:
- - .trigger-omnibus-env-ce
- - .rules:omnibus-build-ce
-
-trigger-omnibus:
- extends:
- - .trigger-omnibus
- - .rules:omnibus-build
- needs:
- - trigger-omnibus-env
-
-trigger-omnibus-ce:
- extends:
- - .trigger-omnibus-ce
- - .rules:omnibus-build-ce
- needs:
- - trigger-omnibus-env-ce
-
download-knapsack-report:
extends:
- .download-knapsack-report
@@ -103,6 +79,19 @@ instance-ff-inverse:
# ------------------------------------------
# Jobs with parallel variant
# ------------------------------------------
+
+# ========== instance ===========
+instance:
+ extends:
+ - .parallel
+ - .qa
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ rules:
+ - !reference [.rules:test:feature-flags-set, rules] # always run instance to validate ff change
+ - !reference [.rules:test:qa-parallel, rules]
+ - if: $QA_SUITES =~ /Test::Instance::All/
+
instance-selective:
extends: .qa
variables:
@@ -110,12 +99,31 @@ instance-selective:
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
-instance:
+
+instance-selective-parallel:
extends:
- .parallel
- - instance-selective
+ - .qa
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ rules:
+ - !reference [.rules:test:qa-selective-parallel, rules]
+ - if: $QA_SUITES =~ /Test::Instance::All/
+ variables:
+ QA_TESTS: ""
+
+# ========== praefect ===========
+
+praefect:
+ extends:
+ - .parallel
+ - .qa
+ parallel: 2
+ variables:
+ QA_SCENARIO: Test::Integration::Praefect
+ QA_CAN_TEST_PRAEFECT: "true"
+ KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/3_create/**/*_spec.rb"
rules:
- - !reference [.rules:test:feature-flags-set, rules] # always run instance to validate ff change
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
@@ -127,10 +135,30 @@ praefect-selective:
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
-praefect:
+
+praefect-selective-parallel:
extends:
+ - .qa
- .parallel
- - praefect-selective
+ parallel: 2
+ variables:
+ QA_SCENARIO: Test::Integration::Praefect
+ QA_CAN_TEST_PRAEFECT: "true"
+ KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/3_create/**/*_spec.rb"
+ rules:
+ - !reference [.rules:test:qa-selective-parallel, rules]
+ - if: $QA_SUITES =~ /Test::Instance::All/
+ variables:
+ QA_TESTS: ""
+
+# ========== relative-url ===========
+
+relative-url:
+ extends:
+ - .qa
+ - .parallel
+ variables:
+ QA_SCENARIO: Test::Instance::RelativeUrl
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
@@ -142,10 +170,28 @@ relative-url-selective:
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
-relative-url:
+
+relative-url-selective-parallel:
extends:
+ - .qa
- .parallel
- - relative-url-selective
+ variables:
+ QA_SCENARIO: Test::Instance::RelativeUrl
+ rules:
+ - !reference [.rules:test:qa-selective-parallel, rules]
+ - if: $QA_SUITES =~ /Test::Instance::All/
+ variables:
+ QA_TESTS: ""
+
+# ========== decomposition-single-db ===========
+
+decomposition-single-db:
+ extends:
+ - .qa
+ - .parallel
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ GITLAB_QA_OPTS: --omnibus-config decomposition_single_db $EXTRA_GITLAB_QA_OPTS
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
@@ -158,10 +204,30 @@ decomposition-single-db-selective:
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
-decomposition-single-db:
+
+decomposition-single-db-selective-parallel:
extends:
+ - .qa
- .parallel
- - decomposition-single-db-selective
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ GITLAB_QA_OPTS: --omnibus-config decomposition_single_db $EXTRA_GITLAB_QA_OPTS
+ rules:
+ - !reference [.rules:test:qa-selective-parallel, rules]
+ - if: $QA_SUITES =~ /Test::Instance::All/
+ variables:
+ QA_TESTS: ""
+
+# ========== decomposition-multiple-db ===========
+
+decomposition-multiple-db:
+ extends:
+ - .qa
+ - .parallel
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true"
+ GITLAB_QA_OPTS: --omnibus-config decomposition_multiple_db $EXTRA_GITLAB_QA_OPTS
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
@@ -175,13 +241,33 @@ decomposition-multiple-db-selective:
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
-decomposition-multiple-db:
+
+decomposition-multiple-db-selective-parallel:
extends:
+ - .qa
- .parallel
- - decomposition-multiple-db-selective
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true"
+ GITLAB_QA_OPTS: --omnibus-config decomposition_multiple_db $EXTRA_GITLAB_QA_OPTS
rules:
- - !reference [.rules:test:qa-parallel, rules]
+ - !reference [.rules:test:qa-selective-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
+ variables:
+ QA_TESTS: ""
+
+# ========== object-storage ===========
+
+object-storage:
+ extends: .qa
+ parallel: 2
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ QA_RSPEC_TAGS: --tag object_storage
+ GITLAB_QA_OPTS: --omnibus-config object_storage $EXTRA_GITLAB_QA_OPTS
+ rules:
+ - !reference [.rules:test:qa-parallel, rules]
+ - if: $QA_SUITES =~ /Test::Instance::ObjectStorage/
object-storage-selective:
extends: .qa
@@ -192,12 +278,30 @@ object-storage-selective:
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::ObjectStorage/
-object-storage:
- extends: object-storage-selective
+
+object-storage-selective-parallel:
+ extends: .qa
parallel: 2
+ variables:
+ QA_SCENARIO: Test::Instance::Image
+ QA_RSPEC_TAGS: --tag object_storage
+ GITLAB_QA_OPTS: --omnibus-config object_storage $EXTRA_GITLAB_QA_OPTS
rules:
- - !reference [.rules:test:qa-parallel, rules]
+ - !reference [.rules:test:qa-selective-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::ObjectStorage/
+ variables:
+ QA_TESTS: ""
+
+# ========== object-storage-aws ===========
+
+object-storage-aws:
+ extends: object-storage
+ variables:
+ AWS_S3_ACCESS_KEY: $QA_AWS_S3_ACCESS_KEY
+ AWS_S3_BUCKET_NAME: $QA_AWS_S3_BUCKET_NAME
+ AWS_S3_KEY_ID: $QA_AWS_S3_KEY_ID
+ AWS_S3_REGION: $QA_AWS_S3_REGION
+ GITLAB_QA_OPTS: --omnibus-config object_storage_aws $EXTRA_GITLAB_QA_OPTS
object-storage-aws-selective:
extends: object-storage-selective
@@ -207,11 +311,27 @@ object-storage-aws-selective:
AWS_S3_KEY_ID: $QA_AWS_S3_KEY_ID
AWS_S3_REGION: $QA_AWS_S3_REGION
GITLAB_QA_OPTS: --omnibus-config object_storage_aws $EXTRA_GITLAB_QA_OPTS
-object-storage-aws:
- extends: object-storage-aws-selective
- parallel: 2
- rules:
- - !reference [object-storage, rules]
+
+object-storage-aws-selective-parallel:
+ extends: object-storage-selective-parallel
+ variables:
+ AWS_S3_ACCESS_KEY: $QA_AWS_S3_ACCESS_KEY
+ AWS_S3_BUCKET_NAME: $QA_AWS_S3_BUCKET_NAME
+ AWS_S3_KEY_ID: $QA_AWS_S3_KEY_ID
+ AWS_S3_REGION: $QA_AWS_S3_REGION
+ GITLAB_QA_OPTS: --omnibus-config object_storage_aws $EXTRA_GITLAB_QA_OPTS
+
+
+# ========== object-storage-gcs ===========
+
+object-storage-gcs:
+ extends: object-storage
+ variables:
+ GCS_BUCKET_NAME: $QA_GCS_BUCKET_NAME
+ GOOGLE_PROJECT: $QA_GOOGLE_PROJECT
+ GOOGLE_JSON_KEY: $QA_GOOGLE_JSON_KEY
+ GOOGLE_CLIENT_EMAIL: $QA_GOOGLE_CLIENT_EMAIL
+ GITLAB_QA_OPTS: --omnibus-config object_storage_gcs $EXTRA_GITLAB_QA_OPTS
object-storage-gcs-selective:
extends: object-storage-selective
@@ -221,55 +341,19 @@ object-storage-gcs-selective:
GOOGLE_JSON_KEY: $QA_GOOGLE_JSON_KEY
GOOGLE_CLIENT_EMAIL: $QA_GOOGLE_CLIENT_EMAIL
GITLAB_QA_OPTS: --omnibus-config object_storage_gcs $EXTRA_GITLAB_QA_OPTS
-object-storage-gcs:
- extends: object-storage-gcs-selective
- parallel: 2
- rules:
- - !reference [object-storage, rules]
-packages-selective:
- extends: .qa
+object-storage-gcs-selective-parallel:
+ extends: object-storage-selective-parallel
variables:
- QA_SCENARIO: Test::Instance::Image
- QA_RSPEC_TAGS: --tag packages
- GITLAB_QA_OPTS: --omnibus-config packages $EXTRA_GITLAB_QA_OPTS
- rules:
- - !reference [.rules:test:qa-selective, rules]
- - if: $QA_SUITES =~ /Test::Instance::Packages/
-packages:
- extends: packages-selective
- parallel: 2
- rules:
- - !reference [.rules:test:qa-parallel, rules]
- - if: $QA_SUITES =~ /Test::Instance::Packages/
+ GCS_BUCKET_NAME: $QA_GCS_BUCKET_NAME
+ GOOGLE_PROJECT: $QA_GOOGLE_PROJECT
+ GOOGLE_JSON_KEY: $QA_GOOGLE_JSON_KEY
+ GOOGLE_CLIENT_EMAIL: $QA_GOOGLE_CLIENT_EMAIL
+ GITLAB_QA_OPTS: --omnibus-config object_storage_gcs $EXTRA_GITLAB_QA_OPTS
# ------------------------------------------
# Non parallel jobs
# ------------------------------------------
-update-minor:
- extends:
- - .qa
- - .update-script
- variables:
- UPDATE_TYPE: minor
- QA_RSPEC_TAGS: --tag smoke
- rules:
- - !reference [.rules:test:update, rules]
- - if: $QA_SUITES =~ /Test::Instance::Smoke/
- - !reference [.rules:test:manual, rules]
-
-update-major:
- extends:
- - .qa
- - .update-script
- variables:
- UPDATE_TYPE: major
- QA_RSPEC_TAGS: --tag smoke
- rules:
- - !reference [.rules:test:update, rules]
- - if: $QA_SUITES =~ /Test::Instance::Smoke/
- - !reference [.rules:test:manual, rules]
-
gitlab-pages:
extends: .qa
variables:
@@ -474,7 +558,7 @@ elasticsearch:
- !reference [.rules:test:manual, rules]
registry-object-storage-tls:
- extends: object-storage-aws-selective
+ extends: object-storage-aws-selective-parallel
variables:
QA_SCENARIO: Test::Integration::RegistryTLS
QA_RSPEC_TAGS: ""
@@ -491,6 +575,47 @@ importers:
- if: $QA_SUITES =~ /Test::Integration::Import/
- !reference [.rules:test:manual, rules]
+# ------------------------------------------
+# Update jobs
+# ------------------------------------------
+update-minor:
+ extends:
+ - .qa
+ - .update-script
+ variables:
+ UPDATE_TYPE: minor
+ QA_RSPEC_TAGS: --tag smoke
+ rules:
+ - !reference [.rules:test:update, rules]
+ - if: $QA_SUITES =~ /Test::Instance::Smoke/
+ - !reference [.rules:test:manual, rules]
+
+update-major:
+ extends:
+ - .qa
+ - .update-script
+ variables:
+ UPDATE_TYPE: major
+ QA_RSPEC_TAGS: --tag smoke
+ rules:
+ - !reference [.rules:test:update, rules]
+ - if: $QA_SUITES =~ /Test::Instance::Smoke/
+ - !reference [.rules:test:manual, rules]
+
+update-ee-to-ce:
+ extends:
+ - .qa
+ - .update-script
+ variables:
+ UPDATE_TYPE: minor
+ UPDATE_FROM_EDITION: ee
+ QA_RSPEC_TAGS: --tag smoke
+ rules:
+ - !reference [.rules:test:ce-only, rules]
+ - !reference [.rules:test:update, rules]
+ - if: $QA_SUITES =~ /Test::Instance::Smoke/
+ - !reference [.rules:test:manual, rules]
+
# ==========================================
# Post test stage
# ==========================================
@@ -502,18 +627,12 @@ e2e-test-report:
upload-knapsack-report:
extends:
- .upload-knapsack-report
- - .rules:report:process-results
export-test-metrics:
extends:
- .export-test-metrics
- .rules:report:process-results
-relate-test-failures:
- extends:
- - .relate-test-failures
- - .rules:report:process-results
-
generate-test-session:
extends:
- .generate-test-session
diff --git a/.gitlab/ci/preflight.gitlab-ci.yml b/.gitlab/ci/preflight.gitlab-ci.yml
index e477466e5f3..968402b2ea5 100644
--- a/.gitlab/ci/preflight.gitlab-ci.yml
+++ b/.gitlab/ci/preflight.gitlab-ci.yml
@@ -16,20 +16,23 @@
- !reference [.default-before_script, before_script]
- cd qa && bundle install
-rails-production-server-boot:
+.rails-production-server-boot:
extends:
- .preflight-job-base
- .default-before_script
- .production
- .ruby-cache
- - .setup:rules:rails-production-server-boot
+ - .preflight:rules:rails-production-server-boot
- .use-pg13
variables:
BUNDLE_WITHOUT: "development:test"
BUNDLE_WITH: "production"
- needs: []
+
+# Test the puma configuration present in `config/puma.rb.example`
+rails-production-server-boot-puma-example:
+ extends:
+ - .rails-production-server-boot
script:
- - source scripts/utils.sh
- cp config/puma.rb.example config/puma.rb
- sed --in-place "s:/home/git/gitlab:${PWD}:" config/puma.rb
- echo 'bind "tcp://127.0.0.1:3000"' >> config/puma.rb
@@ -38,17 +41,30 @@ rails-production-server-boot:
- retry_times_sleep 10 5 "curl http://127.0.0.1:3000"
- kill $(jobs -p)
+# Test the puma configuration present in
+# https://gitlab.com/gitlab-org/build/CNG/-/raw/master/gitlab-webservice/configuration/puma.rb
+rails-production-server-boot-puma-cng:
+ extends:
+ - .rails-production-server-boot
+ script:
+ - curl --silent https://gitlab.com/gitlab-org/build/CNG/-/raw/master/gitlab-webservice/configuration/puma.rb > config/puma.rb
+ - sed --in-place "s:/srv/gitlab:${PWD}:" config/puma.rb
+ - bundle exec puma --environment production --config config/puma.rb &
+ - sleep 40 # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114124#note_1309506358
+ - retry_times_sleep 10 5 "curl http://127.0.0.1:8080"
+ - kill $(jobs -p)
+
no-ee-check:
extends:
- .preflight-job-base
- - .setup:rules:no-ee-check
+ - .preflight:rules:no-ee-check
script:
- scripts/no-dir-check ee
no-jh-check:
extends:
- .preflight-job-base
- - .setup:rules:no-jh-check
+ - .preflight:rules:no-jh-check
script:
- scripts/no-dir-check jh
diff --git a/.gitlab/ci/qa-common/main.gitlab-ci.yml b/.gitlab/ci/qa-common/main.gitlab-ci.yml
index de393f94551..3b6f42ba57e 100644
--- a/.gitlab/ci/qa-common/main.gitlab-ci.yml
+++ b/.gitlab/ci/qa-common/main.gitlab-ci.yml
@@ -6,7 +6,7 @@ workflow:
include:
- project: gitlab-org/quality/pipeline-common
- ref: 5.1.1
+ ref: 7.2.3
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml
@@ -28,13 +28,16 @@ stages:
.ruby-image:
# Because this pipeline template can be included directly in other projects,
# image path and registry needs to be defined explicitly
- image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3
+ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}:bundler-2.3
-.qa-install:
+.bundler-variables:
variables:
BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true"
BUNDLE_SILENCE_ROOT_WARNING: "true"
+
+.qa-install:
extends:
+ - .bundler-variables
- .gitlab-qa-install
.update-script:
@@ -46,8 +49,8 @@ stages:
.qa:
extends:
+ - .bundler-variables
- .qa-base
- - .qa-install
- .gitlab-qa-report
stage: test
tags:
@@ -59,102 +62,11 @@ stages:
GITLAB_LICENSE_MODE: test
GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN
GITLAB_QA_OPTS: $EXTRA_GITLAB_QA_OPTS
- # todo: remove in 16.1 milestone when not needed for backwards compatibility anymore
- EE_LICENSE: $QA_EE_LICENSE
- GITHUB_ACCESS_TOKEN: $QA_GITHUB_ACCESS_TOKEN
# Allow QA jobs to fail as they are flaky. The top level `package-and-e2e:ee`
# pipeline is not allowed to fail, so without allowing QA to fail, we will be
# blocking merges due to flaky tests.
allow_failure: true
-.trigger-omnibus-env:
- stage: .pre
- needs:
- # We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream omnibus-gitlab pipeline.
- - pipeline: $PARENT_PIPELINE_ID
- job: build-assets-image
- variables:
- BUILD_ENV: build.env
- before_script:
- - |
- # This is duplicating the function from `scripts/utils.sh` since `.gitlab/ci/package-and-test/main.gitlab-ci.yml` can be included in other projects.
- function assets_image_tag() {
- local cache_assets_hash_file="cached-assets-hash.txt"
-
- if [[ -n "${CI_COMMIT_TAG}" ]]; then
- echo -n "${CI_COMMIT_REF_NAME}"
- elif [[ -f "${cache_assets_hash_file}" ]]; then
- echo -n "assets-hash-$(cat ${cache_assets_hash_file} | cut -c1-10)"
- else
- echo -n "${CI_COMMIT_SHA}"
- fi
- }
- script:
- - |
- SECURITY_SOURCES=$([[ ! "$CI_PROJECT_NAMESPACE" =~ ^gitlab-org\/security ]] || echo "true")
- echo "SECURITY_SOURCES=${SECURITY_SOURCES:-false}" > $BUILD_ENV
- echo "OMNIBUS_GITLAB_CACHE_UPDATE=${OMNIBUS_GITLAB_CACHE_UPDATE:-false}" >> $BUILD_ENV
- for version_file in *_VERSION; do echo "$version_file=$(cat $version_file)" >> $BUILD_ENV; done
- echo "OMNIBUS_GITLAB_RUBY3_BUILD=${OMNIBUS_GITLAB_RUBY3_BUILD:-false}" >> $BUILD_ENV
- echo "OMNIBUS_GITLAB_RUBY2_BUILD=${OMNIBUS_GITLAB_RUBY2_BUILD:-false}" >> $BUILD_ENV
- echo "OMNIBUS_GITLAB_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV
- echo "OMNIBUS_GITLAB_BUILD_ON_ALL_OS=${OMNIBUS_GITLAB_BUILD_ON_ALL_OS:-false}" >> $BUILD_ENV
- echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
- echo "EE=$([[ $FOSS_ONLY == '1' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV
- target_branch_name="${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_COMMIT_REF_NAME}}"
- echo "TRIGGER_BRANCH=$([[ "${target_branch_name}" =~ ^[0-9-]+-stable(-ee)?$ ]] && echo ${target_branch_name%-ee} || echo 'master')" >> $BUILD_ENV
- - |
- echo "Built environment file for omnibus build:"
- cat $BUILD_ENV
- artifacts:
- expire_in: 3 days
- reports:
- dotenv: $BUILD_ENV
- paths:
- - $BUILD_ENV
-
-.trigger-omnibus-env-ce:
- extends: .trigger-omnibus-env
- needs:
- - pipeline: $PARENT_PIPELINE_ID
- job: build-assets-image as-if-foss
-
-.trigger-omnibus:
- stage: .pre
- inherit:
- variables: false
- variables:
- GITALY_SERVER_VERSION: $GITALY_SERVER_VERSION
- GITLAB_ELASTICSEARCH_INDEXER_VERSION: $GITLAB_ELASTICSEARCH_INDEXER_VERSION
- GITLAB_KAS_VERSION: $GITLAB_KAS_VERSION
- GITLAB_METRICS_EXPORTER_VERSION: $GITLAB_METRICS_EXPORTER_VERSION
- GITLAB_PAGES_VERSION: $GITLAB_PAGES_VERSION
- GITLAB_SHELL_VERSION: $GITLAB_SHELL_VERSION
- GITLAB_WORKHORSE_VERSION: $GITLAB_WORKHORSE_VERSION
- GITLAB_VERSION: $CI_COMMIT_SHA
- GITLAB_ASSETS_TAG: $GITLAB_ASSETS_TAG
- IMAGE_TAG: $CI_COMMIT_SHA
- TOP_UPSTREAM_SOURCE_PROJECT: $CI_PROJECT_PATH
- SECURITY_SOURCES: $SECURITY_SOURCES
- CACHE_UPDATE: $OMNIBUS_GITLAB_CACHE_UPDATE
- RUBY3_BUILD: $OMNIBUS_GITLAB_RUBY3_BUILD
- RUBY2_BUILD: $OMNIBUS_GITLAB_RUBY2_BUILD
- CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION
- BUILD_ON_ALL_OS: $OMNIBUS_GITLAB_BUILD_ON_ALL_OS
- SKIP_QA_TEST: "true"
- ee: $EE
- trigger:
- project: gitlab-org/build/omnibus-gitlab-mirror
- branch: $TRIGGER_BRANCH
- strategy: depend
-
-.trigger-omnibus-ce:
- extends:
- - .trigger-omnibus
- variables:
- # Override gitlab repository so that omnibus doesn't use foss repository for CE build
- GITLAB_ALTERNATIVE_REPO: $CI_PROJECT_URL
-
.download-knapsack-report:
extends:
- .gitlab-qa-image
@@ -163,8 +75,10 @@ stages:
KNAPSACK_DIR: ${CI_PROJECT_DIR}/qa/knapsack
GIT_STRATEGY: none
script:
+ - echo "KNAPSACK_TEST_FILE_PATTERN is ${KNAPSACK_TEST_FILE_PATTERN}"
# when using qa-image, code runs in /home/gitlab/qa folder
- bundle exec rake "knapsack:download[test]"
+ - '[ -n "$QA_TESTS" ] && bundle exec rake "knapsack:create_reports_for_selective"'
- mkdir -p "$KNAPSACK_DIR" && cp knapsack/*.json "${KNAPSACK_DIR}/"
allow_failure: true
artifacts:
@@ -200,26 +114,6 @@ stages:
script:
- bundle exec rake "ci:export_test_metrics[$QA_METRICS_REPORT_FILE_PATTERN]"
-.relate-test-failures:
- extends:
- - .qa-install
- - .ruby-image
- stage: report
- when: always
- variables:
- QA_RSPEC_JSON_FILE_PATTERN: "${CI_PROJECT_DIR}/gitlab-qa-run-*/**/rspec-*.json"
- script:
- - |
- if [ "$SUITE_FAILED" != "true" ] && [ "$SUITE_RAN" == "true" ]; then
- echo "Test suite passed. Exiting..."
- exit 0
- fi
- - |
- bundle exec relate-failure-issue \
- --input-files "${QA_RSPEC_JSON_FILE_PATTERN}" \
- --project "gitlab-org/gitlab" \
- --token "${QA_RELATE_FAILURE_ISSUE_TOKEN}"
-
.generate-test-session:
extends:
- .qa-install
diff --git a/.gitlab/ci/qa-common/rules.gitlab-ci.yml b/.gitlab/ci/qa-common/rules.gitlab-ci.yml
index 3580339921d..b5963d24b81 100644
--- a/.gitlab/ci/qa-common/rules.gitlab-ci.yml
+++ b/.gitlab/ci/qa-common/rules.gitlab-ci.yml
@@ -1,5 +1,5 @@
# Specific specs passed
-.specific-specs: &specific-specs
+.specs-specified: &specs-specified
if: $QA_TESTS != ""
# No specific specs passed
@@ -10,6 +10,14 @@
.feature-flags-set: &feature-flags-set
if: $QA_FEATURE_FLAGS =~ /enabled|disabled/
+# Specific specs specified
+.spec-file-specified: &spec-file-specified
+ if: $QA_TESTS =~ /_spec\.rb/
+
+# Specs directory specified
+.spec-directory-specified: &spec-directory-specified
+ if: $QA_TESTS != "" && $QA_TESTS !~ /_spec\.rb/
+
# Manually trigger job on ff changes but with default ff state instead of inverted
.feature-flags-set-manual: &feature-flags-set-manual
<<: *feature-flags-set
@@ -48,18 +56,6 @@
rules:
- when: always
-.rules:omnibus-build:
- rules:
- - if: $SKIP_OMNIBUS_TRIGGER == "true"
- when: never
- - if: $FOSS_ONLY != "1"
-
-.rules:omnibus-build-ce:
- rules:
- - if: $SKIP_OMNIBUS_TRIGGER == "true"
- when: never
- - if: $FOSS_ONLY == "1"
-
.rules:update-cache:
rules:
- if: '$UPDATE_QA_CACHE == "true"'
@@ -96,11 +92,25 @@
when: never
- <<: *feature-flags-set
when: never
+ - <<: *spec-directory-specified
+ when: never
+
+.rules:test:qa-selective-parallel:
+ rules:
+ # always run parallel with full suite when framework changes present or ff state changed
+ - <<: *qa-run-all-tests
+ when: never
+ - <<: *all-specs
+ when: never
+ - <<: *feature-flags-set
+ when: never
+ - <<: *spec-file-specified
+ when: never
.rules:test:qa-parallel:
rules:
- *qa-run-all-tests
- - <<: *specific-specs
+ - <<: *specs-specified
when: manual
allow_failure: true
variables:
@@ -113,6 +123,11 @@
- *qa-run-all-tests
- *feature-flags-set-manual
+.rules:test:ce-only:
+ rules:
+ - if: $FOSS_ONLY != "1"
+ when: never
+
.rules:test:ee-only:
rules:
- if: $FOSS_ONLY == "1"
@@ -124,12 +139,10 @@
# these jobs need gitlab version because we can't reliably detect it from just the image
- if: $GITLAB_SEMVER_VERSION !~ /^\d+\.\d+\.\d+/
when: never
- # update type tests are used to check if gitlab upgrade can be performed correctly (mainly migrations)
- # there isn't much benefit in running tests after update with new sidebar enabled and there
- # is also an issue to properly pass feature toggle to this job due to how gitlab-qa parses cli args
- - if: $QA_SUPER_SIDEBAR_ENABLED == "true"
+ # $QA_SUPER_SIDEBAR_ENABLED is now only present as a variable when testing old nav so we skip update jobs
+ # in pipeline where it is explicitly disabled
+ - if: $QA_SUPER_SIDEBAR_ENABLED
when: never
- - !reference [.rules:test:ee-only, rules]
- !reference [.rules:test:qa, rules]
.rules:test:qa-default-branch:
diff --git a/.gitlab/ci/qa-common/variables.gitlab-ci.yml b/.gitlab/ci/qa-common/variables.gitlab-ci.yml
index 0322247a89d..817f2e0020a 100644
--- a/.gitlab/ci/qa-common/variables.gitlab-ci.yml
+++ b/.gitlab/ci/qa-common/variables.gitlab-ci.yml
@@ -3,7 +3,6 @@
variables:
REGISTRY_HOST: "registry.gitlab.com"
REGISTRY_GROUP: "gitlab-org"
- SKIP_REPORT_IN_ISSUES: "true"
SKIP_OMNIBUS_TRIGGER: "true"
OMNIBUS_GITLAB_CACHE_UPDATE: "false"
OMNIBUS_GITLAB_RUBY3_BUILD: "false"
diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml
index 81127b7c113..6d181a59214 100644
--- a/.gitlab/ci/qa.gitlab-ci.yml
+++ b/.gitlab/ci/qa.gitlab-ci.yml
@@ -1,5 +1,5 @@
.qa-job-base:
- image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}
+ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}:bundler-2.3-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}
extends:
- .default-retry
- .qa-cache
@@ -27,11 +27,13 @@
RUN_WITH_BUNDLE: "true" # instructs pipeline to install and run gitlab-qa gem via bundler
QA_PATH: qa # sets the optional path for bundler to run from
DYNAMIC_PIPELINE_YML: package-and-test-pipeline.yml # yml files are generated by scripts/generate-e2e-pipeline script
+ EXTRA_GITLAB_QA_OPTS: --set-feature-flags super_sidebar_nav_enrolled=enabled
inherit:
variables:
- CHROME_VERSION
- RUBY_VERSION
- DOCKER_VERSION
+ - DEBIAN_VERSION
- REGISTRY_GROUP
- REGISTRY_HOST
- OMNIBUS_GITLAB_CACHE_EDITION
@@ -68,15 +70,6 @@ qa:master-auto-quarantine-dequarantine:
- bundle exec confiner -r .confiner/master.yml
allow_failure: true
-qa:nightly-auto-quarantine-dequarantine:
- extends:
- - .qa-job-base
- rules:
- - if: '$QA_TRIGGER_AUTO_QUARANTINE =~ /true|yes|1/i'
- script:
- - bundle exec confiner -r .confiner/nightly.yml
- allow_failure: true
-
qa:update-qa-cache:
extends:
- .qa-job-base
@@ -86,13 +79,58 @@ qa:update-qa-cache:
script:
- echo "Cache has been updated and ready to be uploaded."
+trigger-omnibus:
+ stage: qa
+ extends:
+ - .qa:rules:trigger-omnibus
+ needs:
+ - trigger-omnibus-env
+ - build-assets-image
+ inherit:
+ variables: false
+ variables:
+ GITALY_SERVER_VERSION: $GITALY_SERVER_VERSION
+ GITLAB_ELASTICSEARCH_INDEXER_VERSION: $GITLAB_ELASTICSEARCH_INDEXER_VERSION
+ GITLAB_KAS_VERSION: $GITLAB_KAS_VERSION
+ GITLAB_METRICS_EXPORTER_VERSION: $GITLAB_METRICS_EXPORTER_VERSION
+ GITLAB_PAGES_VERSION: $GITLAB_PAGES_VERSION
+ GITLAB_SHELL_VERSION: $GITLAB_SHELL_VERSION
+ GITLAB_WORKHORSE_VERSION: $GITLAB_WORKHORSE_VERSION
+ GITLAB_VERSION: $CI_COMMIT_SHA
+ GITLAB_ASSETS_TAG: $GITLAB_ASSETS_TAG
+ IMAGE_TAG: $CI_COMMIT_SHA
+ TOP_UPSTREAM_SOURCE_PROJECT: $CI_PROJECT_PATH
+ SECURITY_SOURCES: $SECURITY_SOURCES
+ CACHE_UPDATE: $OMNIBUS_GITLAB_CACHE_UPDATE
+ RUBY3_BUILD: $OMNIBUS_GITLAB_RUBY3_BUILD
+ RUBY2_BUILD: $OMNIBUS_GITLAB_RUBY2_BUILD
+ CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION
+ BUILD_ON_ALL_OS: $OMNIBUS_GITLAB_BUILD_ON_ALL_OS
+ SKIP_QA_TEST: "true"
+ ee: $EE
+ trigger:
+ project: gitlab-org/build/omnibus-gitlab-mirror
+ branch: $TRIGGER_BRANCH
+ strategy: depend
+
+trigger-omnibus as-if-foss:
+ extends:
+ - trigger-omnibus
+ - .qa:rules:trigger-omnibus-ce
+ needs:
+ - trigger-omnibus-env as-if-foss
+ - build-assets-image as-if-foss
+ variables:
+ # Override gitlab repository so that omnibus doesn't use foss repository for CE build
+ GITLAB_ALTERNATIVE_REPO: $CI_PROJECT_URL
+
e2e:package-and-test-ee:
extends:
- .e2e-trigger-base
- .qa:rules:package-and-test-ee
needs:
- - build-assets-image
- build-qa-image
+ - trigger-omnibus
- e2e-test-pipeline-generate
variables:
RELEASE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ee:${CI_COMMIT_SHA}"
@@ -105,8 +143,8 @@ e2e:package-and-test-ce:
- e2e:package-and-test-ee
- .qa:rules:package-and-test-ce
needs:
- - build-assets-image as-if-foss
- build-qa-image as-if-foss
+ - trigger-omnibus as-if-foss
- e2e-test-pipeline-generate
variables:
FOSS_ONLY: "1"
@@ -116,27 +154,25 @@ e2e:package-and-test-ce:
ALLURE_JOB_NAME: e2e-package-and-test-ce
PIPELINE_NAME: E2E Omnibus GitLab CE
-e2e:package-and-test-super-sidebar:
+e2e:package-and-test-old-nav:
extends:
- - e2e:package-and-test-ee
- - .qa:rules:package-and-test-sidebar
- when: manual
+ - .e2e-trigger-base
+ - .qa:rules:package-and-test-old-nav
variables:
- QA_SUPER_SIDEBAR_ENABLED: "true"
- EXTRA_GITLAB_QA_OPTS: --set-feature-flags super_sidebar_nav=enabled
- QA_RUN_TYPE: e2e-package-and-test-super-sidebar
- ALLURE_JOB_NAME: e2e-package-and-test-super-sidebar
- PIPELINE_NAME: E2E Omnibus Super Sidebar
+ RELEASE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ee:${CI_COMMIT_SHA}"
+ QA_RUN_TYPE: e2e-package-and-test-old-nav
+ ALLURE_JOB_NAME: e2e-package-and-test-old-nav
+ PIPELINE_NAME: E2E Omnibus Old Navigation
+ QA_SUPER_SIDEBAR_ENABLED: "false"
+ EXTRA_GITLAB_QA_OPTS: ""
e2e:package-and-test-nightly:
extends:
- .e2e-trigger-base
- .qa:rules:package-and-test-nightly
needs:
- - build-assets-image
- - build-assets-image as-if-foss
- build-qa-image
- - build-qa-image as-if-foss
+ - trigger-omnibus
- e2e-test-pipeline-generate
variables:
GITLAB_SEMVER_VERSION: $GITLAB_SEMVER_VERSION
@@ -151,16 +187,13 @@ e2e:test-on-gdk:
- .qa:rules:e2e:test-on-gdk
stage: qa
needs:
- # In scheduled master pipelines we wait for the image to be built.
- # In MRs we assume the last scheduled master pipeline built the image already.
- - job: build-qa-on-gdk-master-image
- optional: true
- - job: e2e-test-pipeline-generate
- artifacts: true
+ - build-gdk-image
+ - e2e-test-pipeline-generate
variables:
ALLURE_JOB_NAME: e2e-test-on-gdk
QA_RUN_TYPE: e2e-test-on-gdk
PIPELINE_NAME: E2E GDK
DYNAMIC_PIPELINE_YML: test-on-gdk-pipeline.yml
SKIP_MESSAGE: Skipping test-on-gdk due to mr containing only quarantine changes!
+ GDK_IMAGE: "${CI_REGISTRY_IMAGE}/gitlab-qa-gdk:${CI_COMMIT_SHA}"
allow_failure: true
diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml
index a4041f771d9..0df6ef0cacd 100644
--- a/.gitlab/ci/rails.gitlab-ci.yml
+++ b/.gitlab/ci/rails.gitlab-ci.yml
@@ -9,6 +9,7 @@ setup-test-env:
- .setup-test-env-cache
- .rails:rules:setup-test-env
stage: prepare
+ needs: []
variables:
SETUP_DB: "false"
script:
@@ -64,127 +65,145 @@ update-gitaly-binaries-cache:
- export BUNDLE_WITHOUT="${BUNDLE_WITHOUT}:default:test:puma:kerberos:metrics:omnibus:ed25519"
- bundle_install_script
-rspec migration pg13:
+rspec migration pg14:
extends:
- - .rspec-base-pg13
+ - .rspec-base-pg14
- .rspec-base-migration
- .rails:rules:ee-and-foss-migration
- .rspec-migration-parallel
-rspec background_migration pg13:
+rspec background_migration pg14:
extends:
- - .rspec-base-pg13
+ - .rspec-base-pg14
- .rspec-base-migration
- .rails:rules:ee-and-foss-background-migration
- .rspec-background-migration-parallel
-rspec migration pg13 single-db:
+rspec migration pg14 single-db:
extends:
- - rspec migration pg13
+ - rspec migration pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec background_migration pg13 single-db:
+rspec background_migration pg14 single-db:
extends:
- - rspec background_migration pg13
+ - rspec background_migration pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec migration pg13 single-db-ci-connection:
+rspec migration pg14 single-db-ci-connection:
extends:
- - rspec migration pg13
+ - rspec migration pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec background_migration pg13 single-db-ci-connection:
+rspec background_migration pg14 single-db-ci-connection:
extends:
- - rspec background_migration pg13
+ - rspec background_migration pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec migration pg13 praefect:
+rspec migration pg14 praefect:
extends:
- - rspec migration pg13
+ - rspec migration pg14
- .praefect-with-db
- .rails:rules:praefect-with-db
-rspec background_migration pg13 praefect:
+rspec background_migration pg14 praefect:
extends:
- - rspec background_migration pg13
+ - rspec background_migration pg14
- .praefect-with-db
- .rails:rules:praefect-with-db
-rspec unit pg13:
+rspec unit pg14:
extends:
- - .rspec-base-pg13
+ - .rspec-base-pg14
- .rails:rules:ee-and-foss-unit
- .rspec-unit-parallel
-rspec unit pg13 single-db:
+rspec unit pg14 single-redis:
+ extends:
+ - rspec unit pg14
+ - .no-redis-cluster
+ - .rails:rules:single-redis
+
+rspec unit pg14 single-db:
extends:
- - rspec unit pg13
+ - rspec unit pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec unit pg13 single-db-ci-connection:
+rspec unit pg14 single-db-ci-connection:
extends:
- - rspec unit pg13
+ - rspec unit pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec unit pg13 praefect:
+rspec unit pg14 praefect:
extends:
- - rspec unit pg13
+ - rspec unit pg14
- .praefect-with-db
- .rails:rules:praefect-with-db
-rspec integration pg13:
+rspec integration pg14:
extends:
- - .rspec-base-pg13
+ - .rspec-base-pg14
- .rails:rules:ee-and-foss-integration
- .rspec-integration-parallel
-rspec integration pg13 single-db:
+rspec integration pg14 single-redis:
extends:
- - rspec integration pg13
+ - rspec integration pg14
+ - .no-redis-cluster
+ - .rails:rules:single-redis
+
+rspec integration pg14 single-db:
+ extends:
+ - rspec integration pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec integration pg13 single-db-ci-connection:
+rspec integration pg14 single-db-ci-connection:
extends:
- - rspec integration pg13
+ - rspec integration pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec integration pg13 praefect:
+rspec integration pg14 praefect:
extends:
- - rspec integration pg13
+ - rspec integration pg14
- .praefect-with-db
- .rails:rules:praefect-with-db
-rspec system pg13:
+rspec system pg14:
extends:
- - .rspec-base-pg13
+ - .rspec-base-pg14
- .rails:rules:ee-and-foss-system
- .rspec-system-parallel
variables:
DEBUG_GITLAB_TRANSACTION_STACK: "true"
-rspec system pg13 single-db:
+rspec system pg14 single-redis:
extends:
- - rspec system pg13
+ - rspec system pg14
+ - .no-redis-cluster
+ - .rails:rules:single-redis
+
+rspec system pg14 single-db:
+ extends:
+ - rspec system pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec system pg13 single-db-ci-connection:
+rspec system pg14 single-db-ci-connection:
extends:
- - rspec system pg13
+ - rspec system pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec system pg13 praefect:
+rspec system pg14 praefect:
extends:
- - rspec system pg13
+ - rspec system pg14
- .praefect-with-db
- .rails:rules:praefect-with-db
@@ -198,9 +217,19 @@ rspec db-library-code pg12:
- !reference [.base-script, script]
- rspec_db_library_code
-rspec fast_spec_helper:
+# Dedicated job to test DB library code against PG13.
+# Note that these are already tested against PG13 in the `rspec unit pg13` / `rspec-ee unit pg13` jobs.
+rspec db-library-code pg13:
extends:
- .rspec-base-pg13
+ - .rails:rules:ee-and-foss-db-library-code
+ script:
+ - !reference [.base-script, script]
+ - rspec_db_library_code
+
+rspec fast_spec_helper:
+ extends:
+ - .rspec-base-pg14
- .rails:rules:ee-and-foss-fast_spec_helper
script:
- fast_spec_helper_specs=$(git grep -l -E '^require.*fast_spec_helper')
@@ -232,19 +261,15 @@ rspec:deprecations:
- .rails:rules:deprecations
stage: post-test
allow_failure: true
- # We cannot use needs since it would mean needing 84 jobs (since most are parallelized)
- # so we use `dependencies` here.
- dependencies:
- - rspec migration pg13
- - rspec background_migration pg13
- - rspec unit pg13
- - rspec integration pg13
- - rspec system pg13
- - rspec-ee migration pg13
- - rspec-ee background_migration pg13
- - rspec-ee unit pg13
- - rspec-ee integration pg13
- - rspec-ee system pg13
+ needs:
+ - job: rspec:artifact-collector unit
+ optional: true
+ - job: rspec:artifact-collector system
+ optional: true
+ - job: rspec:artifact-collector remainder
+ optional: true
+ - job: rspec:artifact-collector ee
+ optional: true
variables:
SETUP_DB: "false"
script:
@@ -257,35 +282,150 @@ rspec:deprecations:
paths:
- deprecations/
+# The jobs built upon `.artifact-collector` are to work around the
+# needs: [] limit of a maximum of 50 dependencies.
+# These intermediate jobs allow us to collect the artifacts of
+# more than 50 jobs and still use `needs:` to ensure a timely execution
+.artifact-collector:
+ stage: post-test
+ variables:
+ GIT_STRATEGY: none
+ image: alpine:3.17
+ script:
+ - mkdir -p coverage deprecations rspec
+ - ls coverage/ deprecations/ rspec/
+ artifacts:
+ expire_in: 7d
+ when: always
+ paths:
+ - coverage/
+ - deprecations/
+ - rspec/
+
+rspec:artifact-collector unit:
+ extends:
+ - .artifact-collector
+ - .rails:rules:ee-and-foss-unit
+ needs:
+ - rspec unit pg14 # 28 jobs
+
+rspec:artifact-collector system:
+ extends:
+ - .artifact-collector
+ - .rails:rules:ee-and-foss-system
+ needs:
+ - rspec system pg14 # 28 jobs
+
+rspec:artifact-collector remainder:
+ extends:
+ - .artifact-collector
+ needs:
+ - job: rspec integration pg14 # 12 jobs
+ optional: true
+ - job: rspec migration pg14 # 8 jobs
+ optional: true
+ - job: rspec background_migration pg14 # 4 jobs
+ optional: true
+
+rspec:artifact-collector as-if-foss unit:
+ extends:
+ - .artifact-collector
+ - .rails:rules:as-if-foss-unit
+ needs:
+ - rspec unit pg14-as-if-foss # 28 jobs
+
+rspec:artifact-collector as-if-foss system:
+ extends:
+ - .artifact-collector
+ - .rails:rules:as-if-foss-system
+ needs:
+ - rspec system pg14-as-if-foss # 28 jobs
+
+rspec:artifact-collector as-if-foss remainder:
+ extends:
+ - .artifact-collector
+ needs:
+ - job: rspec integration pg14-as-if-foss # 12 jobs
+ optional: true
+ - job: rspec migration pg14-as-if-foss # 8 jobs
+ optional: true
+ - job: rspec background_migration pg14-as-if-foss # 4 jobs
+ optional: true
+
+rspec:artifact-collector single-redis:
+ extends:
+ - .artifact-collector
+ - .rails:rules:single-redis
+ needs:
+ - rspec unit pg14 single-redis # 28 jobs
+ - rspec integration pg14 single-redis # 12 jobs
+
+rspec:artifact-collector system single-redis:
+ extends:
+ - .artifact-collector
+ - .rails:rules:single-redis
+ needs:
+ - rspec system pg14 single-redis # 28 jobs
+
+rspec:artifact-collector ee single-redis:
+ extends:
+ - .artifact-collector
+ needs:
+ - job: rspec-ee unit pg14 single-redis # 18 jobs
+ optional: true
+ - job: rspec-ee integration pg14 single-redis # 6 jobs
+ optional: true
+ - job: rspec-ee system pg14 single-redis # 10 jobs
+ optional: true
+
+rspec:artifact-collector ee:
+ extends:
+ - .artifact-collector
+ needs:
+ - job: rspec-ee migration pg14 # 2 jobs
+ optional: true
+ - job: rspec-ee background_migration pg14 # 2 jobs
+ optional: true
+ - job: rspec-ee unit pg14 # 18 jobs
+ optional: true
+ - job: rspec-ee integration pg14 # 6 jobs
+ optional: true
+ - job: rspec-ee system pg14 # 10 jobs
+ optional: true
+
rspec:coverage:
extends:
- .coverage-base
- .rails:rules:rspec-coverage
stage: post-test
- # We cannot use needs since it would mean needing 84 jobs (since most are parallelized)
- # so we use `dependencies` here.
- dependencies:
+ needs:
- setup-test-env
# FOSS/EE jobs
- - rspec migration pg13
- - rspec background_migration pg13
- - rspec unit pg13
- - rspec integration pg13
- - rspec system pg13
+ - job: rspec:artifact-collector unit
+ optional: true
+ - job: rspec:artifact-collector system
+ optional: true
+ - job: rspec:artifact-collector remainder
+ optional: true
+ - job: rspec:artifact-collector single-redis
+ optional: true
+ - job: rspec:artifact-collector system single-redis
+ optional: true
# as-if-foss jobs
- - rspec migration pg13-as-if-foss
- - rspec background_migration pg13-as-if-foss
- - rspec unit pg13-as-if-foss
- - rspec integration pg13-as-if-foss
- - rspec system pg13-as-if-foss
+ - job: rspec:artifact-collector as-if-foss unit
+ optional: true
+ - job: rspec:artifact-collector as-if-foss system
+ optional: true
+ - job: rspec:artifact-collector as-if-foss remainder
+ optional: true
# EE jobs
- - rspec-ee migration pg13
- - rspec-ee background_migration pg13
- - rspec-ee unit pg13
- - rspec-ee integration pg13
- - rspec-ee system pg13
+ - job: rspec:artifact-collector ee single-redis
+ optional: true
+ - job: rspec:artifact-collector ee
+ optional: true
# Memory jobs
- - memory-on-boot
+ - job: memory-on-boot
+ optional: true
script:
- run_timed_command "bundle exec scripts/merge-simplecov"
coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
@@ -342,9 +482,7 @@ rspec:flaky-tests-report:
- .default-retry
- .rails:rules:flaky-tests-report
stage: post-test
- # We cannot use needs since it would mean needing 84 jobs (since most are parallelized)
- # so we use `dependencies` here.
- dependencies: !reference ["rspec:coverage", "dependencies"]
+ needs: !reference ["rspec:coverage", "needs"]
variables:
SKIPPED_TESTS_REPORT_PATH: rspec/skipped_tests_report.txt
RETRIED_TESTS_REPORT_PATH: rspec/flaky/retried_tests_report.txt
@@ -413,214 +551,232 @@ rspec-ee:predictive:trigger:
- artifact: "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml"
job: rspec-predictive:pipeline-generate
-rspec migration pg13-as-if-foss:
+rspec migration pg14-as-if-foss:
extends:
- - .rspec-base-pg13-as-if-foss
+ - .rspec-base-pg14-as-if-foss
- .rspec-base-migration
- .rails:rules:as-if-foss-migration
- .rspec-migration-parallel
-rspec background_migration pg13-as-if-foss:
+rspec background_migration pg14-as-if-foss:
extends:
- - .rspec-base-pg13-as-if-foss
+ - .rspec-base-pg14-as-if-foss
- .rspec-base-migration
- .rails:rules:as-if-foss-background-migration
- .rspec-background-migration-parallel
-rspec migration pg13-as-if-foss single-db:
+rspec migration pg14-as-if-foss single-db:
extends:
- - rspec migration pg13-as-if-foss
+ - rspec migration pg14-as-if-foss
- .single-db-rspec
- .rails:rules:single-db
-rspec background_migration pg13-as-if-foss single-db:
+rspec background_migration pg14-as-if-foss single-db:
extends:
- - rspec background_migration pg13-as-if-foss
+ - rspec background_migration pg14-as-if-foss
- .single-db-rspec
- .rails:rules:single-db
-rspec migration pg13-as-if-foss single-db-ci-connection:
+rspec migration pg14-as-if-foss single-db-ci-connection:
extends:
- - rspec migration pg13-as-if-foss
+ - rspec migration pg14-as-if-foss
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec background_migration pg13-as-if-foss single-db-ci-connection:
+rspec background_migration pg14-as-if-foss single-db-ci-connection:
extends:
- - rspec background_migration pg13-as-if-foss
+ - rspec background_migration pg14-as-if-foss
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec unit pg13-as-if-foss:
+rspec unit pg14-as-if-foss:
extends:
- - .rspec-base-pg13-as-if-foss
+ - .rspec-base-pg14-as-if-foss
- .rails:rules:as-if-foss-unit
- .rspec-unit-parallel
-rspec unit pg13-as-if-foss single-db:
+rspec unit pg14-as-if-foss single-db:
extends:
- - rspec unit pg13-as-if-foss
+ - rspec unit pg14-as-if-foss
- .single-db-rspec
- .rails:rules:single-db
-rspec unit pg13-as-if-foss single-db-ci-connection:
+rspec unit pg14-as-if-foss single-db-ci-connection:
extends:
- - rspec unit pg13-as-if-foss
+ - rspec unit pg14-as-if-foss
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec integration pg13-as-if-foss:
+rspec integration pg14-as-if-foss:
extends:
- - .rspec-base-pg13-as-if-foss
+ - .rspec-base-pg14-as-if-foss
- .rails:rules:as-if-foss-integration
- .rspec-integration-parallel
-rspec integration pg13-as-if-foss single-db:
+rspec integration pg14-as-if-foss single-db:
extends:
- - rspec integration pg13-as-if-foss
+ - rspec integration pg14-as-if-foss
- .single-db-rspec
- .rails:rules:single-db
-rspec integration pg13-as-if-foss single-db-ci-connection:
+rspec integration pg14-as-if-foss single-db-ci-connection:
extends:
- - rspec integration pg13-as-if-foss
+ - rspec integration pg14-as-if-foss
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec system pg13-as-if-foss:
+rspec system pg14-as-if-foss:
extends:
- - .rspec-base-pg13-as-if-foss
+ - .rspec-base-pg14-as-if-foss
- .rails:rules:as-if-foss-system
- .rspec-system-parallel
-rspec system pg13-as-if-foss single-db:
+rspec system pg14-as-if-foss single-db:
extends:
- - rspec system pg13-as-if-foss
+ - rspec system pg14-as-if-foss
- .single-db-rspec
- .rails:rules:single-db
-rspec system pg13-as-if-foss single-db-ci-connection:
+rspec system pg14-as-if-foss single-db-ci-connection:
extends:
- - rspec system pg13-as-if-foss
+ - rspec system pg14-as-if-foss
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec-ee migration pg13:
+rspec-ee migration pg14:
extends:
- - .rspec-ee-base-pg13
+ - .rspec-ee-base-pg14
- .rspec-base-migration
- .rails:rules:ee-only-migration
- .rspec-ee-migration-parallel
-rspec-ee background_migration pg13:
+rspec-ee background_migration pg14:
extends:
- - .rspec-ee-base-pg13
+ - .rspec-ee-base-pg14
- .rspec-base-migration
- .rails:rules:ee-only-background-migration
- .rspec-ee-background-migration-parallel
-rspec-ee migration pg13 single-db:
+rspec-ee migration pg14 single-db:
extends:
- - rspec-ee migration pg13
+ - rspec-ee migration pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec-ee background_migration pg13 single-db:
+rspec-ee background_migration pg14 single-db:
extends:
- - rspec-ee background_migration pg13
+ - rspec-ee background_migration pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec-ee migration pg13 single-db-ci-connection:
+rspec-ee migration pg14 single-db-ci-connection:
extends:
- - rspec-ee migration pg13
+ - rspec-ee migration pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec-ee background_migration pg13 single-db-ci-connection:
+rspec-ee background_migration pg14 single-db-ci-connection:
extends:
- - rspec-ee background_migration pg13
+ - rspec-ee background_migration pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec-ee migration pg13 praefect:
+rspec-ee migration pg14 praefect:
extends:
- - rspec migration pg13
+ - rspec migration pg14
- .praefect-with-db
- .rails:rules:praefect-with-db
-rspec-ee background_migration pg13 praefect:
+rspec-ee background_migration pg14 praefect:
extends:
- - rspec background_migration pg13
+ - rspec background_migration pg14
- .praefect-with-db
- .rails:rules:praefect-with-db
-rspec-ee unit pg13:
+rspec-ee unit pg14:
extends:
- - .rspec-ee-base-pg13
+ - .rspec-ee-base-pg14
- .rails:rules:ee-only-unit
- .rspec-ee-unit-parallel
-rspec-ee unit pg13 es8:
+rspec-ee unit pg14 es8:
extends:
- - .rspec-ee-base-pg13-es8
+ - .rspec-ee-base-pg14-es8
- .rspec-ee-unit-parallel
-rspec-ee unit pg13 single-db:
+rspec-ee unit pg14 single-db:
extends:
- - rspec-ee unit pg13
+ - rspec-ee unit pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec-ee unit pg13 single-db-ci-connection:
+rspec-ee unit pg14 single-redis:
extends:
- - rspec-ee unit pg13
+ - rspec-ee unit pg14
+ - .no-redis-cluster
+ - .rails:rules:single-redis
+
+rspec-ee unit pg14 single-db-ci-connection:
+ extends:
+ - rspec-ee unit pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec-ee integration pg13:
+rspec-ee integration pg14:
extends:
- - .rspec-ee-base-pg13
+ - .rspec-ee-base-pg14
- .rails:rules:ee-only-integration
- .rspec-ee-integration-parallel
-rspec-ee integration pg13 es8:
+rspec-ee integration pg14 es8:
extends:
- - .rspec-ee-base-pg13-es8
+ - .rspec-ee-base-pg14-es8
- .rspec-ee-integration-parallel
-rspec-ee integration pg13 single-db:
+rspec-ee integration pg14 single-db:
extends:
- - rspec-ee integration pg13
+ - rspec-ee integration pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec-ee integration pg13 single-db-ci-connection:
+rspec-ee integration pg14 single-redis:
+ extends:
+ - rspec-ee integration pg14
+ - .no-redis-cluster
+ - .rails:rules:single-redis
+
+rspec-ee integration pg14 single-db-ci-connection:
extends:
- - rspec-ee integration pg13
+ - rspec-ee integration pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
-rspec-ee system pg13:
+rspec-ee system pg14:
extends:
- - .rspec-ee-base-pg13
+ - .rspec-ee-base-pg14
- .rails:rules:ee-only-system
- .rspec-ee-system-parallel
-rspec-ee system pg13 es8:
+rspec-ee system pg14 es8:
extends:
- - .rspec-ee-base-pg13-es8
+ - .rspec-ee-base-pg14-es8
- .rspec-ee-system-parallel
-rspec-ee system pg13 single-db:
+rspec-ee system pg14 single-db:
extends:
- - rspec-ee system pg13
+ - rspec-ee system pg14
- .single-db-rspec
- .rails:rules:single-db
-rspec-ee system pg13 single-db-ci-connection:
+rspec-ee system pg14 single-redis:
+ extends:
+ - rspec-ee system pg14
+ - .no-redis-cluster
+ - .rails:rules:single-redis
+
+rspec-ee system pg14 single-db-ci-connection:
extends:
- - rspec-ee system pg13
+ - rspec-ee system pg14
- .single-db-ci-connection-rspec
- .rails:rules:single-db-ci-connection
# EE: default refs (MRs, default branch, schedules) jobs #
@@ -662,36 +818,69 @@ rspec system pg12:
- .rails:rules:rspec-on-pg12
- .rspec-system-parallel
-# PG14
-rspec migration pg14:
+# PG13
+rspec migration pg13:
extends:
- - .rspec-base-pg14
+ - .rspec-base-pg13
- .rspec-base-migration
- .rails:rules:default-branch-schedule-nightly--code-backstage
- .rspec-migration-parallel
-rspec background_migration pg14:
+rspec background_migration pg13:
extends:
- - .rspec-base-pg14
+ - .rspec-base-pg13
- .rspec-base-migration
- .rails:rules:default-branch-schedule-nightly--code-backstage
- .rspec-background-migration-parallel
-rspec unit pg14:
+rspec unit pg13:
extends:
- - .rspec-base-pg14
+ - .rspec-base-pg13
- .rails:rules:default-branch-schedule-nightly--code-backstage
- .rspec-unit-parallel
-rspec integration pg14:
+rspec integration pg13:
extends:
- - .rspec-base-pg14
+ - .rspec-base-pg13
- .rails:rules:default-branch-schedule-nightly--code-backstage
- .rspec-integration-parallel
-rspec system pg14:
+rspec system pg13:
extends:
- - .rspec-base-pg14
+ - .rspec-base-pg13
+ - .rails:rules:default-branch-schedule-nightly--code-backstage
+ - .rspec-system-parallel
+
+# PG15
+rspec migration pg15:
+ extends:
+ - .rspec-base-pg15
+ - .rspec-base-migration
+ - .rails:rules:default-branch-schedule-nightly--code-backstage
+ - .rspec-migration-parallel
+
+rspec background_migration pg15:
+ extends:
+ - .rspec-base-pg15
+ - .rspec-base-migration
+ - .rails:rules:default-branch-schedule-nightly--code-backstage
+ - .rspec-background-migration-parallel
+
+rspec unit pg15:
+ extends:
+ - .rspec-base-pg15
+ - .rails:rules:default-branch-schedule-nightly--code-backstage
+ - .rspec-unit-parallel
+
+rspec integration pg15:
+ extends:
+ - .rspec-base-pg15
+ - .rails:rules:default-branch-schedule-nightly--code-backstage
+ - .rspec-integration-parallel
+
+rspec system pg15:
+ extends:
+ - .rspec-base-pg15
- .rails:rules:default-branch-schedule-nightly--code-backstage
- .rspec-system-parallel
# EE/FOSS: default branch nightly scheduled jobs #
@@ -801,51 +990,88 @@ rspec-ee system pg14 opensearch2:
- .rspec-ee-system-parallel
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
-rspec-ee migration pg14:
+# PG15
+rspec-ee unit pg15 opensearch1:
extends:
- - .rspec-ee-base-pg14
+ - .rspec-ee-base-pg15-opensearch1
+ - .rspec-ee-unit-parallel
+ - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
+
+rspec-ee unit pg15 opensearch2:
+ extends:
+ - .rspec-ee-base-pg15-opensearch2
+ - .rspec-ee-unit-parallel
+ - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
+
+rspec-ee integration pg15 opensearch1:
+ extends:
+ - .rspec-ee-base-pg15-opensearch1
+ - .rspec-ee-integration-parallel
+ - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
+
+rspec-ee integration pg15 opensearch2:
+ extends:
+ - .rspec-ee-base-pg15-opensearch2
+ - .rspec-ee-integration-parallel
+ - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
+
+rspec-ee system pg15 opensearch1:
+ extends:
+ - .rspec-ee-base-pg15-opensearch1
+ - .rspec-ee-system-parallel
+ - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
+
+rspec-ee system pg15 opensearch2:
+ extends:
+ - .rspec-ee-base-pg15-opensearch2
+ - .rspec-ee-system-parallel
+ - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
+
+rspec-ee migration pg15:
+ extends:
+ - .rspec-ee-base-pg15
- .rspec-base-migration
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-migration-parallel
-rspec-ee background_migration pg14:
+rspec-ee background_migration pg15:
extends:
- - .rspec-ee-base-pg14
+ - .rspec-ee-base-pg15
- .rspec-base-migration
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-background-migration-parallel
-rspec-ee unit pg14:
+rspec-ee unit pg15:
extends:
- - .rspec-ee-base-pg14
+ - .rspec-ee-base-pg15
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-unit-parallel
-rspec-ee unit pg14 es8:
+rspec-ee unit pg15 es8:
extends:
- - .rspec-ee-base-pg14-es8
+ - .rspec-ee-base-pg15-es8
- .rspec-ee-unit-parallel
-rspec-ee integration pg14:
+rspec-ee integration pg15:
extends:
- - .rspec-ee-base-pg14
+ - .rspec-ee-base-pg15
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-integration-parallel
-rspec-ee integration pg14 es8:
+rspec-ee integration pg15 es8:
extends:
- - .rspec-ee-base-pg14-es8
+ - .rspec-ee-base-pg15-es8
- .rspec-ee-integration-parallel
-rspec-ee system pg14:
+rspec-ee system pg15:
extends:
- - .rspec-ee-base-pg14
+ - .rspec-ee-base-pg15
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-system-parallel
-rspec-ee system pg14 es8:
+rspec-ee system pg15 es8:
extends:
- - .rspec-ee-base-pg14-es8
+ - .rspec-ee-base-pg15-es8
- .rspec-ee-system-parallel
# EE: default branch nightly scheduled jobs #
#####################################
@@ -863,14 +1089,14 @@ rspec-ee system pg14 es8:
rspec fail-fast:
extends:
- - .rspec-base-pg13
- - .rspec-fail-fast # extends from .rspec-fail-fast last to override script from .rspec-base-pg13
+ - .rspec-base-pg14
+ - .rspec-fail-fast # extends from .rspec-fail-fast last to override script from .rspec-base-pg14
variables:
MATCHING_TESTS_PATH: "${RSPEC_MATCHING_TESTS_FOSS_PATH}"
rspec-ee fail-fast:
extends:
- - .rspec-ee-base-pg13
+ - .rspec-ee-base-pg14
- .rspec-fail-fast # extends from .rspec-fail-fast last to override script from .rspec-ee-base-pg13
variables:
MATCHING_TESTS_PATH: "${RSPEC_MATCHING_TESTS_EE_PATH}"
@@ -927,7 +1153,7 @@ fail-pipeline-early:
script:
- fail_pipeline_early
-.base-rspec-pg13-rerun-previous-failed-tests:
+.base-rspec-pg14-rerun-previous-failed-tests:
extends:
- .rails:rules:rerun-previous-failed-tests
stage: test
@@ -936,17 +1162,17 @@ fail-pipeline-early:
- !reference [.base-script, script]
- rspec_rerun_previous_failed_tests "${PREVIOUS_FAILED_TESTS_FILE}"
-rspec rspec-pg13-rerun-previous-failed-tests:
+rspec rspec-pg14-rerun-previous-failed-tests:
extends:
- - .rspec-base-pg13
- - .base-rspec-pg13-rerun-previous-failed-tests
+ - .rspec-base-pg14
+ - .base-rspec-pg14-rerun-previous-failed-tests
variables:
PREVIOUS_FAILED_TESTS_FILE: tmp/previous_failed_tests/rspec_failed_tests.txt
-rspec rspec-ee-pg13-rerun-previous-failed-tests:
+rspec rspec-ee-pg14-rerun-previous-failed-tests:
extends:
- - .rspec-ee-base-pg13
- - .base-rspec-pg13-rerun-previous-failed-tests
+ - .rspec-ee-base-pg14
+ - .base-rspec-pg14-rerun-previous-failed-tests
variables:
PREVIOUS_FAILED_TESTS_FILE: tmp/previous_failed_tests/rspec_ee_failed_files.txt
# EE: Canonical MR pipelines
diff --git a/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb b/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb
index 84aa67de4c9..dc469c30207 100644
--- a/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb
+++ b/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb
@@ -22,7 +22,7 @@ dont-interrupt-me:
- echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
.base-rspec-foss-impact:
- extends: .rspec-base-pg13-as-if-foss
+ extends: .rspec-base-pg14-as-if-foss
needs:
- pipeline: $PARENT_PIPELINE_ID
job: detect-tests
diff --git a/.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb b/.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb
index fcd8754c76a..ddcb335d0dd 100644
--- a/.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb
+++ b/.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb
@@ -39,7 +39,7 @@ dont-interrupt-me:
<% if test_suite_prefix.nil? %>
.base-rspec-predictive:
extends:
- - .rspec-base-pg12
+ - .rspec-base-pg13
- .base-predictive
variables:
# We're using the FOSS one here because we want to exclude EE-only ones
@@ -98,7 +98,7 @@ rspec system predictive:
<% if test_suite_prefix == 'ee/' %>
.base-rspec-ee-predictive:
extends:
- - .rspec-ee-base-pg12
+ - .rspec-ee-base-pg13
- .base-predictive
variables:
RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_EE_PATH}"
diff --git a/.gitlab/ci/rails/shared.gitlab-ci.yml b/.gitlab/ci/rails/shared.gitlab-ci.yml
index 33aef166afd..6ea6d8e523c 100644
--- a/.gitlab/ci/rails/shared.gitlab-ci.yml
+++ b/.gitlab/ci/rails/shared.gitlab-ci.yml
@@ -16,7 +16,7 @@ include:
extends:
- .default-retry
- .default-before_script
- - .rails-cache
+ - .ruby-cache
.base-script:
script:
@@ -28,6 +28,10 @@ include:
- section_start "gitaly-test-spawn" "Spawning Gitaly"; scripts/gitaly-test-spawn; section_end "gitaly-test-spawn" # Do not use 'bundle exec' here
- echo -e "\e[0Ksection_end:`date +%s`:gitaly-test-spawn\r\e[0K"
+.no-redis-cluster:
+ variables:
+ USE_REDIS_CLUSTER: "false"
+
.single-db:
variables:
DECOMPOSED_DB: "false"
@@ -71,6 +75,14 @@ include:
# and they should run on their own jobs so we don't need to run them
# in unit tests again.
- rspec_paralellized_job "--tag ~quarantine --tag ~level:background_migration"
+ after_script:
+ - echo -e "\e[0Ksection_start:`date +%s`:report_results_section[collapsed=true]\r\e[0KReport results"
+ - |
+ if [ "$CREATE_RAILS_TEST_FAILURE_ISSUES" == "true" ]; then
+ bundle exec relate-failure-issue --input-files "rspec/rspec-*.json" --system-log-files "log" --project "gitlab-org-sandbox/rails-test-failures" --token "${RAILS_TEST_FAILURES_PROJECT_TOKEN}";
+ fi
+ - echo -e "\e[0Ksection_end:`date +%s`:report_results_section\r\e[0K"
+
allow_failure:
exit_codes: !reference [.rspec-base, variables, SUCCESSFULLY_RETRIED_TEST_EXIT_CODE]
@@ -88,12 +100,14 @@ include:
- tmp/capybara/
- log/*.log
reports:
- junit: ${JUNIT_RESULT_FILE}
+ junit: "rspec/rspec-*.xml"
.rspec-base-migration:
script:
- !reference [.base-script, script]
- rspec_paralellized_job "--tag ~quarantine --tag ~zoekt"
+ after_script:
+ - !reference [.rspec-base, after_script]
.rspec-base-pg12:
extends:
@@ -105,11 +119,16 @@ include:
- .rspec-base
- .use-pg13
-.rspec-base-pg13-as-if-foss:
+.rspec-base-pg14:
+ extends:
+ - .rspec-base
+ - .use-pg14
+
+.rspec-base-pg14-as-if-foss:
extends:
- .rspec-base
- .as-if-foss
- - .use-pg13
+ - .use-pg14
needs:
- job: "setup-test-env"
- job: "retrieve-tests-metadata"
@@ -117,10 +136,10 @@ include:
- job: "detect-tests"
optional: true
-.rspec-base-pg14:
+.rspec-base-pg15:
extends:
- .rspec-base
- - .use-pg14
+ - .use-pg15
.rspec-ee-base-pg12:
extends:
@@ -173,11 +192,34 @@ include:
- .use-pg14-opensearch2-ee
- .rails:rules:run-search-tests
+.rspec-ee-base-pg15:
+ extends:
+ - .rspec-base
+ - .use-pg15-es7-ee
+
+.rspec-ee-base-pg15-es8:
+ extends:
+ - .rspec-base
+ - .use-pg15-es8-ee
+ - .rails:rules:run-search-tests
+
+.rspec-ee-base-pg15-opensearch1:
+ extends:
+ - .rspec-base
+ - .use-pg15-opensearch1-ee
+ - .rails:rules:run-search-tests
+
+.rspec-ee-base-pg15-opensearch2:
+ extends:
+ - .rspec-base
+ - .use-pg15-opensearch2-ee
+ - .rails:rules:run-search-tests
+
.db-job-base:
extends:
- .rails-job-base
- .rails:rules:ee-and-foss-migration
- - .use-pg13
+ - .use-pg14
stage: test
needs: ["setup-test-env"]
# rspec job base specs
@@ -185,6 +227,9 @@ include:
############################
# rspec job parallel configs
+# Adjusting these parallel job counts has an impact on the
+# rspec:artifact-collector jobs in .gitlab/ci/rails.gitlab-ci.yml
+# Please double-check and adjust accordingly
.rspec-migration-parallel:
parallel: 8
diff --git a/.gitlab/ci/release-environments/main.gitlab-ci.yml b/.gitlab/ci/release-environments/main.gitlab-ci.yml
index aa6afee57ae..6c28ba3e2dd 100644
--- a/.gitlab/ci/release-environments/main.gitlab-ci.yml
+++ b/.gitlab/ci/release-environments/main.gitlab-ci.yml
@@ -1,69 +1,17 @@
---
-default:
- interruptible: true
-
-stages:
- - prepare
- - deploy
-
include:
- - local: .gitlab/ci/global.gitlab-ci.yml
+ - local: .gitlab/ci/cng/main.gitlab-ci.yml
-release-environments-build-cng-env:
+review-build-cng-env:
allow_failure: true
- image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.16
- stage: prepare
- needs:
- # We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream CNG pipeline.
- - pipeline: $PARENT_PIPELINE_ID
- job: build-assets-image
- variables:
- BUILD_ENV: build.env
- before_script:
- - source ./scripts/utils.sh
- - install_gitlab_gem
- script:
- - 'ruby -r./scripts/trigger-build.rb -e "puts Trigger.variables_for_env_file(Trigger::CNG.new.variables)" > $BUILD_ENV'
- - echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
- - ruby -e 'puts "FULL_RUBY_VERSION=#{RUBY_VERSION}"' >> build.env
- - cat $BUILD_ENV
- artifacts:
- reports:
- dotenv: $BUILD_ENV
- paths:
- - $BUILD_ENV
- expire_in: 7 days
- when: always
-release-environments-build-cng:
- allow_failure: true
- stage: prepare
- needs: ["release-environments-build-cng-env"]
- inherit:
- variables: false
+review-build-cng:
+ needs: ["review-build-cng-env"]
variables:
- GITLAB_REF_SLUG: "${GITLAB_REF_SLUG}"
- # CNG pipeline specific variables
- GITLAB_VERSION: "${GITLAB_VERSION}"
- GITLAB_TAG: "${GITLAB_TAG}"
- GITLAB_ASSETS_TAG: "${GITLAB_ASSETS_TAG}"
- FORCE_RAILS_IMAGE_BUILDS: "${FORCE_RAILS_IMAGE_BUILDS}"
- CE_PIPELINE: "${CE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$CE_PIPELINE'` will evaluate to `false` when this variable is empty
- EE_PIPELINE: "${EE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$EE_PIPELINE'` will evaluate to `false` when this variable is empty
- GITLAB_ELASTICSEARCH_INDEXER_VERSION: "${GITLAB_ELASTICSEARCH_INDEXER_VERSION}"
- GITLAB_KAS_VERSION: "${GITLAB_KAS_VERSION}"
- GITLAB_METRICS_EXPORTER_VERSION: "${GITLAB_METRICS_EXPORTER_VERSION}"
- GITLAB_PAGES_VERSION: "${GITLAB_PAGES_VERSION}"
- GITLAB_SHELL_VERSION: "${GITLAB_SHELL_VERSION}"
- GITALY_SERVER_VERSION: "${GITALY_SERVER_VERSION}"
- RUBY_VERSION: "${FULL_RUBY_VERSION}"
IMAGE_TAG_EXT: "-${CI_COMMIT_SHORT_SHA}"
- trigger:
- project: gitlab-org/build/CNG-mirror
- branch: $TRIGGER_BRANCH
- strategy: depend
+ allow_failure: true
-release-environments-deploy-env:
+review-deploy-env:
allow_failure: true
stage: deploy
needs: ["release-environments-build-cng"]
@@ -79,10 +27,10 @@ release-environments-deploy-env:
expire_in: 7 days
when: always
-release-environments-deploy:
+review-deploy:
allow_failure: true
stage: deploy
- needs: ["release-environments-deploy-env"]
+ needs: ["review-deploy-env"]
inherit:
variables: false
variables:
diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml
index b072b3dc772..0290d0158b6 100644
--- a/.gitlab/ci/reports.gitlab-ci.yml
+++ b/.gitlab/ci/reports.gitlab-ci.yml
@@ -74,20 +74,13 @@ gemnasium-dependency_scanning:
gemnasium-python-dependency_scanning:
rules: !reference [".reports:rules:gemnasium-python-dependency_scanning", rules]
-yarn-audit-dependency_scanning:
- extends: .ds-analyzer
- image: "${REGISTRY_HOST}/${REGISTRY_GROUP}/security-products/analyzers/npm-audit:1"
- variables:
- TOOL: yarn
- rules: !reference [".reports:rules:yarn-audit-dependency_scanning", rules]
-
# Analyze dependencies for malicious behavior
# See https://gitlab.com/gitlab-com/gl-security/security-research/package-hunter
.package_hunter-base:
extends: .default-retry
stage: test
image:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/security-products/package-hunter-cli:v1.3.3@sha256:1d3af9a61aa01549a62be17fa655fcf06271ac9e1b1e822c2a7930fa1d4a8a6b
+ name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/security-products/package-hunter-cli:v2.1.0@sha256:1f1d31fdc81f6cf0ee305ff0291bfb56f22c5764fe042948ff1676f2f8c60352
entrypoint: [""]
variables:
HTR_user: '$PACKAGE_HUNTER_USER'
diff --git a/.gitlab/ci/review-apps/main.gitlab-ci.yml b/.gitlab/ci/review-apps/main.gitlab-ci.yml
index 680254a6640..3522dac39e4 100644
--- a/.gitlab/ci/review-apps/main.gitlab-ci.yml
+++ b/.gitlab/ci/review-apps/main.gitlab-ci.yml
@@ -10,6 +10,7 @@ stages:
- dast
include:
+ - local: .gitlab/ci/cng/main.gitlab-ci.yml
- local: .gitlab/ci/global.gitlab-ci.yml
- local: .gitlab/ci/review-apps/rules.gitlab-ci.yml
- local: .gitlab/ci/review-apps/qa.gitlab-ci.yml
@@ -31,63 +32,10 @@ review-build-cng-env:
extends:
- .default-retry
- .review:rules:review-build-cng
- image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.16
- stage: prepare
- needs:
- # We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream CNG pipeline.
- - pipeline: $PARENT_PIPELINE_ID
- job: build-assets-image
- variables:
- BUILD_ENV: build.env
- before_script:
- - source ./scripts/utils.sh
- - install_gitlab_gem
- script:
- - 'ruby -r./scripts/trigger-build.rb -e "puts Trigger.variables_for_env_file(Trigger::CNG.new.variables)" > $BUILD_ENV'
- - echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
- - ruby -e 'puts "FULL_RUBY_VERSION=#{RUBY_VERSION}"' >> build.env
- - cat $BUILD_ENV
- artifacts:
- reports:
- dotenv: $BUILD_ENV
- paths:
- - $BUILD_ENV
- expire_in: 7 days
- when: always
review-build-cng:
extends: .review:rules:review-build-cng
- stage: prepare
needs: ["review-build-cng-env"]
- inherit:
- variables: false
- variables:
- TOP_UPSTREAM_SOURCE_PROJECT: "${TOP_UPSTREAM_SOURCE_PROJECT}"
- TOP_UPSTREAM_SOURCE_REF: "${TOP_UPSTREAM_SOURCE_REF}"
- TOP_UPSTREAM_SOURCE_JOB: "${TOP_UPSTREAM_SOURCE_JOB}"
- TOP_UPSTREAM_SOURCE_SHA: "${TOP_UPSTREAM_SOURCE_SHA}"
- TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID: "${TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID}"
- TOP_UPSTREAM_MERGE_REQUEST_IID: "${TOP_UPSTREAM_MERGE_REQUEST_IID}"
- GITLAB_REF_SLUG: "${GITLAB_REF_SLUG}"
- # CNG pipeline specific variables
- GITLAB_VERSION: "${GITLAB_VERSION}"
- GITLAB_TAG: "${GITLAB_TAG}"
- GITLAB_ASSETS_TAG: "${GITLAB_ASSETS_TAG}"
- FORCE_RAILS_IMAGE_BUILDS: "${FORCE_RAILS_IMAGE_BUILDS}"
- CE_PIPELINE: "${CE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$CE_PIPELINE'` will evaluate to `false` when this variable is empty
- EE_PIPELINE: "${EE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$EE_PIPELINE'` will evaluate to `false` when this variable is empty
- GITLAB_ELASTICSEARCH_INDEXER_VERSION: "${GITLAB_ELASTICSEARCH_INDEXER_VERSION}"
- GITLAB_KAS_VERSION: "${GITLAB_KAS_VERSION}"
- GITLAB_METRICS_EXPORTER_VERSION: "${GITLAB_METRICS_EXPORTER_VERSION}"
- GITLAB_PAGES_VERSION: "${GITLAB_PAGES_VERSION}"
- GITLAB_SHELL_VERSION: "${GITLAB_SHELL_VERSION}"
- GITLAB_WORKHORSE_VERSION: "${GITLAB_WORKHORSE_VERSION}"
- GITALY_SERVER_VERSION: "${GITALY_SERVER_VERSION}"
- RUBY_VERSION: "${FULL_RUBY_VERSION}"
- trigger:
- project: gitlab-org/build/CNG-mirror
- branch: $TRIGGER_BRANCH
- strategy: depend
.review-workflow-base:
image: ${REVIEW_APPS_IMAGE}
@@ -96,7 +44,7 @@ review-build-cng:
variables:
HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}"
DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}"
- GITLAB_HELM_CHART_REF: "febc4ad69acb7bba0eeb4a62daa577d0b7c3ee71" # 6.9.1: https://gitlab.com/gitlab-org/charts/gitlab/-/commit/febc4ad69acb7bba0eeb4a62daa577d0b7c3ee71
+ GITLAB_HELM_CHART_REF: "75b1486a9aec212d0f49ef1251526d8e51004bbc" # 7.0.1: https://gitlab.com/gitlab-org/charts/gitlab/-/commit/75b1486a9aec212d0f49ef1251526d8e51004bbc
environment:
name: review/${CI_COMMIT_REF_SLUG}${SCHEDULE_TYPE} # No separator for SCHEDULE_TYPE so it's compatible as before and looks nice without it
url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}
diff --git a/.gitlab/ci/review-apps/qa.gitlab-ci.yml b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
index 9dd24f20c4f..ccbdfd3c298 100644
--- a/.gitlab/ci/review-apps/qa.gitlab-ci.yml
+++ b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
@@ -1,10 +1,5 @@
include:
- - project: gitlab-org/quality/pipeline-common
- ref: 5.1.1
- file:
- - /ci/base.gitlab-ci.yml
- - /ci/allure-report.yml
- - /ci/knapsack-report.yml
+ - local: .gitlab/ci/qa-common/main.gitlab-ci.yml
- template: Verify/Browser-Performance.gitlab-ci.yml
.test-variables:
@@ -21,12 +16,12 @@ include:
.bundle-base:
extends:
- .qa-cache
- image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3
+ - .ruby-image
before_script:
- cd qa && bundle install
.review-qa-base:
- image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-git-2.36-lfs-2.9-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}-gcloud-383-kubectl-1.23
+ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}:bundler-2.3-git-2.36-lfs-2.9-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}-gcloud-383-kubectl-1.23
extends:
- .use-docker-in-docker
- .bundle-base
@@ -75,8 +70,6 @@ review-qa-smoke:
- .rules:qa-smoke
variables:
QA_SCENARIO: Test::Instance::Smoke
- QA_RUN_TYPE: review-qa-smoke
- retry: 1
review-qa-blocking:
extends:
@@ -84,7 +77,6 @@ review-qa-blocking:
- .rules:qa-blocking
variables:
QA_SCENARIO: Test::Instance::ReviewBlocking
- QA_RUN_TYPE: review-qa-blocking
retry: 1
review-qa-blocking-parallel:
extends:
@@ -98,7 +90,6 @@ review-qa-non-blocking:
- .rules:qa-non-blocking
variables:
QA_SCENARIO: Test::Instance::ReviewNonBlocking
- QA_RUN_TYPE: review-qa-non-blocking
when: manual
allow_failure: true
review-qa-non-blocking-parallel:
@@ -118,18 +109,12 @@ browser_performance:
e2e-test-report:
extends:
- - .generate-allure-report-base
+ - .e2e-test-report
- .rules:prepare-report
stage: post-qa
variables:
- ALLURE_JOB_NAME: e2e-review-qa
- ALLURE_PROJECT_PATH: $CI_PROJECT_PATH
ALLURE_RESULTS_GLOB: qa/tmp/allure-results
- ALLURE_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_IID
- GITLAB_AUTH_TOKEN: $PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE
- GIT_STRATEGY: none
- allow_failure: true
- when: always
+ ALLURE_JOB_NAME: $QA_RUN_TYPE
upload-knapsack-report:
extends:
@@ -145,38 +130,29 @@ delete-test-resources:
- .rules:prepare-report
stage: post-qa
variables:
- QA_TEST_RESOURCES_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/test-resources-*.json
GITLAB_QA_ACCESS_TOKEN: $REVIEW_APPS_ROOT_TOKEN
script:
- export GITLAB_ADDRESS="$QA_GITLAB_URL"
- - bundle exec rake "test_resources:delete[$QA_TEST_RESOURCES_FILE_PATTERN]"
+ - bundle exec rake "test_resources:delete[$CI_PROJECT_DIR/qa/tmp/test-resources-*.json]"
allow_failure: true
- when: always
notify-slack:
extends:
- - .notify-slack-qa
- - .qa-cache
+ - .notify-slack
- .rules:main-run
stage: post-qa
variables:
+ QA_RSPEC_XML_FILE_PATTERN: ${CI_PROJECT_DIR}/qa/tmp/rspec-*.xml
RUN_WITH_BUNDLE: "true"
- QA_PATH: qa
- ALLURE_JOB_NAME: e2e-review-qa
- SLACK_ICON_EMOJI: ci_failing
- STATUS_SYM: ☠️
- STATUS: failed
- TYPE: "(review-app) "
+ ALLURE_JOB_NAME: $QA_RUN_TYPE
when: on_failure
- script:
- - bundle exec prepare-stage-reports --input-files "${CI_PROJECT_DIR}/qa/tmp/rspec-*.xml"
- - !reference [.notify-slack-qa, script]
export-test-metrics:
extends:
+ - .export-test-metrics
- .bundle-base
- .rules:main-run
stage: post-qa
+ variables:
+ QA_METRICS_REPORT_FILE_PATTERN: tmp/test-metrics-*.json
when: always
- script:
- - bundle exec rake "ci:export_test_metrics[tmp/test-metrics-*.json]"
diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml
index 6d38c651985..68bfa682d0f 100644
--- a/.gitlab/ci/review.gitlab-ci.yml
+++ b/.gitlab/ci/review.gitlab-ci.yml
@@ -90,6 +90,7 @@ start-review-app-pipeline:
- REVIEW_APPS_GCP_REGION
- REVIEW_APPS_IMAGE
- RUBY_VERSION
+ - DEBIAN_VERSION
# These variables are set in the pipeline schedules.
# They need to be explicitly passed on to the child pipeline.
@@ -100,36 +101,30 @@ start-review-app-pipeline:
SCHEDULE_TYPE: $SCHEDULE_TYPE
DAST_RUN: $DAST_RUN
SKIP_MESSAGE: Skipping review-app due to mr containing only quarantine changes!
+ QA_RUN_TYPE: e2e-review-qa
trigger:
strategy: depend
include:
- artifact: review-app-pipeline.yml
job: e2e-test-pipeline-generate
+include:
+ - remote: 'https://gitlab.com/gitlab-org/quality/pipeline-common/-/raw/6.4.0/ci/danger-review.yml'
+
danger-review:
extends:
- .default-retry
- .ruby-node-cache
- .review:rules:danger
- stage: test
- needs: []
+ image: "${DEFAULT_CI_IMAGE}"
before_script:
- source scripts/utils.sh
- bundle_install_script "--with danger"
- yarn_install_script
- script:
- # ${DANGER_DANGERFILE} is used by Jihulab for customizing danger support: https://jihulab.com/gitlab-cn/gitlab/-/blob/main-jh/jh/.gitlab-ci.yml
- - >
- if [ -z "$DANGER_GITLAB_API_TOKEN" ]; then
- run_timed_command danger_as_local
- else
- danger_id=$(echo -n ${DANGER_GITLAB_API_TOKEN} | md5sum | awk '{print $1}' | cut -c5-10)
- run_timed_command "bundle exec danger --fail-on-errors=true --verbose --danger_id=\"${danger_id}\" --dangerfile=\"${DANGER_DANGERFILE:-Dangerfile}\""
- fi
danger-review-local:
- extends:
- - danger-review
- - .review:rules:danger-local
- script:
- - run_timed_command danger_as_local
+ extends: danger-review
+ before_script:
+ - !reference ["danger-review", "before_script"]
+ # We unset DANGER_GITLAB_API_TOKEN so that Danger will run as local from `danger-review:script`
+ - unset DANGER_GITLAB_API_TOKEN
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index 0b660c4c0a7..1c1f6cfa96a 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -12,10 +12,10 @@
if: '$CI_PROJECT_NAME != "gitlab-foss" && $CI_PROJECT_NAME != "gitlab-ce" && $CI_PROJECT_NAME != "gitlabhq"'
.if-jh: &if-jh
- # Example of these projects:
+ # Matches these two projects:
# https://jihulab.com/gitlab-cn/gitlab
# https://gitlab.com/gitlab-org-sandbox/gitlab-jh-validation
- if: '$CI_PROJECT_PATH =~ /^gitlab-(jh|cn)\/.*/ || $CI_PROJECT_NAME =~ /^gitlab-jh/'
+ if: '$CI_PROJECT_PATH == "gitlab-cn/gitlab" || $CI_PROJECT_PATH == "gitlab-org-sandbox/gitlab-jh-validation"'
.if-force-ci: &if-force-ci
if: '$FORCE_GITLAB_CI'
@@ -48,7 +48,7 @@
if: '($CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached") && $CI_MERGE_REQUEST_LABELS !~ /pipeline:mr-approved/'
.if-automated-merge-request: &if-automated-merge-request
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "release-tools/update-gitaly" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /stable-ee$/'
+ if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "release-tools/update-gitaly" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /stable-(ee|jh)$/'
.if-merge-request-targeting-stable-branch: &if-merge-request-targeting-stable-branch
if: '($CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached") && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^[\d-]+-stable(-ee)?$/'
@@ -169,6 +169,7 @@
- ".gitlab/ci/frontend.gitlab-ci.yml"
- ".gitlab/ci/build-images.gitlab-ci.yml"
- ".gitlab/ci/review.gitlab-ci.yml"
+ - ".gitlab/ci/cng/**/*"
- ".gitlab/ci/review-apps/**/*"
- "scripts/review_apps/**/*"
- "scripts/trigger-build.rb"
@@ -185,6 +186,7 @@
- ".gitlab/ci/package-and-test/*.yml"
- ".gitlab/ci/review-apps/qa.gitlab-ci.yml"
- ".gitlab/ci/review-apps/rules.gitlab-ci.yml"
+ - ".gitlab/ci/test-on-gdk/*.yml"
.gitaly-patterns: &gitaly-patterns
- "GITALY_SERVER_VERSION"
@@ -338,6 +340,24 @@
- "{,ee/,jh/}{bin,config,db,generator_templates,lib}/**/*"
- "{,ee/,jh/}spec/**/*"
+# Redis patterns + feature flags
+.redis-patterns: &redis-patterns
+ - "{,ee/,jh/}{,spec/}app/models/concerns/redis_cacheable{,_spec}.rb"
+ - "{,ee/,jh/}{,spec/}app/models/ci/build_trace_chunks/redis{,_base,_trace_chunks}{,_spec}.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/usage_data_counters/{hll_redis_counter,redis_counter}{,_spec}.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/usage/metrics/instrumentations/redis{_metric,hll_metric}{,_spec}.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/usage/metrics/aggregates/sources/redis_hll{,_spec}.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/patch/action_cable_redis_listener{,_spec}.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/merge_requests/mergeability/redis_interface{,_spec}.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/markdown_cache/redis/*.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/redis/**/*.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/instrumentation/*.rb"
+ - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/redis.rb"
+ - "{,ee/,jh/}config/initializers/7_redis.rb"
+ # Feature flag changes
+ - "{,ee/,jh/}{,spec/}lib/feature.rb"
+ - "config/feature_flags/**/*"
+
# DB patterns + .ci-patterns
.db-patterns: &db-patterns
- "{,ee/,jh/}{,spec/}{db,migrations}/**/*"
@@ -522,9 +542,6 @@
- "config.ru"
- "{,ee/,jh/}{app,bin,config,db,generator_templates,haml_lint,lib,locale,public,scripts,storybook,symbol,vendor}/**/*"
- "doc/api/graphql/reference/*" # Files in this folder are auto-generated
- # Mapped patterns (see tests.yml)
- - "data/whats_new/*.yml"
- - "doc/index.md"
# CI changes
- ".gitlab-ci.yml"
- ".gitlab/ci/**/*"
@@ -538,6 +555,9 @@
# QA changes
- ".dockerignore"
- "{,jh/}qa/**/*"
+ # Mapped patterns (see tests.yml)
+ - "data/whats_new/*.yml"
+ - "doc/index.md"
# Workhorse changes
- "GITLAB_WORKHORSE_VERSION"
- "workhorse/**/*"
@@ -815,6 +835,7 @@
- <<: *if-merge-request-labels-pipeline-expedite
when: never
- <<: *if-merge-request-targeting-stable-branch
+ changes: *setup-test-env-patterns
- <<: *if-merge-request-labels-run-review-app
- <<: *if-merge-request
changes: *ci-build-images-patterns
@@ -856,19 +877,70 @@
.build-images:rules:build-qa-image-as-if-foss:
rules:
- !reference [".build-images:rules:build-qa-image-merge-requests", "rules"]
+ - <<: *if-default-branch-schedule-nightly
+ variables:
+ ARCH: amd64,arm64
-# We want to rebuild the master image when the full e2e test pipeline runs. Currently this happens on a 2 hour schedule.
-.build-images:rules:build-qa-on-gdk-master-image:
+# We use a multi-stage image to:
+# - (re)build the first stage in master pipelines (including scheduled pipelines), and
+# - build the final stage in code-change pipelines (including MRs), and scheduled pipelines
+# This has to match ".qa:rules:e2e:test-on-gdk" otherwise there won't be an image available to run GDK in the test jobs.
+# Unfortunately, we can't just include ".qa:rules:e2e:test-on-gdk" because some of the conditions are manual
+.build-images:rules:build-gdk-image:
rules:
- if: '$QA_RUN_TESTS_ON_GDK !~ /true|yes|1/i'
when: never
- - <<: *if-not-canonical-namespace
+ - !reference [".qa:rules:package-and-test-never-run", rules]
+ - <<: *if-default-branch-schedule-nightly # already executed in the 2-hourly schedule
when: never
- - <<: *if-not-ee
- when: never
- - <<: *if-dot-com-gitlab-org-schedule
+ - <<: *if-default-branch-refs # Includes scheduled pipelines
variables:
- ARCH: amd64,arm64
+ BUILD_GDK_BASE: "true"
+ allow_failure: true
+ # We want to also rebuild the base image if MRs change certain components.
+ - <<: *if-merge-request
+ variables:
+ BUILD_GDK_BASE: "true"
+ changes:
+ - qa/gdk/**/*
+ - Gemfile.lock
+ - yarn.lock
+ - workhorse/**/*
+ - VERSION
+ - GITLAB_METRICS_EXPORTER_VERSION
+ - GITLAB_SHELL_VERSION
+ - GITALY_SERVER_VERSION
+ allow_failure: true
+ # The rest are included to be consistent with .qa:rules:e2e:test-on-gdk
+ - <<: *if-merge-request-targeting-stable-branch
+ changes: *setup-test-env-patterns
+ allow_failure: true
+ - <<: *if-ruby2-branch
+ allow_failure: true
+ # We include the job under the matching conditions below, but unlike in .qa:rules:e2e:test-on-gdk we don't need to
+ # set OMNIBUS_GITLAB_BUILD_ON_ALL_OS when testing against GDK
+ - <<: *if-merge-request
+ changes: *dependency-patterns
+ allow_failure: true
+ - <<: *if-merge-request-labels-run-all-e2e
+ allow_failure: true
+ - <<: *if-merge-request
+ changes: *feature-flag-development-config-patterns
+ allow_failure: true
+ - <<: *if-merge-request
+ changes: *initializers-patterns
+ allow_failure: true
+ - <<: *if-merge-request
+ changes: *nodejs-patterns
+ allow_failure: true
+ - <<: *if-merge-request
+ changes: *ci-qa-patterns
+ allow_failure: true
+ - <<: *if-merge-request
+ changes: *code-qa-patterns
+ allow_failure: true
+ - <<: *if-force-ci
+ allow_failure: true
.build-images:rules:build-assets-image:
rules:
@@ -877,6 +949,7 @@
- <<: *if-merge-request-labels-pipeline-expedite
when: never
- <<: *if-merge-request-targeting-stable-branch
+ changes: *setup-test-env-patterns
- <<: *if-ruby2-branch
- <<: *if-merge-request-labels-run-review-app
- <<: *if-auto-deploy-branches
@@ -884,7 +957,8 @@
changes: *ci-build-images-patterns
- <<: *if-default-refs
changes: *code-qa-patterns
- # Rules to support .qa:rules:package-and-test-ee
+ # Rules to support .qa:rules:package-and-test
+ - <<: *if-default-branch-schedule-nightly
- <<: *if-merge-request
changes: *dependency-patterns
- <<: *if-merge-request-labels-run-all-e2e
@@ -902,8 +976,6 @@
rules:
- <<: *if-not-ee
when: never
- - <<: *if-merge-request-labels-pipeline-expedite
- when: never
- !reference [".build-images:rules:build-assets-image", "rules"]
#################
@@ -1072,10 +1144,12 @@
- <<: *if-merge-request-labels-pipeline-expedite
when: never
- <<: *if-merge-request-targeting-stable-branch
+ changes: *setup-test-env-patterns
- <<: *if-merge-request-labels-run-review-app
- <<: *if-merge-request-labels-run-all-e2e
- <<: *if-auto-deploy-branches
- <<: *if-ruby2-branch
+ - <<: *if-default-branch-schedule-nightly
- <<: *if-default-refs
changes: *ci-build-images-patterns
- <<: *if-default-refs
@@ -1280,17 +1354,6 @@
##########
# Notify #
##########
-.notify:rules:create-issues-for-failing-tests:
- rules:
- - <<: *if-not-canonical-namespace
- when: never
- # Don't report child pipeline failures
- - if: '$CI_PIPELINE_SOURCE == "parent_pipeline"'
- when: never
- - if: '$CREATE_ISSUES_FOR_FAILING_TESTS == "true"'
- when: on_failure
- allow_failure: true
-
.notify:rules:notify-package-and-test-failure:
rules:
- <<: *if-not-canonical-namespace
@@ -1298,6 +1361,7 @@
- <<: *if-security-merge-request
when: never
- <<: *if-merge-request-targeting-stable-branch
+ changes: *setup-test-env-patterns
when: always
###############
@@ -1310,6 +1374,13 @@
############
# QA rules #
############
+.qa:rules:code-merge-request-manual:
+ rules:
+ - <<: *if-merge-request
+ changes: *code-patterns
+ when: manual
+ allow_failure: true
+
.qa:rules:internal:
rules:
- <<: *if-default-refs
@@ -1341,6 +1412,7 @@
- <<: *if-merge-request-labels-pipeline-expedite
when: never
- <<: *if-merge-request-targeting-stable-branch
+ changes: *setup-test-env-patterns
allow_failure: true
- <<: *if-merge-request
changes: *code-backstage-qa-patterns
@@ -1369,7 +1441,7 @@
- <<: *if-force-ci
allow_failure: true
-.qa:rules:package-and-test-common:
+.qa:rules:package-and-test-never-run:
rules:
- <<: *if-not-canonical-namespace
when: never
@@ -1377,7 +1449,12 @@
when: never
- <<: *if-merge-request-labels-pipeline-expedite
when: never
+
+.qa:rules:package-and-test-common:
+ rules:
+ - !reference [".qa:rules:package-and-test-never-run", rules]
- <<: *if-merge-request-targeting-stable-branch
+ changes: *setup-test-env-patterns
allow_failure: true
- <<: *if-ruby2-branch
allow_failure: true
@@ -1417,17 +1494,16 @@
- <<: *if-force-ci
when: manual
allow_failure: true
- - <<: *if-merge-request
- changes: *code-patterns
- when: manual
- allow_failure: true
+ # We used to have a rule at the end here that would catch any remaining code MRs and allow the job to be run
+ # manually. That rule is now in ".qa:rules:code-merge-request-manual" so it can be included when needed and we can
+ # still use ".qa:rules:package-and-test-common" in jobs we don't want to be manual.
.qa:rules:package-and-test-schedule:
rules:
- <<: *if-dot-com-gitlab-org-schedule
allow_failure: true
variables:
- SKIP_REPORT_IN_ISSUES: "false"
+ CREATE_TEST_FAILURE_ISSUES: "true"
PROCESS_TEST_RESULTS: "true"
KNAPSACK_GENERATE_REPORT: "true"
UPDATE_QA_CACHE: "true"
@@ -1436,17 +1512,15 @@
.qa:rules:package-and-test-ee:
rules:
+ - <<: *if-default-branch-schedule-nightly # already executed in the 2-hourly schedule
+ when: never
- !reference [".qa:rules:package-and-test-common", rules]
- !reference [".qa:rules:package-and-test-schedule", rules]
+ - !reference [".qa:rules:code-merge-request-manual", rules]
.qa:rules:package-and-test-ce:
rules:
- - <<: *if-not-canonical-namespace
- when: never
- - <<: *if-not-ee
- when: never
- - <<: *if-merge-request-labels-pipeline-expedite
- when: never
+ - !reference [".qa:rules:package-and-test-never-run", rules]
- <<: *if-dot-com-gitlab-org-and-security-merge-request
changes: *ci-build-images-patterns
when: manual
@@ -1455,22 +1529,30 @@
changes: *code-qa-patterns
when: manual
allow_failure: true
+ - <<: *if-default-branch-schedule-nightly
+ allow_failure: true
+ variables:
+ CREATE_TEST_FAILURE_ISSUES: "true"
+ PROCESS_TEST_RESULTS: "true"
+ QA_SAVE_TEST_METRICS: "true"
+ QA_EXPORT_TEST_METRICS: "false"
.qa:rules:e2e:test-on-gdk:
rules:
- if: '$QA_RUN_TESTS_ON_GDK !~ /true|yes|1/i'
when: never
+ - <<: *if-default-branch-schedule-nightly # already executed in the 2-hourly schedule
+ when: never
- !reference [".qa:rules:package-and-test-common", rules]
- !reference [".qa:rules:package-and-test-schedule", rules]
+ # Run automatically in all other code MRs that weren't included in ".qa:rules:package-and-test-common".
+ - <<: *if-merge-request
+ changes: *code-patterns
+ allow_failure: true
-.qa:rules:package-and-test-sidebar:
+.qa:rules:package-and-test-old-nav:
rules:
- - <<: *if-not-canonical-namespace
- when: never
- - <<: *if-not-ee
- when: never
- - <<: *if-merge-request-labels-pipeline-expedite
- when: never
+ - !reference [".qa:rules:package-and-test-never-run", rules]
- <<: *if-merge-request
changes: *code-patterns
when: manual
@@ -1478,7 +1560,7 @@
- <<: *if-default-branch-schedule-nightly
allow_failure: true
variables:
- SKIP_REPORT_IN_ISSUES: "false"
+ CREATE_TEST_FAILURE_ISSUES: "true"
PROCESS_TEST_RESULTS: "true"
QA_SAVE_TEST_METRICS: "true"
QA_EXPORT_TEST_METRICS: "false"
@@ -1486,12 +1568,24 @@
.qa:rules:package-and-test-nightly:
rules:
- <<: *if-default-branch-schedule-nightly
+ allow_failure: true
variables:
KNAPSACK_GENERATE_REPORT: "true"
- SKIP_REPORT_IN_ISSUES: "false"
+ PROCESS_TEST_RESULTS: "true"
+ CREATE_TEST_FAILURE_ISSUES: "true"
QA_SAVE_TEST_METRICS: "true"
QA_EXPORT_TEST_METRICS: "false"
+.qa:rules:trigger-omnibus:
+ rules:
+ - !reference [".qa:rules:package-and-test-nightly", rules]
+ - !reference [".qa:rules:package-and-test-ee", rules]
+
+.qa:rules:trigger-omnibus-ce:
+ rules:
+ - !reference [".qa:rules:package-and-test-nightly", rules]
+ - !reference [".qa:rules:package-and-test-ce", rules]
+
###############
# Rails rules #
###############
@@ -1501,6 +1595,15 @@
changes: *setup-test-env-patterns
- <<: *if-merge-request-labels-run-all-rspec
+.rails:rules:single-redis:
+ rules:
+ - <<: *if-merge-request-labels-run-single-db
+ - <<: *if-merge-request-labels-pipeline-expedite
+ when: never
+ - <<: *if-merge-request
+ changes: *redis-patterns
+ - <<: *if-default-branch-schedule-nightly
+
.rails:rules:single-db:
rules:
- <<: *if-merge-request-labels-run-single-db
@@ -2210,17 +2313,6 @@
- <<: *if-default-refs
changes: *python-patterns
-.reports:rules:yarn-audit-dependency_scanning:
- rules:
- - <<: *if-merge-request-labels-pipeline-expedite
- when: never
- - if: '$DEPENDENCY_SCANNING_DISABLED || $GITLAB_FEATURES !~ /\bdependency_scanning\b/'
- when: never
- # Run Dependency Scanning on master until https://gitlab.com/gitlab-org/gitlab/-/issues/361657 is resolved
- - <<: *if-default-branch-refs
- - <<: *if-default-refs
- changes: *nodejs-patterns
-
.reports:rules:test-dast:
rules:
- <<: *if-merge-request-labels-pipeline-expedite
@@ -2411,25 +2503,6 @@
- <<: *if-default-refs
changes: *code-backstage-patterns
-.setup:rules:rails-production-server-boot:
- rules:
- - <<: *if-default-refs
- changes: *code-patterns
-
-.setup:rules:no-ee-check:
- rules:
- - <<: *if-not-foss
- when: never
- - <<: *if-default-refs
- changes: *code-backstage-patterns
-
-.setup:rules:no-jh-check:
- rules:
- - <<: *if-jh
- when: never
- - <<: *if-default-refs
- changes: *code-backstage-patterns
-
.setup:rules:verify-ruby-3.0:
rules:
- <<: *if-merge-request-labels-run-in-ruby2
@@ -2461,6 +2534,29 @@
- "scripts/rspec_helpers.sh"
#######################
+# Preflight rules #
+#######################
+
+.preflight:rules:rails-production-server-boot:
+ rules:
+ - <<: *if-default-refs
+ changes: *code-patterns
+
+.preflight:rules:no-ee-check:
+ rules:
+ - <<: *if-not-foss
+ when: never
+ - <<: *if-default-refs
+ changes: *code-backstage-patterns
+
+.preflight:rules:no-jh-check:
+ rules:
+ - <<: *if-jh
+ when: never
+ - <<: *if-default-refs
+ changes: *code-backstage-patterns
+
+#######################
# Test metadata rules #
#######################
.test-metadata:rules:retrieve-tests-metadata:
diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml
index 36e2c338748..85409d37fa4 100644
--- a/.gitlab/ci/setup.gitlab-ci.yml
+++ b/.gitlab/ci/setup.gitlab-ci.yml
@@ -83,8 +83,8 @@ verify-approvals:
generate-frontend-fixtures-mapping:
extends:
- .setup:rules:generate-frontend-fixtures-mapping
- - .use-pg13
- - .rails-cache
+ - .use-pg14
+ - .ruby-cache
needs: ["setup-test-env"]
stage: prepare
before_script:
@@ -171,3 +171,46 @@ e2e-test-pipeline-generate:
expire_in: 1 day
paths:
- '*-pipeline.yml'
+ - "${CI_PROJECT_DIR}/qa_tests_vars.env"
+
+trigger-omnibus-env:
+ stage: prepare
+ extends:
+ - .qa:rules:package-and-test-ee
+ needs:
+ # We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream omnibus-gitlab pipeline.
+ - compile-production-assets
+ variables:
+ BUILD_ENV: build.env
+ before_script:
+ - source scripts/utils.sh
+ script:
+ - |
+ SECURITY_SOURCES=$([[ ! "$CI_PROJECT_NAMESPACE" =~ ^gitlab-org\/security ]] || echo "true")
+ echo "SECURITY_SOURCES=${SECURITY_SOURCES:-false}" > $BUILD_ENV
+ echo "OMNIBUS_GITLAB_CACHE_UPDATE=${OMNIBUS_GITLAB_CACHE_UPDATE:-false}" >> $BUILD_ENV
+ for version_file in *_VERSION; do echo "$version_file=$(cat $version_file)" >> $BUILD_ENV; done
+ echo "OMNIBUS_GITLAB_RUBY3_BUILD=${OMNIBUS_GITLAB_RUBY3_BUILD:-false}" >> $BUILD_ENV
+ echo "OMNIBUS_GITLAB_RUBY2_BUILD=${OMNIBUS_GITLAB_RUBY2_BUILD:-false}" >> $BUILD_ENV
+ echo "OMNIBUS_GITLAB_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV
+ echo "OMNIBUS_GITLAB_BUILD_ON_ALL_OS=${OMNIBUS_GITLAB_BUILD_ON_ALL_OS:-false}" >> $BUILD_ENV
+ echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
+ echo "EE=$([[ $FOSS_ONLY == '1' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV
+ target_branch_name="${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_COMMIT_REF_NAME}}"
+ echo "TRIGGER_BRANCH=$([[ "${target_branch_name}" =~ ^[0-9-]+-stable(-ee)?$ ]] && echo ${target_branch_name%-ee} || echo 'master')" >> $BUILD_ENV
+ - |
+ echo "Built environment file for omnibus build:"
+ cat $BUILD_ENV
+ artifacts:
+ expire_in: 3 days
+ reports:
+ dotenv: $BUILD_ENV
+ paths:
+ - $BUILD_ENV
+
+trigger-omnibus-env as-if-foss:
+ extends:
+ - trigger-omnibus-env
+ - .qa:rules:package-and-test-ce
+ needs:
+ - compile-production-assets as-if-foss
diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml
index b9c9200d78b..b351a63ecf0 100644
--- a/.gitlab/ci/static-analysis.gitlab-ci.yml
+++ b/.gitlab/ci/static-analysis.gitlab-ci.yml
@@ -45,7 +45,7 @@ static-verification-with-database:
- .static-analysis-base
- .rubocop-job-cache
- .static-analysis:rules:static-verification-with-database
- - .use-pg13
+ - .use-pg14
script:
- bundle exec rake lint:static_verification_with_database
variables:
@@ -211,7 +211,7 @@ ping-appsec-for-sast-findings:
- .ping-appsec-for-sast-findings:rules
variables:
# Project Access Token bot ID for /gitlab-com/gl-security/appsec/sast-custom-rules
- BOT_USER_ID: 13559989
+ BOT_USER_ID: 14406065
needs:
- semgrep-appsec-custom-rules
script:
diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml
index 41fd0b49173..85d3ea11ac6 100644
--- a/.gitlab/ci/test-metadata.gitlab-ci.yml
+++ b/.gitlab/ci/test-metadata.gitlab-ci.yml
@@ -17,6 +17,7 @@ retrieve-tests-metadata:
# We use a smaller image for this job only (update-tests-metadata compiles some gems)
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-slim
stage: prepare
+ needs: []
script:
- apt-get update && apt-get install -y curl # Not present in ruby-slim, so we add it manually
- install_gitlab_gem
@@ -32,17 +33,17 @@ update-tests-metadata:
- retrieve-tests-metadata
- generate-frontend-fixtures-mapping
- setup-test-env
- - rspec migration pg13
+ - rspec migration pg14
- rspec-all frontend_fixture
- - rspec unit pg13
- - rspec integration pg13
- - rspec system pg13
- - rspec background_migration pg13
- - rspec-ee migration pg13
- - rspec-ee unit pg13
- - rspec-ee integration pg13
- - rspec-ee system pg13
- - rspec-ee background_migration pg13
+ - rspec unit pg14
+ - rspec integration pg14
+ - rspec system pg14
+ - rspec background_migration pg14
+ - rspec-ee migration pg14
+ - rspec-ee unit pg14
+ - rspec-ee integration pg14
+ - rspec-ee system pg14
+ - rspec-ee background_migration pg14
script:
- run_timed_command "retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document"
- source ./scripts/rspec_helpers.sh
diff --git a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
index 6073098ef06..767dc8433d2 100644
--- a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
+++ b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
@@ -1,85 +1,166 @@
include:
+ - local: .gitlab/ci/global.gitlab-ci.yml
- local: .gitlab/ci/qa-common/main.gitlab-ci.yml
- local: .gitlab/ci/qa-common/rules.gitlab-ci.yml
- local: .gitlab/ci/qa-common/variables.gitlab-ci.yml
-.run-tests:
+variables:
+ COLORIZED_LOGS: "true"
+ GIT_DEPTH: "20"
+ GIT_STRATEGY: "clone" # 'GIT_STRATEGY: clone' optimizes the pack-objects cache hit ratio
+ GIT_SUBMODULE_STRATEGY: "none"
+
+.gdk-qa-base:
+ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}:bundler-2.3-git-2.36-lfs-2.9-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}-gcloud-383-kubectl-1.23
+ extends:
+ - .qa-cache
stage: test
- image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}
services:
- docker:${DOCKER_VERSION}-dind
tags:
- e2e
- before_script:
- - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- - sysctl -n -w fs.inotify.max_user_watches=524288
- - echo "SUITE_RAN=true" > suite_status.env
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
- QA_GDK_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-qa-gdk:master"
QA_GENERATE_ALLURE_REPORT: "true"
QA_CAN_TEST_PRAEFECT: "false"
QA_INTERCEPT_REQUESTS: "false"
- TEST_LICENSE_MODE: $QA_TEST_LICENSE_MODE
- EE_LICENSE: $QA_EE_LICENSE
- GITHUB_ACCESS_TOKEN: $QA_GITHUB_ACCESS_TOKEN
GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN
- RSPEC_REPORT_OPTS: "--format QA::Support::JsonFormatter --out tmp/rspec-${CI_JOB_ID}.json --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml --format html --out tmp/rspec-${CI_JOB_ID}.htm --color --format documentation"
- timeout: 2 hours
- artifacts:
- when: always
- paths:
- - test_output
- - logs
- expire_in: 7 days
- reports:
- junit: test_output/**/rspec-*.xml
- dotenv: suite_status.env
- script:
+ RSPEC_REPORT_OPTS: "--order random --force-color --format documentation --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml --format QA::Support::JsonFormatter --out tmp/rspec-${CI_JOB_ID}.json --format html --out tmp/rspec-${CI_JOB_ID}.htm"
+ FF_NETWORK_PER_BUILD: 1
+ GDK_URL: http://gdk.test:3000
+ before_script:
+ - echo "SUITE_RAN=true" > suite_status.env
- echo -e "\e[0Ksection_start:`date +%s`:pull_image\r\e[0KPull GDK QA image"
- - docker pull ${QA_GDK_IMAGE}
+ - docker pull ${GDK_IMAGE}
- echo -e "\e[0Ksection_end:`date +%s`:pull_image\r\e[0K"
- - echo -e "\e[0Ksection_start:`date +%s`:launch_gdk_and_tests\r\e[0KLaunch GDK and run QA tests"
- - cd qa && bundle install --jobs=$(nproc) --retry=3 --quiet
- - mkdir -p $CI_PROJECT_DIR/test_output $CI_PROJECT_DIR/logs/gdk $CI_PROJECT_DIR/logs/gitlab
+ # Despite `incremental: false` and `static: true`, GDK sometimes fails to start without increasing max user watches
+ # This is why we're not running the GDK container as a service
+ - sysctl -n -w fs.inotify.max_user_watches=524288
+ - echo -e "\e[0Ksection_start:`date +%s`:launch_gdk\r\e[0KLaunch GDK"
+ - mkdir -p $CI_PROJECT_DIR/log/gdk $CI_PROJECT_DIR/log/gitlab
# This command matches the permissions of the user that runs GDK inside the container.
- - chown -R 1000:1000 $CI_PROJECT_DIR/test_output $CI_PROJECT_DIR/logs $CI_PROJECT_DIR/qa/knapsack
+ - chown -R 1000:1000 $CI_PROJECT_DIR/log
- |
- docker run --rm --name gdk --add-host gdk.test:127.0.0.1 --shm-size=2gb \
- --env-file <(bundle exec rake ci:env_var_name_list) \
- --volume /var/run/docker.sock:/var/run/docker.sock:z \
- --volume $CI_PROJECT_DIR/test_output:/home/gdk/gdk/gitlab/qa/tmp:z \
- --volume $CI_PROJECT_DIR/logs/gdk:/home/gdk/gdk/log \
- --volume $CI_PROJECT_DIR/logs/gitlab:/home/gdk/gdk/gitlab/log \
- --volume $CI_PROJECT_DIR/qa/knapsack:/home/gdk/gdk/gitlab/qa/knapsack \
- ${QA_GDK_IMAGE} "${CI_COMMIT_SHA}" "$RSPEC_REPORT_OPTS $TEST_GDK_TAGS --tag ~requires_praefect"
- # The above image's launch script takes two arguments only - first one is the commit sha and the second one Rspec Args
- allow_failure: true
+ docker run -d --rm --name gdk --network host \
+ --volume $CI_PROJECT_DIR/log/gdk:/home/gdk/gitlab-development-kit/log \
+ --volume $CI_PROJECT_DIR/log/gitlab:/home/gdk/gitlab-development-kit/gitlab/log \
+ ${GDK_IMAGE}
+ # With `FF_NETWORK_PER_BUILD=1` and `--network host` the IP of the gdk container should be 172.18.0.2, but we get it
+ # dynamically just in case
+ - echo "$(docker exec gdk bash -c "getent hosts \$HOSTNAME" | awk '{print $1}') gdk.test" >> /etc/hosts
+ - source scripts/utils.sh
+ - cd qa && bundle install
+ script:
+ - retry_exponential test_url ${GDK_URL}/users/sign_in
+ - echo -e "\e[0Ksection_end:`date +%s`:launch_gdk\r\e[0K"
+ - echo -e "\e[0Ksection_start:`date +%s`:run_tests\r\e[0KRun E2E tests"
+ - QA_COMMAND="bundle exec bin/qa Test::Instance::All ${GDK_URL} -- ${RSPEC_TAGS} ${RSPEC_REPORT_OPTS}"
+ - echo "Running - '${QA_COMMAND}'"
+ - eval "$QA_COMMAND"
+ - echo -e "\e[0Ksection_end:`date +%s`:run_tests\r\e[0K"
after_script:
- |
if [ "$CI_JOB_STATUS" == "failed" ]; then
echo "SUITE_FAILED=true" >> suite_status.env
fi
+ - docker stop gdk
+ artifacts:
+ paths:
+ - qa/tmp
+ - log
+ reports:
+ junit: qa/tmp/rspec-*.xml
+ dotenv: suite_status.env
+ expire_in: 7 days
+ when: always
+ allow_failure: true
-download-knapsack-report:
+cache-gems:
extends:
- - .download-knapsack-report
- - .rules:download-knapsack
+ - .ruby-image
+ - .qa-cache-push
+ - .rules:update-cache
+ stage: .pre
+ tags:
+ - e2e
+ script:
+ - cd qa && bundle install
+
+# Take the existing GDK docker image and reconfigure it with Postgres load
+# balancing. Adding 5s lag to 1 of the replicas to validate robustness of
+# the load balancer.
+.gdk-with-load-balancer-setup:
+ before_script:
+ - !reference [".gdk-qa-base", "before_script"]
+ - |
+ docker exec gdk bash -c "
+ gdk config set postgresql.replica.enabled true &&\
+ gdk config set postgresql.replica_2.enabled true &&\
+ gdk config set load_balancing.enabled true &&\
+ gdk reconfigure &&\
+ gdk restart"
-test-on-gdk-smoke:
+gdk-qa-smoke:
extends:
- - .run-tests
- parallel: 2
+ - .gdk-qa-base
variables:
TEST_GDK_TAGS: "--tag smoke"
+ QA_RUN_TYPE: gdk-qa-smoke
+ RSPEC_TAGS: --tag smoke
rules:
- when: always
-test-on-gdk-full:
+gdk-qa-smoke-with-load-balancer:
+ extends:
+ - .gdk-qa-base
+ - .gdk-with-load-balancer-setup
+ variables:
+ TEST_GDK_TAGS: "--tag smoke"
+ QA_RUN_TYPE: gdk-qa-smoke
+ RSPEC_TAGS: --tag smoke
+ rules:
+ - changes:
+ - ".gitlab/ci/test-on-gdk/**"
+ - "lib/gitlab/database/load_balancing/**/*"
+
+# TODO: set non manual once smoke tests prove to be stable
+gdk-qa-reliable:
+ extends:
+ - .gdk-qa-base
+ parallel: 5
+ variables:
+ QA_RUN_TYPE: gdk-qa-blocking
+ QA_KNAPSACK_REPORT_NAME: ee-instance-parallel
+ RSPEC_TAGS: --tag smoke --tag reliable
+ allow_failure: true
+ rules:
+ - when: manual
+
+gdk-qa-reliable-with-load-balancer:
extends:
- - .run-tests
+ - .gdk-qa-base
+ - .gdk-with-load-balancer-setup
parallel: 5
+ variables:
+ QA_RUN_TYPE: gdk-qa-blocking
+ QA_KNAPSACK_REPORT_NAME: ee-instance-parallel
+ RSPEC_TAGS: --tag smoke --tag reliable
+ allow_failure: true
+ rules:
+ - changes:
+ - ".gitlab/ci/test-on-gdk/**"
+ - "lib/gitlab/database/load_balancing/**/*"
+
+gdk-qa-non-blocking:
+ extends:
+ - .gdk-qa-base
+ parallel: 5
+ variables:
+ QA_RUN_TYPE: gdk-qa-non-blocking
+ QA_KNAPSACK_REPORT_NAME: ee-instance-parallel
+ QA_SKIP_SMOKE_RELIABLE: "true"
+ allow_failure: true
rules:
- when: manual
@@ -91,39 +172,37 @@ e2e-test-report:
- .e2e-test-report
- .rules:report:allure-report
variables:
- ALLURE_RESULTS_GLOB: test_output/allure-results
+ ALLURE_RESULTS_GLOB: qa/tmp/allure-results
upload-knapsack-report:
extends:
- .upload-knapsack-report
- .rules:report:process-results
variables:
- QA_KNAPSACK_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/test_output/knapsack/*/*.json
+ QA_KNAPSACK_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/knapsack/*/*.json
export-test-metrics:
extends:
- .export-test-metrics
- .rules:report:process-results
variables:
- QA_METRICS_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/test_output/test-metrics-*.json
+ QA_METRICS_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/test-metrics-*.json
-relate-test-failures:
- extends:
- - .relate-test-failures
- - .rules:report:process-results
+.gitlab-qa-report:
variables:
- QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/test_output/rspec-*.json
+ QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/rspec-*.json
+ QA_SYSTEM_LOG_FILE_PATTERN: $CI_PROJECT_DIR/test_output/logs
generate-test-session:
extends:
- .generate-test-session
- .rules:report:process-results
variables:
- QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/test_output/rspec-*.json
+ QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/rspec-*.json
notify-slack:
extends:
- .notify-slack
- .rules:report:process-results
variables:
- QA_RSPEC_XML_FILE_PATTERN: $CI_PROJECT_DIR/test_output/rspec-*.xml
+ QA_RSPEC_XML_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/rspec-*.xml
diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml
index ae0b15bbdb8..603f67079c2 100644
--- a/.gitlab/ci/workhorse.gitlab-ci.yml
+++ b/.gitlab/ci/workhorse.gitlab-ci.yml
@@ -26,7 +26,7 @@ workhorse:test go:
extends: .workhorse:test
parallel:
matrix:
- - GO_VERSION: ["1.18", "1.19"]
+ - GO_VERSION: ["1.18", "1.19", "1.20"]
script:
- make -C workhorse test-coverage
coverage: '/\d+.\d+%/'
@@ -38,7 +38,7 @@ workhorse:test fips:
extends: .workhorse:test
parallel:
matrix:
- - GO_VERSION: ["1.18", "1.19"]
+ - GO_VERSION: ["1.18", "1.19", "1.20"]
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/ubi-${UBI_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}-rust-${RUST_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-2.36-exiftool-12.60
variables:
FIPS_MODE: 1
diff --git a/.gitlab/issue_templates/AI Project Proposal.md b/.gitlab/issue_templates/AI Project Proposal.md
index 072e7ed9ed3..9ec22c18b4a 100644
--- a/.gitlab/issue_templates/AI Project Proposal.md
+++ b/.gitlab/issue_templates/AI Project Proposal.md
@@ -14,7 +14,7 @@ The title should be something that is easily understood that quickly communicate
This section should be completed prior to work on the Experiment beginning.
-# [Experiment](https://docs.gitlab.com/ee/policy/alpha-beta-support.html#experiment)
+# [Experiment](https://docs.gitlab.com/ee/policy/experiment-beta-support.html#experiment)
## Problem to be solved
diff --git a/.gitlab/issue_templates/Design Sprint.md b/.gitlab/issue_templates/Design Sprint.md
index f85d41a112e..9eaa9da3675 100644
--- a/.gitlab/issue_templates/Design Sprint.md
+++ b/.gitlab/issue_templates/Design Sprint.md
@@ -139,24 +139,25 @@ Each exercise should be explained and documented in a separate issue. You can us
Deciding which persona we are focusing on will be part of the Day 1 discussions in the workshop. The personas we are going to consider are:
-<!-- Choose which personas could be target users so that you choose from this list during the Sprint. Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
-
-* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
-* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
-* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
-* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
-* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
-* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
-* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
-* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
-* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
-* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
-* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
-* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
+<!-- Choose which personas could be target users so that you choose from this list during the Sprint. Personas are described at https://about.gitlab.com/handbook/product/personas/
+
+* [Parker (Product Manager)](https://about.gitlab.com/handbook/product/personas/#parker-product-manager)
+* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/product/personas/#delaney-development-team-lead)
+* [Presley (Product Designer)](https://about.gitlab.com/handbook/product/personas/#presley-product-designer)
+* [Sasha (Software Developer)](https://about.gitlab.com/handbook/product/personas/#sasha-software-developer)
+* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/product/personas/#priyanka-platform-engineer)
+* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/product/personas/#sidney-systems-administrator)
+* [Rachel (Release Manager)](https://about.gitlab.com/handbook/product/personas/#rachel-release-manager)
+* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/product/personas/#simone-software-engineer-in-test)
+* [Allison (Application Ops)](https://about.gitlab.com/handbook/product/personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
-* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
-* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
+* [Dana (Data Analyst)](https://about.gitlab.com/handbook/product/personas/#dana-data-analyst)
+* [Eddie (Content Editor)](https://about.gitlab.com/handbook/product/personas/#eddie-content-editor)
+* [Amy (Application Security Engineer)](https://about.gitlab.com/handbook/product/personas/#amy-application-security-engineer)
+* [Isaac (Infrastructure Engineer)](https://about.gitlab.com/handbook/product/personas/#isaac-infrastructure-security-engineer)
+* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/product/personas/#alex-security-operations-engineer)
+* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/product/personas/#cameron-compliance-manager)
-->
diff --git a/.gitlab/issue_templates/Documentation.md b/.gitlab/issue_templates/Documentation.md
index c58b6d0cf06..82de14717a6 100644
--- a/.gitlab/issue_templates/Documentation.md
+++ b/.gitlab/issue_templates/Documentation.md
@@ -24,7 +24,7 @@
* Any concepts, procedures, reference info we could add to make it easier to successfully use GitLab?
* Include use cases, benefits, and/or goals for this work.
* If adding content: What audience is it intended for? (What roles and scenarios?)
- For ideas, see personas at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ or the persona labels at
+ For ideas, see personas at https://about.gitlab.com/handbook/product/personas/ or the persona labels at
https://gitlab.com/groups/gitlab-org/-/labels?subscribed=&search=persona%3A
-->
diff --git a/.gitlab/issue_templates/Experiment Implementation.md b/.gitlab/issue_templates/Experiment Implementation.md
index 56202240ef5..481389f8023 100644
--- a/.gitlab/issue_templates/Experiment Implementation.md
+++ b/.gitlab/issue_templates/Experiment Implementation.md
@@ -12,13 +12,13 @@
# Inclusions and exclusions
<!-- These would be the rules for which given context (and are limited to context or resolvable at experiment time details) is included or excluded from the test. An example of this would be to only run an experiment on groups less than N number of days old. -->
-# Segmentation
+# Segmentation
<!-- Rules for always saying context with these criteria always get this variant. For instance, if you want to always give groups less than N number of days old the experiment experience, they are specified here. This is different from the exclusion rules above. -->
# Tracking Details
- [json schema](https://gitlab.com/gitlab-org/iglu/-/blob/master/public/schemas/com.gitlab/gitlab_experiment/jsonschema/0-3-0) used in `gitlab-experiment` tracking.
-- see [event schema](https://docs.gitlab.com/ee/development/snowplow/index.html#event-schema) for a guide.
+- see [event schema](../../doc/development/internal_analytics/snowplow/index.md#event-schema) for a guide.
| sequence | activity | category | action | label | property | value |
| -------- | -------- | ------ | ----- | ------- | -------- | ----- |
diff --git a/.gitlab/issue_templates/Feature Proposal - lean.md b/.gitlab/issue_templates/Feature Proposal - lean.md
index 3997ffa5c85..7b7402e4d18 100644
--- a/.gitlab/issue_templates/Feature Proposal - lean.md
+++ b/.gitlab/issue_templates/Feature Proposal - lean.md
@@ -18,24 +18,25 @@ The goal of this template is brevity for quick/smaller iterations. For a more th
<!-- Who will use this feature? If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
-Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
-
-* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
-* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
-* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
-* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
-* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
-* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
-* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
-* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
-* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
-* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
-* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
-* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
+Personas are described at https://about.gitlab.com/handbook/product/personas/
+
+* [Parker (Product Manager)](https://about.gitlab.com/handbook/product/personas/#parker-product-manager)
+* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/product/personas/#delaney-development-team-lead)
+* [Presley (Product Designer)](https://about.gitlab.com/handbook/product/personas/#presley-product-designer)
+* [Sasha (Software Developer)](https://about.gitlab.com/handbook/product/personas/#sasha-software-developer)
+* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/product/personas/#priyanka-platform-engineer)
+* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/product/personas/#sidney-systems-administrator)
+* [Rachel (Release Manager)](https://about.gitlab.com/handbook/product/personas/#rachel-release-manager)
+* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/product/personas/#simone-software-engineer-in-test)
+* [Allison (Application Ops)](https://about.gitlab.com/handbook/product/personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
-* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
-* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
+* [Dana (Data Analyst)](https://about.gitlab.com/handbook/product/personas/#dana-data-analyst)
+* [Eddie (Content Editor)](https://about.gitlab.com/handbook/product/personas/#eddie-content-editor)
+* [Amy (Application Security Engineer)](https://about.gitlab.com/handbook/product/personas/#amy-application-security-engineer)
+* [Isaac (Infrastructure Engineer)](https://about.gitlab.com/handbook/product/personas/#isaac-infrastructure-security-engineer)
+* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/product/personas/#alex-security-operations-engineer)
+* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/product/personas/#cameron-compliance-manager)
-->
### Feature Usage Metrics
diff --git a/.gitlab/issue_templates/Feature proposal - detailed.md b/.gitlab/issue_templates/Feature proposal - detailed.md
index dcf6d417155..b3398509684 100644
--- a/.gitlab/issue_templates/Feature proposal - detailed.md
+++ b/.gitlab/issue_templates/Feature proposal - detailed.md
@@ -12,24 +12,25 @@
<!-- Who will use this feature? If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
-Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
-
-* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
-* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
-* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
-* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
-* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
-* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
-* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
-* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
-* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
-* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
-* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
-* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
+Personas are described at https://about.gitlab.com/handbook/product/personas/
+
+* [Parker (Product Manager)](https://about.gitlab.com/handbook/product/personas/#parker-product-manager)
+* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/product/personas/#delaney-development-team-lead)
+* [Presley (Product Designer)](https://about.gitlab.com/handbook/product/personas/#presley-product-designer)
+* [Sasha (Software Developer)](https://about.gitlab.com/handbook/product/personas/#sasha-software-developer)
+* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/product/personas/#priyanka-platform-engineer)
+* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/product/personas/#sidney-systems-administrator)
+* [Rachel (Release Manager)](https://about.gitlab.com/handbook/product/personas/#rachel-release-manager)
+* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/product/personas/#simone-software-engineer-in-test)
+* [Allison (Application Ops)](https://about.gitlab.com/handbook/product/personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
-* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
-* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
+* [Dana (Data Analyst)](https://about.gitlab.com/handbook/product/personas/#dana-data-analyst)
+* [Eddie (Content Editor)](https://about.gitlab.com/handbook/product/personas/#eddie-content-editor)
+* [Amy (Application Security Engineer)](https://about.gitlab.com/handbook/product/personas/#amy-application-security-engineer)
+* [Isaac (Infrastructure Engineer)](https://about.gitlab.com/handbook/product/personas/#isaac-infrastructure-security-engineer)
+* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/product/personas/#alex-security-operations-engineer)
+* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/product/personas/#cameron-compliance-manager)
-->
@@ -112,7 +113,7 @@ Create tracking issue using the Snowplow event tracking template. See https://gi
### What is the type of buyer?
-<!-- What is the buyer persona for this feature? See https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/buyer-persona/
+<!-- What is the buyer persona for this feature? See https://about.gitlab.com/handbook/product/personas/buyer-persona/
In which enterprise tier should this feature go? See https://about.gitlab.com/handbook/product/pricing/#three-tiers -->
### Is this a cross-stage feature?
diff --git a/.gitlab/issue_templates/Fulfillment Group UX Issue.md b/.gitlab/issue_templates/Fulfillment Group UX Issue.md
index 86db27e1c53..55bbc35089d 100644
--- a/.gitlab/issue_templates/Fulfillment Group UX Issue.md
+++ b/.gitlab/issue_templates/Fulfillment Group UX Issue.md
@@ -6,24 +6,25 @@ The goal of this template is to ensure we have captured all the information avai
<!-- If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
-Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
-
-* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
-* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
-* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
-* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
-* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
-* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
-* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
-* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
-* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
-* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
-* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
-* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
+Personas are described at https://about.gitlab.com/handbook/product/personas/
+
+* [Parker (Product Manager)](https://about.gitlab.com/handbook/product/personas/#parker-product-manager)
+* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/product/personas/#delaney-development-team-lead)
+* [Presley (Product Designer)](https://about.gitlab.com/handbook/product/personas/#presley-product-designer)
+* [Sasha (Software Developer)](https://about.gitlab.com/handbook/product/personas/#sasha-software-developer)
+* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/product/personas/#priyanka-platform-engineer)
+* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/product/personas/#sidney-systems-administrator)
+* [Rachel (Release Manager)](https://about.gitlab.com/handbook/product/personas/#rachel-release-manager)
+* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/product/personas/#simone-software-engineer-in-test)
+* [Allison (Application Ops)](https://about.gitlab.com/handbook/product/personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
-* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
-* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
+* [Dana (Data Analyst)](https://about.gitlab.com/handbook/product/personas/#dana-data-analyst)
+* [Eddie (Content Editor)](https://about.gitlab.com/handbook/product/personas/#eddie-content-editor)
+* [Amy (Application Security Engineer)](https://about.gitlab.com/handbook/product/personas/#amy-application-security-engineer)
+* [Isaac (Infrastructure Engineer)](https://about.gitlab.com/handbook/product/personas/#isaac-infrastructure-security-engineer)
+* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/product/personas/#alex-security-operations-engineer)
+* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/product/personas/#cameron-compliance-manager)
-->
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 05a643c967c..c63a5cb0032 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
@@ -376,7 +376,7 @@ That's all of the required database changes.
```ruby
def replicate_cool_widget_changes(cool_widget)
if ::Gitlab::Geo.primary?
- cool_widget.replicator.handle_after_update if cool_widget
+ cool_widget.geo_handle_after_update if cool_widget
end
end
```
@@ -386,7 +386,7 @@ That's all of the required database changes.
- [ ] Make sure the repository removal is also handled. You may need to add something like the following in the destroy service of the repository:
```ruby
- cool_widget.replicator.handle_after_destroy if cool_widget.repository
+ cool_widget.replicator.geo_handle_after_destroy if cool_widget.repository
```
- [ ] Make sure a Geo secondary site can request and download Cool Widgets on the Geo primary site. You may need to make some changes to `Gitlab::GitAccessCoolWidget`. For example, see [this change for Group-level Wikis](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54914/diffs?commit_id=0f2b36f66697b4addbc69bd377ee2818f648dd33).
@@ -511,13 +511,13 @@ That's all of the required database changes.
FactoryBot.modify do
factory :cool_widget do
trait :verification_succeeded do
- with_file
+ repository
verification_checksum { 'abc' }
verification_state { CoolWidget.verification_state_value(:verification_succeeded) }
end
trait :verification_failed do
- with_file
+ repository
verification_failure { 'Could not calculate the checksum' }
verification_state { CoolWidget.verification_state_value(:verification_failed) }
end
@@ -542,7 +542,6 @@ That's all of the required database changes.
belongs_to :cool_widget, inverse_of: :cool_widget_state
- validates :verification_failure, length: { maximum: 255 }
validates :verification_state, :cool_widget, presence: true
end
end
@@ -568,7 +567,6 @@ That's all of the required database changes.
end
```
-- [ ] Add `[:geo_cool_widget_state, any]` to `skipped` in `spec/models/factories_spec.rb`
#### Step 2. Implement metrics gathering
@@ -588,7 +586,7 @@ Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in `GeoNodeStatus`
- `cool_widgets_synced_in_percentage`
- `cool_widgets_verified_in_percentage`
- [ ] Add the same fields to `GET /geo_nodes/status` example response in
- `ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json`.
+ `ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json` and `ee/spec/fixtures/api/schemas/public_api/v4/geo_site_status.json`.
- [ ] Add the following fields to the `Sidekiq metrics` table in `doc/administration/monitoring/prometheus/gitlab_metrics.md`:
```markdown
| `geo_cool_widgets` | Gauge | XX.Y | Number of Cool Widgets on primary | `url` |
@@ -725,6 +723,40 @@ The GraphQL API is used by `Admin > Geo > Replication Details` views, and is dir
}
```
+To allow the new replicable to resync and reverify via GraphQL:
+
+- [ ] Add the `CoolWidgetRegistryType` to the `GEO_REGISTRY_TYPE` constant in `ee/app/graphql/types/geo/registrable_type.rb`:
+
+ ```ruby
+ GEO_REGISTRY_TYPES = {
+ ::Geo::CoolWidgetRegistry => Types::Geo::CoolWidgetRegistryType
+ }
+ ```
+
+- [ ] Include the `CoolWidgetRegistry` in the `let(:registry_classes)` variable of `ee/spec/graphql/types/geo/registry_class_enum_spec.rb`:
+
+ ```ruby
+ let(:registry_classes) do
+ %w[
+ COOL_WIDGET_REGISTRY
+ ]
+ end
+ ```
+
+- [ ] Include the new registry in the Rspec parameterized table of `ee/spec/support/shared_contexts/graphql/geo/registries_shared_context.rb`:
+
+ ```ruby
+ # frozen_string_literal: true
+
+ RSpec.shared_context 'with geo registries shared context' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:registry_class, :registry_type, :registry_factory) do
+ Geo::CoolWidgetRegistry | Types::Geo::CoolWidgetRegistryType | :geo_cool_widget_registry
+ end
+ end
+ ```
+
- [ ] Update the GraphQL reference documentation:
```shell
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 fc454919cec..91a86a96ac9 100644
--- a/.gitlab/issue_templates/Geo Replicate a new blob type.md
+++ b/.gitlab/issue_templates/Geo Replicate a new blob type.md
@@ -509,7 +509,6 @@ That's all of the required database changes.
belongs_to :cool_widget, inverse_of: :cool_widget_state
- validates :verification_failure, length: { maximum: 255 }
validates :verification_state, :cool_widget, presence: true
end
end
@@ -535,7 +534,7 @@ That's all of the required database changes.
end
```
-- [ ] Add `[:cool_widget, :remote_store]` and `[:geo_cool_widget_state, any]` to `skipped` in `spec/models/factories_spec.rb`
+- [ ] Add `[:cool_widget, :remote_store]` to `skipped` in `spec/models/factories_spec.rb`
#### Step 2. Implement metrics gathering
@@ -555,7 +554,7 @@ Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in `GeoNodeStatus`
- `cool_widgets_synced_in_percentage`
- `cool_widgets_verified_in_percentage`
- [ ] Add the same fields to `GET /geo_nodes/status` example response in
- `ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json`.
+ `ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json` and `ee/spec/fixtures/api/schemas/public_api/v4/geo_site_status.json`.
- [ ] Add the following fields to the `Sidekiq metrics` table in `doc/administration/monitoring/prometheus/gitlab_metrics.md`:
```markdown
@@ -693,6 +692,40 @@ The GraphQL API is used by `Admin > Geo > Replication Details` views, and is dir
}
```
+To allow the new replicable to resync and reverify via GraphQL:
+
+- [ ] Add the `CoolWidgetRegistryType` to the `GEO_REGISTRY_TYPE` constant in `ee/app/graphql/types/geo/registrable_type.rb`:
+
+ ```ruby
+ GEO_REGISTRY_TYPES = {
+ ::Geo::CoolWidgetRegistry => Types::Geo::CoolWidgetRegistryType
+ }
+ ```
+
+- [ ] Include the `CoolWidgetRegistry` in the `let(:registry_classes)` variable of `ee/spec/graphql/types/geo/registry_class_enum_spec.rb`:
+
+ ```ruby
+ let(:registry_classes) do
+ %w[
+ COOL_WIDGET_REGISTRY
+ ]
+ end
+ ```
+
+- [ ] Include the new registry in the Rspec parameterized table of `ee/spec/support/shared_contexts/graphql/geo/registries_shared_context.rb`:
+
+ ```ruby
+ # frozen_string_literal: true
+
+ RSpec.shared_context 'with geo registries shared context' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:registry_class, :registry_type, :registry_factory) do
+ Geo::CoolWidgetRegistry | Types::Geo::CoolWidgetRegistryType | :geo_cool_widget_registry
+ end
+ end
+ ```
+
- [ ] Update the GraphQL reference documentation:
```shell
diff --git a/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md b/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md
index 26dc1c97a99..7fac499fd18 100644
--- a/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md
+++ b/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md
@@ -51,4 +51,4 @@ _NOTE: This section is optional, but can be used for easy access to any relevant
-/label ~"group::pipeline authoring" ~"Category:Pipeline Composition" ~"section::ops" ~"devops::verify" ~"workflow::planning breakdown"
+/label ~"group::pipeline authoring" ~"Category:Pipeline Composition" ~"section::ci" ~"devops::verify" ~"workflow::planning breakdown"
diff --git a/.gitlab/issue_templates/Pipeline Security issue implementation b/.gitlab/issue_templates/Pipeline Security issue implementation
new file mode 100644
index 00000000000..72807e98012
--- /dev/null
+++ b/.gitlab/issue_templates/Pipeline Security issue implementation
@@ -0,0 +1,98 @@
+<!--
+## Implementation Issue To-Do list
+(_NOTE: This section can be removed when the issue is ready for creation_)
+- [ ] Ensure that the issue title is concise yet descriptive.
+- [ ] Add `Frontend :` or `Backend :` to the title per group [naming conventions](https://about.gitlab.com/handbook/engineering/development/ops/verify/pipeline-security/#splitting-issues)
+- [ ] Ensure the issue containing the feature or change proposal and related discussions is linked as related to this implementation issue.
+- [ ] Aside from default labeling, please make sure to include relevant labels for `~type::`, `~workflow::`, and `~frontend` or `~backend`.
+- [ ] Issues with user-facing changes should include the `~UX` label, and `~documentation` if docs changes will be required.
+
+*This template is meant to be a reference tool. Not all sections are applicable to each feature, bug, or maintenance item. Use your best judgment when completion the sections below.*
+-->
+
+## Summary
+<!-- Briefly describe the issue. -->
+
+
+### Why this matters and how we measure
+<!-- What is the value to the customer or our business? Does this align with our OKRs? If we need to create or update existing instrumentation, please note here. -->
+
+### User Stories
+<!--
+A user story is a requirement for any functionality or feature and follows this format:
+
+- _As a `<user role/customer>`, I want to `<JTBD>` so that I can `<achieve a benefit or result>`._
+
+Please try to include one user story for the main [persona](https://about.gitlab.com/handbook/product/personas/#list-of-user-personas) who needs this feature.
+-->
+
+
+## Proposal
+<!-- Try to keep the proposal limited in scope. Plan for iterations, create follow up issues as required and add them as related. -->
+
+## Performance Considerations
+<!-- Performance concerns to be aware of and monitor when implementing the issue.-->
+
+## Out of Scope
+<!-- Include this section for specific use cases that are out of scope / out of bounds for this specific issue. -->
+
+## Acceptance Criteria
+<!-- This needs to be true or demonstrable to consider this specific issue complete. Keep this dependent on other issues when possible -->
+
+## Additional details
+<!--
+_NOTE: If the issue has addressed all of these questions, this separate section can be removed._
+-->
+
+Some relevant technical details, if applicable, such as:
+
+- Does this need a ~"feature flag"?
+- Does there need to be an associated ~"instrumentation" issue created related to this work?
+- Is there an example response showing the data structure that should be returned (new endpoints only)?
+- What permissions should be used?
+- Which tier(s) is this for?
+ - [ ] ~"GitLab Ultimate"
+ - [ ] ~"GitLab Premium"
+ - [ ] ~"GitLab Free"
+- Additional comments:
+
+## Implementation Table
+
+<!--
+_NOTE: Use this to indicate all dependent issues related to this one which are required for launch._
+-->
+
+
+| Group | Issue Link |
+| ------ | ------ |
+| ~backend | :point_left: You are here |
+| ~frontend | [Issue Title](url) |
+| ~documentation | [Issue Title](url) |
+| Instrumentation | [Issue Title](url) |
+
+<!--
+## Documentation
+
+_NOTE: This section is optional, but can be used for easy access to any relevant documentation URLs._
+-->
+
+## Links/References
+
+
+
+
+/label ~"group::pipeline security"
+/milestone %Backlog
+
+<!-- select the correct category (and feature label if applicable) below:
+/label ~"category:Build Artifacts"
+/label ~"category:Secrets Management"
+/label ~"ci variables"
+/label ~"ci job token"
+-->
+
+<!-- select the appropriate licence below (Use the highest tier applicable):
+/label ~"GitLab Ultimate"
+/label ~"GitLab Premium"
+/label ~"GitLab Free"
+-->
diff --git a/.gitlab/issue_templates/Problem Validation.md b/.gitlab/issue_templates/Problem Validation.md
index dee026ee752..dcd2283f4b6 100644
--- a/.gitlab/issue_templates/Problem Validation.md
+++ b/.gitlab/issue_templates/Problem Validation.md
@@ -8,7 +8,7 @@ Learn more about it in the handbook: https://about.gitlab.com/handbook/product-d
## Reach
-<!-- Please describe who suffers from this problem. Consider referring to our personas, which are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ -->
+<!-- Please describe who suffers from this problem. Consider referring to our personas, which are described at https://about.gitlab.com/handbook/product/personas/ -->
<!-- Please also quantify the problem's reach using the following values, considering an aggregate across GitLab.com and self-managed:
diff --git a/.gitlab/issue_templates/Remote Development Group - issue.md b/.gitlab/issue_templates/Remote Development Group - issue.md
new file mode 100644
index 00000000000..80e8f41b521
--- /dev/null
+++ b/.gitlab/issue_templates/Remote Development Group - issue.md
@@ -0,0 +1,68 @@
+MR: Pending
+<!--
+The first line of the MR must be one of the following:
+
+1. `MR: Pending`
+2. `MR: <MR link with trailing +>`,
+ and the first description line of the MR should be `Issue: <Issue link with trailing +>`
+3. `MR: No MR`
+
+For more context, see:
+https://about.gitlab.com/handbook/engineering/development/dev/create/ide/index.html#1-to-1-relationship-of-issues-to-mrs
+-->
+
+<!--
+The following sections should be filled out as part of the refinement process before the issue is prioritized.
+
+For more context, see:
+https://about.gitlab.com/handbook/engineering/development/dev/create/ide/#2-pre-iteration-planning-meeting
+-->
+
+## Description
+
+TODO: Fill out (required)
+`As a [user or stakeholder], I want [goal or objective] so that [reason or benefit].`
+
+## Acceptance Criteria
+
+TODO: Fill out (required)
+- [ ] [Describe what must be achieved to complete this issue.]
+- [ ] [Describe another requirement needed to complete this issue.]
+- [ ] [Add additional acceptance criteria as needed.]
+
+## Technical Requirements
+
+TODO: Fill out or delete
+[If applicable, please list out any technical requirements for this feature/enhancement.]
+
+## Design Requirements
+
+TODO: Fill out or delete
+[If applicable, please provide a link to the design specifications for this feature/enhancement.]
+
+## Impact Assessment
+
+TODO: Fill out or delete
+[Please describe the impact this feature/enhancement will have on the user experience and/or the product as a whole.]
+
+## User Story
+
+TODO: Fill out or delete
+[Provide a user story to illustrate the use case for this feature/enhancement. Include examples to help communicate the intended functionality.]
+
+
+/label ~"Category:Remote Development"
+/label ~"section::dev"
+/label ~"devops::create"
+/label ~"group::ide"
+
+<!-- Replace with other type, e.g. bug or maintenance, if appropriate -->
+/label ~"type::feature"
+<!-- Replace with other subtype if appropriate -->
+/label ~"feature::addition"
+
+<!-- By default, all issues start in the unprioritized status. See https://about.gitlab.com/handbook/engineering/development/dev/create/ide/#-remote-development-planning-process -->
+/label ~"rd-workflow::unprioritized"
+
+<!-- For simplicity and to avoid triage bot warnings about missing workflow labels, we will default to issues starting at the refinement phase -->
+/label ~"workflow::refinement"
diff --git a/.gitlab/issue_templates/Service Ping reporting and monitoring.md b/.gitlab/issue_templates/Service Ping reporting and monitoring.md
index baa384a8aa2..d8d93ee73c4 100644
--- a/.gitlab/issue_templates/Service Ping reporting and monitoring.md
+++ b/.gitlab/issue_templates/Service Ping reporting and monitoring.md
@@ -1,6 +1,6 @@
-<!-- This issue template is used by https://about.gitlab.com/handbook/engineering/development/analytics-section/product-intelligence/ for tracking effort around Service Ping reporting for GitLab.com -->
+<!-- This issue template is used by https://about.gitlab.com/handbook/engineering/development/analytics-section/analytics-instrumentation/ for tracking effort around Service Ping reporting for GitLab.com -->
-The [Product Intelligence group](https://about.gitlab.com/handbook/engineering/development/analytics/product-intelligence/) runs manual reporting of ServicePing for GitLab.com on a weekly basis. This issue:
+The [Analytics Instrumentation group](https://about.gitlab.com/handbook/engineering/development/analytics/analytics-instrumentation/) runs manual reporting of ServicePing for GitLab.com on a weekly basis. This issue:
- Captures the work required to complete the reporting process,.
- Captures the follow-up tasks that are focused on metrics performance verification.
@@ -123,7 +123,7 @@ If you get mentioned, check the failing metric and open an optimization issue.
<!-- Do not edit below this line -->
/confidential
-/label ~"group::product intelligence" ~"devops::analytics" ~backend ~"section::analytics" ~"Category:Service Ping"
+/label ~"group::analytics instrumentation" ~"devops::analytics" ~backend ~"section::analytics" ~"Category:Service Ping"
/epic https://gitlab.com/groups/gitlab-org/-/epics/6000
/weight 5
/title Monitor and Generate GitLab.com Service Ping
diff --git a/.gitlab/merge_request_templates/Default.md b/.gitlab/merge_request_templates/Default.md
index 404a18ad074..3cb3f6473e6 100644
--- a/.gitlab/merge_request_templates/Default.md
+++ b/.gitlab/merge_request_templates/Default.md
@@ -1,8 +1,8 @@
## What does this MR do and why?
-_Describe in detail what your merge request does and why._
-
<!--
+Describe in detail what your merge request does and why.
+
Please keep this description updated with any discussion that takes place so
that reviewers can understand your intent. Keeping the description updated is
especially important if they didn't participate in the discussion.
@@ -20,6 +20,10 @@ reviewers and future readers. If you need help visually verifying the change,
please leave a comment and ping a GitLab reviewer, maintainer, or MR coach.
-->
+| Before | After |
+| ------ | ------ |
+| | |
+
## How to set up and validate locally
_Numbered steps to set up and validate the change are strongly suggested._
diff --git a/.gitlab/merge_request_templates/Deprecations.md b/.gitlab/merge_request_templates/Deprecations.md
index 9e02e047efa..7e622dbe62c 100644
--- a/.gitlab/merge_request_templates/Deprecations.md
+++ b/.gitlab/merge_request_templates/Deprecations.md
@@ -71,8 +71,6 @@ yourself as a reviewer if it's not ready for merge yet.
- [ ] Title:
- Length limit: 7 words (not including articles or prepositions).
- Capitalization: ensure the title is [sentence cased](https://design.gitlab.com/content/punctuation#case).
-- [ ] Dates:
- - Make sure that the milestone dates are based on the dates in [Product milestone creation](https://about.gitlab.com/handbook/product/milestones/#product-milestone-creation).
- [ ] Consistency:
- Ensure that all resources (docs, deprecation, etc.) refer to the feature with the same term / feature name.
- [ ] Content:
@@ -100,7 +98,7 @@ must be updated before this MR is merged:
If you want to double check that it worked, you can run `bin/rake gitlab:docs:check_deprecations`
to verify that the doc is up to date.
1. Commit the updated file and push the changes.
-1. Set the MR to merge when the pipeline succeeds (or merge if the pipeline is already complete).
+1. Set the merge request to auto-merge, or if the pipeline is already complete, merge.
If you have trouble running the Rake task, check the [troubleshooting steps](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecation-rake-task-troubleshooting).
diff --git a/.gitlab/merge_request_templates/Removals.md b/.gitlab/merge_request_templates/Removals.md
index 39b99c00314..d2224a71e65 100644
--- a/.gitlab/merge_request_templates/Removals.md
+++ b/.gitlab/merge_request_templates/Removals.md
@@ -78,8 +78,6 @@ yourself as a reviewer if it's not yet ready for merge.
- [ ] Title:
- Length limit: 7 words (not including articles or prepositions).
- Capitalization: ensure the title is [sentence cased](https://design.gitlab.com/content/punctuation#case).
-- [ ] Dates:
- - Make sure that the milestone dates are based on the dates in [Product milestone creation](https://about.gitlab.com/handbook/product/milestones/#product-milestone-creation).
- [ ] Consistency:
- Ensure that all resources (docs, removal, etc.) refer to the feature with the same term / feature name.
- [ ] Content:
@@ -107,6 +105,6 @@ must be updated before this MR is merged:
If you want to double check that it worked, you can run `bin/rake gitlab:docs:check_removals`
to verify that the doc is up to date.
1. Commit the updated file and push the changes.
-1. Set the MR to merge when the pipeline succeeds (or merge if the pipeline is already complete).
+1. Set the merge request to auto-merge, or if the pipeline is already complete, merge.
If you have trouble running the rake task, check the [troubleshooting steps](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecation-rake-task-troubleshooting).