summaryrefslogtreecommitdiff
path: root/.gitlab
diff options
context:
space:
mode:
Diffstat (limited to '.gitlab')
-rw-r--r--.gitlab/CODEOWNERS284
-rw-r--r--.gitlab/ci/_skip.yml2
-rw-r--r--.gitlab/ci/build-images.gitlab-ci.yml22
-rw-r--r--.gitlab/ci/caching.gitlab-ci.yml65
-rw-r--r--.gitlab/ci/docs.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/frontend.gitlab-ci.yml65
-rw-r--r--.gitlab/ci/global.gitlab-ci.yml41
-rw-r--r--.gitlab/ci/notify.gitlab-ci.yml29
-rw-r--r--.gitlab/ci/package-and-test/main.gitlab-ci.yml105
-rw-r--r--.gitlab/ci/package-and-test/rules.gitlab-ci.yml32
-rw-r--r--.gitlab/ci/package-and-test/variables.gitlab-ci.yml3
-rw-r--r--.gitlab/ci/qa.gitlab-ci.yml7
-rw-r--r--.gitlab/ci/rails.gitlab-ci.yml229
-rw-r--r--.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb50
-rw-r--r--.gitlab/ci/rails/shared.gitlab-ci.yml172
-rw-r--r--.gitlab/ci/releases.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/review-apps/dast-api.gitlab-ci.yml14
-rw-r--r--.gitlab/ci/review-apps/main.gitlab-ci.yml18
-rw-r--r--.gitlab/ci/review-apps/qa.gitlab-ci.yml27
-rw-r--r--.gitlab/ci/review-apps/rules.gitlab-ci.yml41
-rw-r--r--.gitlab/ci/review.gitlab-ci.yml18
-rw-r--r--.gitlab/ci/rules.gitlab-ci.yml148
-rw-r--r--.gitlab/ci/setup.gitlab-ci.yml13
-rw-r--r--.gitlab/ci/static-analysis.gitlab-ci.yml4
-rw-r--r--.gitlab/ci/test-metadata.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/vendored-gems.gitlab-ci.yml16
-rw-r--r--.gitlab/ci/workhorse.gitlab-ci.yml6
-rw-r--r--.gitlab/issue_templates/Actionable Insight - Exploration needed.md2
-rw-r--r--.gitlab/issue_templates/Actionable Insight - Product change.md2
-rw-r--r--.gitlab/issue_templates/Bug.md5
-rw-r--r--.gitlab/issue_templates/Deprecations.md5
-rw-r--r--.gitlab/issue_templates/Feature Flag Roll Out.md10
-rw-r--r--.gitlab/issue_templates/Feature proposal - detailed.md2
-rw-r--r--.gitlab/issue_templates/Geo Replicate a new Git repository type.md62
-rw-r--r--.gitlab/issue_templates/Geo Replicate a new blob type.md71
-rw-r--r--.gitlab/issue_templates/QA Failure.md3
-rw-r--r--.gitlab/issue_templates/Solution Validation.md2
-rw-r--r--.gitlab/issue_templates/UX Theme.md6
-rw-r--r--.gitlab/merge_request_templates/Deprecations.md2
-rw-r--r--.gitlab/merge_request_templates/Documentation.md6
-rw-r--r--.gitlab/merge_request_templates/Removals.md2
41 files changed, 1006 insertions, 591 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index 03fcfc4dd53..1ea65fe4de5 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -2,11 +2,11 @@
# project here: https://gitlab.com/gitlab-org/gitlab/-/project_members
# As described in https://docs.gitlab.com/ee/user/project/code_owners.html
-* @gitlab-org/maintainers/rails-backend @gitlab-org/maintainers/frontend @gitlab-org/maintainers/database @gl-quality/qe-maintainers @gitlab-org/delivery @gitlab-org/maintainers/cicd-templates @kwiebers @nolith @jacobvosmaer-gitlab
+* @gitlab-org/maintainers/rails-backend @gitlab-org/maintainers/frontend @gitlab-org/maintainers/database @gl-quality/qe-maintainers @gitlab-org/delivery @gitlab-org/maintainers/cicd-templates @kwiebers @nolith @jacobvosmaer-gitlab @gitlab-org/tw-leadership
-CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @wayne @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
-docs/CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @wayne @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
-.gitlab/CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @wayne @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
+CODEOWNERS @gitlab-org/development-leaders @gitlab-org/tw-leadership
+docs/CODEOWNERS @gitlab-org/development-leaders @gitlab-org/tw-leadership
+.gitlab/CODEOWNERS @gitlab-org/development-leaders @gitlab-org/tw-leadership
## Allows release tooling to update the Gitaly Version
GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend @gitlab-org/delivery
@@ -20,6 +20,14 @@ GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend
/data/deprecations/*.yml
/data/removals/*.yml
+## Technical writing files that do need approval
+/data/deprecations/templates/ @marcel.amirault @gitlab-org/tw-leadership @sarahgerman
+/data/removals/templates/ @marcel.amirault @gitlab-org/tw-leadership @sarahgerman
+.markdownlint.yml @marcel.amirault @eread @aqualls @gitlab-org/tw-leadership
+/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
+
^[Backend]
*.rb @gitlab-org/maintainers/rails-backend
*.rake @gitlab-org/maintainers/rails-backend
@@ -140,17 +148,18 @@ Dangerfile @gl-quality/eng-prod
/ee/app/workers/clear_shared_runners_minutes_worker.rb @gitlab-org/maintainers/cicd-verify
/ee/lib/**/ci/ @gitlab-org/maintainers/cicd-verify
/ee/lib/ee/api/entities/merge_train.rb @gitlab-org/maintainers/cicd-verify
-/**/javascripts/jobs/ @pburdette @jivanvl
-/**/javascripts/pipelines/ @pburdette @f_caplette @jivanvl @mfluharty @bsandlin @mgandres
-/app/assets/javascripts/pipeline_new/ @pburdette @f_caplette @jivanvl @mfluharty @bsandlin @mgandres
-/app/assets/javascripts/ci_lint/ @f_caplette @bsandlin @mgandres
-/app/assets/javascripts/ci_variable_list/ @pburdette @f_caplette @jivanvl @mfluharty @bsandlin @mgandres
-/app/assets/javascripts/pipeline_schedules/ @pburdette @jivanvl
-/app/assets/javascripts/pipeline_editor/ @f_caplette @bsandlin @mgandres
-/ee/app/assets/javascripts/ci_minutes_usage/ @pburdette @jivanvl
-/ee/app/assets/javascripts/usage_quotas/ci_minutes_usage/ @pburdette @jivanvl
-/ee/app/assets/javascripts/usage_quotas/pipelines/ @pburdette @jivanvl
-/ee/app/assets/javascripts/reports/ @mfluharty
+/**/javascripts/jobs/ @gitlab-org/ci-cd/verify/frontend
+/**/javascripts/pipelines/ @gitlab-org/ci-cd/verify/frontend
+/app/assets/javascripts/pipeline_new/ @gitlab-org/ci-cd/verify/frontend
+/app/assets/javascripts/ci_lint/ @gitlab-org/ci-cd/verify/frontend
+/app/assets/javascripts/ci_variable_list/ @gitlab-org/ci-cd/verify/frontend
+/app/assets/javascripts/pipeline_schedules/ @gitlab-org/ci-cd/verify/frontend
+/app/assets/javascripts/pipeline_editor/ @gitlab-org/ci-cd/verify/frontend
+/app/assets/javascripts/runner/ @gitlab-org/ci-cd/verify/frontend
+/ee/app/assets/javascripts/ci_minutes_usage/ @gitlab-org/ci-cd/verify/frontend
+/ee/app/assets/javascripts/usage_quotas/ci_minutes_usage/ @gitlab-org/ci-cd/verify/frontend
+/ee/app/assets/javascripts/usage_quotas/pipelines/ @gitlab-org/ci-cd/verify/frontend
+/ee/app/assets/javascripts/reports/ @gitlab-org/ci-cd/verify/frontend
^[Templates]
/lib/gitlab/ci/templates/ @gitlab-org/maintainers/cicd-templates
@@ -333,19 +342,18 @@ ee/lib/ee/gitlab/checks/** @proglottis @toon @zj-gitlab
lib/gitlab/checks/** @proglottis @toon @zj-gitlab
^[Documentation Directories]
-.markdownlint.yml @marcel.amirault @eread @aqualls @dianalogan @kpaizee
/doc/ @gl-docsteam
-/doc/.markdownlint/ @marcel.amirault @eread @aqualls @dianalogan @kpaizee
-/doc/.vale/ @marcel.amirault @eread @aqualls @dianalogan @kpaizee
+/data/deprecations/ @gl-docsteam
+/data/removals/ @gl-docsteam
^[Documentation Pages]
/doc/administration/application_settings_cache.md @sselhorn
/doc/administration/audit_event_streaming.md @eread
/doc/administration/audit_events.md @eread
/doc/administration/audit_reports.md @eread
-/doc/administration/auditor_users.md @eread
-/doc/administration/auth/ @eread
-/doc/administration/auth/ldap/ @eread
+/doc/administration/auditor_users.md @jglassman1
+/doc/administration/auth/ @jglassman1
+/doc/administration/auth/ldap/ @jglassman1
/doc/administration/cicd.md @marcel.amirault
/doc/administration/clusters/ @phillipwells
/doc/administration/compliance.md @eread
@@ -374,7 +382,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/administration/integration/kroki.md @msedlakjakubowski
/doc/administration/integration/mailgun.md @msedlakjakubowski
/doc/administration/integration/plantuml.md @aqualls
-/doc/administration/integration/terminal.md @ashrafkhamis
+/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
@@ -382,11 +390,10 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/administration/lfs/ @aqualls
/doc/administration/libravatar.md @axil
/doc/administration/load_balancer.md @axil
+/doc/administration/logs/ @axil
/doc/administration/logs/index.md @msedlakjakubowski
-/doc/administration/logs/log_parsing.md @axil
-/doc/administration/logs/tracing_correlation_id.md @axil
/doc/administration/maintenance_mode/ @axil
-/doc/administration/merge_request_diffs.md @aqualls
+/doc/administration/merge_request_diffs.md @ashrafkhamis
/doc/administration/monitoring/ @msedlakjakubowski
/doc/administration/monitoring/gitlab_self_monitoring_project/ @msedlakjakubowski
/doc/administration/monitoring/ip_allowlist.md @sselhorn
@@ -401,12 +408,13 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/administration/operations/moving_repositories.md @eread
/doc/administration/package_information/ @axil
/doc/administration/packages/ @claytoncornell
-/doc/administration/pages/ @aqualls
+/doc/administration/pages/ @ashrafkhamis
/doc/administration/polling.md @axil
/doc/administration/postgresql/ @aqualls
/doc/administration/raketasks/ @axil
-/doc/administration/raketasks/ldap.md @eread
+/doc/administration/raketasks/ldap.md @jglassman1
/doc/administration/raketasks/praefect.md @eread
+/doc/administration/raketasks/uploads/ @axil
/doc/administration/read_only_gitlab.md @axil
/doc/administration/redis/ @axil
/doc/administration/reference_architectures/ @axil
@@ -418,25 +426,26 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/administration/restart_gitlab.md @axil
/doc/administration/server_hooks.md @eread
/doc/administration/sidekiq/ @axil
+/doc/administration/sidekiq/sidekiq_memory_killer.md @sselhorn
/doc/administration/smime_signing_email.md @axil
-/doc/administration/snippets/ @aqualls
-/doc/administration/static_objects_external_storage.md @aqualls
+/doc/administration/snippets/ @ashrafkhamis
+/doc/administration/static_objects_external_storage.md @ashrafkhamis
/doc/administration/system_hooks.md @ashrafkhamis
/doc/administration/terraform_state.md @phillipwells
/doc/administration/timezone.md @axil
/doc/administration/troubleshooting/ @axil
/doc/administration/troubleshooting/postgresql.md @aqualls
/doc/administration/uploads.md @axil
-/doc/administration/user_settings.md @eread
-/doc/administration/wikis/ @aqualls
-/doc/api/access_requests.md @eread
+/doc/administration/user_settings.md @jglassman1
+/doc/administration/wikis/ @ashrafkhamis
+/doc/api/access_requests.md @jglassman1
/doc/api/admin_sidekiq_queues.md @axil
/doc/api/alert_management_alerts.md @msedlakjakubowski
/doc/api/api_resources.md @ashrafkhamis
-/doc/api/appearance.md @eread
-/doc/api/applications.md @eread
+/doc/api/appearance.md @jglassman1
+/doc/api/applications.md @jglassman1
/doc/api/audit_events.md @eread
-/doc/api/avatar.md @eread
+/doc/api/avatar.md @jglassman1
/doc/api/award_emoji.md @msedlakjakubowski
/doc/api/boards.md @msedlakjakubowski
/doc/api/branches.md @aqualls
@@ -445,7 +454,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/api/cluster_agents.md @phillipwells
/doc/api/commits.md @aqualls
/doc/api/container_registry.md @claytoncornell
-/doc/api/custom_attributes.md @ashrafkhamis
+/doc/api/custom_attributes.md @msedlakjakubowski
/doc/api/dependencies.md @rdickenson
/doc/api/dependency_proxy.md @claytoncornell
/doc/api/deploy_keys.md @rdickenson
@@ -466,10 +475,15 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/api/features.md @rdickenson
/doc/api/freeze_periods.md @rdickenson
/doc/api/geo_nodes.md @axil
-/doc/api/graphql/ @ashrafkhamis
+/doc/api/graphql/audit_report.md @eread
/doc/api/graphql/custom_emoji.md @msedlakjakubowski
+/doc/api/graphql/getting_started.md @ashrafkhamis
+/doc/api/graphql/index.md @ashrafkhamis
+/doc/api/graphql/reference/ @ashrafkhamis
+/doc/api/graphql/removed_items.md @ashrafkhamis
/doc/api/graphql/sample_issue_boards.md @msedlakjakubowski
-/doc/api/group_access_tokens.md @eread
+/doc/api/graphql/users_example.md @jglassman1
+/doc/api/group_access_tokens.md @jglassman1
/doc/api/group_activity_analytics.md @fneill
/doc/api/group_badges.md @fneill
/doc/api/group_boards.md @msedlakjakubowski
@@ -482,8 +496,8 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/api/group_protected_environments.md @rdickenson
/doc/api/group_relations_export.md @eread
/doc/api/group_releases.md @rdickenson
-/doc/api/group_repository_storage_moves.md @aqualls
-/doc/api/group_wikis.md @aqualls
+/doc/api/group_repository_storage_moves.md @ashrafkhamis
+/doc/api/group_wikis.md @ashrafkhamis
/doc/api/groups.md @fneill
/doc/api/import.md @eread
/doc/api/index.md @ashrafkhamis
@@ -504,30 +518,31 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/api/lint.md @marcel.amirault
/doc/api/managed_licenses.md @fneill
/doc/api/markdown.md @msedlakjakubowski
-/doc/api/members.md @eread
+/doc/api/members.md @jglassman1
/doc/api/merge_request_approvals.md @aqualls
/doc/api/merge_request_context_commits.md @aqualls
/doc/api/merge_requests.md @aqualls
/doc/api/merge_trains.md @marcel.amirault
-/doc/api/metadata.md @ashrafkhamis
+/doc/api/metadata.md @phillipwells
/doc/api/metrics_dashboard_annotations.md @msedlakjakubowski
/doc/api/metrics_user_starred_dashboards.md @msedlakjakubowski
/doc/api/milestones.md @msedlakjakubowski
-/doc/api/namespaces.md @eread
+/doc/api/namespaces.md @jglassman1
/doc/api/notes.md @msedlakjakubowski
/doc/api/notification_settings.md @msedlakjakubowski
-/doc/api/oauth2.md @eread
+/doc/api/oauth2.md @jglassman1
/doc/api/openapi/ @ashrafkhamis
/doc/api/packages.md @claytoncornell
/doc/api/packages/ @claytoncornell
-/doc/api/pages.md @aqualls
-/doc/api/pages_domains.md @aqualls
+/doc/api/pages.md @ashrafkhamis
+/doc/api/pages_domains.md @ashrafkhamis
/doc/api/personal_access_tokens.md @eread
/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 @eread
-/doc/api/project_access_tokens.md @eread
+/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_clusters.md @phillipwells
@@ -535,7 +550,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/api/project_level_variables.md @marcel.amirault
/doc/api/project_relations_export.md @eread
/doc/api/project_repository_storage_moves.md @eread
-/doc/api/project_snippets.md @aqualls
+/doc/api/project_snippets.md @ashrafkhamis
/doc/api/project_statistics.md @aqualls
/doc/api/project_templates.md @aqualls
/doc/api/project_vulnerabilities.md @aqualls
@@ -555,14 +570,15 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/api/resource_state_events.md @msedlakjakubowski
/doc/api/resource_weight_events.md @msedlakjakubowski
/doc/api/runners.md @sselhorn
-/doc/api/scim.md @eread
-/doc/api/search.md @aqualls
+/doc/api/saml.md @jglassman1
+/doc/api/scim.md @jglassman1
+/doc/api/search.md @ashrafkhamis
/doc/api/secure_files.md @marcel.amirault
-/doc/api/settings.md @eread
+/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/statistics.md @eread
+/doc/api/snippet_repository_storage_moves.md @ashrafkhamis
+/doc/api/snippets.md @ashrafkhamis
+/doc/api/statistics.md @jglassman1
/doc/api/status_checks.md @eread
/doc/api/suggestions.md @aqualls
/doc/api/system_hooks.md @ashrafkhamis
@@ -574,17 +590,19 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/api/todos.md @msedlakjakubowski
/doc/api/topics.md @fneill
/doc/api/usage_data.md @claytoncornell
-/doc/api/users.md @eread
-/doc/api/version.md @ashrafkhamis
+/doc/api/users.md @jglassman1
+/doc/api/version.md @phillipwells
/doc/api/visual_review_discussions.md @marcel.amirault
/doc/api/vulnerabilities.md @claytoncornell
/doc/api/vulnerability_exports.md @claytoncornell
/doc/api/vulnerability_findings.md @claytoncornell
-/doc/api/wikis.md @aqualls
+/doc/api/wikis.md @ashrafkhamis
+/doc/architecture/blueprints/ci_pipeline_components/ @marcel.amirault
/doc/architecture/blueprints/container_registry_metadata_database/ @claytoncornell
/doc/architecture/blueprints/database/scalability/patterns/ @aqualls
/doc/architecture/blueprints/database_scaling/ @aqualls
/doc/architecture/blueprints/gitlab_to_kubernetes_communication/ @phillipwells
+/doc/architecture/blueprints/work_items/ @msedlakjakubowski
/doc/ci/ @marcel.amirault
/doc/ci/caching/ @marcel.amirault
/doc/ci/chatops/ @phillipwells
@@ -596,17 +614,14 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/ci/cloud_services/azure/ @marcel.amirault
/doc/ci/cloud_services/google_cloud/ @marcel.amirault
/doc/ci/directed_acyclic_graph/ @marcel.amirault
-/doc/ci/docker/index.md @marcel.amirault
-/doc/ci/docker/using_docker_build.md @marcel.amirault
+/doc/ci/docker/ @marcel.amirault
/doc/ci/docker/using_docker_images.md @sselhorn
-/doc/ci/docker/using_kaniko.md @marcel.amirault
/doc/ci/environments/ @rdickenson
+/doc/ci/examples/ @marcel.amirault
/doc/ci/examples/authenticating-with-hashicorp-vault/ @marcel.amirault
/doc/ci/examples/deployment/ @rdickenson
/doc/ci/examples/end_to_end_testing_webdriverio/ @marcel.amirault
-/doc/ci/examples/index.md @marcel.amirault
/doc/ci/examples/laravel_with_gitlab_and_envoy/ @marcel.amirault
-/doc/ci/examples/php.md @marcel.amirault
/doc/ci/examples/semantic-release.md @claytoncornell
/doc/ci/interactive_web_terminal/ @sselhorn
/doc/ci/introduction/ @marcel.amirault
@@ -640,7 +655,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/development/build_test_package.md @axil
/doc/development/bulk_import.md @eread
/doc/development/cached_queries.md @sselhorn
-/doc/development/cascading_settings.md @eread
+/doc/development/cascading_settings.md @jglassman1
/doc/development/chatops_on_gitlabcom.md @phillipwells
/doc/development/cicd/ @marcel.amirault
/doc/development/code_intelligence/ @aqualls
@@ -659,11 +674,12 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/development/elasticsearch.md @ashrafkhamis
/doc/development/experiment_guide/ @phillipwells
/doc/development/export_csv.md @eread
-/doc/development/fe_guide/content_editor.md @aqualls
+/doc/development/fe_guide/content_editor.md @ashrafkhamis
+/doc/development/fe_guide/customizable_dashboards.md @lciutacu
/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 @ashrafkhamis
/doc/development/fe_guide/view_component.md @rdickenson
/doc/development/feature_categorization/ @sselhorn
/doc/development/feature_development.md @sselhorn
@@ -673,19 +689,19 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/development/geo/ @axil
/doc/development/git_object_deduplication.md @eread
/doc/development/gitaly.md @eread
-/doc/development/gitlab_flavored_markdown/ @aqualls
-/doc/development/gitlab_flavored_markdown/specification_guide/ @aqualls
+/doc/development/gitlab_flavored_markdown/ @ashrafkhamis
+/doc/development/gitlab_flavored_markdown/specification_guide/ @ashrafkhamis
+/doc/development/graphql_guide/ @ashrafkhamis
/doc/development/graphql_guide/batchloader.md @aqualls
-/doc/development/graphql_guide/graphql_pro.md @ashrafkhamis
-/doc/development/graphql_guide/index.md @ashrafkhamis
-/doc/development/graphql_guide/monitoring.md @ashrafkhamis
-/doc/development/graphql_guide/pagination.md @ashrafkhamis
/doc/development/i18n/ @eread
/doc/development/image_scaling.md @sselhorn
/doc/development/import_export.md @eread
/doc/development/index.md @sselhorn
-/doc/development/integrations/ @ashrafkhamis
-/doc/development/integrations/secure.md @claytoncornell
+/doc/development/integrations/codesandbox.md @sselhorn
+/doc/development/integrations/index.md @ashrafkhamis
+/doc/development/integrations/jenkins.md @ashrafkhamis
+/doc/development/integrations/jira_connect.md @ashrafkhamis
+/doc/development/integrations/secure.md @rdickenson
/doc/development/integrations/secure_partner_integration.md @rdickenson
/doc/development/internal_api/ @aqualls
/doc/development/internal_users.md @sselhorn
@@ -698,9 +714,9 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/development/merge_request_concepts/ @aqualls
/doc/development/omnibus.md @axil
/doc/development/packages/ @claytoncornell
-/doc/development/pages/ @aqualls
-/doc/development/permissions.md @eread
-/doc/development/policies.md @eread
+/doc/development/pages/ @ashrafkhamis
+/doc/development/permissions.md @jglassman1
+/doc/development/policies.md @jglassman1
/doc/development/product_qualified_lead_guide/ @phillipwells
/doc/development/project_templates.md @fneill
/doc/development/prometheus_metrics.md @msedlakjakubowski
@@ -709,14 +725,14 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/development/secure_coding_guidelines.md @sselhorn
/doc/development/service_ping/ @claytoncornell
/doc/development/snowplow/ @claytoncornell
-/doc/development/spam_protection_and_captcha/ @eread
+/doc/development/spam_protection_and_captcha/ @jglassman1
/doc/development/sql.md @aqualls
/doc/development/testing_guide/ @sselhorn
/doc/development/testing_guide/contract/ @sselhorn
/doc/development/testing_guide/end_to_end/ @sselhorn
/doc/development/value_stream_analytics.md @fneill
/doc/development/value_stream_analytics/ @fneill
-/doc/development/wikis.md @aqualls
+/doc/development/wikis.md @ashrafkhamis
/doc/development/work_items.md @msedlakjakubowski
/doc/development/work_items_widgets.md @msedlakjakubowski
/doc/development/workhorse/ @aqualls
@@ -727,43 +743,25 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/install/ @axil
/doc/install/aws/ @axil
/doc/install/azure/ @axil
-/doc/install/cloud_native/ @axil
/doc/install/google_cloud_platform/ @axil
+/doc/install/migrate/ @axil
/doc/install/openshift_and_gitlab/ @axil
+/doc/integration/ @jglassman1
/doc/integration/advanced_search/ @ashrafkhamis
-/doc/integration/akismet.md @ashrafkhamis
-/doc/integration/alicloud.md @eread
+/doc/integration/akismet.md @phillipwells
/doc/integration/arkose.md @phillipwells
-/doc/integration/auth0.md @eread
-/doc/integration/azure.md @eread
-/doc/integration/bitbucket.md @eread
-/doc/integration/cas.md @eread
/doc/integration/datadog.md @ashrafkhamis
-/doc/integration/ding_talk.md @eread
/doc/integration/external-issue-tracker.md @ashrafkhamis
-/doc/integration/facebook.md @eread
-/doc/integration/github.md @eread
-/doc/integration/gitlab.md @eread
-/doc/integration/gitpod.md @aqualls
+/doc/integration/gitpod.md @ashrafkhamis
/doc/integration/gmail_action_buttons_for_gitlab.md @ashrafkhamis
-/doc/integration/google.md @eread
/doc/integration/index.md @ashrafkhamis
/doc/integration/jenkins.md @ashrafkhamis
/doc/integration/jira/ @ashrafkhamis
-/doc/integration/kerberos.md @eread
/doc/integration/mattermost/ @axil
-/doc/integration/oauth2_generic.md @eread
-/doc/integration/oauth_provider.md @eread
-/doc/integration/omniauth.md @eread
-/doc/integration/openid_connect_provider.md @eread
-/doc/integration/recaptcha.md @ashrafkhamis
-/doc/integration/salesforce.md @eread
-/doc/integration/saml.md @eread
/doc/integration/security_partners/ @rdickenson
/doc/integration/slash_commands.md @ashrafkhamis
/doc/integration/sourcegraph.md @aqualls
/doc/integration/trello_power_up.md @ashrafkhamis
-/doc/integration/twitter.md @eread
/doc/integration/vault.md @phillipwells
/doc/operations/error_tracking.md msedlakjakubowski
/doc/operations/feature_flags.md @rdickenson
@@ -771,22 +769,23 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/operations/index.md @msedlakjakubowski
/doc/operations/metrics/ @msedlakjakubowski
/doc/operations/metrics/dashboards/ @msedlakjakubowski
-/doc/operations/product_analytics.md @claytoncornell
+/doc/operations/product_analytics.md @lciutacu
/doc/operations/tracing.md @msedlakjakubowski
/doc/policy/ @axil
/doc/raketasks/ @axil
/doc/raketasks/generate_sample_prometheus_data.md @msedlakjakubowski
-/doc/raketasks/migrate_snippets.md @aqualls
+/doc/raketasks/migrate_snippets.md @ashrafkhamis
/doc/raketasks/spdx.md @rdickenson
/doc/raketasks/x509_signatures.md @aqualls
-/doc/security/ @eread
+/doc/security/ @jglassman1
/doc/subscriptions/ @fneill
/doc/subscriptions/gitlab_com/ @fneill
/doc/subscriptions/gitlab_dedicated/ @axil
/doc/subscriptions/self_managed/ @fneill
-/doc/topics/authentication/ @eread
+/doc/topics/authentication/ @jglassman1
/doc/topics/autodevops/ @phillipwells
/doc/topics/autodevops/cloud_deployments/ @phillipwells
+/doc/topics/awesome_co.md @rdickenson
/doc/topics/git/ @aqualls
/doc/topics/git/how_to_install_git/ @aqualls
/doc/topics/git/lfs/ @aqualls
@@ -801,7 +800,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/update/upgrading_postgresql_using_slony.md @aqualls
/doc/user/admin_area/analytics/ @fneill
/doc/user/admin_area/broadcast_messages.md @phillipwells
-/doc/user/admin_area/credentials_inventory.md @eread
+/doc/user/admin_area/credentials_inventory.md @jglassman1
/doc/user/admin_area/custom_project_templates.md @eread
/doc/user/admin_area/diff_limits.md @aqualls
/doc/user/admin_area/geo_sites.md @axil
@@ -809,17 +808,17 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/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/moderate_users.md @eread
+/doc/user/admin_area/moderate_users.md @jglassman1
/doc/user/admin_area/monitoring/background_migrations.md @aqualls
/doc/user/admin_area/monitoring/health_check.md @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 @eread
+/doc/user/admin_area/review_abuse_reports.md @jglassman1
/doc/user/admin_area/settings/account_and_limit_settings.md @aqualls
/doc/user/admin_area/settings/continuous_integration.md @marcel.amirault
/doc/user/admin_area/settings/deprecated_api_rate_limits.md @aqualls
/doc/user/admin_area/settings/email.md @msedlakjakubowski
-/doc/user/admin_area/settings/external_authorization.md @eread
+/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/gitaly_timeouts.md @eread
@@ -833,15 +832,15 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/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 @marcel.amirault
-/doc/user/admin_area/settings/rate_limit_on_users_api.md @eread
+/doc/user/admin_area/settings/rate_limit_on_users_api.md @jglassman1
/doc/user/admin_area/settings/third_party_offers.md @fneill
/doc/user/admin_area/settings/usage_statistics.md @claytoncornell
/doc/user/admin_area/settings/visibility_and_access_controls.md @aqualls
-/doc/user/analytics/ci_cd_analytics.md @rdickenson
/doc/user/analytics/ @fneill
+/doc/user/analytics/ci_cd_analytics.md @rdickenson
/doc/user/application_security/api_fuzzing/ @rdickenson
/doc/user/application_security/configuration/ @rdickenson
-/doc/user/application_security/container_scanning/ @claytoncornell
+/doc/user/application_security/container_scanning/ @rdickenson
/doc/user/application_security/coverage_fuzzing/ @rdickenson
/doc/user/application_security/cve_id_request.md @claytoncornell
/doc/user/application_security/dast/ @rdickenson
@@ -874,23 +873,22 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/user/discussions/ @aqualls
/doc/user/feature_flags.md @sselhorn
/doc/user/free_user_limit.md @phillipwells
-/doc/user/group/access_and_permissions.md @fneill
+/doc/user/group/ @fneill
/doc/user/group/clusters/ @phillipwells
/doc/user/group/contribution_analytics/ @fneill
/doc/user/group/custom_project_templates.md @eread
/doc/user/group/devops_adoption/ @fneill
/doc/user/group/epics/ @msedlakjakubowski
/doc/user/group/import/ @eread
-/doc/user/group/index.md @fneill
/doc/user/group/insights/ @fneill
/doc/user/group/issues_analytics/ @msedlakjakubowski
/doc/user/group/iterations/ @msedlakjakubowski
-/doc/user/group/manage.md @fneill
/doc/user/group/planning_hierarchy/ @msedlakjakubowski
/doc/user/group/repositories_analytics/ @marcel.amirault
/doc/user/group/roadmap/ @msedlakjakubowski
-/doc/user/group/saml_sso/ @eread
-/doc/user/group/settings/ @eread
+/doc/user/group/saml_sso/ @jglassman1
+/doc/user/group/settings/group_access_tokens.md @jglassman1
+/doc/user/group/settings/import_export.md @eread
/doc/user/group/subgroups/ @fneill
/doc/user/group/value_stream_analytics/ @fneill
/doc/user/infrastructure/ @phillipwells
@@ -898,10 +896,8 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/user/infrastructure/clusters/connect/ @phillipwells
/doc/user/infrastructure/clusters/deploy/ @phillipwells
/doc/user/infrastructure/clusters/manage/ @phillipwells
-/doc/user/infrastructure/clusters/manage/management_project_applications/certmanager.md @phillipwells
-/doc/user/infrastructure/clusters/manage/management_project_applications/ingress.md @phillipwells
+/doc/user/infrastructure/clusters/manage/management_project_applications/ @phillipwells
/doc/user/infrastructure/clusters/manage/management_project_applications/runner.md @sselhorn
-/doc/user/infrastructure/clusters/manage/management_project_applications/vault.md @phillipwells
/doc/user/infrastructure/iac/ @phillipwells
/doc/user/markdown.md @aqualls
/doc/user/namespace/ @fneill
@@ -913,6 +909,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/user/packages/dependency_proxy/ @claytoncornell
/doc/user/packages/generic_packages/ @claytoncornell
/doc/user/packages/go_proxy/ @claytoncornell
+/doc/user/packages/harbor_container_registry/ @claytoncornell
/doc/user/packages/helm_repository/ @claytoncornell
/doc/user/packages/infrastructure_registry/ @phillipwells
/doc/user/packages/maven_repository/ @claytoncornell
@@ -923,68 +920,67 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/user/packages/rubygems_registry/ @claytoncornell
/doc/user/packages/terraform_module_registry/ @phillipwells
/doc/user/packages/workflows/ @claytoncornell
-/doc/user/permissions.md @eread
-/doc/user/profile/account/ @eread
-/doc/user/profile/index.md @eread
+/doc/user/permissions.md @jglassman1
+/doc/user/profile/ @jglassman1
+/doc/user/profile/account/ @jglassman1
/doc/user/profile/notifications.md @msedlakjakubowski
-/doc/user/profile/personal_access_tokens.md @eread
-/doc/user/profile/unknown_sign_in_notification.md @eread
-/doc/user/project/autocomplete_characters.md @aqualls
-/doc/user/project/badges.md @aqualls
+/doc/user/project/ @aqualls
/doc/user/project/clusters/ @phillipwells
/doc/user/project/clusters/runbooks/ @phillipwells
-/doc/user/project/code_intelligence.md @aqualls
-/doc/user/project/code_owners.md @aqualls
/doc/user/project/deploy_boards.md @rdickenson
/doc/user/project/deploy_keys/ @rdickenson
/doc/user/project/deploy_tokens/ @rdickenson
/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/import/ @eread
/doc/user/project/import/jira.md @msedlakjakubowski
/doc/user/project/index.md @fneill
+/doc/user/project/insights/ @fneill
/doc/user/project/integrations/ @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
+/doc/user/project/labels.md @msedlakjakubowski
/doc/user/project/members/ @fneill
/doc/user/project/merge_requests/ @aqualls
/doc/user/project/merge_requests/approvals/ @aqualls
/doc/user/project/merge_requests/csv_export.md @eread
+/doc/user/project/merge_requests/methods/ @aqualls
+/doc/user/project/merge_requests/reviews/ @aqualls
/doc/user/project/merge_requests/status_checks.md @eread
/doc/user/project/milestones/ @msedlakjakubowski
-/doc/user/project/pages/ @aqualls
-/doc/user/project/pages/custom_domains_ssl_tls_certification/ @aqualls
-/doc/user/project/pages/getting_started/ @aqualls
-/doc/user/project/protected_branches.md @aqualls
-/doc/user/project/protected_tags.md @aqualls
-/doc/user/project/push_options.md @aqualls
+/doc/user/project/pages/ @ashrafkhamis
+/doc/user/project/pages/custom_domains_ssl_tls_certification/ @ashrafkhamis
+/doc/user/project/pages/getting_started/ @ashrafkhamis
/doc/user/project/quick_actions.md @msedlakjakubowski
/doc/user/project/releases/ @rdickenson
/doc/user/project/repository/ @aqualls
/doc/user/project/repository/branches/ @aqualls
+/doc/user/project/repository/file_finder.md @ashrafkhamis
+/doc/user/project/repository/gpg_signed_commits/ @aqualls
+/doc/user/project/repository/jupyter_notebooks/ @aqualls
/doc/user/project/repository/managing_large_repositories.md @axil
+/doc/user/project/repository/mirror/ @aqualls
/doc/user/project/repository/reducing_the_repo_size_using_git.md @eread
+/doc/user/project/repository/web_editor.md @ashrafkhamis
+/doc/user/project/repository/x509_signed_commits/ @aqualls
/doc/user/project/requirements/ @msedlakjakubowski
/doc/user/project/service_desk.md @msedlakjakubowski
/doc/user/project/settings/import_export.md @eread
/doc/user/project/settings/index.md @fneill
-/doc/user/project/settings/project_access_tokens.md @eread
+/doc/user/project/settings/project_access_tokens.md @jglassman1
/doc/user/project/time_tracking.md @msedlakjakubowski
-/doc/user/project/web_ide/ @aqualls
-/doc/user/project/wiki/ @aqualls
+/doc/user/project/web_ide/ @ashrafkhamis
+/doc/user/project/wiki/ @ashrafkhamis
/doc/user/project/working_with_projects.md @fneill
/doc/user/public_access.md @fneill
/doc/user/reserved_names.md @fneill
/doc/user/search/ @ashrafkhamis
/doc/user/search/global_search/ @ashrafkhamis
-/doc/user/shortcuts.md @aqualls
-/doc/user/snippets.md @aqualls
-/doc/user/ssh.md @eread
+/doc/user/shortcuts.md @ashrafkhamis
+/doc/user/snippets.md @ashrafkhamis
+/doc/user/ssh.md @jglassman1
/doc/user/tasks.md @msedlakjakubowski
/doc/user/todos.md @msedlakjakubowski
/doc/user/usage_quotas.md @fneill
diff --git a/.gitlab/ci/_skip.yml b/.gitlab/ci/_skip.yml
index 27a3ff5b836..9d3745cf2f1 100644
--- a/.gitlab/ci/_skip.yml
+++ b/.gitlab/ci/_skip.yml
@@ -1,7 +1,7 @@
# no-op pipeline template for skipping whole child pipeline execution
no-op:
- image: ${GITLAB_DEPENDENCY_PROXY}alpine:latest
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine:latest
stage: test
variables:
GIT_STRATEGY: none
diff --git a/.gitlab/ci/build-images.gitlab-ci.yml b/.gitlab/ci/build-images.gitlab-ci.yml
index 1b041c9af38..3c7056a92c1 100644
--- a/.gitlab/ci/build-images.gitlab-ci.yml
+++ b/.gitlab/ci/build-images.gitlab-ci.yml
@@ -15,27 +15,7 @@ build-qa-image:
stage: build-images
needs: []
script:
- # Tag with commit SHA by default
- - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-ee-qa:${CI_COMMIT_SHA}"
- # For branches, tag with slugified branch name. For tags, use the tag directly
- - export QA_IMAGE_BRANCH="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-ee-qa:${CI_COMMIT_TAG:-$CI_COMMIT_REF_SLUG}"
- # Auto-deploy tag format uses first 12 letters of commit SHA. Tag with that
- # reference also
- - export QA_IMAGE_FOR_AUTO_DEPLOY="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-ee-qa:${CI_COMMIT_SHA:0:11}"
- - echo $QA_IMAGE
- - echo $QA_IMAGE_BRANCH
- - echo $QA_IMAGE_FOR_AUTO_DEPLOY
- - |
- /kaniko/executor \
- --context=${CI_PROJECT_DIR} \
- --dockerfile=${CI_PROJECT_DIR}/qa/Dockerfile \
- --destination=${QA_IMAGE} \
- --destination=${QA_IMAGE_BRANCH} \
- --destination=${QA_IMAGE_FOR_AUTO_DEPLOY} \
- --build-arg=CHROME_VERSION=${CHROME_VERSION} \
- --build-arg=DOCKER_VERSION=${DOCKER_VERSION} \
- --build-arg=QA_BUILD_TARGET=${QA_BUILD_TARGET:-qa} \
- --cache=true
+ - ./scripts/build_qa_image
# This image is used by:
# - The `CNG` pipelines (via the `review-build-cng` job): https://gitlab.com/gitlab-org/build/CNG/-/blob/cfc67136d711e1c8c409bf8e57427a644393da2f/.gitlab-ci.yml#L335
diff --git a/.gitlab/ci/caching.gitlab-ci.yml b/.gitlab/ci/caching.gitlab-ci.yml
new file mode 100644
index 00000000000..6a13fc3c56f
--- /dev/null
+++ b/.gitlab/ci/caching.gitlab-ci.yml
@@ -0,0 +1,65 @@
+cache-workhorse:
+ extends:
+ - .default-retry
+ - .default-before_script
+ - .rails-cache
+ - .setup-test-env-cache
+ - .caching:rules:cache-workhorse
+ stage: prepare
+ variables:
+ SETUP_DB: "false"
+ script:
+ - source scripts/gitlab_component_helpers.sh
+ - 'gitlab_workhorse_archive_doesnt_exist || { echoinfo "INFO: Exiting early as package exists."; exit 0; }'
+ - run_timed_command "scripts/setup-test-env"
+ - run_timed_command "select_gitlab_workhorse_essentials"
+ - run_timed_command "create_gitlab_workhorse_package"
+ - run_timed_command "upload_gitlab_workhorse_package"
+ artifacts:
+ expire_in: 7d
+ paths:
+ - ${TMP_TEST_GITLAB_WORKHORSE_PATH}/
+
+.cache-assets-base:
+ extends:
+ - .compile-assets-base
+ - .assets-compile-cache
+ - .caching:rules:cache-assets
+ stage: prepare
+ variables:
+ WEBPACK_REPORT: "false"
+ script:
+ - yarn_install_script
+ - export GITLAB_ASSETS_HASH=$(bundle exec rake gitlab:assets:hash_sum)
+ - source scripts/gitlab_component_helpers.sh
+ - 'gitlab_assets_archive_doesnt_exist || { echoinfo "INFO: Exiting early as package exists."; exit 0; }'
+ - assets_compile_script
+ - echo -n "${GITLAB_ASSETS_HASH}" > "cached-assets-hash.txt"
+ - run_timed_command "create_gitlab_assets_package"
+ - run_timed_command "upload_gitlab_assets_package"
+
+cache-assets:test:
+ extends: .cache-assets-base
+
+cache-assets:test as-if-foss:
+ extends:
+ - .cache-assets-base
+ - .as-if-foss
+
+cache-assets:production:
+ extends: .cache-assets-base
+ variables:
+ NODE_ENV: "production"
+ RAILS_ENV: "production"
+
+packages-cleanup:
+ extends:
+ - .default-retry
+ - .caching:rules:packages-cleanup
+ image: ${GITLAB_DEPENDENCY_PROXY}ruby:${RUBY_VERSION}
+ stage: prepare
+ before_script:
+ - source scripts/utils.sh
+ - install_gitlab_gem
+ script:
+ - scripts/packages/automated_cleanup.rb
diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml
index 7e157171183..022f1c17a93 100644
--- a/.gitlab/ci/docs.gitlab-ci.yml
+++ b/.gitlab/ci/docs.gitlab-ci.yml
@@ -2,7 +2,7 @@
extends:
- .default-retry
- .docs:rules:review-docs
- image: ${GITLAB_DEPENDENCY_PROXY}ruby:${RUBY_VERSION}-alpine
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine
stage: review
needs: []
variables:
diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml
index 3bd65b565e4..085c0aa890d 100644
--- a/.gitlab/ci/frontend.gitlab-ci.yml
+++ b/.gitlab/ci/frontend.gitlab-ci.yml
@@ -1,11 +1,3 @@
-.yarn-install: &yarn-install
- - source scripts/utils.sh
- - run_timed_command "retry yarn install --frozen-lockfile"
-
-.storybook-yarn-install: &storybook-yarn-install
- - source scripts/utils.sh
- - run_timed_command "retry yarn run storybook:install --frozen-lockfile"
-
.compile-assets-base:
extends:
- .default-retry
@@ -21,9 +13,16 @@
WEBPACK_COMPILE_LOG_PATH: "tmp/webpack-output.log"
stage: prepare
script:
- - *yarn-install
- - run_timed_command "bin/rake gitlab:assets:compile"
- - run_timed_command "scripts/clean-old-cached-assets"
+ - yarn_install_script
+ - export GITLAB_ASSETS_HASH=$(bin/rake gitlab:assets:hash_sum)
+ - 'echo "CACHE_ASSETS_AS_PACKAGE: ${CACHE_ASSETS_AS_PACKAGE}"'
+ # The new strategy to cache assets as generic packages is experimental and can be disabled by removing the `CACHE_ASSETS_AS_PACKAGE` variable
+ - |
+ if [[ "${CACHE_ASSETS_AS_PACKAGE}" == "true" ]]; then
+ source scripts/gitlab_component_helpers.sh
+ gitlab_assets_archive_doesnt_exist || run_timed_command "download_and_extract_gitlab_assets"
+ fi
+ - assets_compile_script
compile-production-assets:
extends:
@@ -42,8 +41,6 @@ compile-production-assets:
- public/assets/
- "${WEBPACK_COMPILE_LOG_PATH}"
when: always
- before_script:
- - !reference [.default-before_script, before_script]
after_script:
- rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here
@@ -71,6 +68,9 @@ update-assets-compile-production-cache:
- .assets-compile-cache-push
- .shared:rules:update-cache
stage: prepare
+ script:
+ - !reference [compile-production-assets, script]
+ - echo -n "${GITLAB_ASSETS_HASH}" > "cached-assets-hash.txt"
artifacts: {} # This job's purpose is only to update the cache.
update-assets-compile-test-cache:
@@ -79,25 +79,31 @@ update-assets-compile-test-cache:
- .assets-compile-cache-push
- .shared:rules:update-cache
stage: prepare
+ script:
+ - !reference [compile-test-assets, script]
+ - echo -n "${GITLAB_ASSETS_HASH}" > "cached-assets-hash.txt"
artifacts: {} # This job's purpose is only to update the cache.
+# TODO: Remove this as it's duplicating update-assets-compile-*-cache
update-yarn-cache:
extends:
- .default-retry
+ - .default-utils-before_script
- .yarn-cache-push
- .shared:rules:update-cache
stage: prepare
script:
- - *yarn-install
+ - yarn_install_script
update-storybook-yarn-cache:
extends:
- .default-retry
+ - .default-utils-before_script
- .storybook-yarn-cache-push
- .shared:rules:update-cache
stage: prepare
script:
- - *storybook-yarn-install
+ - yarn_install_script
.frontend-fixtures-base:
extends:
@@ -180,7 +186,7 @@ graphql-schema-dump as-if-foss:
SETUP_DB: "false"
before_script:
- !reference [.default-before_script, before_script]
- - *yarn-install
+ - yarn_install_script
stage: test
.jest-base:
@@ -247,6 +253,7 @@ jest-integration:
coverage-frontend:
extends:
- .default-retry
+ - .default-utils-before_script
- .yarn-cache
- .frontend:rules:coverage-frontend
needs:
@@ -255,9 +262,8 @@ coverage-frontend:
- job: "jest minimal"
optional: true
stage: post-test
- before_script:
- - *yarn-install
script:
+ - yarn_install_script
- run_timed_command "yarn node scripts/frontend/merge_coverage_frontend.js"
# Removing the individual coverage results, as we just merged them.
- if ls coverage-frontend/jest-* > /dev/null 2>&1; then
@@ -277,31 +283,33 @@ coverage-frontend:
.qa-frontend-node:
extends:
- .default-retry
- - .yarn-cache
+ - .default-utils-before_script
+ - .qa-frontend-node-cache
- .frontend:rules:qa-frontend-node
stage: test
- dependencies: []
+ needs: []
script:
- - *yarn-install
+ - yarn_install_script
- run_timed_command "retry yarn run webpack-prod"
qa-frontend-node:14:
extends: .qa-frontend-node
- image: ${GITLAB_DEPENDENCY_PROXY}node:14
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}node:14
qa-frontend-node:16:
extends: .qa-frontend-node
- image: ${GITLAB_DEPENDENCY_PROXY}node:16
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}node:16
qa-frontend-node:latest:
extends:
- .qa-frontend-node
- .frontend:rules:qa-frontend-node-latest
- image: ${GITLAB_DEPENDENCY_PROXY}node:latest
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}node:latest
webpack-dev-server:
extends:
- .default-retry
+ - .default-utils-before_script
- .yarn-cache
- .frontend:rules:default-frontend-jobs
stage: test
@@ -310,7 +318,7 @@ webpack-dev-server:
WEBPACK_MEMORY_TEST: "true"
WEBPACK_VENDOR_DLL: "true"
script:
- - *yarn-install
+ - yarn_install_script
- run_timed_command "retry yarn webpack-vendor"
- run_timed_command "node --expose-gc node_modules/.bin/webpack-dev-server --config config/webpack.config.js"
artifacts:
@@ -322,13 +330,14 @@ webpack-dev-server:
bundle-size-review:
extends:
- .default-retry
+ - .default-utils-before_script
- .assets-compile-cache
- .frontend:rules:bundle-size-review
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:danger
stage: test
needs: []
script:
- - *yarn-install
+ - yarn_install_script
- scripts/bundle_size_review
artifacts:
when: always
@@ -366,8 +375,8 @@ startup-css-check as-if-foss:
- .frontend-test-base
- .storybook-yarn-cache
script:
- - *storybook-yarn-install
- - yarn run storybook:build
+ - run_timed_command "retry yarn run storybook:install --frozen-lockfile"
+ - run_timed_command "yarn run storybook:build"
needs: ["graphql-schema-dump"]
compile-storybook:
diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml
index 7bdca62b68e..ed59a0dd8fe 100644
--- a/.gitlab/ci/global.gitlab-ci.yml
+++ b/.gitlab/ci/global.gitlab-ci.yml
@@ -8,13 +8,17 @@
- job_execution_timeout
- stuck_or_timeout_failure
-.default-before_script:
+.default-utils-before_script:
before_script:
- echo $FOSS_ONLY
- '[ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb'
- export GOPATH=$CI_PROJECT_DIR/.go
- mkdir -p $GOPATH
- source scripts/utils.sh
+
+.default-before_script:
+ before_script:
+ - !reference [.default-utils-before_script, before_script]
- source scripts/prepare_build.sh
.ruby-gems-cache: &ruby-gems-cache
@@ -79,19 +83,30 @@
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.assets-cache: &assets-cache
- key: "assets-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-${NODE_ENV}-v2"
+ key: "assets-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-${NODE_ENV}-v5"
+ # This list should match GITLAB_ASSETS_PATHS_LIST from scripts/gitlab_component_helpers.sh
paths:
- - assets-hash.txt
- - public/assets/webpack/
- - tmp/cache/assets/sprockets/
- - tmp/cache/babel-loader/
- - tmp/cache/vue-loader/
+ - cached-assets-hash.txt
+ - app/assets/javascripts/locale/**/app.js
+ - public/assets/
policy: pull
.assets-cache-push: &assets-cache-push
<<: *assets-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
+.assets-tmp-cache: &assets-tmp-cache
+ key: "assets-tmp-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-${NODE_ENV}-v1"
+ paths:
+ - tmp/cache/assets/sprockets/
+ - tmp/cache/babel-loader/
+ - tmp/cache/vue-loader/
+ policy: pull
+
+.assets-tmp-cache-push: &assets-tmp-cache-push
+ <<: *assets-tmp-cache
+ policy: push # We want to rebuild the cache from scratch to ensure we don't pile up outdated cache files.
+
.storybook-node-modules-cache: &storybook-node-modules-cache
key: "storybook-node-modules-${DEBIAN_VERSION}-${NODE_ENV}"
paths:
@@ -174,7 +189,7 @@
cache:
- *ruby-gems-cache
-.danger-review-cache:
+.ruby-node-cache:
cache:
- *ruby-gems-cache
- *node-modules-cache
@@ -199,6 +214,12 @@
cache:
- *node-modules-cache
+.qa-frontend-node-cache:
+ cache:
+ - *node-modules-cache
+ - *assets-tmp-cache
+
+# TODO: Remove this as it's duplicating .assets-compile-cache-push
.yarn-cache-push:
cache:
- *node-modules-cache-push
@@ -208,12 +229,14 @@
- *ruby-gems-cache
- *node-modules-cache
- *assets-cache
+ - *assets-tmp-cache
.assets-compile-cache-push:
cache:
- *ruby-gems-cache # We don't push this cache as it's already rebuilt by `update-setup-test-env-cache`
- *node-modules-cache-push
- *assets-cache-push
+ - *assets-tmp-cache-push
.storybook-yarn-cache:
cache:
@@ -323,7 +346,7 @@
FOSS_ONLY: '1'
.use-docker-in-docker:
- image: ${GITLAB_DEPENDENCY_PROXY}docker:${DOCKER_VERSION}
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}docker:${DOCKER_VERSION}
services:
- docker:${DOCKER_VERSION}-dind
variables:
diff --git a/.gitlab/ci/notify.gitlab-ci.yml b/.gitlab/ci/notify.gitlab-ci.yml
index 95318d5ce08..51b0f4071eb 100644
--- a/.gitlab/ci/notify.gitlab-ci.yml
+++ b/.gitlab/ci/notify.gitlab-ci.yml
@@ -1,12 +1,12 @@
.notify-slack:
- image: ${GITLAB_DEPENDENCY_PROXY}alpine
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine/curl
stage: notify
dependencies: []
cache: {}
variables:
MERGE_REQUEST_URL: ${CI_MERGE_REQUEST_PROJECT_URL}/-/merge_requests/${CI_MERGE_REQUEST_IID}
before_script:
- - apk update && apk add git curl bash
+ - apk update && apk add git bash
- echo "NOTIFY_CHANNEL is ${NOTIFY_CHANNEL}"
- echo "CI_PIPELINE_URL is ${CI_PIPELINE_URL}"
@@ -34,13 +34,28 @@ notify-security-pipeline:
- scripts/slack ${NOTIFY_CHANNEL} "<!subteam^S0127FU8PDE> ☠️ Pipeline for merged result failed! ☠️ See ${CI_PIPELINE_URL} (triggered from ${MERGE_REQUEST_URL})" ci_failing "GitLab Release Tools Bot"
notify-pipeline-failure:
- extends:
- - .notify-slack
+ extends: .notify-slack
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
rules:
- - if: '$NOTIFY_PIPELINE_FAILURE_CHANNEL'
+ # Don't report child pipeline failures
+ - if: '$CI_PIPELINE_SOURCE == "parent_pipeline"'
+ when: never
+ - if: '$CI_SLACK_WEBHOOK_URL && $NOTIFY_PIPELINE_FAILURE_CHANNEL'
when: on_failure
allow_failure: true
variables:
- NOTIFY_CHANNEL: "${NOTIFY_PIPELINE_FAILURE_CHANNEL}"
+ SLACK_CHANNEL: "${NOTIFY_PIPELINE_FAILURE_CHANNEL}"
+ FAILED_PIPELINE_REPORT_FILE: "failed_pipeline_report.json"
+ before_script:
+ - source scripts/utils.sh
+ - apt-get update && apt-get install -y jq
+ - install_gitlab_gem
script:
- - scripts/slack ${NOTIFY_CHANNEL} "❌ \`${CI_COMMIT_REF_NAME}\` pipeline failed! See ${CI_PIPELINE_URL}" ci_failing "notify-pipeline-failure"
+ - scripts/generate-failed-pipeline-slack-message.rb
+ - |
+ curl -X POST -H 'Content-Type: application/json' --data @${FAILED_PIPELINE_REPORT_FILE} "$CI_SLACK_WEBHOOK_URL"
+ artifacts:
+ paths:
+ - ${FAILED_PIPELINE_REPORT_FILE}
+ when: always
+ expire_in: 2 days
diff --git a/.gitlab/ci/package-and-test/main.gitlab-ci.yml b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
index d96da7744ab..1a1c67bf572 100644
--- a/.gitlab/ci/package-and-test/main.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
@@ -1,11 +1,13 @@
# E2E tests pipeline loaded dynamically by script: scripts/generate-e2e-pipeline
+default:
+ interruptible: true
+
include:
- - local: .gitlab/ci/global.gitlab-ci.yml
- local: .gitlab/ci/package-and-test/rules.gitlab-ci.yml
- local: .gitlab/ci/package-and-test/variables.gitlab-ci.yml
- project: gitlab-org/quality/pipeline-common
- ref: 1.2.1
+ ref: 1.3.0
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml
@@ -27,13 +29,12 @@ stages:
.ruby-image:
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3
-.bundle-install:
+.qa-install:
+ variables:
+ BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true"
+ BUNDLE_SILENCE_ROOT_WARNING: "true"
extends:
- .gitlab-qa-install
- - .qa-cache
- variables:
- RUN_WITH_BUNDLE: "true" # installs and runs gitlab-qa via bundler
- QA_PATH: qa
.omnibus-env:
variables:
@@ -44,6 +45,8 @@ stages:
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_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV
echo "Built environment file for omnibus build:"
cat $BUILD_ENV
artifacts:
@@ -59,14 +62,16 @@ stages:
.qa:
extends:
- .qa-base
- - .bundle-install
+ - .qa-install
- .gitlab-qa-report
stage: test
tags:
- e2e
needs:
- - trigger-omnibus
- - download-knapsack-report
+ - job: trigger-omnibus
+ optional: true
+ - job: download-knapsack-report
+ artifacts: true
variables:
QA_GENERATE_ALLURE_REPORT: "true"
QA_CAN_TEST_PRAEFECT: "false"
@@ -80,14 +85,33 @@ stages:
# ==========================================
# Prepare stage
# ==========================================
+check-release-set:
+ extends: .rules:prepare
+ stage: .pre
+ script:
+ - |
+ if [ -z "$RELEASE" ]; then
+ echo "E2E test pipeline requires omnibus installation docker image to be set via $RELEASE environment variable"
+ exit 1
+ else
+ echo "Omnibus installation image is set to '$RELEASE'"
+ fi
+
+dont-interrupt-me:
+ extends: .rules:dont-interrupt
+ stage: .pre
+ interruptible: false
+ script:
+ - echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
+
trigger-omnibus-env:
extends:
- .omnibus-env
- - .rules:prepare
+ - .rules:omnibus-build
stage: .pre
trigger-omnibus:
- extends: .rules:prepare
+ extends: .rules:omnibus-build
stage: .pre
needs:
- trigger-omnibus-env
@@ -106,6 +130,8 @@ trigger-omnibus:
TOP_UPSTREAM_SOURCE_PROJECT: $CI_PROJECT_PATH
SECURITY_SOURCES: $SECURITY_SOURCES
CACHE_UPDATE: $OMNIBUS_GITLAB_CACHE_UPDATE
+ RUBY3_BUILD: $OMNIBUS_GITLAB_RUBY3_BUILD
+ CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION
SKIP_QA_DOCKER: "true"
SKIP_QA_TEST: "true"
ee: "true"
@@ -115,30 +141,34 @@ trigger-omnibus:
download-knapsack-report:
extends:
- - .bundle-install
- - .ruby-image
+ - .gitlab-qa-image
- .rules:prepare
stage: .pre
+ variables:
+ KNAPSACK_DIR: ${CI_PROJECT_DIR}/qa/knapsack
+ GIT_STRATEGY: none
script:
+ # when using qa-image, code runs in /home/gitlab/qa folder
- bundle exec rake "knapsack:download[test]"
+ - mkdir -p "$KNAPSACK_DIR" && cp knapsack/*.json "${KNAPSACK_DIR}/"
allow_failure: true
artifacts:
paths:
- - qa/knapsack/ee-*.json
+ - qa/knapsack/*.json
expire_in: 1 day
-# e2e test jobs run on separate runner which has separate cache setup
cache-gems:
extends:
- - .bundle-install
+ - .qa-install
- .ruby-image
- - .qa-cache-push
- .rules:prepare
stage: .pre
tags:
- e2e
script:
- echo "Populated qa cache"
+ cache:
+ policy: pull-push
# ==========================================
# Test stage
@@ -154,11 +184,11 @@ cache-gems:
_ee:quarantine:
extends:
- .qa
- - .rules:test:quarantine
+ - .rules:test:manual
needs:
- - trigger-omnibus
+ - job: trigger-omnibus
+ optional: true
stage: test
- allow_failure: true
variables:
QA_RSPEC_TAGS: --tag quarantine
@@ -332,8 +362,9 @@ ee:update-minor:
UPDATE_TYPE: minor
QA_RSPEC_TAGS: --tag smoke
rules:
- - !reference [.rules:test:qa, rules]
+ - !reference [.rules:test:update, rules]
- if: $QA_SUITES =~ /Test::Instance::Smoke/
+ - !reference [.rules:test:manual, rules]
ee:update-major:
extends:
@@ -343,8 +374,9 @@ ee:update-major:
UPDATE_TYPE: major
QA_RSPEC_TAGS: --tag smoke
rules:
- - !reference [.rules:test:qa, rules]
+ - !reference [.rules:test:update, rules]
- if: $QA_SUITES =~ /Test::Instance::Smoke/
+ - !reference [.rules:test:manual, rules]
ee:gitaly-cluster:
extends: .qa
@@ -353,6 +385,7 @@ ee:gitaly-cluster:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::GitalyCluster/
+ - !reference [.rules:test:manual, rules]
ee:group-saml:
extends: .qa
@@ -361,6 +394,7 @@ ee:group-saml:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::GroupSAML/
+ - !reference [.rules:test:manual, rules]
ee:instance-saml:
extends: .qa
@@ -369,6 +403,7 @@ ee:instance-saml:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::InstanceSAML/
+ - !reference [.rules:test:manual, rules]
ee:jira:
extends: .qa
@@ -379,6 +414,7 @@ ee:jira:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Jira/
+ - !reference [.rules:test:manual, rules]
ee:ldap-no-server:
extends: .qa
@@ -387,6 +423,7 @@ ee:ldap-no-server:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::LDAPNoServer/
+ - !reference [.rules:test:manual, rules]
ee:ldap-tls:
extends: .qa
@@ -395,6 +432,7 @@ ee:ldap-tls:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::LDAPTLS/
+ - !reference [.rules:test:manual, rules]
ee:ldap-no-tls:
extends: .qa
@@ -403,6 +441,7 @@ ee:ldap-no-tls:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::LDAPNoTLS/
+ - !reference [.rules:test:manual, rules]
ee:mtls:
extends: .qa
@@ -411,6 +450,7 @@ ee:mtls:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::MTLS/
+ - !reference [.rules:test:manual, rules]
ee:mattermost:
extends: .qa
@@ -419,6 +459,7 @@ ee:mattermost:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Mattermost/
+ - !reference [.rules:test:manual, rules]
ee:registry:
extends: .qa
@@ -427,6 +468,7 @@ ee:registry:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Registry/
+ - !reference [.rules:test:manual, rules]
ee:registry-with-cdn:
extends: .qa
@@ -443,6 +485,7 @@ ee:registry-with-cdn:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::RegistryWithCDN/
+ - !reference [.rules:test:manual, rules]
ee:repository-storage:
extends: .qa
@@ -451,6 +494,7 @@ ee:repository-storage:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::RepositoryStorage/
+ - !reference [.rules:test:manual, rules]
ee:service-ping-disabled:
extends: .qa
@@ -459,6 +503,7 @@ ee:service-ping-disabled:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::ServicePingDisabled/
+ - !reference [.rules:test:manual, rules]
ee:smtp:
extends: .qa
@@ -467,6 +512,7 @@ ee:smtp:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::SMTP/
+ - !reference [.rules:test:manual, rules]
ee:cloud-activation:
extends: .qa
@@ -476,6 +522,7 @@ ee:cloud-activation:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::CloudActivation/
+ - !reference [.rules:test:manual, rules]
ee:large-setup:
extends: .qa
@@ -485,6 +532,7 @@ ee:large-setup:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::LargeSetup/
+ - !reference [.rules:test:manual, rules]
ee:metrics:
extends: .qa
@@ -493,6 +541,7 @@ ee:metrics:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::Metrics/
+ - !reference [.rules:test:manual, rules]
ee:elasticsearch:
extends: .qa
@@ -504,6 +553,7 @@ ee:elasticsearch:
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Elasticsearch/
+ - !reference [.rules:test:manual, rules]
ee:registry-object-storage-tls:
extends: ee:object-storage-aws
@@ -536,7 +586,7 @@ e2e-test-report:
upload-knapsack-report:
extends:
- .generate-knapsack-report-base
- - .bundle-install
+ - .qa-install
- .ruby-image
- .rules:report:process-results
stage: report
@@ -544,7 +594,7 @@ upload-knapsack-report:
relate-test-failures:
extends:
- - .bundle-install
+ - .qa-install
- .ruby-image
- .rules:report:process-results
stage: report
@@ -562,7 +612,7 @@ relate-test-failures:
generate-test-session:
extends:
- - .bundle-install
+ - .qa-install
- .ruby-image
- .rules:report:process-results
stage: report
@@ -585,7 +635,7 @@ generate-test-session:
notify-slack:
extends:
- .notify-slack-qa
- - .bundle-install
+ - .qa-install
- .ruby-image
- .rules:report:process-results
stage: notify
@@ -594,6 +644,7 @@ notify-slack:
SLACK_ICON_EMOJI: ci_failing
STATUS_SYM: ☠️
STATUS: failed
+ TYPE: "(package-and-test) "
when: on_failure
script:
- bundle exec gitlab-qa-report --prepare-stage-reports "$CI_PROJECT_DIR/gitlab-qa-run-*/**/rspec-*.xml" # generate summary
diff --git a/.gitlab/ci/package-and-test/rules.gitlab-ci.yml b/.gitlab/ci/package-and-test/rules.gitlab-ci.yml
index d866dec1cd0..47625340a3a 100644
--- a/.gitlab/ci/package-and-test/rules.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test/rules.gitlab-ci.yml
@@ -41,12 +41,27 @@
rules:
- when: always
+.rules:dont-interrupt:
+ rules:
+ - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
+ allow_failure: true
+ - if: $CI_MERGE_REQUEST_IID
+ when: manual
+ allow_failure: true
+
+.rules:omnibus-build:
+ rules:
+ - if: $SKIP_OMNIBUS_TRIGGER == "true"
+ when: never
+ - when: always
+
# ------------------------------------------
# Test
# ------------------------------------------
-.rules:test:quarantine:
+.rules:test:manual:
rules:
- when: manual
+ allow_failure: true
variables:
QA_TESTS: ""
@@ -78,7 +93,10 @@
rules:
- *qa-framework-changes
- <<: *specific-specs
- when: never
+ when: manual
+ allow_failure: true
+ variables:
+ QA_TESTS: ""
- *feature-flags-set-manual
# general qa job rule for jobs without the need to run in parallel
@@ -87,11 +105,21 @@
- *qa-framework-changes
- *feature-flags-set-manual
+.rules:test:update:
+ rules:
+ # skip upgrade jobs if gitlab version is not provided
+ # these jobs need gitlab version because we can't reliably detect it from just the image
+ - if: $GITLAB_VERSION == null
+ when: never
+ - !reference [.rules:test:qa, rules]
+
# ------------------------------------------
# Report
# ------------------------------------------
.rules:report:allure-report:
rules:
+ - if: $SKIP_ALLURE_REPORT == "true"
+ when: never
- when: always
.rules:report:process-results:
diff --git a/.gitlab/ci/package-and-test/variables.gitlab-ci.yml b/.gitlab/ci/package-and-test/variables.gitlab-ci.yml
index 324092c80f4..cd22fa0e6e4 100644
--- a/.gitlab/ci/package-and-test/variables.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test/variables.gitlab-ci.yml
@@ -1,9 +1,10 @@
# Default variables for package-and-test
variables:
- RELEASE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ee:${CI_COMMIT_SHA}"
SKIP_REPORT_IN_ISSUES: "true"
OMNIBUS_GITLAB_CACHE_UPDATE: "false"
+ OMNIBUS_GITLAB_RUBY3_BUILD: "false"
+ OMNIBUS_GITLAB_CACHE_EDITION: "GITLAB"
QA_LOG_LEVEL: "info"
QA_TESTS: ""
QA_FEATURE_FLAGS: ""
diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml
index c5a182b055a..bd587cb4418 100644
--- a/.gitlab/ci/qa.gitlab-ci.yml
+++ b/.gitlab/ci/qa.gitlab-ci.yml
@@ -76,8 +76,15 @@ e2e:package-and-test:
- e2e-test-pipeline-generate
variables:
SKIP_MESSAGE: Skipping package-and-test due to mr containing only quarantine changes!
+ RELEASE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ee:${CI_COMMIT_SHA}"
+ GITLAB_QA_IMAGE: "${CI_REGISTRY_IMAGE}/gitlab-ee-qa:${CI_COMMIT_SHA}"
+ 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
trigger:
strategy: depend
+ forward:
+ yaml_variables: true
+ pipeline_variables: true
include:
- artifact: package-and-test-pipeline.yml
job: e2e-test-pipeline-generate
diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml
index 0f524f03188..c60f85634b6 100644
--- a/.gitlab/ci/rails.gitlab-ci.yml
+++ b/.gitlab/ci/rails.gitlab-ci.yml
@@ -1,160 +1,5 @@
-#######################
-# rspec job base specs
-.rails-job-base:
- extends:
- - .default-retry
- - .default-before_script
- - .rails-cache
-
-.base-script:
- script:
- - source ./scripts/rspec_helpers.sh
- # Only install knapsack after bundle install! Otherwise oddly some native
- # gems could not be found under some circumstance. No idea why, hours wasted.
- - run_timed_command "gem install knapsack --no-document"
- - echo -e "\e[0Ksection_start:`date +%s`:gitaly-test-spawn[collapsed=true]\r\e[0KStarting Gitaly"
- - run_timed_command "scripts/gitaly-test-spawn" # Do not use 'bundle exec' here
- - echo -e "\e[0Ksection_end:`date +%s`:gitaly-test-spawn\r\e[0K"
-
-.minimal-rspec-tests:
- variables:
- RSPEC_TESTS_MAPPING_ENABLED: "true"
-
-.single-db:
- variables:
- DECOMPOSED_DB: "false"
-
-.single-db-rspec:
- extends: .single-db
-
-.praefect-with-db:
- variables:
- GITALY_PRAEFECT_WITH_DB: '1'
-
-.rspec-base:
- extends:
- - .rails-job-base
- - .base-artifacts
- stage: test
- variables:
- RUBY_GC_MALLOC_LIMIT: 67108864
- RUBY_GC_MALLOC_LIMIT_MAX: 134217728
- RECORD_DEPRECATIONS: "true"
- GEO_SECONDARY_PROXY: 0
- needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets", "detect-tests"]
- script:
- - !reference [.base-script, script]
- - rspec_paralellized_job "--tag ~quarantine --tag ~level:migration"
-
-.base-artifacts:
- artifacts:
- expire_in: 31d
- when: always
- paths:
- - coverage/
- - crystalball/
- - deprecations/
- - knapsack/
- - rspec/
- - tmp/capybara/
- - log/*.log
- reports:
- junit: ${JUNIT_RESULT_FILE}
-
-.rspec-base-migration:
- extends:
- - .base-artifacts
- - .rails:rules:ee-and-foss-migration
- script:
- - !reference [.base-script, script]
- - rspec_paralellized_job "--tag ~quarantine --tag level:migration"
-
-.rspec-base-pg11:
- extends:
- - .rspec-base
- - .use-pg11
-
-.rspec-base-pg12:
- extends:
- - .rspec-base
- - .use-pg12
-
-.rspec-base-pg12-as-if-foss:
- extends:
- - .rspec-base
- - .as-if-foss
- - .use-pg12
- needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss", "detect-tests"]
-
-.rspec-base-pg13:
- extends:
- - .rspec-base
- - .use-pg13
-
-.rspec-ee-base-pg11:
- extends:
- - .rspec-base
- - .use-pg11-ee
-
-.rspec-ee-base-pg12:
- extends:
- - .rspec-base
- - .use-pg12-ee
-
-.rspec-ee-base-pg12-es8:
- extends:
- - .rspec-base
- - .use-pg12-es8-ee
- - .rails:rules:run-search-tests
-
-.rspec-ee-base-pg12-opensearch1:
- extends:
- - .rspec-base
- - .use-pg12-opensearch1-ee
- - .rails:rules:run-search-tests
-
-.rspec-ee-base-pg13:
- extends:
- - .rspec-base
- - .use-pg13-ee
-
-.db-job-base:
- extends:
- - .rails-job-base
- - .rails:rules:ee-and-foss-migration
- - .use-pg12
- stage: test
- needs: ["setup-test-env"]
-# rspec job base specs
-######################
-
-############################
-# rspec job parallel configs
-.rspec-migration-parallel:
- parallel: 12
-
-.rspec-ee-migration-parallel:
- parallel: 4
-
-.rspec-unit-parallel:
- parallel: 28
-
-.rspec-ee-unit-parallel:
- parallel: 18
-
-.rspec-integration-parallel:
- parallel: 12
-
-.rspec-ee-integration-parallel:
- parallel: 6
-
-.rspec-system-parallel:
- parallel: 28
-
-.rspec-ee-system-parallel:
- parallel: 10
-# rspec job parallel configs
-############################
+include:
+ - local: .gitlab/ci/rails/shared.gitlab-ci.yml
###############################################################
# EE/FOSS: default refs (MRs, default branch, schedules) jobs #
@@ -168,7 +13,7 @@ setup-test-env:
SETUP_DB: "false"
script:
- echo $CI_MERGE_REQUEST_APPROVED
- - source scripts/gitlab_workhorse_component_helpers.sh
+ - source scripts/gitlab_component_helpers.sh
- run_timed_command "download_and_extract_gitlab_workhorse_package" || true
- run_timed_command "scripts/setup-test-env"
- run_timed_command "select_gitlab_workhorse_essentials"
@@ -197,22 +42,6 @@ setup-test-env:
- ${TMP_TEST_GITLAB_WORKHORSE_PATH}/
when: always
-build-components:
- extends:
- - setup-test-env
- - .rails:rules:build-components
- script:
- - source scripts/gitlab_workhorse_component_helpers.sh
- - 'gitlab_workhorse_archive_doesnt_exist || { echoinfo "INFO: Exiting early as package exists."; exit 0; }'
- - run_timed_command "scripts/setup-test-env"
- - run_timed_command "select_gitlab_workhorse_essentials"
- - run_timed_command "create_gitlab_workhorse_package"
- - run_timed_command "upload_gitlab_workhorse_package"
- artifacts:
- expire_in: 7d
- paths:
- - ${TMP_TEST_GITLAB_WORKHORSE_PATH}/
-
update-setup-test-env-cache:
extends:
- setup-test-env
@@ -407,6 +236,21 @@ db:check-migrations-single-db:
- .single-db
- .rails:rules:single-db
+db:post_deployment_migrations_validator:
+ extends:
+ - .db-job-base
+ - .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
+ - scripts/post_deployment_migrations_validator
+ allow_failure: true
+
+db:post_deployment_migrations_validator-single-db:
+ extends:
+ - db:post_deployment_migrations_validator
+ - .single-db
+ - .rails:rules:single-db
+
db:migrate-non-superuser:
extends:
- .db-job-base
@@ -943,18 +787,41 @@ rspec fail-fast:
paths:
- tmp/capybara/
-rspec foss-impact:
+rspec-foss-impact:pipeline-generate:
extends:
- - .rspec-base-pg12-as-if-foss
- .rails:rules:rspec-foss-impact
- needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss", "detect-tests"]
+ stage: prepare
+ needs: ["detect-tests"]
script:
- - !reference [.base-script, script]
- - rspec_matched_foss_tests "${RSPEC_MATCHING_TESTS_PATH}" "--tag ~quarantine"
+ - scripts/generate-rspec-foss-impact-pipeline "${RSPEC_MATCHING_TESTS_FOSS_PATH}" "${RSPEC_FOSS_IMPACT_PIPELINE_YML}"
artifacts:
- expire_in: 7d
+ expire_in: 1 day
paths:
- - tmp/capybara/
+ - $RSPEC_FOSS_IMPACT_PIPELINE_YML
+
+rspec-foss-impact:trigger:
+ extends:
+ - .rails:rules:rspec-foss-impact
+ stage: test
+ needs:
+ - job: "setup-test-env"
+ artifacts: false
+ - job: "retrieve-tests-metadata"
+ artifacts: false
+ - job: "compile-test-assets as-if-foss"
+ artifacts: false
+ - job: "rspec-foss-impact:pipeline-generate"
+ artifacts: true
+ variables:
+ PARENT_PIPELINE_ID: $CI_PIPELINE_ID
+ trigger:
+ strategy: depend
+ forward:
+ yaml_variables: true
+ pipeline_variables: true
+ include:
+ - artifact: $RSPEC_FOSS_IMPACT_PIPELINE_YML
+ job: rspec-foss-impact:pipeline-generate
fail-pipeline-early:
extends:
diff --git a/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb b/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb
new file mode 100644
index 00000000000..4ae4cb75a25
--- /dev/null
+++ b/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb
@@ -0,0 +1,50 @@
+# RSpec FOSS impact pipeline loaded dynamically by script: scripts/generate-rspec-foss-impact-pipeline
+
+include:
+ - local: .gitlab/ci/rails/shared.gitlab-ci.yml
+
+default:
+ image: $DEFAULT_CI_IMAGE
+ tags:
+ - gitlab-org
+ # Default job timeout set to 90m https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues/10520
+ timeout: 90m
+ interruptible: true
+
+stages:
+ - test
+
+dont-interrupt-me:
+ extends: .rules:dont-interrupt
+ stage: .pre
+ interruptible: false
+ script:
+ - echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
+
+rspec foss-impact:
+ extends: .rspec-base-pg12-as-if-foss
+ needs:
+ - pipeline: $PARENT_PIPELINE_ID
+ job: detect-tests
+ - pipeline: $PARENT_PIPELINE_ID
+ job: setup-test-env
+ - pipeline: $PARENT_PIPELINE_ID
+ job: retrieve-tests-metadata
+ - pipeline: $PARENT_PIPELINE_ID
+ job: compile-test-assets as-if-foss
+ rules:
+ - when: always
+ variables:
+ RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_FOSS_PATH}"
+ RSPEC_TESTS_MAPPING_ENABLED: "true"
+<% if Integer(parallel_value) > 1 %>
+ parallel: <%= parallel_value %>
+<% end %>
+ script:
+ - !reference [.base-script, script]
+ - rspec_paralellized_job "--tag ~quarantine --tag ~level:migration"
+ artifacts:
+ expire_in: 7d
+ paths:
+ - "${RSPEC_MATCHING_TESTS_FOSS_PATH}"
+ - tmp/capybara/
diff --git a/.gitlab/ci/rails/shared.gitlab-ci.yml b/.gitlab/ci/rails/shared.gitlab-ci.yml
new file mode 100644
index 00000000000..60c9826abfe
--- /dev/null
+++ b/.gitlab/ci/rails/shared.gitlab-ci.yml
@@ -0,0 +1,172 @@
+include:
+ - local: .gitlab/ci/global.gitlab-ci.yml
+ - local: .gitlab/ci/rules.gitlab-ci.yml
+
+.rules:dont-interrupt:
+ rules:
+ - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
+ allow_failure: true
+ - if: $CI_MERGE_REQUEST_IID
+ when: manual
+ allow_failure: true
+
+#######################
+# rspec job base specs
+.rails-job-base:
+ extends:
+ - .default-retry
+ - .default-before_script
+ - .rails-cache
+
+.base-script:
+ script:
+ - source ./scripts/rspec_helpers.sh
+ # Only install knapsack after bundle install! Otherwise oddly some native
+ # gems could not be found under some circumstance. No idea why, hours wasted.
+ - run_timed_command "gem install knapsack --no-document"
+ - echo -e "\e[0Ksection_start:`date +%s`:gitaly-test-spawn[collapsed=true]\r\e[0KStarting Gitaly"
+ - run_timed_command "scripts/gitaly-test-spawn" # Do not use 'bundle exec' here
+ - echo -e "\e[0Ksection_end:`date +%s`:gitaly-test-spawn\r\e[0K"
+
+.minimal-rspec-tests:
+ variables:
+ RSPEC_TESTS_MAPPING_ENABLED: "true"
+
+.single-db:
+ variables:
+ DECOMPOSED_DB: "false"
+
+.single-db-rspec:
+ extends: .single-db
+
+.praefect-with-db:
+ variables:
+ GITALY_PRAEFECT_WITH_DB: '1'
+
+.rspec-base:
+ extends:
+ - .rails-job-base
+ - .base-artifacts
+ stage: test
+ variables:
+ RUBY_GC_MALLOC_LIMIT: 67108864
+ RUBY_GC_MALLOC_LIMIT_MAX: 134217728
+ RECORD_DEPRECATIONS: "true"
+ GEO_SECONDARY_PROXY: 0
+ RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_PATH}"
+ needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets", "detect-tests"]
+ script:
+ - !reference [.base-script, script]
+ - rspec_paralellized_job "--tag ~quarantine --tag ~level:migration"
+
+.base-artifacts:
+ artifacts:
+ expire_in: 31d
+ when: always
+ paths:
+ - coverage/
+ - crystalball/
+ - deprecations/
+ - knapsack/
+ - rspec/
+ - tmp/capybara/
+ - log/*.log
+ reports:
+ junit: ${JUNIT_RESULT_FILE}
+
+.rspec-base-migration:
+ extends:
+ - .base-artifacts
+ - .rails:rules:ee-and-foss-migration
+ variables:
+ RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_PATH}"
+ script:
+ - !reference [.base-script, script]
+ - rspec_paralellized_job "--tag ~quarantine --tag level:migration"
+
+.rspec-base-pg11:
+ extends:
+ - .rspec-base
+ - .use-pg11
+
+.rspec-base-pg12:
+ extends:
+ - .rspec-base
+ - .use-pg12
+
+.rspec-base-pg12-as-if-foss:
+ extends:
+ - .rspec-base
+ - .as-if-foss
+ - .use-pg12
+ needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss", "detect-tests"]
+
+.rspec-base-pg13:
+ extends:
+ - .rspec-base
+ - .use-pg13
+
+.rspec-ee-base-pg11:
+ extends:
+ - .rspec-base
+ - .use-pg11-ee
+
+.rspec-ee-base-pg12:
+ extends:
+ - .rspec-base
+ - .use-pg12-ee
+
+.rspec-ee-base-pg12-es8:
+ extends:
+ - .rspec-base
+ - .use-pg12-es8-ee
+ - .rails:rules:run-search-tests
+
+.rspec-ee-base-pg12-opensearch1:
+ extends:
+ - .rspec-base
+ - .use-pg12-opensearch1-ee
+ - .rails:rules:run-search-tests
+
+.rspec-ee-base-pg13:
+ extends:
+ - .rspec-base
+ - .use-pg13-ee
+
+.db-job-base:
+ extends:
+ - .rails-job-base
+ - .rails:rules:ee-and-foss-migration
+ - .use-pg12
+ stage: test
+ needs: ["setup-test-env"]
+# rspec job base specs
+######################
+
+############################
+# rspec job parallel configs
+.rspec-migration-parallel:
+ parallel: 12
+
+.rspec-ee-migration-parallel:
+ parallel: 4
+
+.rspec-unit-parallel:
+ parallel: 28
+
+.rspec-ee-unit-parallel:
+ parallel: 18
+
+.rspec-integration-parallel:
+ parallel: 12
+
+.rspec-ee-integration-parallel:
+ parallel: 6
+
+.rspec-system-parallel:
+ parallel: 28
+
+.rspec-ee-system-parallel:
+ parallel: 10
+# rspec job parallel configs
+############################
diff --git a/.gitlab/ci/releases.gitlab-ci.yml b/.gitlab/ci/releases.gitlab-ci.yml
index 77f23814f3c..df7b07f5545 100644
--- a/.gitlab/ci/releases.gitlab-ci.yml
+++ b/.gitlab/ci/releases.gitlab-ci.yml
@@ -4,7 +4,7 @@
.merge-train-sync:
# We don't need/want any global before/after commands, so we overwrite these
# settings.
- image: ${GITLAB_DEPENDENCY_PROXY}alpine:edge
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine:edge
stage: sync
before_script:
- apk add --no-cache --update curl bash jq
diff --git a/.gitlab/ci/review-apps/dast-api.gitlab-ci.yml b/.gitlab/ci/review-apps/dast-api.gitlab-ci.yml
new file mode 100644
index 00000000000..e2f32f120af
--- /dev/null
+++ b/.gitlab/ci/review-apps/dast-api.gitlab-ci.yml
@@ -0,0 +1,14 @@
+include:
+ - template: DAST-API.gitlab-ci.yml
+
+dast_api:
+ variables:
+ DAST_API_PROFILE: Passive
+ DAST_API_GRAPHQL: /api/graphql
+ DAST_API_TARGET_URL: ${CI_ENVIRONMENT_URL}
+ DAST_API_OVERRIDES_ENV: "{\"headers\":{\"Authorization\":\"Bearer $REVIEW_APPS_ROOT_TOKEN\"}}"
+ needs: ["review-deploy"]
+ # Uncomment resource_group if DAST_API_PROFILE is changed to an active scan
+ # resource_group: dast_api_scan
+ rules:
+ - !reference [".reports:rules:schedule-dast", rules]
diff --git a/.gitlab/ci/review-apps/main.gitlab-ci.yml b/.gitlab/ci/review-apps/main.gitlab-ci.yml
index e28ffc82811..d3f5d014464 100644
--- a/.gitlab/ci/review-apps/main.gitlab-ci.yml
+++ b/.gitlab/ci/review-apps/main.gitlab-ci.yml
@@ -1,3 +1,6 @@
+default:
+ interruptible: true
+
stages:
- prepare
- deploy
@@ -11,17 +14,25 @@ include:
- local: .gitlab/ci/review-apps/rules.gitlab-ci.yml
- local: .gitlab/ci/review-apps/qa.gitlab-ci.yml
- local: .gitlab/ci/review-apps/dast.gitlab-ci.yml
+ - local: .gitlab/ci/review-apps/dast-api.gitlab-ci.yml
.base-before_script: &base-before_script
- source ./scripts/utils.sh
- source ./scripts/review_apps/review-apps.sh
- apt-get update && apt-get install -y jq
+dont-interrupt-me:
+ extends: .rules:dont-interrupt
+ stage: prepare
+ interruptible: false
+ script:
+ - echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
+
review-build-cng-env:
extends:
- .default-retry
- .review:rules:review-build-cng
- image: ${GITLAB_DEPENDENCY_PROXY}ruby:3.0-alpine3.13
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:3.0-alpine3.13
stage: prepare
needs: []
before_script:
@@ -90,6 +101,10 @@ review-deploy:
- .review:rules:review-deploy
stage: deploy
needs: ["review-build-cng"]
+ cache:
+ key: "review-deploy-dependencies-charts-${GITLAB_HELM_CHART_REF}-v1"
+ paths:
+ - "gitlab-${GITLAB_HELM_CHART_REF}"
before_script:
- export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION)
- export GITALY_VERSION=$(<GITALY_SERVER_VERSION)
@@ -100,7 +115,6 @@ review-deploy:
script:
- check_kube_domain
- download_chart
- - date
- deploy || (display_deployment_debug && exit 1)
- verify_deploy || exit 1
- disable_sign_ups || (delete_release && exit 1)
diff --git a/.gitlab/ci/review-apps/qa.gitlab-ci.yml b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
index 21e6a8e42fb..0214f5ef3f2 100644
--- a/.gitlab/ci/review-apps/qa.gitlab-ci.yml
+++ b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
@@ -1,7 +1,8 @@
include:
- project: gitlab-org/quality/pipeline-common
- ref: 1.2.2
+ ref: 1.3.0
file:
+ - /ci/base.gitlab-ci.yml
- /ci/allure-report.yml
- /ci/knapsack-report.yml
@@ -58,7 +59,7 @@ include:
download-knapsack-report:
extends:
- .bundle-base
- - .rules:app-or-qa-framework-changes-or-review-scenarios
+ - .rules:prepare-report
stage: prepare
script:
- bundle exec rake "knapsack:download[qa]"
@@ -134,7 +135,7 @@ review-performance:
e2e-test-report:
extends:
- .generate-allure-report-base
- - .rules:app-or-qa-framework-changes-or-review-scenarios
+ - .rules:prepare-report
stage: post-qa
variables:
ALLURE_JOB_NAME: e2e-review-qa
@@ -162,7 +163,7 @@ upload-knapsack-report:
delete-test-resources:
extends:
- .bundle-base
- - .rules:app-or-qa-framework-changes-or-review-scenarios
+ - .rules:prepare-report
stage: post-qa
variables:
QA_TEST_RESOURCES_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/test-resources-*.json
@@ -172,3 +173,21 @@ delete-test-resources:
- bundle exec rake "test_resources:delete[$QA_TEST_RESOURCES_FILE_PATTERN]"
allow_failure: true
when: always
+
+notify-slack:
+ extends:
+ - .notify-slack-qa
+ - .qa-cache
+ - .rules:notify-slack
+ stage: post-qa
+ variables:
+ 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) "
+ script:
+ - bundle exec gitlab-qa-report --prepare-stage-reports "$CI_PROJECT_DIR/qa/tmp/rspec-*.xml" # generate summary
+ - !reference [.notify-slack-qa, script]
diff --git a/.gitlab/ci/review-apps/rules.gitlab-ci.yml b/.gitlab/ci/review-apps/rules.gitlab-ci.yml
index 56d3731bb56..4e07f381bc9 100644
--- a/.gitlab/ci/review-apps/rules.gitlab-ci.yml
+++ b/.gitlab/ci/review-apps/rules.gitlab-ci.yml
@@ -19,6 +19,15 @@
.qa-framework-changes: &qa-framework-changes
if: $QA_FRAMEWORK_CHANGES == "true"
+.default-branch: &default-branch
+ if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
+
+.qa-manual: &qa-manual
+ when: manual
+ allow_failure: true
+ variables:
+ QA_TESTS: ""
+
.never-when-qa-framework-changes-or-no-specific-specs:
- <<: *qa-framework-changes
when: never
@@ -27,10 +36,24 @@
.never-when-specific-specs-always-when-qa-framework-changes:
- <<: *specific-specs
- when: never
+ when: manual
+ allow_failure: true
+ variables:
+ QA_TESTS: ""
- *qa-framework-changes
# ------------------------------------------
+# Prepare
+# ------------------------------------------
+.rules:dont-interrupt:
+ rules:
+ - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
+ allow_failure: true
+ - if: $CI_MERGE_REQUEST_IID
+ when: manual
+ allow_failure: true
+
+# ------------------------------------------
# Test
# ------------------------------------------
.rules:qa-smoke:
@@ -41,6 +64,7 @@
QA_TESTS: "" # unset QA_TESTS even if specific tests were inferred from stage label
- *qa-framework-changes
- if: $QA_SUITES =~ /Test::Instance::Smoke/
+ - *qa-manual
.rules:qa-blocking:
rules:
@@ -70,12 +94,11 @@
# ------------------------------------------
# Prepare/Report
# ------------------------------------------
-# if no rules for test execution are matched, pipeline will not have e2e test jobs
-# so we need to skip knapsack, allure and test resource deletion jobs as well
-.rules:app-or-qa-framework-changes-or-review-scenarios:
+.rules:prepare-report:
rules:
- - *app-changes
- - *qa-framework-changes
- - if: $QA_SUITES =~ /Test::Instance::Smoke/
- - if: $QA_SUITES =~ /Test::Instance::ReviewBlocking/
- - if: $QA_SUITES =~ /Test::Instance::ReviewNonBlocking/
+ - when: always
+
+.rules:notify-slack:
+ rules:
+ - <<: *default-branch
+ when: on_failure
diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml
index 46e62829394..aefa96da159 100644
--- a/.gitlab/ci/review.gitlab-ci.yml
+++ b/.gitlab/ci/review.gitlab-ci.yml
@@ -1,6 +1,3 @@
-include:
- - remote: 'https://gitlab.com/gitlab-org/modelops/applied-ml/review-recommender/ci-templates/-/raw/v0.2.1/recommender/Reviewers.gitlab-ci.yml'
-
review-cleanup:
extends:
- .default-retry
@@ -20,7 +17,7 @@ review-cleanup:
script:
- delete_release
- delete_namespace
- - ruby -rrubygems scripts/review_apps/automated_cleanup.rb
+ - scripts/review_apps/automated_cleanup.rb
- gcp_cleanup
start-review-app-pipeline:
@@ -72,14 +69,14 @@ review-app-test-results:
danger-review:
extends:
- .default-retry
- - .danger-review-cache
+ - .ruby-node-cache
- .review:rules:danger
stage: test
needs: []
before_script:
- source scripts/utils.sh
- bundle_install_script "--with danger"
- - run_timed_command "retry yarn install --frozen-lockfile"
+ - 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
- >
@@ -96,12 +93,3 @@ danger-review-local:
- .review:rules:danger-local
script:
- run_timed_command danger_as_local
-
-reviewers-recommender:
- extends:
- - .default-retry
- # extends generated values cannot overwrite values from included files
- # Use !reference as a workaround here
- rules: !reference [".review:rules:reviewers-recommender", rules]
- stage: test
- needs: []
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index 9dc2f5eff23..afe900f39a6 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -31,11 +31,14 @@
.if-merge-request: &if-merge-request
if: '$CI_MERGE_REQUEST_IID'
+# Once https://gitlab.com/gitlab-org/gitlab/-/issues/373904 is implemented, we should be able to change this back to
+# if: '$CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_APPROVALS_COUNT > 0'
+# or any similar condition to check that the MR has *any* approval (not just required approval).
.if-merge-request-approved: &if-merge-request-approved
- if: '$CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_APPROVED'
+ if: '$CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_LABELS =~ /pipeline:run-full-rspec/'
.if-merge-request-not-approved: &if-merge-request-not-approved
- if: '$CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_APPROVED != "true"'
+ if: '$CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_LABELS !~ /pipeline:run-full-rspec/'
.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$/'
@@ -70,9 +73,6 @@
.if-merge-request-labels-skip-undercoverage: &if-merge-request-labels-skip-undercoverage
if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:skip-undercoverage/'
-.if-merge-request-labels-community-contribution: &if-merge-request-labels-community-contribution
- if: '$CI_MERGE_REQUEST_LABELS =~ /Community contribution/'
-
.if-merge-request-labels-jh-contribution: &if-merge-request-labels-jh-contribution
if: '$CI_MERGE_REQUEST_LABELS =~ /JiHu contribution/'
@@ -130,6 +130,9 @@
.if-dot-com-gitlab-org-and-security-tag: &if-dot-com-gitlab-org-and-security-tag
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/security$)/ && $CI_COMMIT_TAG'
+.if-ruby3-branch: &if-ruby3-branch
+ if: '$CI_COMMIT_BRANCH == "ruby3"'
+
# For Security merge requests, the gitlab-release-tools-bot triggers a new
# pipeline for the "Pipelines for merged results" feature. If the pipeline
# fails, we notify release managers.
@@ -179,6 +182,7 @@
- "GITLAB_WORKHORSE_VERSION"
- "workhorse/**/*"
- ".gitlab/ci/workhorse.gitlab-ci.yml"
+ - "spec/support/gitlab-git-test.git/**/*"
.yaml-lint-patterns: &yaml-lint-patterns
- "*.yml"
@@ -246,8 +250,21 @@
- "babel.config.js"
- "config/webpack.config.js"
- "config/**/*.js"
+ - "{,ee/,jh/}app/assets/**/*"
- "vendor/assets/**/*"
+
+# This list should match the list in Tasks::Gitlab::Assets.assets_impacting_compilation
+.assets-compilation-patterns: &assets-compilation-patterns
+ - "{package.json,yarn.lock}"
+ - ".browserslistrc"
+ - "babel.config.js"
+ - "config/webpack.config.js"
+ - "*.js"
+ - "config/**/*.js"
+ - "locale/**/gitlab.po"
- "{,ee/,jh/}app/assets/**/*"
+ - "fixtures/emojis/**/*"
+ - "vendor/assets/**/*"
.frontend-patterns-for-as-if-foss: &frontend-patterns-for-as-if-foss
- "{package.json,yarn.lock}"
@@ -516,7 +533,7 @@
- "vendor/assets/javascripts/**/*"
.feature-flag-development-config-patterns: &feature-flag-development-config-patterns
- - "{,ee/}config/feature_flags/{development,ops}/*.yml"
+ - "{,ee/,jh/}config/feature_flags/{development,ops}/*.yml"
##################
# Conditions set #
@@ -532,9 +549,6 @@
rules:
- <<: *if-merge-request-approved
when: never
- # Temporarily disabled minimal rspec jobs before and after approval because of https://gitlab.com/gitlab-org/gitlab/-/issues/373064.
- - <<: *if-merge-request-not-approved
- when: never
- <<: *if-automated-merge-request
when: never
- <<: *if-security-merge-request
@@ -550,12 +564,12 @@
- <<: *if-merge-request-labels-run-all-rspec
- <<: *if-merge-request
changes: *core-backend-patterns
- - <<: *if-merge-request
- changes: *ci-patterns
- <<: *if-automated-merge-request
changes: *backend-patterns
- <<: *if-security-merge-request
changes: *backend-patterns
+ - <<: *if-merge-request-not-approved
+ when: never
.rails:rules:as-if-foss-migration-unit-integration:minimal-default-rules:
rules:
@@ -579,12 +593,12 @@
changes: *core-backend-patterns
- <<: *if-merge-request
changes: *workhorse-patterns
- - <<: *if-merge-request
- changes: *ci-patterns
- <<: *if-automated-merge-request
changes: *code-backstage-patterns
- <<: *if-security-merge-request
changes: *code-backstage-patterns
+ - <<: *if-merge-request-not-approved
+ when: never
.rails:rules:system:minimal-default-rules:
rules:
@@ -629,8 +643,6 @@
######################
.build-images:rules:build-qa-image:
rules:
- - <<: *if-not-ee
- when: never
- <<: *if-not-canonical-namespace
when: never
- <<: *if-merge-request-targeting-stable-branch
@@ -643,6 +655,7 @@
- <<: *if-default-branch-or-tag
- <<: *if-dot-com-gitlab-org-schedule
- <<: *if-force-ci
+ - <<: *if-ruby3-branch
.build-images:rules:build-assets-image:
rules:
@@ -651,9 +664,60 @@
- <<: *if-merge-request-targeting-stable-branch
- <<: *if-merge-request-labels-run-review-app
- <<: *if-auto-deploy-branches
+ - <<: *if-ruby3-branch
- changes: *ci-build-images-patterns
- changes: *code-qa-patterns
+#################
+# Caching rules #
+#################
+.caching:rules:cache-workhorse:
+ rules:
+ # That would run for any project that has a "maintenance" pipeline schedule
+ # but in fact, the cache package is only uploaded for gitlab.com/gitlab-org/gitlab and jihulab.com/gitlab-cn/gitlab
+ - <<: *if-default-branch-schedule-maintenance
+ - <<: *if-dot-com-gitlab-org-default-branch
+ changes: ["workhorse/**/*"]
+ - <<: *if-dot-com-gitlab-org-merge-request
+ changes:
+ - ".gitlab/ci/caching.gitlab-ci.yml"
+ - "scripts/gitlab_component_helpers.sh"
+ when: manual
+ allow_failure: true
+
+.caching:rules:cache-assets:
+ rules:
+ # The new strategy to cache assets as generic packages is experimental and can be disabled by removing the `CACHE_ASSETS_AS_PACKAGE` variable
+ - if: '$CACHE_ASSETS_AS_PACKAGE != "true"'
+ when: never
+ # That would run for any project that has a "maintenance" pipeline schedule
+ # but in fact, the cache package is only uploaded for gitlab.com/gitlab-org/gitlab and jihulab.com/gitlab-cn/gitlab
+ - <<: *if-default-branch-schedule-maintenance
+ - <<: *if-dot-com-gitlab-org-default-branch
+ changes: *assets-compilation-patterns
+ - <<: *if-dot-com-gitlab-org-merge-request
+ changes:
+ - ".gitlab/ci/caching.gitlab-ci.yml"
+ - "scripts/gitlab_component_helpers.sh"
+ - "lib/tasks/gitlab/assets.rake"
+ when: manual
+ allow_failure: true
+
+.caching:rules:packages-cleanup:
+ rules:
+ # The new strategy to cache assets as generic packages is experimental and can be disabled by removing the `CACHE_ASSETS_AS_PACKAGE` variable
+ - if: '$CACHE_ASSETS_AS_PACKAGE != "true"'
+ when: never
+ # That would run for any project that has a "maintenance" pipeline schedule
+ # but in fact, the cache package is only uploaded for gitlab.com/gitlab-org/gitlab and jihulab.com/gitlab-cn/gitlab
+ - <<: *if-default-branch-schedule-maintenance
+ - <<: *if-dot-com-gitlab-org-merge-request
+ changes:
+ - ".gitlab/ci/caching.gitlab-ci.yml"
+ - "scripts/packages/automated_cleanup.rb"
+ when: manual
+ allow_failure: true
+
######################
# CI Templates Rules #
######################
@@ -768,8 +832,6 @@
- <<: *if-merge-request-labels-run-all-rspec
- <<: *if-merge-request
changes: *startup-css-patterns
- - <<: *if-merge-request
- changes: *ci-patterns
.frontend:rules:frontend_fixture-as-if-foss:
rules:
@@ -906,8 +968,6 @@
changes: *code-qa-patterns
- <<: *if-merge-request-labels-as-if-foss
- <<: *if-merge-request-labels-run-all-rspec
- - <<: *if-merge-request
- changes: *ci-patterns
.qa:rules:internal-as-if-foss:
rules:
@@ -928,6 +988,7 @@
allow_failure: true
- <<: *if-force-ci
allow_failure: true
+ - <<: *if-ruby3-branch
.qa:rules:package-and-test:
rules:
@@ -939,6 +1000,8 @@
when: never
- <<: *if-merge-request-targeting-stable-branch
allow_failure: true
+ - <<: *if-ruby3-branch
+ allow_failure: true
- <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e
changes: *feature-flag-development-config-patterns
when: manual
@@ -975,16 +1038,6 @@
###############
# Rails rules #
###############
-.rails:rules:build-components:
- rules:
- - <<: *if-dot-com-ee-schedule
- - <<: *if-dot-com-gitlab-org-default-branch
- changes:
- - "workhorse/**/*"
- - <<: *if-dot-com-gitlab-org-merge-request
- when: manual
- allow_failure: true
-
.rails:rules:setup-test-env:
rules:
- changes: *setup-test-env-patterns
@@ -1009,8 +1062,6 @@
- <<: *if-merge-request-labels-run-all-rspec
- <<: *if-merge-request
changes: *core-backend-patterns
- - <<: *if-merge-request
- changes: *ci-patterns
# When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well.
# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840.
- <<: *if-merge-request
@@ -1019,6 +1070,8 @@
changes: *db-patterns
- <<: *if-security-merge-request
changes: *db-patterns
+ - <<: *if-merge-request-not-approved
+ when: never
- changes: *db-patterns
.rails:rules:ee-and-foss-migration:minimal:
@@ -1112,8 +1165,6 @@
- <<: *if-merge-request-labels-run-all-rspec
- <<: *if-merge-request
changes: *core-backend-patterns
- - <<: *if-merge-request
- changes: *ci-patterns
# When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well.
# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840.
- <<: *if-merge-request
@@ -1122,6 +1173,8 @@
changes: *db-patterns
- <<: *if-security-merge-request
changes: *db-patterns
+ - <<: *if-merge-request-not-approved
+ when: never
- changes: *db-patterns
.rails:rules:ee-only-migration:minimal:
@@ -1201,8 +1254,6 @@
- <<: *if-merge-request-labels-run-all-rspec
- <<: *if-merge-request
changes: *core-backend-patterns
- - <<: *if-merge-request
- changes: *ci-patterns
# When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well.
# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840.
- <<: *if-merge-request-labels-as-if-foss
@@ -1211,6 +1262,8 @@
changes: *db-patterns
- <<: *if-security-merge-request
changes: *db-patterns
+ - <<: *if-merge-request-not-approved
+ when: never
.rails:rules:as-if-foss-migration:minimal:
rules:
@@ -1416,9 +1469,6 @@
- if: '$SKIP_FLAKY_TESTS_AUTOMATICALLY == "true" || $RETRY_FAILED_TESTS_IN_NEW_PROCESS == "true"'
changes: *code-backstage-patterns
when: always
- - if: '$SKIP_FLAKY_TESTS_AUTOMATICALLY == "true" || $RETRY_FAILED_TESTS_IN_NEW_PROCESS == "true"'
- changes: *ci-patterns
- when: always
#########################
# Static analysis rules #
@@ -1482,6 +1532,12 @@
changes: ["vendor/gems/mail-smtp_pool/**/*"]
- <<: *if-merge-request-labels-run-all-rspec
+.vendor:rules:attr_encrypted:
+ rules:
+ - <<: *if-merge-request
+ changes: ["vendor/gems/attr_encrypted/**/*"]
+ - <<: *if-merge-request-labels-run-all-rspec
+
.vendor:rules:microsoft_graph_mailer:
rules:
- <<: *if-merge-request
@@ -1518,12 +1574,6 @@
changes: ["vendor/gems/omniauth-gitlab/**/*"]
- <<: *if-merge-request-labels-run-all-rspec
-.vendor:rules:omniauth-google-oauth2:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/omniauth-google-oauth2/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
.vendor:rules:omniauth-salesforce:
rules:
- <<: *if-merge-request
@@ -1660,7 +1710,7 @@
rules:
- if: '$LICENSE_MANAGEMENT_DISABLED || $GITLAB_FEATURES !~ /\blicense_scanning\b/'
when: never
- - changes: *code-backstage-qa-patterns
+ - changes: *dependency-patterns
################
# Review rules #
@@ -1783,14 +1833,6 @@
- <<: *if-merge-request
changes: *danger-patterns
-.review:rules:reviewers-recommender:
- rules:
- - <<: *if-not-canonical-namespace
- when: never
- - <<: *if-merge-request-labels-community-contribution
- when: never
- - <<: *if-merge-request
-
###############
# Setup rules #
###############
diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml
index 4f3111de2bf..e417b054cd6 100644
--- a/.gitlab/ci/setup.gitlab-ci.yml
+++ b/.gitlab/ci/setup.gitlab-ci.yml
@@ -30,7 +30,7 @@ cache gems:
.absolutely-minimal-job:
extends:
- .minimal-job
- image: ${GITLAB_DEPENDENCY_PROXY}alpine:edge
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine:edge
variables:
GIT_STRATEGY: none
@@ -79,7 +79,7 @@ verify-ruby-2.7:
verify-tests-yml:
extends:
- .setup:rules:verify-tests-yml
- image: ${GITLAB_DEPENDENCY_PROXY}ruby:${RUBY_VERSION}-alpine3.13
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.13
stage: test
needs: []
script:
@@ -116,7 +116,7 @@ generate-frontend-fixtures-mapping:
detect-tests:
extends: .rails:rules:detect-tests
- image: ${GITLAB_DEPENDENCY_PROXY}ruby:${RUBY_VERSION}
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
needs: []
stage: prepare
variables:
@@ -134,14 +134,17 @@ detect-tests:
tooling/bin/find_changes ${RSPEC_CHANGED_FILES_PATH};
tooling/bin/find_tests ${RSPEC_CHANGED_FILES_PATH} ${RSPEC_MATCHING_TESTS_PATH};
tooling/bin/find_changes ${RSPEC_CHANGED_FILES_PATH} ${RSPEC_MATCHING_TESTS_PATH} ${FRONTEND_FIXTURES_MAPPING_PATH};
- echo "Changed files: $(cat $RSPEC_CHANGED_FILES_PATH)";
- echo "Related rspec tests: $(cat $RSPEC_MATCHING_TESTS_PATH)";
+ filter_rspec_matched_foss_tests ${RSPEC_MATCHING_TESTS_PATH} ${RSPEC_MATCHING_TESTS_FOSS_PATH};
+ echoinfo "Changed files: $(cat $RSPEC_CHANGED_FILES_PATH)";
+ echoinfo "Related RSpec tests: $(cat $RSPEC_MATCHING_TESTS_PATH)";
+ echoinfo "Related FOSS RSpec tests: $(cat $RSPEC_MATCHING_TESTS_FOSS_PATH)";
fi
artifacts:
expire_in: 7d
paths:
- ${RSPEC_CHANGED_FILES_PATH}
- ${RSPEC_MATCHING_TESTS_PATH}
+ - ${RSPEC_MATCHING_TESTS_FOSS_PATH}
- ${FRONTEND_FIXTURES_MAPPING_PATH}
detect-previous-failed-tests:
diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml
index e845e7eb88b..59ea665ae07 100644
--- a/.gitlab/ci/static-analysis.gitlab-ci.yml
+++ b/.gitlab/ci/static-analysis.gitlab-ci.yml
@@ -31,7 +31,7 @@ static-analysis:
- .static-analysis:rules:static-analysis
parallel: 2
script:
- - run_timed_command "retry yarn install --frozen-lockfile"
+ - yarn_install_script
- scripts/static-analysis
static-analysis as-if-foss:
@@ -84,7 +84,7 @@ eslint:
variables:
USE_BUNDLE_INSTALL: "false"
script:
- - run_timed_command "retry yarn install --frozen-lockfile"
+ - yarn_install_script
- run_timed_command "yarn run lint:eslint:all"
eslint as-if-foss:
diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml
index f4fa39300b6..e147305e25a 100644
--- a/.gitlab/ci/test-metadata.gitlab-ci.yml
+++ b/.gitlab/ci/test-metadata.gitlab-ci.yml
@@ -1,5 +1,5 @@
.tests-metadata-state:
- image: ${GITLAB_DEPENDENCY_PROXY}ruby:${RUBY_VERSION}
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
before_script:
- source scripts/utils.sh
artifacts:
diff --git a/.gitlab/ci/vendored-gems.gitlab-ci.yml b/.gitlab/ci/vendored-gems.gitlab-ci.yml
index 577bd37ca9e..a22ac5337f6 100644
--- a/.gitlab/ci/vendored-gems.gitlab-ci.yml
+++ b/.gitlab/ci/vendored-gems.gitlab-ci.yml
@@ -6,6 +6,14 @@ vendor mail-smtp_pool:
include: vendor/gems/mail-smtp_pool/.gitlab-ci.yml
strategy: depend
+vendor attr_encrypted:
+ extends:
+ - .vendor:rules:attr_encrypted
+ needs: []
+ trigger:
+ include: vendor/gems/attr_encrypted/.gitlab-ci.yml
+ strategy: depend
+
vendor microsoft_graph_mailer:
extends:
- .vendor:rules:microsoft_graph_mailer
@@ -54,14 +62,6 @@ vendor omniauth-gitlab:
include: vendor/gems/omniauth-gitlab/.gitlab-ci.yml
strategy: depend
-vendor omniauth-google-oauth2:
- extends:
- - .vendor:rules:omniauth-google-oauth2
- needs: []
- trigger:
- include: vendor/gems/omniauth-google-oauth2/.gitlab-ci.yml
- strategy: depend
-
vendor omniauth-salesforce:
extends:
- .vendor:rules:omniauth-salesforce
diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml
index efd37b2247b..a11d5f000cf 100644
--- a/.gitlab/ci/workhorse.gitlab-ci.yml
+++ b/.gitlab/ci/workhorse.gitlab-ci.yml
@@ -1,9 +1,10 @@
workhorse:verify:
extends: .workhorse:rules:workhorse
- image: ${GITLAB_DEPENDENCY_PROXY}golang:1.17
+ image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}golang:${GO_VERSION}
stage: test
needs: []
script:
+ - go version
- make -C workhorse # test build
- make -C workhorse verify
@@ -12,7 +13,6 @@ workhorse:verify:
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}:git-2.36
variables:
GITALY_ADDRESS: "tcp://127.0.0.1:8075"
- GO_VERSION: "1.17"
stage: test
needs:
- setup-test-env
@@ -27,7 +27,7 @@ workhorse:test go:
extends: .workhorse:test
parallel:
matrix:
- - GO_VERSION: ["1.17", "1.18"]
+ - GO_VERSION: ["1.17", "1.18", "1.19"]
script:
- make -C workhorse test-coverage
coverage: '/\d+.\d+%/'
diff --git a/.gitlab/issue_templates/Actionable Insight - Exploration needed.md b/.gitlab/issue_templates/Actionable Insight - Exploration needed.md
index 76316fc626d..e410715909c 100644
--- a/.gitlab/issue_templates/Actionable Insight - Exploration needed.md
+++ b/.gitlab/issue_templates/Actionable Insight - Exploration needed.md
@@ -1,4 +1,4 @@
-<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Please follow the tasks outlined in this issue for best results. Learn more in the handbook here: https://about.gitlab.com/handbook/engineering/ux/ux-research-training/research-insights/#actionable-insights
+<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Please follow the tasks outlined in this issue for best results. Learn more in the handbook here: https://about.gitlab.com/handbook/product/ux/ux-research-training/research-insights/#actionable-insights
This issue template is for an actionable insight that requires further exploration.-->
diff --git a/.gitlab/issue_templates/Actionable Insight - Product change.md b/.gitlab/issue_templates/Actionable Insight - Product change.md
index 6c030220636..fba467afd0e 100644
--- a/.gitlab/issue_templates/Actionable Insight - Product change.md
+++ b/.gitlab/issue_templates/Actionable Insight - Product change.md
@@ -1,4 +1,4 @@
-<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Please follow the tasks outlined in this issue for best results. Learn more in the handbook here: https://about.gitlab.com/handbook/engineering/ux/ux-research-training/research-insights/#actionable-insights
+<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Please follow the tasks outlined in this issue for best results. Learn more in the handbook here: https://about.gitlab.com/handbook/product/ux/ux-research-training/research-insights/#actionable-insights
This issue template is for an actionable insight that requires a change in the product.-->
diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md
index b9fed3745d1..1266ee7efe7 100644
--- a/.gitlab/issue_templates/Bug.md
+++ b/.gitlab/issue_templates/Bug.md
@@ -39,7 +39,10 @@ will also determine whether the bug is fixed in a more recent version. -->
### Output of checks
-<!-- If you are reporting a bug on GitLab.com, write: This bug happens on GitLab.com -->
+<!-- If you are reporting a bug on GitLab.com, uncomment below -->
+
+<!-- This bug happens on GitLab.com -->
+<!-- /label ~"reproduced on GitLab.com" -->
#### Results of GitLab environment info
diff --git a/.gitlab/issue_templates/Deprecations.md b/.gitlab/issue_templates/Deprecations.md
index 76c66a3a891..ef6764c3621 100644
--- a/.gitlab/issue_templates/Deprecations.md
+++ b/.gitlab/issue_templates/Deprecations.md
@@ -1,4 +1,4 @@
-For guidance on the overall deprecations, removals and breaking changes workflow, please visit https://about.gitlab.com/handbook/product/gitlab-the-product/#breaking-changes-deprecations-and-removing-features
+For guidance on the overall deprecations, removals and breaking changes workflow, please visit [Breaking changes, deprecations, and removing features](https://about.gitlab.com/handbook/product/gitlab-the-product/#breaking-changes-deprecations-and-removing-features)
<!-- Use this template as a starting point for deprecations. -->
@@ -10,6 +10,9 @@ This should contain a brief description of the feature or functionality that is
It is recommended that you link to the documentation.
The description of the deprecation should state what actions the user should take to rectify the behavior. If the deprecation is scheduled for an upcoming release, the content should remain in the deprecations documentation page until it has been completed. For example, if a deprecation is announced in 14.9 and scheduled to be completed in 15.0, the same content would be included in the documentation for 14.9, 14.10, and 15.0.
+
+**If this issue proposes a breaking change outside a major release XX.0, you need to get approval from your manager and request collaboration from Product Operations on communication. Be sure to follow the guidance [here](https://about.gitlab.com/handbook/product/gitlab-the-product/#breaking-changes-deprecations-and-removing-features.)**
+
-->
### Breaking Change
diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md
index f3830a5cc10..a9f96a61d29 100644
--- a/.gitlab/issue_templates/Feature Flag Roll Out.md
+++ b/.gitlab/issue_templates/Feature Flag Roll Out.md
@@ -82,6 +82,7 @@ _Consider adding links to check for Sentry errors, Production logs for 5xx, 302s
### Preparation before global rollout
+- [ ] Set a milestone to the rollout issue to signal for enabling and removing the feature flag when it is stable.
- [ ] Check if the feature flag change needs to be accompanied with a
[change management issue](https://about.gitlab.com/handbook/engineering/infrastructure/change-management/#feature-flags-and-the-change-management-process).
Cross link the issue here if it does.
@@ -167,4 +168,11 @@ You can either [create a follow-up issue for Feature Flag Cleanup](https://gitla
/chatops run feature set <feature-flag-name> false
```
-/label ~"feature flag" ~"type::feature" ~"feature::addition"
+<!-- A feature flag can also be used for rolling out a bug fix or a maintenance work.
+In this scenario, labels must be related to it, for example; ~"type::feature", ~"type::bug" or ~"type::maintenance".
+Please use /copy_metadata to copy the labels from the issue you're rolling out. -->
+
+/label ~group::
+/label ~"feature flag"
+/assign me
+/due in 1 month
diff --git a/.gitlab/issue_templates/Feature proposal - detailed.md b/.gitlab/issue_templates/Feature proposal - detailed.md
index 48052ed49ea..9eac2ca27c5 100644
--- a/.gitlab/issue_templates/Feature proposal - detailed.md
+++ b/.gitlab/issue_templates/Feature proposal - detailed.md
@@ -37,7 +37,7 @@ Personas are described at https://about.gitlab.com/handbook/marketing/product-ma
<!-- What is the single user experience workflow this problem addresses?
For example, "The user should be able to use the UI/API/.gitlab-ci.yml with GitLab to <perform a specific task>"
-https://about.gitlab.com/handbook/engineering/ux/ux-research-training/user-story-mapping/ -->
+https://about.gitlab.com/handbook/product/ux/ux-research-training/user-story-mapping/ -->
### Proposal
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 7ef5287aba8..6c9b8bb6d78 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
@@ -51,20 +51,16 @@ Geo secondary sites have a [Geo tracking database](https://gitlab.com/gitlab-org
bin/rails generate migration CreateCoolWidgetRegistry --database geo
```
-Geo should continue using `Gitlab::Database::Migration[1.0]` until the `gitlab_geo` schema is supported, and is for the time being exempt from being validated by `Gitlab::Database::Migration[2.0]`. This requires a developer to manually amend the migration file to change from `[2.0]` to `[1.0]` due to the migration defaults being 2.0.
-
-For more information, see the [Enable Geo migrations to use Migration[2.0]](https://gitlab.com/gitlab-org/gitlab/-/issues/363491) issue.
-
- [ ] Replace the contents of the migration file with the following. Note that we cannot add a foreign key constraint on `cool_widget_id` because the `cool_widgets` table is in a different database. The application code must handle logic such as propagating deletions.
```ruby
# frozen_string_literal: true
- class CreateCoolWidgetRegistry < Gitlab::Database::Migration[1.0]
+ class CreateCoolWidgetRegistry < Gitlab::Database::Migration[2.0]
disable_ddl_transaction!
def up
- ApplicationRecord.transaction do
+ Geo::TrackingBase.transaction do
create_table :cool_widget_registry, id: :bigserial, force: :cascade do |t|
t.bigint :cool_widget_id, null: false
t.datetime_with_timezone :created_at, null: false
@@ -105,6 +101,13 @@ For more information, see the [Enable Geo migrations to use Migration[2.0]](http
```
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
+
+- [ ] Add the new table to the GitLab Schema defined in [`ee/lib/ee/gitlab/database/gitlab_schemas.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/ee/gitlab/database/gitlab_schemas.yml).
+
+ ```yaml
+ cool_widget_registry: :gitlab_geo
+ ```
+
- [ ] Run Geo tracking database migrations:
```shell
@@ -141,7 +144,7 @@ The Geo primary site needs to checksum every replicable so secondaries can verif
t.datetime_with_timezone :verification_started_at
t.datetime_with_timezone :verification_retry_at
t.datetime_with_timezone :verified_at
- t.references :cool_widget, primary_key: true, null: false, foreign_key: { on_delete: :cascade }
+ t.references :cool_widget, primary_key: true, default: nil, index: false, foreign_key: { on_delete: :cascade }
t.integer :verification_state, default: 0, limit: 2, null: false
t.integer :verification_retry_count, limit: 2
t.binary :verification_checksum, using: 'verification_checksum::bytea'
@@ -162,6 +165,12 @@ The Geo primary site needs to checksum every replicable so secondaries can verif
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
+- [ ] Add the new table to the GitLab Schema defined in [`lib/gitlab/database/gitlab_schemas.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/database/gitlab_schemas.yml) with the databases they need to be added to.
+
+ ```yaml
+ cool_widget_states: :gitlab_main
+ ```
+
- [ ] Run database migrations:
```shell
@@ -260,7 +269,6 @@ That's all of the required database changes.
def pool_repository
nil
end
- ...
def cool_widget_state
super || build_cool_widget_state
@@ -380,14 +388,16 @@ That's all of the required database changes.
```ruby
# frozen_string_literal: true
- class Geo::CoolWidgetRegistry < Geo::BaseRegistry
- include ::Geo::ReplicableRegistry
- include ::Geo::VerifiableRegistry
+ module Geo
+ class CoolWidgetRegistry < Geo::BaseRegistry
+ include ::Geo::ReplicableRegistry
+ include ::Geo::VerifiableRegistry
- MODEL_CLASS = ::CoolWidget
- MODEL_FOREIGN_KEY = :cool_widget_id
+ MODEL_CLASS = ::CoolWidget
+ MODEL_FOREIGN_KEY = :cool_widget_id
- belongs_to :cool_widget, class_name: 'CoolWidget'
+ belongs_to :cool_widget, class_name: 'CoolWidget'
+ end
end
```
@@ -454,13 +464,13 @@ That's all of the required database changes.
- [ ] Add the following to `spec/factories/cool_widgets.rb`:
```ruby
- trait(:verification_succeeded) do
+ trait :verification_succeeded do
with_file
verification_checksum { 'abc' }
verification_state { CoolWidget.verification_state_value(:verification_succeeded) }
end
- trait(:verification_failed) do
+ trait :verification_failed do
with_file
verification_failure { 'Could not calculate the checksum' }
verification_state { CoolWidget.verification_state_value(:verification_failed) }
@@ -498,11 +508,11 @@ That's all of the required database changes.
factory :geo_cool_widget_state, class: 'Geo::CoolWidgetState' do
cool_widget
- trait(:checksummed) do
+ trait :checksummed do
verification_checksum { 'abc' }
end
- trait(:checksum_failure) do
+ trait :checksum_failure do
verification_failure { 'Could not calculate the checksum' }
end
end
@@ -552,8 +562,9 @@ The GraphQL API is used by `Admin > Geo > Replication Details` views, and is dir
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
- description: 'Find Cool Widget registries on this Geo node',
- feature_flag: :geo_cool_widget_replication
+ description: 'Find Cool Widget registries on this Geo node. '\
+ 'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
+ alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Add the new `cool_widget_registries` field name to the `expected_fields` array in `ee/spec/graphql/types/geo/geo_node_type_spec.rb`.
@@ -618,13 +629,15 @@ The GraphQL API is used by `Admin > Geo > Replication Details` views, and is dir
module Geo
# rubocop:disable Graphql/AuthorizeTypes because it is included
class CoolWidgetRegistryType < BaseObject
+ graphql_name 'CoolWidgetRegistry'
+
include ::Types::Geo::RegistryType
- graphql_name 'CoolWidgetRegistry'
description 'Represents the Geo replication and verification state of a cool_widget'
field :cool_widget_id, GraphQL::Types::ID, null: false, description: 'ID of the Cool Widget.'
end
+ # rubocop:enable Graphql/AuthorizeTypes
end
end
```
@@ -708,14 +721,15 @@ As illustrated by the above two examples, batch destroy logic cannot be handled
- [ ] Add a step to `Test replication and verification of Cool Widgets on a non-GDK-deployment. For example, using GitLab Environment Toolkit`.
- [ ] Add a step to `Ping the Geo PM and EM to coordinate testing`. For example, you might add steps to generate Cool Widgets, and then a Geo engineer may take it from there.
- [ ] In `ee/config/feature_flags/development/geo_cool_widget_replication.yml`, set `default_enabled: true`
-- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `feature_flag` option for the released type:
+- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `alpha` option for the released type:
```ruby
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
- description: 'Find Cool Widget registries on this Geo node',
- feature_flag: :geo_cool_widget_replication # REMOVE THIS LINE
+ description: 'Find Cool Widget registries on this Geo node. '\
+ 'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
+ alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Run `bundle exec rake gitlab:graphql:compile_docs` after the step above to regenerate the GraphQL docs.
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 17a4dd4bc3e..76fe1772921 100644
--- a/.gitlab/issue_templates/Geo Replicate a new blob type.md
+++ b/.gitlab/issue_templates/Geo Replicate a new blob type.md
@@ -53,20 +53,16 @@ Geo secondary sites have a [Geo tracking database](https://gitlab.com/gitlab-org
bin/rails generate migration CreateCoolWidgetRegistry --database geo
```
-Geo should continue using `Gitlab::Database::Migration[1.0]` until the `gitlab_geo` schema is supported, and is for the time being exempt from being validated by `Gitlab::Database::Migration[2.0]`. This requires a developer to manually amend the migration file to change from `[2.0]` to `[1.0]` due to the migration defaults being 2.0.
-
-For more information, see the [Enable Geo migrations to use Migration[2.0]](https://gitlab.com/gitlab-org/gitlab/-/issues/363491) issue.
-
- [ ] Replace the contents of the migration file with the following. Note that we cannot add a foreign key constraint on `cool_widget_id` because the `cool_widgets` table is in a different database. The application code must handle logic such as propagating deletions.
```ruby
# frozen_string_literal: true
- class CreateCoolWidgetRegistry < Gitlab::Database::Migration[1.0]
+ class CreateCoolWidgetRegistry < Gitlab::Database::Migration[2.0]
disable_ddl_transaction!
def up
- ApplicationRecord.transaction do
+ Geo::TrackingBase.transaction do
create_table :cool_widget_registry, id: :bigserial, force: :cascade do |t|
t.bigint :cool_widget_id, null: false
t.datetime_with_timezone :created_at, null: false
@@ -105,6 +101,13 @@ For more information, see the [Enable Geo migrations to use Migration[2.0]](http
```
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
+
+- [ ] Add the new table to the GitLab Schema defined in [`ee/lib/ee/gitlab/database/gitlab_schemas.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/ee/gitlab/database/gitlab_schemas.yml).
+
+ ```yaml
+ cool_widget_registry: :gitlab_geo
+ ```
+
- [ ] Run Geo tracking database migrations:
```shell
@@ -143,7 +146,7 @@ The Geo primary site needs to checksum every replicable so secondaries can verif
t.datetime_with_timezone :verification_started_at
t.datetime_with_timezone :verification_retry_at
t.datetime_with_timezone :verified_at
- t.references :cool_widget, primary_key: true, null: false, foreign_key: { on_delete: :cascade }
+ t.references :cool_widget, primary_key: true, default: nil, index: false, foreign_key: { on_delete: :cascade }
t.integer :verification_state, default: 0, limit: 2, null: false
t.integer :verification_retry_count, limit: 2
t.binary :verification_checksum, using: 'verification_checksum::bytea'
@@ -164,6 +167,12 @@ The Geo primary site needs to checksum every replicable so secondaries can verif
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
+- [ ] Add the new table to the GitLab Schema defined in [`lib/gitlab/database/gitlab_schemas.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/database/gitlab_schemas.yml) with the databases they need to be added to.
+
+ ```yaml
+ cool_widget_states: :gitlab_main
+ ```
+
- [ ] Run database migrations:
```shell
@@ -238,7 +247,8 @@ That's all of the required database changes.
# we want to know which records to replicate. This is not easy to automate
# because for example:
#
- # * The "selective sync" feature allows admins to choose which namespaces # to replicate, per secondary site. Most Models are scoped to a
+ # * The "selective sync" feature allows admins to choose which namespaces
+ # to replicate, per secondary site. Most Models are scoped to a
# namespace, but the nature of the relationship to a namespace varies
# between Models.
# * The "selective sync" feature allows admins to choose which shards to
@@ -256,7 +266,6 @@ That's all of the required database changes.
CoolWidgetState
end
end
- ...
def cool_widget_state
super || build_cool_widget_state
@@ -308,7 +317,7 @@ That's all of the required database changes.
end
```
-- [ ] Generate the feature flag definition fileы by running the feature flag commands and following the command prompts:
+- [ ] Generate the feature flag definition file by running the feature flag commands and following the command prompts:
```shell
bin/feature-flag --ee geo_cool_widget_replication --type development --group 'group::geo'
@@ -346,14 +355,16 @@ That's all of the required database changes.
```ruby
# frozen_string_literal: true
- class Geo::CoolWidgetRegistry < Geo::BaseRegistry
- include ::Geo::ReplicableRegistry
- include ::Geo::VerifiableRegistry
+ module Geo
+ class CoolWidgetRegistry < Geo::BaseRegistry
+ include ::Geo::ReplicableRegistry
+ include ::Geo::VerifiableRegistry
- MODEL_CLASS = ::CoolWidget
- MODEL_FOREIGN_KEY = :cool_widget_id
+ MODEL_CLASS = ::CoolWidget
+ MODEL_FOREIGN_KEY = :cool_widget_id
- belongs_to :cool_widget, class_name: 'CoolWidget'
+ belongs_to :cool_widget, class_name: 'CoolWidget'
+ end
end
```
@@ -420,13 +431,13 @@ That's all of the required database changes.
- [ ] Add the following to `spec/factories/cool_widgets.rb`:
```ruby
- trait(:verification_succeeded) do
+ trait :verification_succeeded do
with_file
verification_checksum { 'abc' }
verification_state { CoolWidget.verification_state_value(:verification_succeeded) }
end
- trait(:verification_failed) do
+ trait :verification_failed do
with_file
verification_failure { 'Could not calculate the checksum' }
verification_state { CoolWidget.verification_state_value(:verification_failed) }
@@ -438,6 +449,8 @@ That's all of the required database changes.
- [ ] Following [the example of Merge Request Diffs](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63309) add a `Geo::CoolWidgetState` model in `ee/app/models/ee/geo/cool_widget_state.rb`:
``` ruby
+ # frozen_string_literal: true
+
module Geo
class CoolWidgetState < ApplicationRecord
include EachBatch
@@ -462,11 +475,11 @@ That's all of the required database changes.
factory :geo_cool_widget_state, class: 'Geo::CoolWidgetState' do
cool_widget
- trait(:checksummed) do
+ trait :checksummed do
verification_checksum { 'abc' }
end
- trait(:checksum_failure) do
+ trait :checksum_failure do
verification_failure { 'Could not calculate the checksum' }
end
end
@@ -516,8 +529,9 @@ The GraphQL API is used by `Admin > Geo > Replication Details` views, and is dir
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
- description: 'Find Cool Widget registries on this Geo node',
- feature_flag: :geo_cool_widget_replication
+ description: 'Find Cool Widget registries on this Geo node. '\
+ 'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
+ alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Add the new `cool_widget_registries` field name to the `expected_fields` array in `ee/spec/graphql/types/geo/geo_node_type_spec.rb`.
@@ -582,13 +596,15 @@ The GraphQL API is used by `Admin > Geo > Replication Details` views, and is dir
module Geo
# rubocop:disable Graphql/AuthorizeTypes because it is included
class CoolWidgetRegistryType < BaseObject
+ graphql_name 'CoolWidgetRegistry'
+
include ::Types::Geo::RegistryType
- graphql_name 'CoolWidgetRegistry'
description 'Represents the Geo replication and verification state of a cool_widget'
- field :cool_widget_id, GraphQL::ID_TYPE, null: false, description: 'ID of the Cool Widget'
+ field :cool_widget_id, GraphQL::Types::ID, null: false, description: 'ID of the Cool Widget.'
end
+ # rubocop:enable Graphql/AuthorizeTypes
end
end
```
@@ -673,14 +689,15 @@ As illustrated by the above two examples, batch destroy logic cannot be handled
- [ ] Add a step to `Test replication and verification of Cool Widgets on a non-GDK-deployment. For example, using GitLab Environment Toolkit`.
- [ ] Add a step to `Ping the Geo PM and EM to coordinate testing`. For example, you might add steps to generate Cool Widgets, and then a Geo engineer may take it from there.
- [ ] In `ee/config/feature_flags/development/geo_cool_widget_replication.yml`, set `default_enabled: true`
-- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `feature_flag` option for the released type:
+- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `alpha` option for the released type:
```ruby
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
- description: 'Find Cool Widget registries on this Geo node',
- feature_flag: :geo_cool_widget_replication # REMOVE THIS LINE
+ description: 'Find Cool Widget registries on this Geo node. '\
+ 'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
+ alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Run `bundle exec rake gitlab:graphql:compile_docs` after the step above to regenerate the GraphQL docs.
diff --git a/.gitlab/issue_templates/QA Failure.md b/.gitlab/issue_templates/QA Failure.md
index 3171923d8c5..bcfe7c42e90 100644
--- a/.gitlab/issue_templates/QA Failure.md
+++ b/.gitlab/issue_templates/QA Failure.md
@@ -56,6 +56,9 @@ If you include multiple screenshots it can be helpful to hide all but the first
<!-- Base labels. -->
/label ~Quality ~QA ~test
+<!-- Work classification type label, please apply ignore type label until the investigation is complete and an [issue type](https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification) is determined.-->
+/label ~"type::ignore"
+
<!-- Test failure type label, please use just one.-->
/label ~"failure::broken-test" ~"failure::flaky-test" ~"failure::stale-test" ~"failure::test-environment" ~"failure::investigating" ~"failure::new"
diff --git a/.gitlab/issue_templates/Solution Validation.md b/.gitlab/issue_templates/Solution Validation.md
index 27f97d8dd12..e7ab7fe820f 100644
--- a/.gitlab/issue_templates/Solution Validation.md
+++ b/.gitlab/issue_templates/Solution Validation.md
@@ -26,7 +26,7 @@
<!-- #### TODO Checklist
Consider adding a checklist in order to keep track of what stage the research is up to. Some possible checklist templates are here:
- https://about.gitlab.com/handbook/engineering/ux/ux-research-training/templates-resources-for-research-studies/#checklists
+ https://about.gitlab.com/handbook/product/ux/ux-research-training/templates-resources-for-research-studies/#checklists
-->
/label ~"workflow::solution validation" \ No newline at end of file
diff --git a/.gitlab/issue_templates/UX Theme.md b/.gitlab/issue_templates/UX Theme.md
index 043cb705352..2ba60523e20 100644
--- a/.gitlab/issue_templates/UX Theme.md
+++ b/.gitlab/issue_templates/UX Theme.md
@@ -1,6 +1,6 @@
<!-- A majority of the work designers do will be on themes in the (Now) Next 1-3 milestone column. These themes are comprised of high-confidence outcomes and validated needs. The UX theme issue is where collaboration should occur, including plans and discussion on subthemes, research, and design feedback. Related issues for design exploration and solution validation should stem from the theme issue.
-One of the advantages of working with UX themes is that it allows us to think and design holistically by designing the theme as a whole as opposed to a single issue at a time trying to piece them together as you go. For more details please refer to this section of the handbook when creating UX Themes: https://about.gitlab.com/handbook/engineering/ux/product-design/ux-roadmaps/#theme-structure -->
+One of the advantages of working with UX themes is that it allows us to think and design holistically by designing the theme as a whole as opposed to a single issue at a time trying to piece them together as you go. For more details please refer to this section of the handbook when creating UX Themes: https://about.gitlab.com/handbook/product/ux/product-design/ux-roadmaps/#theme-structure -->
### UX Theme
<!-- A theme is written as a statement that combines the beneficiary, their need, and the expected outcome when the work is delivered. Well-defined statements are concise without sacrificing the substance of the theme so that anyone can understand it at a glance. (For instance; Reduce the effort for security teams to identify and escalate business-critical risks)
@@ -37,7 +37,7 @@ One of the advantages of working with UX themes is that it allows us to think an
#### Confidence
-<!-- How well do we understand the user's problem and their need? Refer to https://about.gitlab.com/handbook/engineering/ux/product-design/ux-roadmaps/#confidence to assess confidence -->
+<!-- How well do we understand the user's problem and their need? Refer to https://about.gitlab.com/handbook/product/ux/product-design/ux-roadmaps/#confidence to assess confidence -->
| Confidence | Research |
@@ -55,7 +55,7 @@ Note: This is not a backlog. If the subthemes can not be delivered in the theme
Note: if feature issues already exist then you can add them to this table. Keep in mind that subthemes require validation if they are assumptive
-Refer to https://about.gitlab.com/handbook/engineering/ux/product-designer/#ux-issue-weights for calculating UX weights.
+Refer to https://about.gitlab.com/handbook/product/ux/product-designer/#ux-issue-weights for calculating UX weights.
-->
| Issue | UX Weight |
diff --git a/.gitlab/merge_request_templates/Deprecations.md b/.gitlab/merge_request_templates/Deprecations.md
index dcd5d79e0d0..6a5ee6e74e7 100644
--- a/.gitlab/merge_request_templates/Deprecations.md
+++ b/.gitlab/merge_request_templates/Deprecations.md
@@ -56,7 +56,7 @@ feature for all reviews. Reviewers will then `approve` the MR and remove themsel
- [ ] (Recommended) PMM
- [ ] (Optional) Product Designer
- [ ] (Optional) Group Manager or Director
-- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments).
+- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments).
### Tech writer review
diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md
index 4932fbd7f26..2096b06d73b 100644
--- a/.gitlab/merge_request_templates/Documentation.md
+++ b/.gitlab/merge_request_templates/Documentation.md
@@ -8,7 +8,7 @@
## Author's checklist
-- [ ] Optional. Consider taking [the GitLab Technical Writing Fundamentals course](https://about.gitlab.com/handbook/engineering/ux/technical-writing/fundamentals/).
+- [ ] Optional. Consider taking [the GitLab Technical Writing Fundamentals course](https://about.gitlab.com/handbook/product/ux/technical-writing/fundamentals/).
- [ ] Follow the:
- [Documentation process](https://docs.gitlab.com/ee/development/documentation/workflow.html).
- [Documentation guidelines](https://docs.gitlab.com/ee/development/documentation/).
@@ -16,7 +16,7 @@
- [ ] If you're adding or changing the main heading of the page (H1), ensure that the [product tier badge](https://docs.gitlab.com/ee/development/documentation/styleguide/index.html#product-tier-badges) is added.
- [ ] If you are a GitLab team member, [request a review](https://docs.gitlab.com/ee/development/code_review.html#dogfooding-the-attention-request-feature) based on:
- The documentation page's [metadata](https://docs.gitlab.com/ee/development/documentation/#metadata).
- - The [associated Technical Writer](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments).
+ - The [associated Technical Writer](https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments).
If you are a GitLab team member and only adding documentation, do not add any of the following labels:
@@ -34,7 +34,7 @@ Documentation-related MRs should be reviewed by a Technical Writer for a non-blo
- [ ] If the content requires it, ensure the information is reviewed by a subject matter expert.
- Technical writer review items:
- [ ] Ensure docs metadata is present and up-to-date.
- - [ ] Ensure the appropriate [labels](https://about.gitlab.com/handbook/engineering/ux/technical-writing/workflow/#labels) are added to this MR.
+ - [ ] Ensure the appropriate [labels](https://about.gitlab.com/handbook/product/ux/technical-writing/workflow/#labels) are added to this MR.
- [ ] Ensure a release milestone is set.
- If relevant to this MR, ensure [content topic type](https://docs.gitlab.com/ee/development/documentation/structure.html) principles are in use, including:
- [ ] The headings should be something you'd do a Google search for. Instead of `Default behavior`, say something like `Default behavior when you close an issue`.
diff --git a/.gitlab/merge_request_templates/Removals.md b/.gitlab/merge_request_templates/Removals.md
index 4801af2a123..afe95f853bc 100644
--- a/.gitlab/merge_request_templates/Removals.md
+++ b/.gitlab/merge_request_templates/Removals.md
@@ -61,7 +61,7 @@ feature for all reviews. Reviewers will `approve` the MR and remove themselves f
- [ ] (Recommended) PMM
- [ ] (Optional) Product Designer
- [ ] (Optional) Group Manager or Director
-- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments).
+- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments).
### Tech writer review