diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-20 09:40:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-20 09:40:42 +0000 |
commit | ee664acb356f8123f4f6b00b73c1e1cf0866c7fb (patch) | |
tree | f8479f94a28f66654c6a4f6fb99bad6b4e86a40e /.gitlab | |
parent | 62f7d5c5b69180e82ae8196b7b429eeffc8e7b4f (diff) | |
download | gitlab-ce-ee664acb356f8123f4f6b00b73c1e1cf0866c7fb.tar.gz |
Add latest changes from gitlab-org/gitlab@15-5-stable-eev15.5.0-rc42
Diffstat (limited to '.gitlab')
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 |