diff options
Diffstat (limited to '.gitlab')
41 files changed, 1667 insertions, 960 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index a7ecfebbafb..e58dd1780b9 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -57,7 +57,7 @@ GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend /ee/app/finders/ @gitlab-org/maintainers/database /rubocop/rubocop-migrations.yml @gitlab-org/maintainers/database -^[Engineering Productivity] +[Engineering Productivity] /.gitlab-ci.yml @gl-quality/eng-prod /.gitlab/ci/ @gl-quality/eng-prod /.gitlab/ci/docs.gitlab-ci.yml @gl-quality/eng-prod @gl-docsteam @@ -85,26 +85,6 @@ Dangerfile @gl-quality/eng-prod /ee/lib/ee/gitlab/auth/ldap/ @dblessing @mkozono /lib/gitlab/auth/ldap/ @dblessing @mkozono -^[Templates] -/lib/gitlab/ci/templates/ @gitlab-org/maintainers/cicd-templates -/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @DylanGriffith @mayra-cabrera @tkuah -/lib/gitlab/ci/templates/Security/ @gonzoyumo @twoodham @sethgitlab @thiagocsf -/lib/gitlab/ci/templates/Security/API-Fuzzing.*.yml @gitlab-org/secure/dynamic-analysis -/lib/gitlab/ci/templates/Security/Container-Scanning.*.yml @gitlab-org/secure/composition-analysis-be -/lib/gitlab/ci/templates/Security/Coverage-Fuzzing.*.yml @gitlab-org/secure/dynamic-analysis -/lib/gitlab/ci/templates/Security/DAST.*.yml @gitlab-org/secure/dynamic-analysis -/lib/gitlab/ci/templates/Security/Dependency-Scanning.*.yml @gitlab-org/secure/composition-analysis-be -/lib/gitlab/ci/templates/Security/License-Scanning.*.yml @gitlab-org/secure/composition-analysis-be -/lib/gitlab/ci/templates/Security/SAST.*.yml @gitlab-org/secure/static-analysis -/lib/gitlab/ci/templates/Security/Secret-Detection.*.yml @gitlab-org/secure/static-analysis -/lib/gitlab/ci/templates/Security/Secure-Binaries.*.yml @gitlab-org/secure/static-analysis @gitlab-org/secure/composition-analysis-be @gitlab-org/secure/dynamic-analysis -# Note: The `Fortify-FoD-sast.gitlab-ci.yml` template is provided and maintained by Fortify, an official Technology Partner with GitLab. -/lib/gitlab/ci/templates/Jobs/Container-Scanning.*.yml @gitlab-org/secure/composition-analysis-be -/lib/gitlab/ci/templates/Jobs/Dependency-Scanning.*.yml @gitlab-org/secure/composition-analysis-be -/lib/gitlab/ci/templates/Jobs/License-Scanning.*.yml @gitlab-org/secure/composition-analysis-be -/lib/gitlab/ci/templates/Jobs/SAST.*.yml @gitlab-org/secure/static-analysis -/lib/gitlab/ci/templates/Jobs/Secret-Detection.*.yml @gitlab-org/secure/static-analysis - ^[Project Alias] /ee/app/models/project_alias.rb @patrickbajao /ee/lib/api/project_aliases.rb @patrickbajao @@ -287,6 +267,14 @@ Dangerfile @gl-quality/eng-prod /spec/frontend/diffs/ @viktomas @jboyson @iamphill @thomasrandolph /spec/frontend/batch_comments/ @viktomas @jboyson @iamphill @thomasrandolph +^[Product Analytics] @gitlab-org/analytics-section/product-analytics/engineers/frontend +/ee/app/assets/javascripts/analytics/analytics_dashboards/components/analytics_dashboard.vue +/ee/app/assets/javascripts/analytics/analytics_dashboards/components/dashboards_list.vue +/ee/app/assets/javascripts/analytics/analytics_dashboards/data_sources/ +/ee/app/assets/javascripts/vue_shared/components/customizable_dashboard/customizable_dashboard.vue +/ee/app/assets/javascripts/vue_shared/components/customizable_dashboard/panels_base.vue +/ee/app/assets/javascripts/product_analytics/ + ^[Product Intelligence] /ee/lib/gitlab/usage_data_counters/ @gitlab-org/analytics-section/product-intelligence/engineers /ee/lib/ee/gitlab/usage_data.rb @gitlab-org/analytics-section/product-intelligence/engineers @@ -364,8 +352,6 @@ Dangerfile @gl-quality/eng-prod /ee/spec/services/namespaces/in_product_marketing_emails_service_spec.rb @gitlab-org/growth/engineers /app/workers/projects/record_target_platforms_worker.rb @gitlab-org/growth/engineers /spec/workers/projects/record_target_platforms_worker_spec.rb @gitlab-org/growth/engineers -/ee/app/controllers/groups/feature_discovery_moments_controller.rb @gitlab-org/growth/engineers -/ee/spec/requests/groups/feature_discovery_moments_spec.rb @gitlab-org/growth/engineers ^[Legal] /config/dependency_decisions.yml @gitlab-org/legal-reviewers @@ -390,12 +376,12 @@ Dangerfile @gl-quality/eng-prod /lib/gitlab/utils.rb @gitlab-com/gl-security/appsec ^[Gitaly] -lib/gitlab/git_access.rb @proglottis @toon @zj-gitlab -lib/gitlab/git_access_*.rb @proglottis @toon @zj-gitlab -ee/lib/ee/gitlab/git_access.rb @proglottis @toon @zj-gitlab -ee/lib/ee/gitlab/git_access_*.rb @proglottis @toon @zj-gitlab -ee/lib/ee/gitlab/checks/** @proglottis @toon @zj-gitlab -lib/gitlab/checks/** @proglottis @toon @zj-gitlab +lib/gitlab/git_access.rb @proglottis @toon +lib/gitlab/git_access_*.rb @proglottis @toon +ee/lib/ee/gitlab/git_access.rb @proglottis @toon +ee/lib/ee/gitlab/git_access_*.rb @proglottis @toon +ee/lib/ee/gitlab/checks/** @proglottis @toon +lib/gitlab/checks/** @proglottis @toon ^[Documentation Directories] /doc/ @gl-docsteam @@ -447,11 +433,19 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/administration/logs/index.md @msedlakjakubowski /doc/administration/maintenance_mode/ @axil /doc/administration/merge_request_diffs.md @aqualls -/doc/administration/monitoring/ @msedlakjakubowski +/doc/administration/monitoring/github_imports.md @eread +/doc/administration/monitoring/gitlab_self_monitoring_project/ @msedlakjakubowski +/doc/administration/monitoring/index.md @msedlakjakubowski /doc/administration/monitoring/ip_allowlist.md @jglassman1 +/doc/administration/monitoring/performance/gitlab_configuration.md @msedlakjakubowski +/doc/administration/monitoring/performance/grafana_configuration.md @msedlakjakubowski +/doc/administration/monitoring/performance/index.md @jglassman1 /doc/administration/monitoring/performance/performance_bar.md @jglassman1 /doc/administration/monitoring/prometheus/gitlab_exporter.md @jglassman1 /doc/administration/monitoring/prometheus/index.md @axil +/doc/administration/monitoring/prometheus/pgbouncer_exporter.md @aqualls +/doc/administration/monitoring/prometheus/postgres_exporter.md @aqualls +/doc/administration/monitoring/prometheus/registry_exporter.md @marcel.amirault /doc/administration/monitoring/prometheus/web_exporter.md @jglassman1 /doc/administration/nfs.md @axil /doc/administration/object_storage.md @axil @@ -461,7 +455,6 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/administration/operations/moving_repositories.md @eread /doc/administration/package_information/ @axil /doc/administration/packages/ @marcel.amirault -/doc/administration/pages/ @ashrafkhamis /doc/administration/polling.md @axil /doc/administration/postgresql/ @aqualls /doc/administration/postgresql/multiple_databases.md @lciutacu @@ -480,6 +473,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/administration/server_hooks.md @eread /doc/administration/sidekiq/ @axil /doc/administration/sidekiq/sidekiq_memory_killer.md @jglassman1 +/doc/administration/silent_mode/ @axil /doc/administration/smime_signing_email.md @axil /doc/administration/snippets/ @aqualls /doc/administration/static_objects_external_storage.md @ashrafkhamis @@ -490,7 +484,6 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/administration/troubleshooting/postgresql.md @aqualls /doc/administration/uploads.md @axil /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 @@ -551,7 +544,6 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/api/group_relations_export.md @eread /doc/api/group_releases.md @phillipwells /doc/api/group_repository_storage_moves.md @ashrafkhamis -/doc/api/group_wikis.md @ashrafkhamis /doc/api/groups.md @lciutacu /doc/api/import.md @eread /doc/api/index.md @ashrafkhamis @@ -588,8 +580,6 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/api/openapi/ @ashrafkhamis /doc/api/packages.md @marcel.amirault /doc/api/packages/ @marcel.amirault -/doc/api/pages.md @ashrafkhamis -/doc/api/pages_domains.md @ashrafkhamis /doc/api/personal_access_tokens.md @eread /doc/api/pipeline_schedules.md @drcatherinepope /doc/api/pipeline_triggers.md @drcatherinepope @@ -651,7 +641,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/api/vulnerabilities.md @rdickenson /doc/api/vulnerability_exports.md @rdickenson /doc/api/vulnerability_findings.md @rdickenson -/doc/api/wikis.md @ashrafkhamis +/doc/architecture/blueprints/cells/ @lciutacu /doc/architecture/blueprints/database/scalability/patterns/ @aqualls /doc/architecture/blueprints/database_scaling/ @aqualls /doc/ci/ @drcatherinepope @@ -674,7 +664,6 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/ci/pipeline_editor/ @marcel.amirault /doc/ci/pipelines/downstream_pipelines.md @marcel.amirault /doc/ci/pipelines/index.md @marcel.amirault -/doc/ci/pipelines/job_artifacts.md @marcel.amirault /doc/ci/pipelines/pipeline_architectures.md @marcel.amirault /doc/ci/pipelines/pipeline_artifacts.md @marcel.amirault /doc/ci/quick_start/ @marcel.amirault @@ -715,9 +704,9 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/development/developing_with_solargraph.md @aqualls /doc/development/development_processes.md @sselhorn /doc/development/distributed_tracing.md @msedlakjakubowski +/doc/development/distribution/ @axil /doc/development/documentation/ @sselhorn /doc/development/export_csv.md @eread -/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 @@ -758,12 +747,11 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/development/omnibus.md @axil /doc/development/organization/ @lciutacu /doc/development/packages/ @marcel.amirault -/doc/development/pages/ @ashrafkhamis /doc/development/permissions.md @jglassman1 /doc/development/policies.md @jglassman1 /doc/development/project_templates.md @aqualls /doc/development/prometheus_metrics.md @msedlakjakubowski -/doc/development/real_time.md @msedlakjakubowski +/doc/development/real_time.md @jglassman1 /doc/development/rubocop_development_guide.md @sselhorn /doc/development/search/ @ashrafkhamis /doc/development/sec/ @rdickenson @@ -775,7 +763,6 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/development/testing_guide/ @sselhorn /doc/development/value_stream_analytics.md @lciutacu /doc/development/value_stream_analytics/ @lciutacu -/doc/development/wikis.md @ashrafkhamis /doc/development/work_items.md @msedlakjakubowski /doc/development/work_items_widgets.md @msedlakjakubowski /doc/development/workhorse/ @aqualls @@ -816,6 +803,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/raketasks/spdx.md @rdickenson /doc/raketasks/x509_signatures.md @aqualls /doc/security/ @jglassman1 +/doc/security/email_verification.md @phillipwells /doc/subscriptions/ @fneill /doc/subscriptions/gitlab_dedicated/ @drcatherinepope /doc/topics/authentication/ @jglassman1 @@ -827,6 +815,9 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/topics/plan_and_track.md @msedlakjakubowski /doc/topics/your_work.md @sselhorn /doc/tutorials/ @kpaizee +/doc/tutorials/create_compliance_pipeline.md @eread +/doc/tutorials/fuzz_testing_tutorial.md @rdickenson +/doc/tutorials/scan_result_policy.md @rdickenson /doc/update/ @axil /doc/update/background_migrations.md @aqualls /doc/user/admin_area/analytics/ @lciutacu @@ -843,7 +834,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/admin_area/monitoring/ @msedlakjakubowski /doc/user/admin_area/reporting/git_abuse_rate_limit.md @phillipwells /doc/user/admin_area/reporting/spamcheck.md @axil -/doc/user/admin_area/review_abuse_reports.md @jglassman1 +/doc/user/admin_area/review_abuse_reports.md @phillipwells /doc/user/admin_area/settings/account_and_limit_settings.md @aqualls /doc/user/admin_area/settings/continuous_integration.md @drcatherinepope /doc/user/admin_area/settings/deprecated_api_rate_limits.md @aqualls @@ -865,6 +856,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/admin_area/settings/rate_limit_on_projects_api.md @lciutacu /doc/user/admin_area/settings/rate_limit_on_users_api.md @jglassman1 /doc/user/admin_area/settings/scim_setup.md @jglassman1 +/doc/user/admin_area/settings/security_and_compliance.md @rdickenson /doc/user/admin_area/settings/terraform_limits.md @phillipwells /doc/user/admin_area/settings/third_party_offers.md @lciutacu /doc/user/admin_area/settings/usage_statistics.md @lciutacu @@ -872,35 +864,38 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/analytics/ @lciutacu /doc/user/analytics/ci_cd_analytics.md @phillipwells /doc/user/application_security/ @rdickenson -/doc/user/application_security/policies/ @dianalogan /doc/user/asciidoc.md @aqualls /doc/user/award_emojis.md @msedlakjakubowski /doc/user/clusters/ @phillipwells +/doc/user/compliance/ @rdickenson /doc/user/compliance/compliance_report/ @eread /doc/user/compliance/index.md @eread -/doc/user/compliance/license_approval_policies.md @dianalogan -/doc/user/compliance/license_check_rules.md @dianalogan -/doc/user/compliance/license_compliance/ @rdickenson -/doc/user/compliance/license_list.md @rdickenson -/doc/user/compliance/license_scanning_of_cyclonedx_files/ @rdickenson /doc/user/crm/ @msedlakjakubowski /doc/user/discussions/ @aqualls /doc/user/enterprise_user/ @jglassman1 /doc/user/feature_flags.md @sselhorn -/doc/user/group/ @lciutacu +/doc/user/group/access_and_permissions.md @lciutacu /doc/user/group/clusters/ @phillipwells /doc/user/group/compliance_frameworks.md @eread +/doc/user/group/contribution_analytics/ @lciutacu /doc/user/group/custom_project_templates.md @eread +/doc/user/group/devops_adoption/ @lciutacu /doc/user/group/epics/ @msedlakjakubowski /doc/user/group/import/ @eread +/doc/user/group/index.md @lciutacu +/doc/user/group/insights/ @lciutacu /doc/user/group/issues_analytics/ @msedlakjakubowski /doc/user/group/iterations/ @msedlakjakubowski +/doc/user/group/manage.md @lciutacu +/doc/user/group/moderate_users.md @phillipwells /doc/user/group/planning_hierarchy/ @msedlakjakubowski /doc/user/group/reporting/ @phillipwells /doc/user/group/repositories_analytics/ @drcatherinepope /doc/user/group/roadmap/ @msedlakjakubowski /doc/user/group/saml_sso/ @jglassman1 /doc/user/group/settings/ @jglassman1 +/doc/user/group/subgroups/ @lciutacu +/doc/user/group/value_stream_analytics/ @lciutacu /doc/user/infrastructure/ @phillipwells /doc/user/infrastructure/clusters/manage/management_project_applications/runner.md @fneill /doc/user/markdown.md @msedlakjakubowski @@ -912,18 +907,19 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/permissions.md @jglassman1 /doc/user/product_analytics/ @lciutacu /doc/user/profile/account/ @jglassman1 +/doc/user/profile/achievements.md @lciutacu +/doc/user/profile/comment_templates.md @aqualls /doc/user/profile/contributions_calendar.md @lciutacu /doc/user/profile/index.md @jglassman1 /doc/user/profile/notifications.md @msedlakjakubowski /doc/user/profile/personal_access_tokens.md @jglassman1 -/doc/user/profile/saved_replies.md @aqualls /doc/user/profile/user_passwords.md @jglassman1 /doc/user/project/autocomplete_characters.md @aqualls /doc/user/project/badges.md @lciutacu /doc/user/project/changelogs.md @aqualls /doc/user/project/clusters/ @phillipwells /doc/user/project/code_intelligence.md @aqualls -/doc/user/project/code_owners.md @aqualls +/doc/user/project/codeowners/ @aqualls /doc/user/project/deploy_boards.md @phillipwells /doc/user/project/deploy_keys/ @phillipwells /doc/user/project/deploy_tokens/ @phillipwells @@ -948,7 +944,6 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/project/merge_requests/status_checks.md @eread /doc/user/project/milestones/ @msedlakjakubowski /doc/user/project/organize_work_with_projects.md @lciutacu -/doc/user/project/pages/ @ashrafkhamis /doc/user/project/protected_branches.md @aqualls /doc/user/project/protected_tags.md @aqualls /doc/user/project/push_options.md @aqualls @@ -967,10 +962,10 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/project/settings/import_export_troubleshooting.md @eread /doc/user/project/settings/index.md @lciutacu /doc/user/project/settings/project_access_tokens.md @jglassman1 +/doc/user/project/system_notes.md @aqualls /doc/user/project/time_tracking.md @msedlakjakubowski /doc/user/project/web_ide/ @ashrafkhamis /doc/user/project/web_ide_beta/ @ashrafkhamis -/doc/user/project/wiki/ @ashrafkhamis /doc/user/project/working_with_projects.md @lciutacu /doc/user/public_access.md @lciutacu /doc/user/report_abuse.md @phillipwells @@ -982,6 +977,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/tasks.md @msedlakjakubowski /doc/user/todos.md @msedlakjakubowski /doc/user/usage_quotas.md @fneill +/doc/user/workspace/quick_start/ @ashrafkhamis # End rake-managed-docs-block [Authentication and Authorization] @@ -1229,127 +1225,148 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /lib/tasks/gitlab/password.rake @gitlab-org/manage/authentication-and-authorization/approvers /lib/tasks/tokens.rake @gitlab-org/manage/authentication-and-authorization/approvers -^[Verify] -/app/**/ci/ @gitlab-org/maintainers/cicd-verify -/app/controllers/admin/jobs_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/admin/runner_projects_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/admin/runners_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/artifacts_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/build_artifacts_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/builds_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/jobs_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/runner_setup_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/pipeline_schedules_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/pipelines_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/pipelines_settings_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/runner_projects_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/runners_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/triggers_controller.rb @gitlab-org/maintainers/cicd-verify -/app/controllers/projects/variables_controller.rb @gitlab-org/maintainers/cicd-verify -/app/models/commit_status.rb @gitlab-org/maintainers/cicd-verify -/app/models/external_pull_request.rb @gitlab-org/maintainers/cicd-verify -/app/models/generic_commit_status.rb @gitlab-org/maintainers/cicd-verify -/app/models/namespace_ci_cd_setting.rb @gitlab-org/maintainers/cicd-verify -/app/models/project_ci_cd_setting.rb @gitlab-org/maintainers/cicd-verify -/app/presenters/commit_status_presenter.rb @gitlab-org/maintainers/cicd-verify -/app/presenters/generic_commit_status_presenter.rb @gitlab-org/maintainers/cicd-verify -/app/validators/json_schemas/build_metadata_id_tokens.json @gitlab-org/maintainers/cicd-verify -/app/views/projects/artifacts/ @gitlab-org/maintainers/cicd-verify -/app/views/projects/generic_commit_statuses/ @gitlab-org/maintainers/cicd-verify -/app/views/projects/jobs/ @gitlab-org/maintainers/cicd-verify -/app/views/projects/pipeline_schedules/ @gitlab-org/maintainers/cicd-verify -/app/views/projects/pipelines/ @gitlab-org/maintainers/cicd-verify -/app/views/projects/triggers/ @gitlab-org/maintainers/cicd-verify -/app/workers/build_hooks_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/build_queue_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/build_success_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/ci_platform_metrics_update_cron_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/create_pipeline_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/expire_build_artifacts_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/pipeline_hooks_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/pipeline_metrics_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/pipeline_notification_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/pipeline_process_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/pipeline_schedule_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/run_pipeline_schedule_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/stuck_ci_jobs_worker.rb @gitlab-org/maintainers/cicd-verify -/app/workers/update_external_pull_requests_worker.rb @gitlab-org/maintainers/cicd-verify -/lib/**/ci/ @gitlab-org/maintainers/cicd-verify -/lib/api/commit_statuses.rb @gitlab-org/maintainers/cicd-verify -/ee/app/**/ci/ @gitlab-org/maintainers/cicd-verify -/ee/app/**/merge_trains/ @gitlab-org/maintainers/cicd-verify -/ee/app/models/merge_train.rb @gitlab-org/maintainers/cicd-verify -/ee/app/finders/merge_trains_finder.rb @gitlab-org/maintainers/cicd-verify -/ee/app/services/auto_merge/add_to_merge_train_when_pipeline_succeeds_service.rb @gitlab-org/maintainers/cicd-verify -/ee/app/services/auto_merge/merge_train_service.rb @gitlab-org/maintainers/cicd-verify -/ee/app/services/system_notes/merge_train_service.rb @gitlab-org/maintainers/cicd-verify -/ee/app/controllers/ee/admin/runners_controller.rb @gitlab-org/maintainers/cicd-verify -/ee/app/controllers/ee/projects/pipelines_controller.rb @gitlab-org/maintainers/cicd-verify -/ee/app/controllers/projects/pipelines/ @gitlab-org/maintainers/cicd-verify -/ee/app/controllers/projects/subscriptions_controller.rb @gitlab-org/maintainers/cicd-verify -/ee/app/models/merge_train.rb @gitlab-org/maintainers/cicd-verify -/ee/app/helpers/ee/projects/pipeline_helper.rb @gitlab-org/maintainers/cicd-verify -/ee/app/views/ci_minutes_usage_mailer/ @gitlab-org/maintainers/cicd-verify -/ee/app/views/projects/pipelines/ @gitlab-org/maintainers/cicd-verify -/ee/app/views/projects/settings/ci_cd/ @gitlab-org/maintainers/cicd-verify -/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 -/spec/**/ci @gitlab-org/maintainers/cicd-verify -/spec/controllers/admin/jobs_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/admin/runner_projects_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/admin/runners_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/projects/artifacts_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/projects/jobs_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/requests/runner_setup_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/projects/pipeline_schedules_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/requests/projects/pipelines_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/projects/pipelines_settings_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/projects/runners_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/controllers/groups/variables_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/models/commit_status_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/models/external_pull_request_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/models/generic_commit_status_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/models/namespace_ci_cd_setting_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/models/project_ci_cd_setting_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/presenters/commit_status_presenter_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/views/projects/jobs/ @gitlab-org/maintainers/cicd-verify -/spec/views/projects/pipeline_schedules/ @gitlab-org/maintainers/cicd-verify -/spec/views/projects/pipelines/ @gitlab-org/maintainers/cicd-verify -/spec/views/projects/settings/ci_cd/ @gitlab-org/maintainers/cicd-verify -/spec/workers/build_hooks_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/build_queue_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/build_success_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/ci_platform_metrics_update_cron_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/create_pipeline_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/expire_build_artifacts_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/pipeline_hooks_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/pipeline_metrics_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/pipeline_notification_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/pipeline_process_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/pipeline_schedule_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/run_pipeline_schedule_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/stuck_ci_jobs_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/spec/workers/update_external_pull_requests_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/**/ci @gitlab-org/maintainers/cicd-verify -/ee/spec/**/merge_trains @gitlab-org/maintainers/cicd-verify -/ee/spec/models/merge_train_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/finders/merge_trains_finder_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/services/auto_merge/add_to_merge_train_when_pipeline_succeeds_service_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/services/auto_merge/merge_train_service_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/services/system_notes/merge_train_service_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/controllers/projects/subscriptions_controller_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/helpers/ee/projects/pipeline_helper_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb @gitlab-org/maintainers/cicd-verify -/ee/spec/lib/**/ci/ @gitlab-org/maintainers/cicd-verify -/**/javascripts/jobs/ @gitlab-org/ci-cd/verify/frontend -/**/javascripts/pipelines/ @gitlab-org/ci-cd/verify/frontend -/app/assets/javascripts/ci/ @gitlab-org/ci-cd/verify/frontend -/app/assets/javascripts/ci/pipeline_schedules/ @gitlab-org/ci-cd/verify/frontend -/ee/app/assets/javascripts/ci/ @gitlab-org/ci-cd/verify/frontend -/app/assets/javascripts/token_access/ @gitlab-org/ci-cd/verify/frontend -/app/assets/javascripts/admin/application_settings/runner_token_expiration/ @gitlab-org/ci-cd/verify/frontend -/ee/app/assets/javascripts/usage_quotas/pipelines/ @gitlab-org/ci-cd/verify/frontend @fulfillment-group/utilization-group/fe +[Verify] @gitlab-org/maintainers/cicd-verify @shinya.maeda @stanhu @ayufan +# Verify Backend +/**/app/**/ci/ +/**/lib/**/ci/ +/**/spec/**/ci/ +/**/app/**/merge_trains/ +/**/spec/**/merge_trains/ +/app/controllers/admin/jobs_controller.rb +/app/controllers/admin/runner_projects_controller.rb +/app/controllers/admin/runners_controller.rb +/app/controllers/projects/artifacts_controller.rb +/app/controllers/projects/build_artifacts_controller.rb +/app/controllers/projects/builds_controller.rb +/app/controllers/projects/jobs_controller.rb +/app/controllers/runner_setup_controller.rb +/app/controllers/projects/pipeline_schedules_controller.rb +/app/controllers/projects/pipelines_controller.rb +/app/controllers/projects/pipelines_settings_controller.rb +/app/controllers/projects/runner_projects_controller.rb +/app/controllers/projects/runners_controller.rb +/app/controllers/projects/triggers_controller.rb +/app/controllers/projects/variables_controller.rb +/app/models/commit_status.rb +/app/models/external_pull_request.rb +/app/models/generic_commit_status.rb +/app/models/namespace_ci_cd_setting.rb +/app/models/project_ci_cd_setting.rb +/app/models/projects/build_artifacts_size_refresh.rb +/app/presenters/commit_status_presenter.rb +/app/presenters/generic_commit_status_presenter.rb +/app/services/projects/refresh_build_artifacts_size_statistics_service.rb +/app/uploaders/job_artifact_uploader.rb +/app/validators/json_schemas/build_metadata_id_tokens.json +/app/views/projects/artifacts/ +/app/views/projects/generic_commit_statuses/ +/app/views/projects/jobs/ +/app/views/projects/pipeline_schedules/ +/app/views/projects/pipelines/ +/app/views/projects/triggers/ +/app/workers/build_hooks_worker.rb +/app/workers/build_queue_worker.rb +/app/workers/build_success_worker.rb +/app/workers/ci_platform_metrics_update_cron_worker.rb +/app/workers/create_pipeline_worker.rb +/app/workers/expire_build_artifacts_worker.rb +/app/workers/pipeline_hooks_worker.rb +/app/workers/pipeline_metrics_worker.rb +/app/workers/pipeline_notification_worker.rb +/app/workers/pipeline_process_worker.rb +/app/workers/pipeline_schedule_worker.rb +/app/workers/projects/refresh_build_artifacts_size_statistics_worker.rb +/app/workers/run_pipeline_schedule_worker.rb +/app/workers/stuck_ci_jobs_worker.rb +/app/workers/update_external_pull_requests_worker.rb +/lib/api/commit_statuses.rb +/ee/app/finders/merge_trains_finder.rb +/ee/app/services/auto_merge/add_to_merge_train_when_pipeline_succeeds_service.rb +/ee/app/services/auto_merge/merge_train_service.rb +/ee/app/services/system_notes/merge_train_service.rb +/ee/app/controllers/ee/admin/runners_controller.rb +/ee/app/controllers/ee/projects/pipelines_controller.rb +/ee/app/controllers/projects/pipelines/ +/ee/app/controllers/projects/subscriptions_controller.rb +/ee/app/helpers/ee/projects/pipeline_helper.rb +/ee/app/views/ci_minutes_usage_mailer/ +/ee/app/views/projects/pipelines/ +/ee/app/views/projects/settings/ci_cd/ +/ee/app/workers/clear_shared_runners_minutes_worker.rb +/ee/lib/api/merge_trains.rb +/ee/lib/ee/api/entities/merge_train.rb +/ee/spec/requests/api/merge_trains_spec.rb +/spec/controllers/admin/jobs_controller_spec.rb +/spec/controllers/admin/runner_projects_controller_spec.rb +/spec/controllers/admin/runners_controller_spec.rb +/spec/controllers/projects/artifacts_controller_spec.rb +/spec/controllers/projects/jobs_controller_spec.rb +/spec/requests/runner_setup_controller_spec.rb +/spec/controllers/projects/pipeline_schedules_controller_spec.rb +/spec/requests/projects/pipelines_controller_spec.rb +/spec/controllers/projects/pipelines_settings_controller_spec.rb +/spec/controllers/projects/runners_controller_spec.rb +/spec/controllers/groups/variables_controller_spec.rb +/spec/models/commit_status_spec.rb +/spec/models/external_pull_request_spec.rb +/spec/models/generic_commit_status_spec.rb +/spec/models/namespace_ci_cd_setting_spec.rb +/spec/models/project_ci_cd_setting_spec.rb +/spec/presenters/commit_status_presenter_spec.rb +/spec/views/projects/jobs/ +/spec/views/projects/pipeline_schedules/ +/spec/views/projects/pipelines/ +/spec/views/projects/settings/ci_cd/ +/spec/workers/build_hooks_worker_spec.rb +/spec/workers/build_queue_worker_spec.rb +/spec/workers/build_success_worker_spec.rb +/spec/workers/ci_platform_metrics_update_cron_worker_spec.rb +/spec/workers/create_pipeline_worker_spec.rb +/spec/workers/expire_build_artifacts_worker_spec.rb +/spec/workers/pipeline_hooks_worker_spec.rb +/spec/workers/pipeline_metrics_worker_spec.rb +/spec/workers/pipeline_notification_worker_spec.rb +/spec/workers/pipeline_process_worker_spec.rb +/spec/workers/pipeline_schedule_worker_spec.rb +/spec/workers/run_pipeline_schedule_worker_spec.rb +/spec/workers/stuck_ci_jobs_worker_spec.rb +/spec/workers/update_external_pull_requests_worker_spec.rb +/ee/spec/finders/merge_trains_finder_spec.rb +/ee/spec/services/auto_merge/add_to_merge_train_when_pipeline_succeeds_service_spec.rb +/ee/spec/services/auto_merge/merge_train_service_spec.rb +/ee/spec/services/system_notes/merge_train_service_spec.rb +/ee/spec/controllers/projects/subscriptions_controller_spec.rb +/ee/spec/helpers/ee/projects/pipeline_helper_spec.rb +/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb + +# Verify Frontend +/**/spec/frontend/**/ci/ @gitlab-org/ci-cd/verify/frontend +/**/javascripts/ci/ @gitlab-org/ci-cd/verify/frontend +/**/javascripts/pipelines/ @gitlab-org/ci-cd/verify/frontend +/**/javascripts/jobs/ @gitlab-org/ci-cd/verify/frontend +/**/javascripts/token_access/ @gitlab-org/ci-cd/verify/frontend +/**/javascripts/admin/application_settings/runner_token_expiration/ @gitlab-org/ci-cd/verify/frontend +/**/javascripts/usage_quotas/pipelines/ @gitlab-org/ci-cd/verify/frontend @sheldonled @aalakkad @kpalchyk + +# CI/CD templates +/lib/gitlab/ci/templates/ @gitlab-org/maintainers/cicd-templates +/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @DylanGriffith @mayra-cabrera @tkuah +/lib/gitlab/ci/templates/Security/ @gonzoyumo @twoodham @sethgitlab @thiagocsf +/lib/gitlab/ci/templates/Security/API-Fuzzing.*.yml @gitlab-org/secure/dynamic-analysis +/lib/gitlab/ci/templates/Security/Container-Scanning.*.yml @gitlab-org/secure/composition-analysis-be +/lib/gitlab/ci/templates/Security/Coverage-Fuzzing.*.yml @gitlab-org/secure/dynamic-analysis +/lib/gitlab/ci/templates/Security/DAST.*.yml @gitlab-org/secure/dynamic-analysis +/lib/gitlab/ci/templates/Security/Dependency-Scanning.*.yml @gitlab-org/secure/composition-analysis-be +/lib/gitlab/ci/templates/Security/License-Scanning.*.yml @gitlab-org/secure/composition-analysis-be +/lib/gitlab/ci/templates/Security/SAST.*.yml @gitlab-org/secure/static-analysis +/lib/gitlab/ci/templates/Security/Secret-Detection.*.yml @gitlab-org/secure/static-analysis +/lib/gitlab/ci/templates/Security/Secure-Binaries.*.yml @gitlab-org/secure/static-analysis @gitlab-org/secure/composition-analysis-be @gitlab-org/secure/dynamic-analysis +# Note: The `Fortify-FoD-sast.gitlab-ci.yml` template is provided and maintained by Fortify, an official Technology Partner with GitLab. +/lib/gitlab/ci/templates/Jobs/Container-Scanning.*.yml @gitlab-org/secure/composition-analysis-be +/lib/gitlab/ci/templates/Jobs/Dependency-Scanning.*.yml @gitlab-org/secure/composition-analysis-be +/lib/gitlab/ci/templates/Jobs/License-Scanning.*.yml @gitlab-org/secure/composition-analysis-be +/lib/gitlab/ci/templates/Jobs/SAST.*.yml @gitlab-org/secure/static-analysis +/lib/gitlab/ci/templates/Jobs/Secret-Detection.*.yml @gitlab-org/secure/static-analysis [Manage::Workspace] lib/api/entities/basic_project_details.rb @gitlab-org/manage/manage-workspace/backend-approvers @@ -1421,10 +1438,26 @@ ee/lib/ee/api/entities/project.rb @gitlab-org/manage/manage-workspace/backend-ap /lib/gitlab/audit_json_logger.rb @gitlab-org/govern/compliance [Fulfillment::Utilization] -/ee/app/assets/javascripts/usage_quotas/components/ @fulfillment-group/utilization-group/fe -/ee/app/assets/javascripts/usage_quotas/seats/ @fulfillment-group/utilization-group/fe -/ee/app/assets/javascripts/usage_quotas/storage/ @fulfillment-group/utilization-group/fe +/ee/app/assets/javascripts/usage_quotas/components/ @sheldonled @aalakkad @kpalchyk +/ee/app/assets/javascripts/usage_quotas/seats/ @sheldonled @aalakkad @kpalchyk +/ee/app/assets/javascripts/usage_quotas/storage/ @sheldonled @aalakkad @kpalchyk [Manage::Foundations] /lib/sidebars/ @gitlab-org/manage/foundations/engineering /ee/lib/sidebars/ @gitlab-org/manage/foundations/engineering + +# JiHu GitLab rules. See https://gitlab.com/gitlab-jh/gitlab-jh-enablement/-/issues/213#note_1024367528 + +[JH Frontend] @jihulab/maintainers/frontend +/jh/app/assets/ +/jh/*.scss +/jh/*.js +/jh/*.vue + +[JH Rails Backend] @jihulab/maintainers/rails-backend +/jh/*.rb +/jh/*.rake +/jh/qa/ @jihulab/maintainers/quality + +[JH Technical Writer] @jihulab/maintainers/technical-writer +/jh/doc/ diff --git a/.gitlab/ci/build-images.gitlab-ci.yml b/.gitlab/ci/build-images.gitlab-ci.yml index 4ee15ccb311..c1123b29d67 100644 --- a/.gitlab/ci/build-images.gitlab-ci.yml +++ b/.gitlab/ci/build-images.gitlab-ci.yml @@ -71,3 +71,10 @@ build-assets-image: # The `cached-assets-hash.txt` file is used in `review-build-cng-env` (`.gitlab/ci/review-apps/main.gitlab-ci.yml`) # to pass the assets image tag to the CNG downstream pipeline. - cached-assets-hash.txt + +build-assets-image as-if-foss: + extends: + - build-assets-image + - .as-if-foss + - .build-images:rules:build-assets-image-as-if-foss + needs: ["compile-production-assets as-if-foss"] diff --git a/.gitlab/ci/ci-templates.gitlab-ci.yml b/.gitlab/ci/ci-templates.gitlab-ci.yml index d6e2fdf2fbe..c6681db9685 100644 --- a/.gitlab/ci/ci-templates.gitlab-ci.yml +++ b/.gitlab/ci/ci-templates.gitlab-ci.yml @@ -4,7 +4,7 @@ templates-shellcheck: - .default-before_script - .default-retry - .ruby-cache - - .use-pg13 + - .use-pg14 stage: test needs: - setup-test-env diff --git a/.gitlab/ci/dev-fixtures.gitlab-ci.yml b/.gitlab/ci/dev-fixtures.gitlab-ci.yml index 0ff469d7114..f89456a18fb 100644 --- a/.gitlab/ci/dev-fixtures.gitlab-ci.yml +++ b/.gitlab/ci/dev-fixtures.gitlab-ci.yml @@ -3,7 +3,7 @@ - .default-retry - .rails-cache - .default-before_script - - .use-pg12 + - .use-pg13 stage: test needs: ["setup-test-env"] variables: @@ -29,7 +29,7 @@ run-dev-fixtures-ee: extends: - .run-dev-fixtures - .dev-fixtures:rules:ee-only - - .use-pg12-es7-ee + - .use-pg13-es7-ee script: - cp ee/db/fixtures/development/* $FIXTURE_PATH - *run-dev-fixtures-script diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index c5d992cab63..51fad741a1c 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -49,17 +49,11 @@ compile-production-assets: after_script: - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here -compile-production-assets-esbuild: - allow_failure: true +compile-production-assets as-if-foss: extends: - - .compile-assets-base - - .frontend:rules:compile-production-assets - variables: - NODE_ENV: "production" - RAILS_ENV: "production" - WEBPACK_USE_ESBUILD_LOADER: "true" - after_script: - - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here + - compile-production-assets + - .as-if-foss + - .frontend:rules:compile-production-assets-as-if-foss compile-test-assets: extends: @@ -73,14 +67,6 @@ compile-test-assets: - "${WEBPACK_COMPILE_LOG_PATH}" when: always -compile-test-assets-esbuild: - allow_failure: true - extends: - - .compile-assets-base - - .frontend:rules:compile-test-assets - variables: - WEBPACK_USE_ESBUILD_LOADER: "true" - compile-test-assets as-if-foss: extends: - compile-test-assets @@ -116,17 +102,56 @@ update-storybook-yarn-cache: script: - yarn_install_script +retrieve-frontend-fixtures: + variables: + SETUP_DB: "false" + extends: + - .default-retry + - .frontend:rules:default-frontend-jobs + stage: prepare + script: + - source scripts/utils.sh + - source scripts/gitlab_component_helpers.sh + - install_gitlab_gem + - export_fixtures_sha_for_download + - | + if check_fixtures_download; then + run_timed_command "download_and_extract_fixtures" + fi + artifacts: + paths: + - tmp/tests/frontend/ + +# Download fixtures only when a merge request contains changes to only JS files +# and fixtures are present in the package registry. .frontend-fixtures-base: extends: - .default-retry - .default-before_script - .rails-cache - - .use-pg12 + - .use-pg13 stage: fixtures - needs: ["setup-test-env", "retrieve-tests-metadata"] + needs: ["setup-test-env", "retrieve-tests-metadata", "retrieve-frontend-fixtures"] variables: + # Don't add `CRYSTALBALL: "false"` here as we're enabling Crystalball for scheduled pipelines (in `.gitlab-ci.yml`), so that we get coverage data + # for the `frontend fixture RSpec files` that will be added to the Crystalball mapping in `update-tests-metadata`. + # More information in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74003. WEBPACK_VENDOR_DLL: "true" script: + - source scripts/utils.sh + - source scripts/gitlab_component_helpers.sh + - | + if [[ -d "tmp/tests/frontend" ]]; then + # Remove tmp/tests/frontend/ except on the first parallelized job so that depending + # jobs don't download the exact same artifact multiple times. + if [[ -n "${CI_NODE_INDEX}" ]] && [[ "${CI_NODE_INDEX}" -ne 1 ]]; then + echoinfo "INFO: Removing 'tmp/tests/frontend' as we're on node ${CI_NODE_INDEX}."; + rm -rf "tmp/tests/frontend"; + fi + exit 0 + else + echo "No frontend fixtures directory, generating frontend fixtures." + fi - run_timed_command "gem install knapsack --no-document" - run_timed_command "scripts/gitaly-test-spawn" - source ./scripts/rspec_helpers.sh @@ -157,6 +182,12 @@ rspec-all frontend_fixture as-if-foss: - .frontend-fixtures-base - .frontend:rules:frontend_fixture-as-if-foss - .as-if-foss + variables: + # We explicitely disable Crystalball here so as even in scheduled pipelines we don't need it since it's already enabled for `rspec-all frontend_fixture` there. + CRYSTALBALL: "false" + WEBPACK_VENDOR_DLL: "true" + KNAPSACK_GENERATE_REPORT: "" + FLAKY_RSPEC_GENERATE_REPORT: "" needs: - !reference [.frontend-fixtures-base, needs] - "compile-test-assets as-if-foss" @@ -170,7 +201,9 @@ upload-frontend-fixtures: stage: fixtures needs: ["rspec-all frontend_fixture"] script: + - source scripts/utils.sh - source scripts/gitlab_component_helpers.sh + - export_fixtures_sha_for_upload - 'fixtures_archive_doesnt_exist || { echoinfo "INFO: Exiting early as package exists."; exit 0; }' - run_timed_command "create_fixtures_package" - run_timed_command "upload_fixtures_package" @@ -272,9 +305,7 @@ jest-integration: - .frontend:rules:default-frontend-jobs script: - run_timed_command "yarn jest:integration --ci" - needs: - - job: "rspec-all frontend_fixture" - - job: "graphql-schema-dump" + needs: ["rspec-all frontend_fixture", "graphql-schema-dump"] coverage-frontend: extends: @@ -357,9 +388,7 @@ startup-css-check: extends: - .startup-css-check-base - .frontend:rules:default-frontend-jobs - needs: - - job: "compile-test-assets" - - job: "rspec-all frontend_fixture" + needs: ["compile-test-assets", "rspec-all frontend_fixture"] startup-css-check as-if-foss: extends: diff --git a/.gitlab/ci/glfm.gitlab-ci.yml b/.gitlab/ci/glfm.gitlab-ci.yml index 6ff60f24730..008bb03de25 100644 --- a/.gitlab/ci/glfm.gitlab-ci.yml +++ b/.gitlab/ci/glfm.gitlab-ci.yml @@ -2,7 +2,7 @@ glfm-verify: extends: - .rails-job-base - .glfm:rules:glfm-verify - - .use-pg12 + - .use-pg13 stage: test needs: ["setup-test-env"] script: diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 14fa0fc3671..02e13be9a7e 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -2,11 +2,13 @@ retry: max: 2 # This is confusing but this means "3 runs at max". when: - - unknown_failure - api_failure - - runner_system_failure + - data_integrity_failure - job_execution_timeout + - runner_system_failure + - scheduler_failure - stuck_or_timeout_failure + - unknown_failure .default-utils-before_script: before_script: @@ -37,22 +39,12 @@ <<: *ruby-gems-cache policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. -.gitaly-ruby-gems-cache: &gitaly-ruby-gems-cache - key: "gitaly-ruby-gems-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}" - paths: - - vendor/gitaly-ruby/ - policy: pull - -.gitaly-ruby-gems-cache-push: &gitaly-ruby-gems-cache-push - <<: *gitaly-ruby-gems-cache - policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. - .gitaly-binaries-cache: &gitaly-binaries-cache key: files: - GITALY_SERVER_VERSION - lib/gitlab/setup_helper.rb - prefix: "gitaly-binaries-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}" + prefix: "gitaly-binaries-debian-${DEBIAN_VERSION}" paths: - ${TMP_TEST_FOLDER}/gitaly/_build/bin/ - ${TMP_TEST_FOLDER}/gitaly/_build/deps/git/install/ @@ -64,7 +56,6 @@ - ${TMP_TEST_FOLDER}/gitaly/Makefile - ${TMP_TEST_FOLDER}/gitaly/praefect.config.toml - ${TMP_TEST_FOLDER}/gitaly/praefect-db.config.toml - - ${TMP_TEST_FOLDER}/gitaly/ruby/ policy: pull .go-pkg-cache: &go-pkg-cache @@ -138,14 +129,12 @@ .setup-test-env-cache: cache: - *ruby-gems-cache - - *gitaly-ruby-gems-cache - *gitaly-binaries-cache - *go-pkg-cache .setup-test-env-cache-push: cache: - *ruby-gems-cache-push - - *gitaly-ruby-gems-cache-push - *go-pkg-cache-push .gitaly-binaries-cache-push: @@ -160,7 +149,6 @@ .rails-cache: cache: - *ruby-gems-cache - - *gitaly-ruby-gems-cache .static-analysis-cache: cache: @@ -229,7 +217,6 @@ - *node-modules-cache # We don't push this cache as it's already rebuilt by `update-assets-compile-*-cache` - *storybook-node-modules-cache-push - .use-pg12: services: - name: postgres:12 @@ -248,6 +235,15 @@ POSTGRES_HOST_AUTH_METHOD: trust PG_VERSION: "13" +.use-pg14: + services: + - name: postgres:14 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:6.2-alpine + variables: + POSTGRES_HOST_AUTH_METHOD: trust + PG_VERSION: "14" + .use-pg12-es7-ee: services: - name: postgres:12 @@ -278,9 +274,24 @@ ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 -.use-pg12-es8-ee: +.use-pg14-es7-ee: services: - - name: postgres:12 + - name: postgres:14 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:6.2-alpine + - name: elasticsearch:7.17.6 + command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"] + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0 + alias: zoekt-ci-image + variables: + POSTGRES_HOST_AUTH_METHOD: trust + PG_VERSION: "14" + ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 + ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 + +.use-pg13-es8-ee: + services: + - name: postgres:13 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - name: redis:6.0-alpine - name: elasticsearch:8.6.2 @@ -288,15 +299,31 @@ alias: zoekt-ci-image variables: POSTGRES_HOST_AUTH_METHOD: trust - PG_VERSION: "12" + PG_VERSION: "13" ES_SETTING_DISCOVERY_TYPE: "single-node" ES_SETTING_XPACK_SECURITY_ENABLED: "false" ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 -.use-pg12-opensearch1-ee: +.use-pg14-es8-ee: services: - - name: postgres:12 + - name: postgres:14 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:6.0-alpine + - name: elasticsearch:8.6.2 + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0 + alias: zoekt-ci-image + variables: + POSTGRES_HOST_AUTH_METHOD: trust + PG_VERSION: "14" + ES_SETTING_DISCOVERY_TYPE: "single-node" + ES_SETTING_XPACK_SECURITY_ENABLED: "false" + ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 + ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 + +.use-pg13-opensearch1-ee: + services: + - name: postgres:13 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - name: redis:6.0-alpine - name: opensearchproject/opensearch:1.3.5 @@ -306,13 +333,13 @@ alias: zoekt-ci-image variables: POSTGRES_HOST_AUTH_METHOD: trust - PG_VERSION: "12" + PG_VERSION: "13" ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 -.use-pg12-opensearch2-ee: +.use-pg13-opensearch2-ee: services: - - name: postgres:12 + - name: postgres:13 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - name: redis:6.0-alpine - name: opensearchproject/opensearch:2.2.1 @@ -322,7 +349,39 @@ alias: zoekt-ci-image variables: POSTGRES_HOST_AUTH_METHOD: trust - PG_VERSION: "12" + PG_VERSION: "13" + ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 + ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 + +.use-pg14-opensearch1-ee: + services: + - name: postgres:14 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:6.0-alpine + - name: opensearchproject/opensearch:1.3.5 + alias: elasticsearch + command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"] + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0 + alias: zoekt-ci-image + variables: + POSTGRES_HOST_AUTH_METHOD: trust + PG_VERSION: "14" + ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 + ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 + +.use-pg14-opensearch2-ee: + services: + - name: postgres:14 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:6.0-alpine + - name: opensearchproject/opensearch:2.2.1 + alias: elasticsearch + command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"] + - name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0 + alias: zoekt-ci-image + variables: + POSTGRES_HOST_AUTH_METHOD: trust + PG_VERSION: "14" ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060 ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070 diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index 5d6b90d107d..afef2b11ee7 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -20,7 +20,7 @@ memory-on-boot: extends: - .only-code-memory-job-base - .production - - .use-pg12 + - .use-pg13 stage: test needs: ["setup-test-env", "compile-test-assets"] variables: diff --git a/.gitlab/ci/notify.gitlab-ci.yml b/.gitlab/ci/notify.gitlab-ci.yml index 90ae1813e5f..1afc4eb8c97 100644 --- a/.gitlab/ci/notify.gitlab-ci.yml +++ b/.gitlab/ci/notify.gitlab-ci.yml @@ -3,74 +3,6 @@ dependencies: [] cache: {} -.notify-slack: - extends: - - .notify-defaults - image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine/curl - variables: - MERGE_REQUEST_URL: ${CI_MERGE_REQUEST_PROJECT_URL}/-/merge_requests/${CI_MERGE_REQUEST_IID} - before_script: - - apk update && apk add git bash - - echo "NOTIFY_CHANNEL is ${NOTIFY_CHANNEL}" - - echo "CI_PIPELINE_URL is ${CI_PIPELINE_URL}" - -notify-update-gitaly: - extends: - - .notify-slack - rules: - - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $GITALY_UPDATE_BRANCH' - when: on_failure - allow_failure: true - variables: - NOTIFY_CHANNEL: g_gitaly - GITALY_UPDATE_BRANCH: release-tools/update-gitaly - script: - - scripts/slack ${NOTIFY_CHANNEL} "☠️ \`${GITALY_UPDATE_BRANCH}\` failed! ☠️ See ${CI_PIPELINE_URL} (triggered from ${MERGE_REQUEST_URL})" ci_failing "GitLab QA Bot" - -notify-security-pipeline: - extends: - - .notify-slack - - .delivery:rules:security-pipeline-merge-result-failure - variables: - NOTIFY_CHANNEL: f_upcoming_release - script: - # <!subteam^S0127FU8PDE> mentions the `@release-managers` group - - 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-defaults - - .notify:rules:notify-pipeline-failure - image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION} - variables: - INCIDENT_PROJECT: "${BROKEN_BRANCH_INCIDENTS_PROJECT}" - BROKEN_BRANCH_PROJECT_TOKEN: "${BROKEN_BRANCH_INCIDENTS_PROJECT_TOKEN}" - INCIDENT_JSON: "${CI_PROJECT_DIR}/incident.json" - SLACK_CHANNEL: "${NOTIFY_PIPELINE_FAILURE_CHANNEL}" - FAILED_PIPELINE_SLACK_MESSAGE_FILE: "${CI_PROJECT_DIR}/failed_pipeline_slack_message.json" - before_script: - - source scripts/utils.sh - - apt-get update && apt-get install -y jq - - install_gitlab_gem - script: - - | - if [[ "${CREATE_INCIDENT_FOR_PIPELINE_FAILURE}" == "true" ]]; then - scripts/create-pipeline-failure-incident.rb -p ${INCIDENT_PROJECT} -f ${INCIDENT_JSON} -t ${BROKEN_BRANCH_PROJECT_TOKEN} || - scripts/slack ${SLACK_CHANNEL} "☠️ Broken pipeline incident creation failed! ☠️ See ${CI_JOB_URL}" ci_failing "Failed pipeline reporter"; - echosuccess "Created incident $(jq '.web_url' ${INCIDENT_JSON})"; - fi - - | - scripts/generate-failed-pipeline-slack-message.rb -i ${INCIDENT_JSON} -f ${FAILED_PIPELINE_SLACK_MESSAGE_FILE}; - curl -X POST -H 'Content-Type: application/json' --data @${FAILED_PIPELINE_SLACK_MESSAGE_FILE} "$CI_SLACK_WEBHOOK_URL" || - scripts/slack ${SLACK_CHANNEL} "☠️ Broken pipeline notification failed! ☠️ See ${CI_JOB_URL}" ci_failing "Failed pipeline reporter"; - - artifacts: - paths: - - ${INCIDENT_JSON} - - ${FAILED_PIPELINE_SLACK_MESSAGE_FILE} - when: always - expire_in: 2 days - create-issues-for-failing-tests: extends: - .notify-defaults diff --git a/.gitlab/ci/package-and-test/main.gitlab-ci.yml b/.gitlab/ci/package-and-test/main.gitlab-ci.yml index 4c89cbb721b..5adf6d25eb1 100644 --- a/.gitlab/ci/package-and-test/main.gitlab-ci.yml +++ b/.gitlab/ci/package-and-test/main.gitlab-ci.yml @@ -4,11 +4,14 @@ default: interruptible: true +workflow: + name: $PIPELINE_NAME + include: - 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: 2.2.0 + ref: 3.1.2 file: - /ci/base.gitlab-ci.yml - /ci/allure-report.yml @@ -54,19 +57,13 @@ stages: stage: test tags: - e2e - needs: - - job: trigger-omnibus - optional: true - - job: download-knapsack-report - artifacts: true - optional: true - - job: check-release-set variables: QA_GENERATE_ALLURE_REPORT: "true" QA_CAN_TEST_PRAEFECT: "false" QA_INTERCEPT_REQUESTS: "true" GITLAB_LICENSE_MODE: test GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN + GITLAB_QA_OPTS: $EXTRA_GITLAB_QA_OPTS # todo: remove in 16.1 milestone when not needed for backwards compatibility anymore EE_LICENSE: $QA_EE_LICENSE GITHUB_ACCESS_TOKEN: $QA_GITHUB_ACCESS_TOKEN @@ -126,14 +123,23 @@ trigger-omnibus-env: echo "OMNIBUS_GITLAB_RUBY3_BUILD=${OMNIBUS_GITLAB_RUBY3_BUILD:-false}" >> $BUILD_ENV echo "OMNIBUS_GITLAB_RUBY2_BUILD=${OMNIBUS_GITLAB_RUBY2_BUILD:-false}" >> $BUILD_ENV echo "OMNIBUS_GITLAB_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV + echo "OMNIBUS_GITLAB_BUILD_ON_ALL_OS=${OMNIBUS_GITLAB_BUILD_ON_ALL_OS:-false}" >> $BUILD_ENV echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV - echo "EE=$([[ $FOSS_ONLY == 'true' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV + echo "EE=$([[ $FOSS_ONLY == '1' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV echo "Built environment file for omnibus build:" cat $BUILD_ENV artifacts: reports: dotenv: $BUILD_ENV +trigger-omnibus-env-ce: + extends: + - trigger-omnibus-env + - .rules:omnibus-build-ce + needs: + - pipeline: $PARENT_PIPELINE_ID + job: build-assets-image as-if-foss + trigger-omnibus: extends: .rules:omnibus-build stage: .pre @@ -158,12 +164,23 @@ trigger-omnibus: RUBY3_BUILD: $OMNIBUS_GITLAB_RUBY3_BUILD RUBY2_BUILD: $OMNIBUS_GITLAB_RUBY2_BUILD CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION + BUILD_ON_ALL_OS: $OMNIBUS_GITLAB_BUILD_ON_ALL_OS SKIP_QA_TEST: "true" ee: $EE trigger: project: gitlab-org/build/omnibus-gitlab-mirror strategy: depend +trigger-omnibus-ce: + extends: + - trigger-omnibus + - .rules:omnibus-build-ce + variables: + # Override gitlab repository so that omnibus doesn't use foss repository for CE build + GITLAB_ALTERNATIVE_REPO: $CI_PROJECT_URL + needs: + - trigger-omnibus-env-ce + download-knapsack-report: extends: - .gitlab-qa-image @@ -217,27 +234,6 @@ _quarantine: variables: QA_RSPEC_TAGS: --tag quarantine -# Temporary test job to support the effort of migrating to Super Sidebar -# https://gitlab.com/groups/gitlab-org/-/epics/9044 -_super-sidebar-nav: - extends: - - .qa - - .parallel - variables: - QA_SCENARIO: Test::Instance::Image - QA_KNAPSACK_REPORT_NAME: ee-instance - QA_TESTS: "" - QA_SUPER_SIDEBAR_ENABLED: "true" - QA_ALLURE_RESULTS_DIRECTORY: tmp/allure-results-super-sidebar - QA_EXPORT_TEST_METRICS: "false" - GITLAB_QA_OPTS: --set-feature-flags super_sidebar_nav=enabled - RSPEC_REPORT_OPTS: "--format documentation" - SKIP_REPORT_IN_ISSUES: "true" - allow_failure: true - rules: - - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH - - !reference [.rules:test:manual, rules] - # ------------------------------------------ # FF changes # ------------------------------------------ @@ -308,7 +304,7 @@ decomposition-single-db-selective: extends: .qa variables: QA_SCENARIO: Test::Instance::Image - GITLAB_QA_OPTS: --omnibus-config decomposition_single_db + GITLAB_QA_OPTS: --omnibus-config decomposition_single_db $EXTRA_GITLAB_QA_OPTS rules: - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::All/ @@ -325,7 +321,7 @@ decomposition-multiple-db-selective: variables: QA_SCENARIO: Test::Instance::Image GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true" - GITLAB_QA_OPTS: --omnibus-config decomposition_multiple_db + GITLAB_QA_OPTS: --omnibus-config decomposition_multiple_db $EXTRA_GITLAB_QA_OPTS rules: - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::All/ @@ -342,7 +338,7 @@ object-storage-selective: variables: QA_SCENARIO: Test::Instance::Image QA_RSPEC_TAGS: --tag object_storage - GITLAB_QA_OPTS: --omnibus-config object_storage + GITLAB_QA_OPTS: --omnibus-config object_storage $EXTRA_GITLAB_QA_OPTS rules: - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::ObjectStorage/ @@ -360,7 +356,7 @@ object-storage-aws-selective: AWS_S3_BUCKET_NAME: $QA_AWS_S3_BUCKET_NAME AWS_S3_KEY_ID: $QA_AWS_S3_KEY_ID AWS_S3_REGION: $QA_AWS_S3_REGION - GITLAB_QA_OPTS: --omnibus-config object_storage_aws + GITLAB_QA_OPTS: --omnibus-config object_storage_aws $EXTRA_GITLAB_QA_OPTS object-storage-aws: extends: object-storage-aws-selective parallel: 2 @@ -374,7 +370,7 @@ object-storage-gcs-selective: GOOGLE_PROJECT: $QA_GOOGLE_PROJECT GOOGLE_JSON_KEY: $QA_GOOGLE_JSON_KEY GOOGLE_CLIENT_EMAIL: $QA_GOOGLE_CLIENT_EMAIL - GITLAB_QA_OPTS: --omnibus-config object_storage_gcs + GITLAB_QA_OPTS: --omnibus-config object_storage_gcs $EXTRA_GITLAB_QA_OPTS object-storage-gcs: extends: object-storage-gcs-selective parallel: 2 @@ -386,7 +382,7 @@ packages-selective: variables: QA_SCENARIO: Test::Instance::Image QA_RSPEC_TAGS: --tag packages - GITLAB_QA_OPTS: --omnibus-config packages + GITLAB_QA_OPTS: --omnibus-config packages $EXTRA_GITLAB_QA_OPTS rules: - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::Packages/ @@ -452,6 +448,15 @@ group-saml: - if: $QA_SUITES =~ /Test::Integration::GroupSAML/ - !reference [.rules:test:manual, rules] +oauth: + extends: .qa + variables: + QA_SCENARIO: Test::Integration::OAuth + rules: + - !reference [.rules:test:qa-default-branch, rules] + - if: $QA_SUITES =~ /Test::Integration::OAuth/ + - !reference [.rules:test:manual, rules] + instance-saml: extends: .qa variables: @@ -465,8 +470,6 @@ jira: extends: .qa variables: QA_SCENARIO: Test::Integration::Jira - JIRA_ADMIN_USERNAME: $QA_JIRA_ADMIN_USERNAME - JIRA_ADMIN_PASSWORD: $QA_JIRA_ADMIN_PASSWORD rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Jira/ @@ -626,7 +629,7 @@ registry-object-storage-tls: QA_SCENARIO: Test::Integration::RegistryTLS QA_RSPEC_TAGS: "" GITLAB_TLS_CERTIFICATE: $QA_GITLAB_TLS_CERTIFICATE - GITLAB_QA_OPTS: --omnibus-config registry_object_storage + GITLAB_QA_OPTS: --omnibus-config registry_object_storage $EXTRA_GITLAB_QA_OPTS importers: extends: .qa @@ -647,27 +650,10 @@ e2e-test-report: - .rules:report:allure-report stage: report variables: - ALLURE_JOB_NAME: e2e-package-and-test GITLAB_AUTH_TOKEN: $PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE ALLURE_PROJECT_PATH: $CI_PROJECT_PATH ALLURE_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_IID -# Temporary separate test report for super-sidebar test job -# TODO: remove once super-sidebar is on by default and enabled in tests -# https://gitlab.com/groups/gitlab-org/-/epics/9044 -e2e-test-report-super-sidebar: - extends: - - .generate-allure-report-base - stage: report - needs: - - _super-sidebar-nav - variables: - ALLURE_JOB_NAME: e2e-super-sidebar - ALLURE_RESULTS_GLOB: gitlab-qa-run-*/**/allure-results-super-sidebar - rules: - - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH - - !reference [.rules:test:manual, rules] - upload-knapsack-report: extends: - .generate-knapsack-report-base diff --git a/.gitlab/ci/package-and-test/rules.gitlab-ci.yml b/.gitlab/ci/package-and-test/rules.gitlab-ci.yml index 4e597b042dd..8f63dbc38c3 100644 --- a/.gitlab/ci/package-and-test/rules.gitlab-ci.yml +++ b/.gitlab/ci/package-and-test/rules.gitlab-ci.yml @@ -10,16 +10,23 @@ .feature-flags-set: &feature-flags-set if: $QA_FEATURE_FLAGS =~ /enabled|disabled/ - # Manually trigger job on ff changes but with default ff state instead of inverted .feature-flags-set-manual: &feature-flags-set-manual <<: *feature-flags-set when: manual allow_failure: true -# Run all tests when framework changes present, full suite execution is explicitly enabled or a feature flag file is removed +# Run the job on master pipeline +.default-branch: &default-branch + if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' + +# Run all tests when QA framework changes present, full suite execution is explicitly enabled or a feature flag file is removed .qa-run-all-tests: &qa-run-all-tests - if: $QA_FRAMEWORK_CHANGES == "true" || $QA_RUN_ALL_TESTS == "true" || $QA_FEATURE_FLAGS =~ /deleted/ + if: $QA_FRAMEWORK_CHANGES == "true" || $QA_RUN_ALL_TESTS == "true" || $QA_RUN_ALL_E2E_LABEL == "true" || $QA_FEATURE_FLAGS =~ /deleted/ + +# Run job when MR has pipeline:run-all-e2e label +.qa-run-all-e2e-label: &qa-run-all-e2e-label + if: $QA_RUN_ALL_E2E_LABEL == "true" # Process test results (notify failure to slack, create test session report, relate test failures) .process-test-results: &process-test-results @@ -53,21 +60,20 @@ rules: - if: $SKIP_OMNIBUS_TRIGGER == "true" when: never - - when: always + - if: $FOSS_ONLY != "1" -.rules:update-cache: +.rules:omnibus-build-ce: rules: - - <<: *not-canonical-project + - if: $SKIP_OMNIBUS_TRIGGER == "true" when: never - - when: always + - if: $FOSS_ONLY == "1" + +.rules:update-cache: + rules: + - if: '$UPDATE_QA_CACHE == "true"' -# This job requires project access token with api permissions to detect parallel jobs, -# it is problematic to set for every project that would include this template -# Because parallel jobs themselves can download knapsack report, skip for non canonical runs .rules:download-knapsack: rules: - - <<: *not-canonical-project - when: never - when: always # ------------------------------------------ @@ -117,7 +123,7 @@ .rules:test:ee-only: rules: - - if: $FOSS_ONLY == "true" + - if: $FOSS_ONLY == "1" when: never .rules:test:update: @@ -129,6 +135,12 @@ - !reference [.rules:test:ee-only, rules] - !reference [.rules:test:qa, rules] +.rules:test:qa-default-branch: + rules: + - *qa-run-all-e2e-label + - *default-branch + - *feature-flags-set-manual + # ------------------------------------------ # Report # ------------------------------------------ diff --git a/.gitlab/ci/package-and-test/variables.gitlab-ci.yml b/.gitlab/ci/package-and-test/variables.gitlab-ci.yml index b7c4e5519ca..0322247a89d 100644 --- a/.gitlab/ci/package-and-test/variables.gitlab-ci.yml +++ b/.gitlab/ci/package-and-test/variables.gitlab-ci.yml @@ -4,11 +4,14 @@ variables: REGISTRY_HOST: "registry.gitlab.com" REGISTRY_GROUP: "gitlab-org" SKIP_REPORT_IN_ISSUES: "true" + SKIP_OMNIBUS_TRIGGER: "true" OMNIBUS_GITLAB_CACHE_UPDATE: "false" OMNIBUS_GITLAB_RUBY3_BUILD: "false" OMNIBUS_GITLAB_RUBY2_BUILD: "false" OMNIBUS_GITLAB_CACHE_EDITION: "GITLAB" + OMNIBUS_GITLAB_BUILD_ON_ALL_OS: "false" ALLURE_JOB_NAME: $CI_PROJECT_NAME + COLORIZED_LOGS: "true" QA_LOG_LEVEL: "info" QA_TESTS: "" QA_FEATURE_FLAGS: "" diff --git a/.gitlab/ci/preflight.gitlab-ci.yml b/.gitlab/ci/preflight.gitlab-ci.yml index 8c1cb44807a..526492a75c7 100644 --- a/.gitlab/ci/preflight.gitlab-ci.yml +++ b/.gitlab/ci/preflight.gitlab-ci.yml @@ -23,7 +23,7 @@ rails-production-server-boot: - .production - .ruby-cache - .setup:rules:rails-production-server-boot - - .use-pg12 + - .use-pg13 variables: BUNDLE_WITHOUT: "development:test" BUNDLE_WITH: "production" diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index d935fecba01..6f06746c49f 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -55,7 +55,7 @@ qa:update-qa-cache: e2e:package-and-test-ee: extends: - .production # this makes sure GITLAB_ALLOW_SEPARATE_CI_DATABASE is passed to the child pipeline - - .qa:rules:package-and-test + - .qa:rules:package-and-test-ee stage: qa needs: - build-assets-image @@ -70,6 +70,8 @@ e2e:package-and-test-ee: 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 QA_RUN_TYPE: e2e-package-and-test + ALLURE_JOB_NAME: e2e-package-and-test + PIPELINE_NAME: E2E Omnibus GitLab EE inherit: variables: - CHROME_VERSION @@ -89,6 +91,34 @@ e2e:package-and-test-ee: - artifact: package-and-test-pipeline.yml job: e2e-test-pipeline-generate +e2e:package-and-test-ce: + extends: + - e2e:package-and-test-ee + - .qa:rules:package-and-test-ce + needs: + - build-assets-image as-if-foss + - build-qa-image as-if-foss + - e2e-test-pipeline-generate + variables: + FOSS_ONLY: "1" + RELEASE: ${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ce:${CI_COMMIT_SHA} + GITLAB_QA_IMAGE: ${CI_REGISTRY_IMAGE}/gitlab-ce-qa:${CI_COMMIT_SHA} + QA_RUN_TYPE: e2e-package-and-test-ce + ALLURE_JOB_NAME: e2e-package-and-test-ce + PIPELINE_NAME: E2E Omnibus GitLab CE + +e2e:package-and-test-super-sidebar: + extends: + - e2e:package-and-test-ee + - .qa:rules:package-and-test-sidebar + when: manual + variables: + QA_SUPER_SIDEBAR_ENABLED: "true" + EXTRA_GITLAB_QA_OPTS: --set-feature-flags super_sidebar_nav=enabled + QA_RUN_TYPE: e2e-package-and-test-super-sidebar + ALLURE_JOB_NAME: e2e-package-and-test-super-sidebar + PIPELINE_NAME: E2E Omnibus Super Sidebar + e2e:test-on-gdk: extends: - .qa:rules:e2e:test-on-gdk diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 95780116800..6e055d5b3ec 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -30,7 +30,6 @@ setup-test-env: - ${TMP_TEST_FOLDER}/gitaly/Makefile - ${TMP_TEST_FOLDER}/gitaly/praefect.config.toml - ${TMP_TEST_FOLDER}/gitaly/praefect-db.config.toml - - ${TMP_TEST_FOLDER}/gitaly/ruby/ - ${TMP_TEST_FOLDER}/gitlab-elasticsearch-indexer/bin/gitlab-elasticsearch-indexer - ${TMP_TEST_FOLDER}/gitlab-shell/ - ${TMP_TEST_FOLDER}/gitlab-test-fork/ @@ -67,145 +66,143 @@ update-gitaly-binaries-cache: - export BUNDLE_WITHOUT="${BUNDLE_WITHOUT}:default:test:puma:kerberos:metrics:omnibus:ed25519" - bundle_install_script -rspec migration pg12: +rspec migration pg13: extends: - - .rspec-base-pg12 + - .rspec-base-pg13 - .rspec-base-migration - .rails:rules:ee-and-foss-migration - .rspec-migration-parallel -rspec migration pg12 predictive: - extends: - - rspec migration pg12 - - .predictive-rspec-tests - - .rails:rules:ee-and-foss-migration:predictive - -rspec background_migration pg12: +rspec background_migration pg13: extends: - - .rspec-base-pg12 + - .rspec-base-pg13 - .rspec-base-migration - .rails:rules:ee-and-foss-background-migration - .rspec-background-migration-parallel -rspec background_migration pg12 predictive: - extends: - - rspec background_migration pg12 - - .predictive-rspec-tests - - .rails:rules:ee-and-foss-background-migration:predictive - -rspec migration pg12 single-db: +rspec migration pg13 single-db: extends: - - rspec migration pg12 + - rspec migration pg13 - .single-db-rspec - .rails:rules:single-db -rspec background_migration pg12 single-db: +rspec background_migration pg13 single-db: extends: - - rspec background_migration pg12 + - rspec background_migration pg13 - .single-db-rspec - .rails:rules:single-db -rspec migration pg12 single-db-ci-connection: +rspec migration pg13 single-db-ci-connection: extends: - - rspec migration pg12 + - rspec migration pg13 - .single-db-ci-connection-rspec - .rails:rules:single-db-ci-connection -rspec background_migration pg12 single-db-ci-connection: +rspec background_migration pg13 single-db-ci-connection: extends: - - rspec background_migration pg12 + - rspec background_migration pg13 - .single-db-ci-connection-rspec - .rails:rules:single-db-ci-connection -rspec migration pg12 praefect: +rspec migration pg13 praefect: extends: - - rspec migration pg12 + - rspec migration pg13 - .praefect-with-db - .rails:rules:praefect-with-db -rspec background_migration pg12 praefect: +rspec background_migration pg13 praefect: extends: - - rspec background_migration pg12 + - rspec background_migration pg13 - .praefect-with-db - .rails:rules:praefect-with-db -rspec unit pg12: +rspec unit pg13: extends: - - .rspec-base-pg12 + - .rspec-base-pg13 - .rails:rules:ee-and-foss-unit - .rspec-unit-parallel -rspec unit pg12 predictive: - extends: - - rspec unit pg12 - - .predictive-rspec-tests - - .rails:rules:ee-and-foss-unit:predictive - -rspec unit pg12 single-db: +rspec unit pg13 single-db: extends: - - rspec unit pg12 + - rspec unit pg13 - .single-db-rspec - .rails:rules:single-db -rspec unit pg12 praefect: +rspec unit pg13 single-db-ci-connection: + extends: + - rspec unit pg13 + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection + +rspec unit pg13 praefect: extends: - - rspec unit pg12 + - rspec unit pg13 - .praefect-with-db - .rails:rules:praefect-with-db -rspec integration pg12: +rspec integration pg13: extends: - - .rspec-base-pg12 + - .rspec-base-pg13 - .rails:rules:ee-and-foss-integration - .rspec-integration-parallel -rspec integration pg12 predictive: +rspec integration pg13 single-db: extends: - - rspec integration pg12 - - .predictive-rspec-tests - - .rails:rules:ee-and-foss-integration:predictive - -rspec integration pg12 single-db: - extends: - - rspec integration pg12 + - rspec integration pg13 - .single-db-rspec - .rails:rules:single-db -rspec integration pg12 praefect: +rspec integration pg13 single-db-ci-connection: + extends: + - rspec integration pg13 + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection + +rspec integration pg13 praefect: extends: - - rspec integration pg12 + - rspec integration pg13 - .praefect-with-db - .rails:rules:praefect-with-db -rspec system pg12: +rspec system pg13: extends: - - .rspec-base-pg12 + - .rspec-base-pg13 - .rails:rules:ee-and-foss-system - .rspec-system-parallel variables: DEBUG_GITLAB_TRANSACTION_STACK: "true" -rspec system pg12 predictive: +rspec system pg13 single-db: extends: - - rspec system pg12 - - .predictive-rspec-tests - - .rails:rules:ee-and-foss-system:predictive - -rspec system pg12 single-db: - extends: - - rspec system pg12 + - rspec system pg13 - .single-db-rspec - .rails:rules:single-db -rspec system pg12 praefect: +rspec system pg13 single-db-ci-connection: extends: - - rspec system pg12 + - rspec system pg13 + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection + +rspec system pg13 praefect: + extends: + - rspec system pg13 - .praefect-with-db - .rails:rules:praefect-with-db -rspec fast_spec_helper: +# Dedicated job to test DB library code against PG12. +# Note that these are already tested against PG12 in the `rspec unit pg12` / `rspec-ee unit pg12` jobs. +rspec db-library-code pg12: extends: - .rspec-base-pg12 + - .rails:rules:ee-and-foss-db-library-code + script: + - !reference [.base-script, script] + - rspec_db_library_code + +rspec fast_spec_helper: + extends: + - .rspec-base-pg13 - .rails:rules:ee-and-foss-fast_spec_helper script: - fast_spec_helper_specs=$(git grep -l -E '^require.*fast_spec_helper') @@ -240,16 +237,16 @@ rspec:deprecations: # We cannot use needs since it would mean needing 84 jobs (since most are parallelized) # so we use `dependencies` here. dependencies: - - rspec migration pg12 - - rspec background_migration pg12 - - rspec unit pg12 - - rspec integration pg12 - - rspec system pg12 - - rspec-ee migration pg12 - - rspec-ee background_migration pg12 - - rspec-ee unit pg12 - - rspec-ee integration pg12 - - rspec-ee system pg12 + - rspec migration pg13 + - rspec background_migration pg13 + - rspec unit pg13 + - rspec integration pg13 + - rspec system pg13 + - rspec-ee migration pg13 + - rspec-ee background_migration pg13 + - rspec-ee unit pg13 + - rspec-ee integration pg13 + - rspec-ee system pg13 variables: SETUP_DB: "false" script: @@ -272,59 +269,19 @@ rspec:coverage: dependencies: - setup-test-env # FOSS/EE jobs - - rspec migration pg12 - - rspec background_migration pg12 - - rspec unit pg12 - - rspec integration pg12 - - rspec system pg12 - # FOSS/EE predictive jobs - - rspec migration pg12 predictive - - rspec background_migration pg12 predictive - - rspec unit pg12 predictive - - rspec integration pg12 predictive - - rspec system pg12 predictive - # FOSS/EE single-db jobs - - rspec migration pg12 single-db - - rspec background_migration pg12 single-db - - rspec unit pg12 single-db - - rspec integration pg12 single-db - - rspec system pg12 single-db + - rspec migration pg13 + - rspec background_migration pg13 + - rspec unit pg13 + - rspec integration pg13 + - rspec system pg13 # EE jobs - - rspec-ee migration pg12 - - rspec-ee background_migration pg12 - - rspec-ee unit pg12 - - rspec-ee integration pg12 - - rspec-ee system pg12 - # EE predictive jobs - - rspec-ee migration pg12 predictive - - rspec-ee background_migration pg12 predictive - - rspec-ee unit pg12 predictive - - rspec-ee integration pg12 predictive - - rspec-ee system pg12 predictive - # EE single-db jobs - - rspec-ee migration pg12 single-db - - rspec-ee background_migration pg12 single-db - - rspec-ee unit pg12 single-db - - rspec-ee integration pg12 single-db - - rspec-ee system pg12 single-db + - rspec-ee migration pg13 + - rspec-ee background_migration pg13 + - rspec-ee unit pg13 + - rspec-ee integration pg13 + - rspec-ee system pg13 # Memory jobs - memory-on-boot - # As-if-FOSS jobs - - rspec migration pg12-as-if-foss - - rspec migration pg12-as-if-foss predictive - - rspec migration pg12-as-if-foss single-db - - rspec background_migration pg12-as-if-foss - - rspec background_migration pg12-as-if-foss predictive - - rspec background_migration pg12-as-if-foss single-db - - rspec unit pg12-as-if-foss - - rspec unit pg12-as-if-foss predictive - - rspec unit pg12-as-if-foss single-db - - rspec integration pg12-as-if-foss - - rspec integration pg12-as-if-foss predictive - - rspec integration pg12-as-if-foss single-db - - rspec system pg12-as-if-foss - - rspec system pg12-as-if-foss predictive - - rspec system pg12-as-if-foss single-db script: - run_timed_command "bundle exec scripts/merge-simplecov" coverage: '/LOC \((\d+\.\d+%)\) covered.$/' @@ -402,276 +359,335 @@ rspec:flaky-tests-report: ################################################## # EE: default refs (MRs, default branch, schedules) jobs # -rspec migration pg12-as-if-foss: +rspec-predictive:pipeline-generate: extends: - - .rspec-base-pg12-as-if-foss + - .rails:rules:rspec-predictive + stage: prepare + needs: ["detect-tests", "retrieve-tests-metadata"] + script: + - scripts/generate_rspec_pipeline.rb -t "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}" -k "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" -f "${RSPEC_MATCHING_TESTS_FOSS_PATH}" -o "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}.yml" + - scripts/generate_rspec_pipeline.rb -t "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}" -k "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" -f "${RSPEC_MATCHING_TESTS_EE_PATH}" -o "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml" -p "ee/" + - echo "Content of ${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}.yml:" + - cat "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}.yml" + - echo "\n================================================\n" + - echo "Content of ${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml:" + - cat "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml" + artifacts: + expire_in: 1 day + paths: + - "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}.yml" + - "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml" + +rspec:predictive:trigger: + extends: + - .rails:rules:rspec-predictive + stage: test + needs: + - job: "setup-test-env" + artifacts: false + - job: "retrieve-tests-metadata" + artifacts: false + - job: "compile-test-assets" + artifacts: false + - job: "rspec-predictive:pipeline-generate" + artifacts: true + variables: + PARENT_PIPELINE_ID: $CI_PIPELINE_ID + trigger: + strategy: depend + forward: + yaml_variables: true + pipeline_variables: true + include: + - artifact: "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}.yml" + job: rspec-predictive:pipeline-generate + +rspec-ee:predictive:trigger: + extends: rspec:predictive:trigger + trigger: + include: + - artifact: "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml" + job: rspec-predictive:pipeline-generate + +rspec migration pg13-as-if-foss: + extends: + - .rspec-base-pg13-as-if-foss - .rspec-base-migration - .rails:rules:as-if-foss-migration - .rspec-migration-parallel -rspec migration pg12-as-if-foss predictive: - extends: - - rspec migration pg12-as-if-foss - - .predictive-rspec-tests - - .rails:rules:as-if-foss-migration:predictive - -rspec background_migration pg12-as-if-foss: +rspec background_migration pg13-as-if-foss: extends: - - .rspec-base-pg12-as-if-foss + - .rspec-base-pg13-as-if-foss - .rspec-base-migration - .rails:rules:as-if-foss-background-migration - .rspec-background-migration-parallel -rspec background_migration pg12-as-if-foss predictive: +rspec migration pg13-as-if-foss single-db: extends: - - rspec background_migration pg12-as-if-foss - - .predictive-rspec-tests - - .rails:rules:as-if-foss-background-migration:predictive - -rspec migration pg12-as-if-foss single-db: - extends: - - rspec migration pg12-as-if-foss + - rspec migration pg13-as-if-foss - .single-db-rspec - .rails:rules:single-db -rspec background_migration pg12-as-if-foss single-db: +rspec background_migration pg13-as-if-foss single-db: extends: - - rspec background_migration pg12-as-if-foss + - rspec background_migration pg13-as-if-foss - .single-db-rspec - .rails:rules:single-db -rspec migration pg12-as-if-foss single-db-ci-connection: +rspec migration pg13-as-if-foss single-db-ci-connection: extends: - - rspec migration pg12-as-if-foss + - rspec migration pg13-as-if-foss - .single-db-ci-connection-rspec - .rails:rules:single-db-ci-connection -rspec background_migration pg12-as-if-foss single-db-ci-connection: +rspec background_migration pg13-as-if-foss single-db-ci-connection: extends: - - rspec background_migration pg12-as-if-foss + - rspec background_migration pg13-as-if-foss - .single-db-ci-connection-rspec - .rails:rules:single-db-ci-connection -rspec unit pg12-as-if-foss: +rspec unit pg13-as-if-foss: extends: - - .rspec-base-pg12-as-if-foss + - .rspec-base-pg13-as-if-foss - .rails:rules:as-if-foss-unit - .rspec-unit-parallel -rspec unit pg12-as-if-foss predictive: - extends: - - rspec unit pg12-as-if-foss - - .predictive-rspec-tests - - .rails:rules:as-if-foss-unit:predictive - -rspec unit pg12-as-if-foss single-db: +rspec unit pg13-as-if-foss single-db: extends: - - rspec unit pg12-as-if-foss + - rspec unit pg13-as-if-foss - .single-db-rspec - .rails:rules:single-db -rspec integration pg12-as-if-foss: +rspec unit pg13-as-if-foss single-db-ci-connection: extends: - - .rspec-base-pg12-as-if-foss - - .rails:rules:as-if-foss-integration - - .rspec-integration-parallel + - rspec unit pg13-as-if-foss + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection -rspec integration pg12-as-if-foss predictive: +rspec integration pg13-as-if-foss: extends: - - rspec integration pg12-as-if-foss - - .predictive-rspec-tests - - .rails:rules:as-if-foss-integration:predictive + - .rspec-base-pg13-as-if-foss + - .rails:rules:as-if-foss-integration + - .rspec-integration-parallel -rspec integration pg12-as-if-foss single-db: +rspec integration pg13-as-if-foss single-db: extends: - - rspec integration pg12-as-if-foss + - rspec integration pg13-as-if-foss - .single-db-rspec - .rails:rules:single-db -rspec system pg12-as-if-foss: +rspec integration pg13-as-if-foss single-db-ci-connection: extends: - - .rspec-base-pg12-as-if-foss - - .rails:rules:as-if-foss-system - - .rspec-system-parallel + - rspec integration pg13-as-if-foss + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection -rspec system pg12-as-if-foss predictive: +rspec system pg13-as-if-foss: extends: - - rspec system pg12-as-if-foss - - .predictive-rspec-tests - - .rails:rules:as-if-foss-system:predictive + - .rspec-base-pg13-as-if-foss + - .rails:rules:as-if-foss-system + - .rspec-system-parallel -rspec system pg12-as-if-foss single-db: +rspec system pg13-as-if-foss single-db: extends: - - rspec system pg12-as-if-foss + - rspec system pg13-as-if-foss - .single-db-rspec - .rails:rules:single-db -rspec-ee migration pg12: +rspec system pg13-as-if-foss single-db-ci-connection: extends: - - .rspec-ee-base-pg12 + - rspec system pg13-as-if-foss + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection + +rspec-ee migration pg13: + extends: + - .rspec-ee-base-pg13 - .rspec-base-migration - .rails:rules:ee-only-migration - .rspec-ee-migration-parallel -rspec-ee migration pg12 predictive: - extends: - - rspec-ee migration pg12 - - .predictive-rspec-tests - - .rails:rules:ee-only-migration:predictive - -rspec-ee background_migration pg12: +rspec-ee background_migration pg13: extends: - - .rspec-ee-base-pg12 + - .rspec-ee-base-pg13 - .rspec-base-migration - .rails:rules:ee-only-background-migration - .rspec-ee-background-migration-parallel -rspec-ee background_migration pg12 predictive: - extends: - - rspec-ee background_migration pg12 - - .predictive-rspec-tests - - .rails:rules:ee-only-background-migration:predictive - -rspec-ee migration pg12 single-db: +rspec-ee migration pg13 single-db: extends: - - rspec-ee migration pg12 + - rspec-ee migration pg13 - .single-db-rspec - .rails:rules:single-db -rspec-ee background_migration pg12 single-db: +rspec-ee background_migration pg13 single-db: extends: - - rspec-ee background_migration pg12 + - rspec-ee background_migration pg13 - .single-db-rspec - .rails:rules:single-db -rspec-ee migration pg12 single-db-ci-connection: +rspec-ee migration pg13 single-db-ci-connection: extends: - - rspec-ee migration pg12 + - rspec-ee migration pg13 - .single-db-ci-connection-rspec - .rails:rules:single-db-ci-connection -rspec-ee background_migration pg12 single-db-ci-connection: +rspec-ee background_migration pg13 single-db-ci-connection: extends: - - rspec-ee background_migration pg12 + - rspec-ee background_migration pg13 - .single-db-ci-connection-rspec - .rails:rules:single-db-ci-connection -rspec-ee migration pg12 praefect: +rspec-ee migration pg13 praefect: extends: - - rspec migration pg12 + - rspec migration pg13 - .praefect-with-db - .rails:rules:praefect-with-db -rspec-ee background_migration pg12 praefect: +rspec-ee background_migration pg13 praefect: extends: - - rspec background_migration pg12 + - rspec background_migration pg13 - .praefect-with-db - .rails:rules:praefect-with-db -rspec-ee unit pg12: +rspec-ee unit pg13: extends: - - .rspec-ee-base-pg12 + - .rspec-ee-base-pg13 - .rails:rules:ee-only-unit - .rspec-ee-unit-parallel -rspec-ee unit pg12 es8: +rspec-ee unit pg13 es8: extends: - - .rspec-ee-base-pg12-es8 + - .rspec-ee-base-pg13-es8 - .rspec-ee-unit-parallel -rspec-ee unit pg12 predictive: +rspec-ee unit pg13 single-db: extends: - - rspec-ee unit pg12 - - .predictive-rspec-tests - - .rails:rules:ee-only-unit:predictive - -rspec-ee unit pg12 single-db: - extends: - - rspec-ee unit pg12 + - rspec-ee unit pg13 - .single-db-rspec - .rails:rules:single-db -rspec-ee integration pg12: +rspec-ee unit pg13 single-db-ci-connection: extends: - - .rspec-ee-base-pg12 - - .rails:rules:ee-only-integration - - .rspec-ee-integration-parallel + - rspec-ee unit pg13 + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection -rspec-ee integration pg12 es8: +rspec-ee integration pg13: extends: - - .rspec-ee-base-pg12-es8 + - .rspec-ee-base-pg13 + - .rails:rules:ee-only-integration - .rspec-ee-integration-parallel -rspec-ee integration pg12 predictive: +rspec-ee integration pg13 es8: extends: - - rspec-ee integration pg12 - - .predictive-rspec-tests - - .rails:rules:ee-only-integration:predictive + - .rspec-ee-base-pg13-es8 + - .rspec-ee-integration-parallel -rspec-ee integration pg12 single-db: +rspec-ee integration pg13 single-db: extends: - - rspec-ee integration pg12 + - rspec-ee integration pg13 - .single-db-rspec - .rails:rules:single-db -rspec-ee system pg12: +rspec-ee integration pg13 single-db-ci-connection: extends: - - .rspec-ee-base-pg12 - - .rails:rules:ee-only-system - - .rspec-ee-system-parallel + - rspec-ee integration pg13 + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection -rspec-ee system pg12 es8: +rspec-ee system pg13: extends: - - .rspec-ee-base-pg12-es8 + - .rspec-ee-base-pg13 + - .rails:rules:ee-only-system - .rspec-ee-system-parallel -rspec-ee system pg12 predictive: +rspec-ee system pg13 es8: extends: - - rspec-ee system pg12 - - .predictive-rspec-tests - - .rails:rules:ee-only-system:predictive + - .rspec-ee-base-pg13-es8 + - .rspec-ee-system-parallel -rspec-ee system pg12 single-db: +rspec-ee system pg13 single-db: extends: - - rspec-ee system pg12 + - rspec-ee system pg13 - .single-db-rspec - .rails:rules:single-db + +rspec-ee system pg13 single-db-ci-connection: + extends: + - rspec-ee system pg13 + - .single-db-ci-connection-rspec + - .rails:rules:single-db-ci-connection # EE: default refs (MRs, default branch, schedules) jobs # ################################################## ########################################## # EE/FOSS: default branch nightly scheduled jobs # -# PG13 -rspec migration pg13: +# PG12 +rspec migration pg12: extends: - - .rspec-base-pg13 + - .rspec-base-pg12 + - .rspec-base-migration + - .rails:rules:rspec-on-pg12 + - .rspec-migration-parallel + +rspec background_migration pg12: + extends: + - .rspec-base-pg12 + - .rspec-base-migration + - .rails:rules:rspec-on-pg12 + - .rspec-background-migration-parallel + +rspec unit pg12: + extends: + - .rspec-base-pg12 + - .rails:rules:rspec-on-pg12 + - .rspec-unit-parallel + +rspec integration pg12: + extends: + - .rspec-base-pg12 + - .rails:rules:rspec-on-pg12 + - .rspec-integration-parallel + +rspec system pg12: + extends: + - .rspec-base-pg12 + - .rails:rules:rspec-on-pg12 + - .rspec-system-parallel + +# PG14 +rspec migration pg14: + extends: + - .rspec-base-pg14 - .rspec-base-migration - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-migration-parallel -rspec background_migration pg13: +rspec background_migration pg14: extends: - - .rspec-base-pg13 + - .rspec-base-pg14 - .rspec-base-migration - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-background-migration-parallel -rspec unit pg13: +rspec unit pg14: extends: - - .rspec-base-pg13 + - .rspec-base-pg14 - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-unit-parallel -rspec integration pg13: +rspec integration pg14: extends: - - .rspec-base-pg13 + - .rspec-base-pg14 - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-integration-parallel -rspec system pg13: +rspec system pg14: extends: - - .rspec-base-pg13 + - .rspec-base-pg14 - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-system-parallel # EE/FOSS: default branch nightly scheduled jobs # @@ -681,68 +697,152 @@ rspec system pg13: # EE: default branch nightly scheduled jobs # # PG12 -rspec-ee unit pg12 opensearch1: +rspec-ee migration pg12: extends: - - .rspec-ee-base-pg12-opensearch1 + - .rspec-ee-base-pg12 + - .rspec-base-migration + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-migration-parallel + +rspec-ee background_migration pg12: + extends: + - .rspec-ee-base-pg12 + - .rspec-base-migration + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-background-migration-parallel + +rspec-ee unit pg12: + extends: + - .rspec-ee-base-pg12 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-unit-parallel -rspec-ee unit pg12 opensearch2: +rspec-ee integration pg12: extends: - - .rspec-ee-base-pg12-opensearch2 + - .rspec-ee-base-pg12 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-integration-parallel + +rspec-ee system pg12: + extends: + - .rspec-ee-base-pg12 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-system-parallel + +# PG13 +rspec-ee unit pg13 opensearch1: + extends: + - .rspec-ee-base-pg13-opensearch1 + - .rspec-ee-unit-parallel + +rspec-ee unit pg13 opensearch2: + extends: + - .rspec-ee-base-pg13-opensearch2 - .rspec-ee-unit-parallel -rspec-ee integration pg12 opensearch1: +rspec-ee integration pg13 opensearch1: extends: - - .rspec-ee-base-pg12-opensearch1 + - .rspec-ee-base-pg13-opensearch1 - .rspec-ee-integration-parallel -rspec-ee integration pg12 opensearch2: +rspec-ee integration pg13 opensearch2: extends: - - .rspec-ee-base-pg12-opensearch2 + - .rspec-ee-base-pg13-opensearch2 - .rspec-ee-integration-parallel -rspec-ee system pg12 opensearch1: +rspec-ee system pg13 opensearch1: extends: - - .rspec-ee-base-pg12-opensearch1 + - .rspec-ee-base-pg13-opensearch1 - .rspec-ee-system-parallel -rspec-ee system pg12 opensearch2: +rspec-ee system pg13 opensearch2: extends: - - .rspec-ee-base-pg12-opensearch2 + - .rspec-ee-base-pg13-opensearch2 - .rspec-ee-system-parallel -# PG13 -rspec-ee migration pg13: +# PG14 +rspec-ee unit pg14 opensearch1: extends: - - .rspec-ee-base-pg13 + - .rspec-ee-base-pg14-opensearch1 + - .rspec-ee-unit-parallel + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + +rspec-ee unit pg14 opensearch2: + extends: + - .rspec-ee-base-pg14-opensearch2 + - .rspec-ee-unit-parallel + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + +rspec-ee integration pg14 opensearch1: + extends: + - .rspec-ee-base-pg14-opensearch1 + - .rspec-ee-integration-parallel + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + +rspec-ee integration pg14 opensearch2: + extends: + - .rspec-ee-base-pg14-opensearch2 + - .rspec-ee-integration-parallel + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + +rspec-ee system pg14 opensearch1: + extends: + - .rspec-ee-base-pg14-opensearch1 + - .rspec-ee-system-parallel + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + +rspec-ee system pg14 opensearch2: + extends: + - .rspec-ee-base-pg14-opensearch2 + - .rspec-ee-system-parallel + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + +rspec-ee migration pg14: + extends: + - .rspec-ee-base-pg14 - .rspec-base-migration - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-migration-parallel -rspec-ee background_migration pg13: +rspec-ee background_migration pg14: extends: - - .rspec-ee-base-pg13 + - .rspec-ee-base-pg14 - .rspec-base-migration - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-background-migration-parallel -rspec-ee unit pg13: +rspec-ee unit pg14: extends: - - .rspec-ee-base-pg13 + - .rspec-ee-base-pg14 - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-unit-parallel -rspec-ee integration pg13: +rspec-ee unit pg14 es8: extends: - - .rspec-ee-base-pg13 + - .rspec-ee-base-pg14-es8 + - .rspec-ee-unit-parallel + +rspec-ee integration pg14: + extends: + - .rspec-ee-base-pg14 - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-integration-parallel -rspec-ee system pg13: +rspec-ee integration pg14 es8: extends: - - .rspec-ee-base-pg13 + - .rspec-ee-base-pg14-es8 + - .rspec-ee-integration-parallel + +rspec-ee system pg14: + extends: + - .rspec-ee-base-pg14 - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-system-parallel + +rspec-ee system pg14 es8: + extends: + - .rspec-ee-base-pg14-es8 + - .rspec-ee-system-parallel # EE: default branch nightly scheduled jobs # ##################################### @@ -759,15 +859,15 @@ rspec-ee system pg13: rspec fail-fast: extends: - - .rspec-base-pg12 - - .rspec-fail-fast # extends from .rspec-fail-fast last to override script from .rspec-base-pg12 + - .rspec-base-pg13 + - .rspec-fail-fast # extends from .rspec-fail-fast last to override script from .rspec-base-pg13 variables: MATCHING_TESTS_PATH: "${RSPEC_MATCHING_TESTS_FOSS_PATH}" rspec-ee fail-fast: extends: - - .rspec-ee-base-pg12 - - .rspec-fail-fast # extends from .rspec-fail-fast last to override script from .rspec-ee-base-pg12 + - .rspec-ee-base-pg13 + - .rspec-fail-fast # extends from .rspec-fail-fast last to override script from .rspec-ee-base-pg13 variables: MATCHING_TESTS_PATH: "${RSPEC_MATCHING_TESTS_EE_PATH}" @@ -823,7 +923,7 @@ fail-pipeline-early: script: - fail_pipeline_early -.base-rspec-pg12-rerun-previous-failed-tests: +.base-rspec-pg13-rerun-previous-failed-tests: extends: - .rails:rules:rerun-previous-failed-tests stage: test @@ -832,17 +932,17 @@ fail-pipeline-early: - !reference [.base-script, script] - rspec_rerun_previous_failed_tests "${PREVIOUS_FAILED_TESTS_FILE}" -rspec rspec-pg12-rerun-previous-failed-tests: +rspec rspec-pg13-rerun-previous-failed-tests: extends: - - .rspec-base-pg12 - - .base-rspec-pg12-rerun-previous-failed-tests + - .rspec-base-pg13 + - .base-rspec-pg13-rerun-previous-failed-tests variables: PREVIOUS_FAILED_TESTS_FILE: tmp/previous_failed_tests/rspec_failed_tests.txt -rspec rspec-ee-pg12-rerun-previous-failed-tests: +rspec rspec-ee-pg13-rerun-previous-failed-tests: extends: - - .rspec-ee-base-pg12 - - .base-rspec-pg12-rerun-previous-failed-tests + - .rspec-ee-base-pg13 + - .base-rspec-pg13-rerun-previous-failed-tests variables: PREVIOUS_FAILED_TESTS_FILE: tmp/previous_failed_tests/rspec_ee_failed_files.txt # EE: Canonical MR pipelines diff --git a/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb b/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb index 02b7d61a4fa..e7a1ee6022f 100644 --- a/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb +++ b/.gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb @@ -1,4 +1,4 @@ -# RSpec FOSS impact pipeline loaded dynamically by script: scripts/generate-rspec-foss-impact-pipeline +# RSpec FOSS impact pipeline loaded dynamically by script: scripts/generate_rspec_pipeline.rb include: - local: .gitlab/ci/rails/shared.gitlab-ci.yml @@ -22,7 +22,7 @@ dont-interrupt-me: - echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible." .base-rspec-foss-impact: - extends: .rspec-base-pg12-as-if-foss + extends: .rspec-base-pg13-as-if-foss needs: - pipeline: $PARENT_PIPELINE_ID job: detect-tests diff --git a/.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb b/.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb new file mode 100644 index 00000000000..fcd8754c76a --- /dev/null +++ b/.gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb @@ -0,0 +1,153 @@ +# RSpec preditive pipeline loaded dynamically by script: scripts/generate_rspec_pipeline.rb + +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." + +.base-predictive: + 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 + rules: + - when: always + variables: + RSPEC_TESTS_MAPPING_ENABLED: "true" + +<% if test_suite_prefix.nil? %> +.base-rspec-predictive: + extends: + - .rspec-base-pg12 + - .base-predictive + variables: + # We're using the FOSS one here because we want to exclude EE-only ones + # For EE-only ones, we have EE-only jobs. + RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_FOSS_PATH}" + +<% if rspec_files_per_test_level.dig(:migration, :files).size > 0 %> +rspec migration predictive: + extends: + - .base-rspec-predictive + - .rspec-base-migration +<% if rspec_files_per_test_level.dig(:migration, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:migration, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:background_migration, :files).size > 0 %> +rspec background_migration predictive: + extends: + - .base-rspec-predictive + - .rspec-base-migration +<% if rspec_files_per_test_level.dig(:background_migration, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:background_migration, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:unit, :files).size > 0 %> +rspec unit predictive: + extends: + - .base-rspec-predictive +<% if rspec_files_per_test_level.dig(:unit, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:unit, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:integration, :files).size > 0 %> +rspec integration predictive: + extends: + - .base-rspec-predictive +<% if rspec_files_per_test_level.dig(:integration, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:integration, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:system, :files).size > 0 %> +rspec system predictive: + extends: + - .base-rspec-predictive +<% if rspec_files_per_test_level.dig(:system, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:system, :parallelization) %> +<% end %> +<% end %> + +<% end %> + +<% if test_suite_prefix == 'ee/' %> +.base-rspec-ee-predictive: + extends: + - .rspec-ee-base-pg12 + - .base-predictive + variables: + RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_EE_PATH}" + +<% if rspec_files_per_test_level.dig(:migration, :files).size > 0 %> +rspec-ee migration predictive: + extends: + - .base-rspec-ee-predictive + - .rspec-base-migration +<% if rspec_files_per_test_level.dig(:migration, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:migration, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:background_migration, :files).size > 0 %> +rspec-ee background_migration predictive: + extends: + - .base-rspec-ee-predictive + - .rspec-base-migration +<% if rspec_files_per_test_level.dig(:background_migration, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:background_migration, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:unit, :files).size > 0 %> +rspec-ee unit predictive: + extends: + - .base-rspec-ee-predictive +<% if rspec_files_per_test_level.dig(:unit, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:unit, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:integration, :files).size > 0 %> +rspec-ee integration predictive: + extends: + - .base-rspec-ee-predictive +<% if rspec_files_per_test_level.dig(:integration, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:integration, :parallelization) %> +<% end %> +<% end %> + +<% if rspec_files_per_test_level.dig(:system, :files).size > 0 %> +rspec-ee system predictive: + extends: + - .base-rspec-ee-predictive +<% if rspec_files_per_test_level.dig(:system, :parallelization) > 1 %> + parallel: <%= rspec_files_per_test_level.dig(:system, :parallelization) %> +<% end %> +<% end %> + +<% end %> diff --git a/.gitlab/ci/rails/shared.gitlab-ci.yml b/.gitlab/ci/rails/shared.gitlab-ci.yml index 0fa65b0be90..adcfcd2010f 100644 --- a/.gitlab/ci/rails/shared.gitlab-ci.yml +++ b/.gitlab/ci/rails/shared.gitlab-ci.yml @@ -28,10 +28,6 @@ include: - 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" -.predictive-rspec-tests: - variables: - RSPEC_TESTS_MAPPING_ENABLED: "true" - .single-db: variables: DECOMPOSED_DB: "false" @@ -61,7 +57,6 @@ include: RUBY_GC_MALLOC_LIMIT_MAX: 134217728 RECORD_DEPRECATIONS: "true" GEO_SECONDARY_PROXY: 0 - RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_PATH}" SUCCESSFULLY_RETRIED_TEST_EXIT_CODE: 137 needs: - job: "setup-test-env" @@ -105,11 +100,16 @@ include: - .rspec-base - .use-pg12 -.rspec-base-pg12-as-if-foss: +.rspec-base-pg13: + extends: + - .rspec-base + - .use-pg13 + +.rspec-base-pg13-as-if-foss: extends: - .rspec-base - .as-if-foss - - .use-pg12 + - .use-pg13 needs: - job: "setup-test-env" - job: "retrieve-tests-metadata" @@ -117,44 +117,67 @@ include: - job: "detect-tests" optional: true -.rspec-base-pg13: +.rspec-base-pg14: extends: - .rspec-base - - .use-pg13 + - .use-pg14 .rspec-ee-base-pg12: extends: - .rspec-base - .use-pg12-es7-ee -.rspec-ee-base-pg12-es8: +.rspec-ee-base-pg13: + extends: + - .rspec-base + - .use-pg13-es7-ee + +.rspec-ee-base-pg13-es8: extends: - .rspec-base - - .use-pg12-es8-ee + - .use-pg13-es8-ee - .rails:rules:run-search-tests -.rspec-ee-base-pg12-opensearch1: +.rspec-ee-base-pg13-opensearch1: extends: - .rspec-base - - .use-pg12-opensearch1-ee + - .use-pg13-opensearch1-ee - .rails:rules:run-search-tests -.rspec-ee-base-pg12-opensearch2: +.rspec-ee-base-pg13-opensearch2: extends: - .rspec-base - - .use-pg12-opensearch2-ee + - .use-pg13-opensearch2-ee - .rails:rules:run-search-tests -.rspec-ee-base-pg13: +.rspec-ee-base-pg14: extends: - .rspec-base - - .use-pg13-es7-ee + - .use-pg14-es7-ee + +.rspec-ee-base-pg14-es8: + extends: + - .rspec-base + - .use-pg14-es8-ee + - .rails:rules:run-search-tests + +.rspec-ee-base-pg14-opensearch1: + extends: + - .rspec-base + - .use-pg14-opensearch1-ee + - .rails:rules:run-search-tests + +.rspec-ee-base-pg14-opensearch2: + extends: + - .rspec-base + - .use-pg14-opensearch2-ee + - .rails:rules:run-search-tests .db-job-base: extends: - .rails-job-base - .rails:rules:ee-and-foss-migration - - .use-pg12 + - .use-pg13 stage: test needs: ["setup-test-env"] # rspec job base specs diff --git a/.gitlab/ci/review-apps/dast.gitlab-ci.yml b/.gitlab/ci/review-apps/dast.gitlab-ci.yml index 8f0c6b60190..d3019577ab4 100644 --- a/.gitlab/ci/review-apps/dast.gitlab-ci.yml +++ b/.gitlab/ci/review-apps/dast.gitlab-ci.yml @@ -5,14 +5,14 @@ extends: - .reports:rules:schedule-dast image: - name: "${REGISTRY_HOST}/security-products/dast:$DAST_VERSION" + name: "${CI_TEMPLATE_REGISTRY_HOST}/security-products/dast:$DAST_VERSION" resource_group: dast_scan variables: - DAST_USERNAME_FIELD: "user[login]" - DAST_PASSWORD_FIELD: "user[password]" - DAST_SUBMIT_FIELD: "name:button" + DAST_USERNAME_FIELD: "name:user[login]" + DAST_PASSWORD_FIELD: "name:user[password]" + DAST_SUBMIT_FIELD: "css:.js-sign-in-button" DAST_FULL_SCAN_ENABLED: "true" - DAST_VERSION: 2 + DAST_VERSION: 3 GIT_STRATEGY: none # -Xmx is used to set the JVM memory to 6GB to prevent DAST OutOfMemoryError. DAST_ZAP_CLI_OPTIONS: "-Xmx6144m" diff --git a/.gitlab/ci/review-apps/main.gitlab-ci.yml b/.gitlab/ci/review-apps/main.gitlab-ci.yml index 6bd7542bcde..94492e93b75 100644 --- a/.gitlab/ci/review-apps/main.gitlab-ci.yml +++ b/.gitlab/ci/review-apps/main.gitlab-ci.yml @@ -4,6 +4,7 @@ default: stages: - prepare - deploy + - post-deploy - qa - post-qa - dast @@ -89,9 +90,9 @@ review-build-cng: strategy: depend .review-workflow-base: + extends: + - .default-retry image: ${REVIEW_APPS_IMAGE} - retry: - max: 2 # This is confusing but this means "3 runs at max" variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" diff --git a/.gitlab/ci/review-apps/qa.gitlab-ci.yml b/.gitlab/ci/review-apps/qa.gitlab-ci.yml index 12a7ddebc45..13623a576d5 100644 --- a/.gitlab/ci/review-apps/qa.gitlab-ci.yml +++ b/.gitlab/ci/review-apps/qa.gitlab-ci.yml @@ -1,10 +1,11 @@ include: - project: gitlab-org/quality/pipeline-common - ref: 2.2.0 + ref: 3.1.2 file: - /ci/base.gitlab-ci.yml - /ci/allure-report.yml - /ci/knapsack-report.yml + - template: Verify/Browser-Performance.gitlab-ci.yml .test-variables: variables: @@ -107,31 +108,14 @@ review-qa-non-blocking-parallel: - .rules:qa-non-blocking-parallel parallel: 5 -review-performance: +browser_performance: extends: - .default-retry - .review:rules:review-performance - image: - name: sitespeedio/sitespeed.io - entrypoint: [""] stage: qa needs: ["review-deploy"] - before_script: - - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" - - echo "${CI_ENVIRONMENT_URL}" - - mkdir -p gitlab-exporter - - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js - - mkdir -p sitespeed-results - script: - - /start.sh --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "${CI_ENVIRONMENT_URL}" - after_script: - - mv sitespeed-results/data/performance.json performance.json - artifacts: - paths: - - sitespeed-results/ - reports: - performance: performance.json - expire_in: 31d + variables: + URL: environment_url.txt e2e-test-report: extends: diff --git a/.gitlab/ci/review-apps/rules.gitlab-ci.yml b/.gitlab/ci/review-apps/rules.gitlab-ci.yml index a3ae31cb14c..a4b667c6645 100644 --- a/.gitlab/ci/review-apps/rules.gitlab-ci.yml +++ b/.gitlab/ci/review-apps/rules.gitlab-ci.yml @@ -20,7 +20,7 @@ # Run all tests when framework changes present or explicitly enabled full suite execution .qa-run-all-tests: &qa-run-all-tests - if: $QA_FRAMEWORK_CHANGES == "true" || $QA_RUN_ALL_TESTS == "true" + if: $QA_FRAMEWORK_CHANGES == "true" || $QA_RUN_ALL_TESTS == "true" || $QA_RUN_ALL_E2E_LABEL == "true" .default-branch: &default-branch if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index f0e87e0161a..6d38c651985 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -16,7 +16,7 @@ review-cleanup: - install_gitlab_gem - setup_gcloud script: - - scripts/review_apps/automated_cleanup.rb || (scripts/slack review-apps-monitoring "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL} - <https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/blob/main/runbooks/review-apps.md#review-cleanup-job-failed|📗 RUNBOOK 📕>" warning "GitLab Bot" && exit 1); + - scripts/review_apps/automated_cleanup.rb --dry-run="${DRY_RUN:-false}" || (scripts/slack review-apps-monitoring "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL} - <https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/blob/main/runbooks/review-apps.md#review-cleanup-job-failed|📗 RUNBOOK 📕>" warning "GitLab Bot" && exit 1); review-stop: extends: diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index f4ca7c9b647..13189f88124 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -85,6 +85,9 @@ .if-merge-request-labels-run-review-app: &if-merge-request-labels-run-review-app if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-review-app/' +.if-merge-request-labels-run-on-pg12: &if-merge-request-labels-run-on-pg12 + if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-on-pg12/' + .if-merge-request-labels-skip-undercoverage: &if-merge-request-labels-skip-undercoverage if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:skip-undercoverage/' @@ -154,12 +157,6 @@ .if-ruby2-branch: &if-ruby2-branch if: '$CI_COMMIT_BRANCH == "ruby2"' -# 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. -.if-security-pipeline-merge-result: &if-security-pipeline-merge-result - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH && $CI_PROJECT_NAMESPACE == "gitlab-org/security" && $GITLAB_USER_LOGIN == "gitlab-release-tools-bot"' - #################### # Changes patterns # #################### @@ -280,6 +277,7 @@ # This list should match the list in Tasks::Gitlab::Assets.assets_impacting_compilation .assets-compilation-patterns: &assets-compilation-patterns - "{package.json,yarn.lock}" + - "{Gemfile,Gemfile.lock}" - ".browserslistrc" - "babel.config.js" - "config/webpack.config.js" @@ -424,7 +422,7 @@ - ".stylelintrc" - "Dockerfile.assets" - "vendor/assets/**/*" - - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" + - ".{eslintrc.yml,eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - "*_VERSION" - "{,jh/}Gemfile{,.lock}" - "Rakefile" @@ -595,7 +593,6 @@ ################## # Conditions set # ################## - .strict-ee-only-rules: rules: - <<: *if-not-ee @@ -612,15 +609,6 @@ - <<: *if-merge-request-labels-pipeline-expedite when: never -.rails:rules:predictive-default-rules: - rules: - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - .rails:rules:run-search-tests: rules: - !reference [".rails:rules:default-branch-schedule-nightly--code-backstage-ee-only", rules] @@ -641,6 +629,40 @@ - <<: *if-merge-request-not-approved when: never +.rails:rules:system-default-rules: + rules: + - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request + changes: *core-backend-patterns + - <<: *if-merge-request + changes: *workhorse-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:previous-failed-tests-default-rules: + rules: + - <<: *if-security-merge-request + when: never + - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request + changes: *code-backstage-patterns + +########################### +# Conditions set for JiHu # +########################### +.rails:rules:predictive-default-rules: + rules: + - <<: *if-merge-request-approved + when: never + - <<: *if-automated-merge-request + when: never + - <<: *if-security-merge-request + when: never + .rails:rules:as-if-foss-migration-unit-integration:predictive-default-rules: rules: - <<: *if-merge-request @@ -656,43 +678,115 @@ when: never - !reference [".rails:rules:as-if-foss-migration-unit-integration:predictive-default-rules", rules] -.rails:rules:system-default-rules: +.rails:rules:system:predictive-default-rules: rules: - <<: *if-merge-request-labels-run-all-rspec + when: never - <<: *if-merge-request changes: *core-backend-patterns + when: never - <<: *if-merge-request changes: *workhorse-patterns - - <<: *if-automated-merge-request - changes: *code-backstage-patterns - - <<: *if-security-merge-request - changes: *code-backstage-patterns - - <<: *if-merge-request-not-approved when: never + - <<: *if-merge-request + changes: *ci-patterns + when: never + - <<: *if-merge-request + changes: *code-backstage-patterns -.rails:rules:system:predictive-default-rules: +.rails:rules:ee-and-foss-migration:predictive: rules: - - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-fork-merge-request + changes: *db-patterns + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] + # 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 + changes: *db-patterns when: never + +.rails:rules:ee-and-foss-background-migration:predictive: + rules: + - !reference [".rails:rules:ee-and-foss-migration:predictive", rules] - <<: *if-merge-request - changes: *core-backend-patterns + changes: *backend-patterns + +.rails:rules:ee-and-foss-unit:predictive: + rules: + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] + - <<: *if-merge-request + changes: *backend-patterns + - <<: *if-merge-request + changes: *backstage-patterns + +.rails:rules:ee-and-foss-integration:predictive: + rules: + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] + - <<: *if-merge-request + changes: *backend-patterns + +.rails:rules:ee-and-foss-system:predictive: + rules: + - <<: *if-fork-merge-request + changes: *code-backstage-patterns + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:system:predictive-default-rules", rules] + +.rails:rules:ee-only-migration:predictive: + rules: + - <<: *if-not-ee when: never + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] + # 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 - changes: *workhorse-patterns + changes: *db-patterns when: never + +.rails:rules:ee-only-background-migration:predictive: + rules: + - !reference [".rails:rules:ee-only-migration:predictive", rules] - <<: *if-merge-request - changes: *ci-patterns + changes: *backend-patterns + +.rails:rules:ee-only-unit:predictive: + rules: + - <<: *if-not-ee when: never + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - <<: *if-merge-request - changes: *code-backstage-patterns + changes: *backend-patterns -.rails:rules:previous-failed-tests-default-rules: +.rails:rules:ee-only-integration:predictive: rules: - - <<: *if-security-merge-request + - <<: *if-not-ee when: never - - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - <<: *if-merge-request + changes: *backend-patterns + +.rails:rules:ee-only-system:predictive: + rules: + - <<: *if-not-ee + when: never + - <<: *if-fork-merge-request changes: *code-backstage-patterns + - !reference [".rails:rules:predictive-default-rules", rules] + - !reference [".rails:rules:system:predictive-default-rules", rules] ################ # Shared rules # @@ -766,13 +860,35 @@ - <<: *if-not-canonical-namespace when: never - <<: *if-merge-request-targeting-stable-branch + - <<: *if-ruby2-branch - <<: *if-merge-request-labels-run-review-app + - <<: *if-merge-request-labels-run-all-e2e - <<: *if-auto-deploy-branches - - <<: *if-ruby2-branch - <<: *if-default-refs changes: *ci-build-images-patterns - <<: *if-default-refs changes: *code-qa-patterns + # Rules to support .qa:rules:package-and-test-mrs + - <<: *if-merge-request + changes: *dependency-patterns + - <<: *if-merge-request-labels-run-all-e2e + - <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e + changes: *feature-flag-development-config-patterns + - <<: *if-merge-request + changes: *feature-flag-development-config-patterns + - <<: *if-merge-request + changes: *nodejs-patterns + - <<: *if-merge-request + changes: *ci-qa-patterns + - <<: *if-force-ci + +.build-images:rules:build-assets-image-as-if-foss: + rules: + - <<: *if-not-ee + when: never + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - !reference [".build-images:rules:build-assets-image", "rules"] ################# # Caching rules # @@ -833,14 +949,6 @@ - changes: - scripts/lint_templates_bash.rb -################## -# Delivery rules # -################## -.delivery:rules:security-pipeline-merge-result-failure: - rules: - - <<: *if-security-pipeline-merge-result - when: on_failure - ###################### # Dev fixtures rules # ###################### @@ -940,6 +1048,7 @@ when: never - <<: *if-merge-request-targeting-stable-branch - <<: *if-merge-request-labels-run-review-app + - <<: *if-merge-request-labels-run-all-e2e - <<: *if-auto-deploy-branches - <<: *if-ruby2-branch - <<: *if-default-refs @@ -949,6 +1058,16 @@ - <<: *if-default-refs changes: *workhorse-patterns +.frontend:rules:compile-production-assets-as-if-foss: + rules: + - <<: *if-not-canonical-namespace + when: never + - <<: *if-not-ee + when: never + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - !reference [.frontend:rules:compile-production-assets, rules] + .frontend:rules:compile-test-assets: rules: - <<: *if-merge-request-labels-run-all-rspec @@ -1122,15 +1241,6 @@ ########## # Notify # ########## -.notify:rules:notify-pipeline-failure: - rules: - # 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 - .notify:rules:create-issues-for-failing-tests: rules: # Don't report child pipeline failures @@ -1196,7 +1306,7 @@ allow_failure: true - <<: *if-ruby2-branch -.qa:rules:package-and-test-mrs: +.qa:rules:package-and-test-common: rules: - <<: *if-not-canonical-namespace when: never @@ -1208,31 +1318,45 @@ allow_failure: true - <<: *if-ruby2-branch allow_failure: true + - <<: *if-merge-request + changes: *dependency-patterns + allow_failure: true + variables: + OMNIBUS_GITLAB_BUILD_ON_ALL_OS: 'true' - <<: *if-merge-request-labels-run-all-e2e 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 allow_failure: true - - <<: *if-dot-com-gitlab-org-and-security-merge-request + - <<: *if-merge-request changes: *feature-flag-development-config-patterns allow_failure: true - - <<: *if-dot-com-gitlab-org-and-security-merge-request + - <<: *if-merge-request changes: *initializers-patterns allow_failure: true - - <<: *if-dot-com-gitlab-org-and-security-merge-request + - <<: *if-merge-request changes: *nodejs-patterns allow_failure: true - - <<: *if-dot-com-gitlab-org-and-security-merge-request + - <<: *if-merge-request changes: *ci-qa-patterns allow_failure: true - - <<: *if-dot-com-gitlab-org-and-security-merge-request + - <<: *if-merge-request + changes: + - qa/Gemfile.lock # qa/Gemfile.lock is a part of *qa-patterns, so this rule must be placed before the one with *qa-patterns changes + variables: + UPDATE_QA_CACHE: "true" + - <<: *if-merge-request changes: *qa-patterns allow_failure: true - <<: *if-dot-com-gitlab-org-and-security-merge-request-and-qa-tests-specified changes: *code-patterns allow_failure: true - - <<: *if-dot-com-gitlab-org-and-security-merge-request + +.qa:rules:package-and-test-mrs: + rules: + - !reference [".qa:rules:package-and-test-common", rules] + - <<: *if-merge-request changes: *code-patterns when: manual allow_failure: true @@ -1240,7 +1364,7 @@ when: manual allow_failure: true -.qa:rules:package-and-test: +.qa:rules:package-and-test-ee: rules: - !reference [".qa:rules:package-and-test-mrs", rules] - <<: *if-dot-com-gitlab-org-schedule @@ -1249,14 +1373,51 @@ SKIP_REPORT_IN_ISSUES: "false" PROCESS_TEST_RESULTS: "true" KNAPSACK_GENERATE_REPORT: "true" + UPDATE_QA_CACHE: "true" QA_SAVE_TEST_METRICS: "true" QA_EXPORT_TEST_METRICS: "false" # on main runs, metrics are exported to separate bucket via rake task for better consistency +.qa:rules:package-and-test-ce: + rules: + - <<: *if-not-canonical-namespace + when: never + - <<: *if-not-ee + when: never + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - <<: *if-dot-com-gitlab-org-and-security-merge-request + changes: *ci-build-images-patterns + when: manual + allow_failure: true + - <<: *if-dot-com-gitlab-org-and-security-merge-request + changes: *code-qa-patterns + when: manual + allow_failure: true + .qa:rules:e2e:test-on-gdk: rules: - if: '$QA_RUN_TESTS_ON_GDK !~ /true|yes|1/i' when: never - - !reference [".qa:rules:package-and-test", rules] + - !reference [".qa:rules:package-and-test-common", rules] + - <<: *if-merge-request + changes: *code-patterns + allow_failure: true + - <<: *if-force-ci + when: manual + allow_failure: true + +.qa:rules:package-and-test-sidebar: + rules: + - !reference [".qa:rules:package-and-test-mrs", rules] + - <<: *if-dot-com-gitlab-org-schedule + allow_failure: true + variables: + SKIP_REPORT_IN_ISSUES: "true" + PROCESS_TEST_RESULTS: "false" + KNAPSACK_GENERATE_REPORT: "false" + UPDATE_QA_CACHE: "false" + QA_SAVE_TEST_METRICS: "true" + QA_EXPORT_TEST_METRICS: "false" # on main runs, metrics are exported to separate bucket via rake task for better consistency ############### # Rails rules # @@ -1341,17 +1502,18 @@ - <<: *if-default-refs changes: *db-patterns -.rails:rules:ee-and-foss-migration:predictive: +.rails:rules:rspec-predictive: rules: - - <<: *if-fork-merge-request - changes: *db-patterns - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - # 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 - changes: *db-patterns + - <<: *if-merge-request-approved + when: never + - <<: *if-automated-merge-request + when: never + - <<: *if-security-merge-request when: never + - <<: *if-merge-request-labels-run-all-rspec + when: never + - <<: *if-merge-request + changes: *code-backstage-patterns .rails:rules:ee-and-foss-background-migration: rules: @@ -1359,12 +1521,6 @@ - <<: *if-default-refs changes: *backend-patterns -.rails:rules:ee-and-foss-background-migration:predictive: - rules: - - !reference [".rails:rules:ee-and-foss-migration:predictive", rules] - - <<: *if-merge-request - changes: *backend-patterns - .rails:rules:ee-and-foss-mr-with-migration: rules: - <<: *if-merge-request @@ -1389,17 +1545,6 @@ - <<: *if-default-refs changes: *backstage-patterns -.rails:rules:ee-and-foss-unit:predictive: - rules: - - <<: *if-fork-merge-request - changes: *backend-patterns - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - - <<: *if-merge-request - changes: *backend-patterns - - <<: *if-merge-request - changes: *backstage-patterns - .rails:rules:ee-and-foss-integration: rules: - <<: *if-fork-merge-request @@ -1408,15 +1553,6 @@ - <<: *if-default-refs changes: *backend-patterns -.rails:rules:ee-and-foss-integration:predictive: - rules: - - <<: *if-fork-merge-request - changes: *backend-patterns - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - - <<: *if-merge-request - changes: *backend-patterns - .rails:rules:ee-and-foss-system: rules: - <<: *if-fork-merge-request @@ -1425,13 +1561,6 @@ - <<: *if-default-refs changes: *code-backstage-patterns -.rails:rules:ee-and-foss-system:predictive: - rules: - - <<: *if-fork-merge-request - changes: *code-backstage-patterns - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:system:predictive-default-rules", rules] - .rails:rules:ee-and-foss-fast_spec_helper: rules: - <<: *if-merge-request-labels-run-all-rspec @@ -1466,30 +1595,12 @@ - <<: *if-default-refs changes: *db-patterns -.rails:rules:ee-only-migration:predictive: - rules: - - <<: *if-not-ee - when: never - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - # 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 - changes: *db-patterns - when: never - .rails:rules:ee-only-background-migration: rules: - !reference [".rails:rules:ee-only-migration", rules] - <<: *if-default-refs changes: *backend-patterns -.rails:rules:ee-only-background-migration:predictive: - rules: - - !reference [".rails:rules:ee-only-migration:predictive", rules] - - <<: *if-merge-request - changes: *backend-patterns - .rails:rules:ee-only-unit: rules: - <<: *if-not-ee @@ -1500,17 +1611,6 @@ - <<: *if-default-refs changes: *backend-patterns -.rails:rules:ee-only-unit:predictive: - rules: - - <<: *if-not-ee - when: never - - <<: *if-fork-merge-request - changes: *backend-patterns - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - - <<: *if-merge-request - changes: *backend-patterns - .rails:rules:ee-only-integration: rules: - <<: *if-not-ee @@ -1521,17 +1621,6 @@ - <<: *if-default-refs changes: *backend-patterns -.rails:rules:ee-only-integration:predictive: - rules: - - <<: *if-not-ee - when: never - - <<: *if-fork-merge-request - changes: *backend-patterns - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:unit-integration:predictive-default-rules", rules] - - <<: *if-merge-request - changes: *backend-patterns - .rails:rules:ee-only-system: rules: - <<: *if-not-ee @@ -1542,15 +1631,6 @@ - <<: *if-default-refs changes: *code-backstage-patterns -.rails:rules:ee-only-system:predictive: - rules: - - <<: *if-not-ee - when: never - - <<: *if-fork-merge-request - changes: *code-backstage-patterns - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:system:predictive-default-rules", rules] - .rails:rules:as-if-foss-migration: rules: - <<: *if-not-ee @@ -1569,30 +1649,12 @@ - <<: *if-merge-request-not-approved when: never -.rails:rules:as-if-foss-migration:predictive: - rules: - - <<: *if-not-ee - when: never - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:as-if-foss-migration-unit-integration:predictive-default-rules", rules] - # 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 - changes: *db-patterns - when: never - .rails:rules:as-if-foss-background-migration: rules: - !reference [".rails:rules:as-if-foss-migration", rules] - <<: *if-merge-request-labels-as-if-foss changes: *backend-patterns -.rails:rules:as-if-foss-background-migration:predictive: - rules: - - !reference [".rails:rules:as-if-foss-migration:predictive", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - .rails:rules:as-if-foss-unit: rules: - <<: *if-not-ee @@ -1603,17 +1665,6 @@ - <<: *if-merge-request-labels-as-if-foss changes: *backend-patterns -.rails:rules:as-if-foss-unit:predictive: - rules: - - <<: *if-not-ee - when: never - - <<: *if-fork-merge-request - when: never - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:as-if-foss-migration-unit-integration:predictive-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - .rails:rules:as-if-foss-integration: rules: - <<: *if-not-ee @@ -1624,17 +1675,6 @@ - <<: *if-merge-request-labels-as-if-foss changes: *backend-patterns -.rails:rules:as-if-foss-integration:predictive: - rules: - - <<: *if-not-ee - when: never - - <<: *if-fork-merge-request - when: never - - !reference [".rails:rules:predictive-default-rules", rules] - - !reference [".rails:rules:as-if-foss-migration-unit-integration:predictive-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - .rails:rules:as-if-foss-system: rules: - <<: *if-not-ee @@ -1645,30 +1685,12 @@ - <<: *if-merge-request-labels-as-if-foss changes: *code-backstage-patterns -.rails:rules:as-if-foss-system:predictive: - rules: - - <<: *if-not-ee - when: never - - <<: *if-fork-merge-request - when: never - - !reference [".rails:rules:predictive-default-rules", rules] - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *workhorse-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never - - <<: *if-merge-request-labels-as-if-foss - changes: *code-backstage-patterns - .rails:rules:ee-and-foss-db-library-code: rules: - <<: *if-default-refs changes: *db-library-patterns - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request-labels-run-on-pg12 .rails:rules:ee-mr-and-default-branch-only: rules: @@ -1754,10 +1776,19 @@ when: never - <<: *if-merge-request-labels-skip-undercoverage when: never + # We cannot get the coverage data from child pipeline so we only run undercoverage on full pipelines for now + # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113410#note_1335422806 + - <<: *if-merge-request-not-approved + when: never - <<: *if-merge-request-labels-run-all-rspec - <<: *if-merge-request changes: *backend-patterns +.rails:rules:rspec-on-pg12: + rules: + - <<: *if-merge-request-labels-run-on-pg12 + - !reference [".rails:rules:default-branch-schedule-nightly--code-backstage-default-rules", rules] + .rails:rules:default-branch-schedule-nightly--code-backstage-default-rules: rules: - <<: *if-default-branch-schedule-nightly @@ -1787,7 +1818,12 @@ when: never - <<: *if-merge-request-labels-pipeline-expedite when: never - - if: '$SKIP_FLAKY_TESTS_AUTOMATICALLY == "true" || $RETRY_FAILED_TESTS_IN_NEW_PROCESS == "true"' + - if: '$SKIP_FLAKY_TESTS_AUTOMATICALLY != "true" && $RETRY_FAILED_TESTS_IN_NEW_PROCESS != "true"' + when: never + - <<: *if-merge-request + changes: *code-backstage-patterns + when: always + - <<: *if-default-branch-refs changes: *code-backstage-patterns when: always @@ -1956,6 +1992,12 @@ changes: ["vendor/gems/cloud_profiler_agent/**/*"] - <<: *if-merge-request-labels-run-all-rspec +.vendor:rules:sidekiq-reliable-fetch: + rules: + - <<: *if-merge-request + changes: ["vendor/gems/sidekiq-reliable-fetch/**/*"] + - <<: *if-merge-request-labels-run-all-rspec + ################## # Releases rules # ################## diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index 76c7af2753e..0b5860b3ddb 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -63,7 +63,7 @@ verify-ruby-3.0: verify-tests-yml: extends: - .setup:rules:verify-tests-yml - image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.13 + image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.16 stage: test needs: [] script: @@ -83,7 +83,7 @@ verify-approvals: generate-frontend-fixtures-mapping: extends: - .setup:rules:generate-frontend-fixtures-mapping - - .use-pg12 + - .use-pg13 - .rails-cache needs: ["setup-test-env"] stage: prepare @@ -118,13 +118,12 @@ detect-tests: - | if [ -n "$CI_MERGE_REQUEST_IID" ]; then mkdir -p $(dirname "$RSPEC_CHANGED_FILES_PATH") - tooling/bin/find_changes ${RSPEC_CHANGED_FILES_PATH}; - tooling/bin/find_tests ${RSPEC_CHANGED_FILES_PATH} ${RSPEC_MATCHING_TESTS_PATH}; - tooling/bin/js_to_system_specs_mappings ${RSPEC_CHANGED_FILES_PATH} ${RSPEC_MATCHING_TESTS_PATH}; - tooling/bin/find_changes ${RSPEC_CHANGED_FILES_PATH} ${RSPEC_MATCHING_TESTS_PATH} ${FRONTEND_FIXTURES_MAPPING_PATH}; + + tooling/bin/predictive_tests + filter_rspec_matched_foss_tests ${RSPEC_MATCHING_TESTS_PATH} ${RSPEC_MATCHING_TESTS_FOSS_PATH}; filter_rspec_matched_ee_tests ${RSPEC_MATCHING_TESTS_PATH} ${RSPEC_MATCHING_TESTS_EE_PATH}; - tooling/bin/view_to_js_mappings ${RSPEC_CHANGED_FILES_PATH} ${RSPEC_MATCHING_JS_FILES_PATH}; + echoinfo "Changed files: $(cat $RSPEC_CHANGED_FILES_PATH)"; echoinfo "Related FOSS RSpec tests: $(cat $RSPEC_MATCHING_TESTS_FOSS_PATH)"; echoinfo "Related EE RSpec tests: $(cat $RSPEC_MATCHING_TESTS_EE_PATH)"; @@ -136,9 +135,10 @@ detect-tests: - ${FRONTEND_FIXTURES_MAPPING_PATH} - ${RSPEC_CHANGED_FILES_PATH} - ${RSPEC_MATCHING_JS_FILES_PATH} - - ${RSPEC_MATCHING_TESTS_PATH} - - ${RSPEC_MATCHING_TESTS_FOSS_PATH} - ${RSPEC_MATCHING_TESTS_EE_PATH} + - ${RSPEC_MATCHING_TESTS_FOSS_PATH} + - ${RSPEC_MATCHING_TESTS_PATH} + - ${RSPEC_VIEWS_INCLUDING_PARTIALS_PATH} detect-previous-failed-tests: extends: diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml index d546c79aab9..b9c9200d78b 100644 --- a/.gitlab/ci/static-analysis.gitlab-ci.yml +++ b/.gitlab/ci/static-analysis.gitlab-ci.yml @@ -45,7 +45,7 @@ static-verification-with-database: - .static-analysis-base - .rubocop-job-cache - .static-analysis:rules:static-verification-with-database - - .use-pg12 + - .use-pg13 script: - bundle exec rake lint:static_verification_with_database variables: diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index 176a0b67d66..20d768c9e90 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -32,17 +32,17 @@ update-tests-metadata: - retrieve-tests-metadata - generate-frontend-fixtures-mapping - setup-test-env - - rspec migration pg12 + - rspec migration pg13 - rspec-all frontend_fixture - - rspec unit pg12 - - rspec integration pg12 - - rspec system pg12 - - rspec background_migration pg12 - - rspec-ee migration pg12 - - rspec-ee unit pg12 - - rspec-ee integration pg12 - - rspec-ee system pg12 - - rspec-ee background_migration pg12 + - rspec unit pg13 + - rspec integration pg13 + - rspec system pg13 + - rspec background_migration pg13 + - rspec-ee migration pg13 + - rspec-ee unit pg13 + - rspec-ee integration pg13 + - rspec-ee system pg13 + - rspec-ee background_migration pg13 script: - run_timed_command "retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document" - source ./scripts/rspec_helpers.sh diff --git a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml index a04d81fb342..d51e255fb95 100644 --- a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml +++ b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml @@ -57,7 +57,7 @@ dont-interrupt-me: --volume $CI_PROJECT_DIR/test_output:/home/gdk/gdk/gitlab/qa/tmp:z \ --volume $CI_PROJECT_DIR/logs/gdk:/home/gdk/gdk/log \ --volume $CI_PROJECT_DIR/logs/gitlab:/home/gdk/gdk/gitlab/log \ - ${QA_GDK_IMAGE} "${CI_COMMIT_REF_SLUG}" "$TEST_GDK_TAGS --tag ~requires_praefect" || true + ${QA_GDK_IMAGE} "${CI_COMMIT_SHA}" "$TEST_GDK_TAGS --tag ~requires_praefect" || true - echo -e "\e[0Ksection_end:`date +%s`:launch_gdk_and_tests\r\e[0K" allow_failure: true diff --git a/.gitlab/ci/vendored-gems.gitlab-ci.yml b/.gitlab/ci/vendored-gems.gitlab-ci.yml index e1b4960b262..a2af802c659 100644 --- a/.gitlab/ci/vendored-gems.gitlab-ci.yml +++ b/.gitlab/ci/vendored-gems.gitlab-ci.yml @@ -101,3 +101,11 @@ vendor cloud_profiler_agent: trigger: include: vendor/gems/cloud_profiler_agent/.gitlab-ci.yml strategy: depend + +vendor sidekiq-reliable-fetch: + extends: + - .vendor:rules:sidekiq-reliable-fetch + needs: [] + trigger: + include: vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml + strategy: depend diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml index 389906dbbff..ae0b15bbdb8 100644 --- a/.gitlab/ci/workhorse.gitlab-ci.yml +++ b/.gitlab/ci/workhorse.gitlab-ci.yml @@ -10,7 +10,7 @@ workhorse:verify: .workhorse:test: extends: .workhorse:rules:workhorse - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}:git-2.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}-rust-${RUST_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-2.36-exiftool-12.60 variables: GITALY_ADDRESS: "tcp://127.0.0.1:8075" stage: test @@ -18,7 +18,6 @@ workhorse:verify: - setup-test-env before_script: - go version - - apt-get update && apt-get -y install libimage-exiftool-perl - scripts/gitaly-test-build script: - make -C workhorse test @@ -37,7 +36,10 @@ workhorse:test go: workhorse:test fips: extends: .workhorse:test - image: registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/ubuntu_20.04_fips:4.0.0 + parallel: + matrix: + - GO_VERSION: ["1.18", "1.19"] + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/ubi-${UBI_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}-rust-${RUST_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-2.36-exiftool-12.60 variables: FIPS_MODE: 1 diff --git a/.gitlab/issue_templates/AI Project Proposal.md b/.gitlab/issue_templates/AI Project Proposal.md new file mode 100644 index 00000000000..1b3202b4028 --- /dev/null +++ b/.gitlab/issue_templates/AI Project Proposal.md @@ -0,0 +1,138 @@ +<!-- AI Project Proposal title format: 🤖 [AI Proposal] {`Need/outcome` } + {`Beneficiary`} + {`Job/Small Job`} + +The title should be something that is easily understood that quickly communicates the intent of the project allowing team members to easily understand and recognize the expected work that will be done. + +A proposal title should combine the beneficiary of the feature/UI, the job it will allow them to accomplish, and their expected outcome when the work is delivered. Well-defined statements are concise without sacrificing the substance of the proposal so that anyone can understand it at a glance. (e.g.🤖 {Reduce the effort} + {for security teams} + {when prioritizing business-critical risks in their assets}) --> + +# [Experiment](https://docs.gitlab.com/ee/policy/alpha-beta-support.html#experiment) + +## Problem to be solved + +### User problem +_What user problem will this solve?_ + +### Solution hypothesis +_Why do you believe this AI solution is a good way to solve this problem?_ + +### Assumption +_What assumptions are you making about this problem and the solution?_ + +### Personas +_What [personas](https://about.gitlab.com/handbook/product/personas/#list-of-user-personas) have this problem, who is the intended user?_ + +## Proposal +<!-- Use this section to explain the proposed changes, including details around usage and business drivers. --> + +### Success +_How will you measure whether this experiment is a success?_ + +# [General Availability](https://docs.gitlab.com/ee/policy/alpha-beta-support.html#generally-available-ga) + +## Main Job story +_What job to be done will this solve?_ +<!-- What is the [Main Job story](https://about.gitlab.com/handbook/product/ux/jobs-to-be-done/#how-to-write-a-jtbd) that this proposal was derived from? (e.g. When I am on triage rotation, I want to address all the business-critical risks in my assets, So I can minimize the likelihood of my organization being compromised by a security breach.) --> + +### Proposal updates/additions +<!-- Use this section to explain any changes or updates to the original proposal, including details around usage, business drivers, and reasonings that drove the updates/additions. --> + +### Problem validation +_What validation exists that customers have this problem?_ + +### Business objective +_What business objective will be achieved with this proposal?_ +<!-- Objectives (from a business point of view) that will be achieved upon completion. (For instance, Increase engagement by making the experience efficient while reducing the chances of users overlooking high-priority items. --> + +### Confidence +_Has this proposal been derived from research?_ +<!-- 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 | +| ----------------- | ------------------------------ | +| [High/Medium/Low] | [research/insight issue](Link) | + +### Requirements +_What tasks or actions should the user be capable of performing with this feature?_ +<!-- Requirements can be taken from existing features or design issues used to build this proposal. Any related issues should be linked with this issue in the Feature/solution issues section below. They are more granular validated needs, goals, and additional details that the proposal encompasses. --> + +> ⚠️ Related feature and research issues should be linked in the related issues section (Delete this line when this is done) + +#### The user needs to be able to: +- ... +- ... +- ... + +## Checklist + +### Experiment + +<details> +<summary> Issue information </summary> + +- [ ] Add information to the issue body about: + - [ ] The user problem being solved + - [ ] Your assumptions + - [ ] Who it's for, list of personas impacted + - [ ] Your proposal +- [ ] Add relevant designs to the Design Management area of the issue if available +- [ ] Ensure this issue has the ~wg-ai-integration label to ensure visibility to various teams working on this + +</details> + +### General Availability + +<details> +<summary>Issue information</summary> + +- [ ] Add information to the issue body about: + - [ ] Your proposal + - [ ] The Job Statement it's expected to satisfy + - [ ] Details about the user problem and provide any research or problem validation + - [ ] List the personas impacted by the proposal. +- [ ] Add all relevant solution validation issues to the Linked items section that shows this proposal will solve the customer problem, or details explaining why it's not possible to provide that validation. +- [ ] Add relevant designs to the Design Management area of the issue. +- [ ] You have adhered to our [Definition of Done](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#definition-of-done) standards +- [ ] Ensure this issue has the ~wg-ai-integration label to ensure visibility to various teams working on this + +</details> + +<details> +<summary>Technical needs</summary> + +- [ ] [Operational Requirements Review - Checklist - #note_1337519985](https://gitlab.com/gitlab-org/gitlab/-/issues/403859#note_1337519985) + +1. **Work estimate and skills needs to build an ML viable feature:** To build any ML feature depending on the work, there are many personas that contribute including, Data Scientist, NLP engineer, ML Engineer, MLOps Engineer, ML Infra engineers, and Fullstack engineer to integrate the ML Services with Gitlab. Post-prototype we would assess the skills needed to build a production-grade ML feature for the prototype +2. **Data Limitation:** We would like to upfront validate if we have viable data for the feature including whether we can use the DataOps pipeline of ModelOps or create a custom one. We would want to understand the training data, test data, and feedback data to dial up the accuracy and the limitations of the data. +3. **Model Limitation:** We would want to understand if we can use an open-source pre-trained model, tune and customize it or start a model from scratch as well. Further, we would asses based on the ModelOps model evaluation framework which would be the right model to use based on the use case. +4. **Cost, Scalability, Reliability:** We would want to estimate the cost of hosting, serving, inference of the model, and the full end-to-end infrastructure including monitoring and observability. +5. **Legal and Ethical Framework:** We would want to align with legal and ethical framework like any other ModelOps features to cover across the nine principles of responsible ML and any legal support needed. + +</details> + +<details> +<summary>Dependency needs</summary> + +- [ ] [Operational Requirements Review - Checklist - #note_1337519985](https://gitlab.com/gitlab-org/gitlab/-/issues/403859#note_1337519985) + +</details> + +<details> +<summary>Legal needs</summary> + +- [ ] TBD + +</details> + +## Additional resources +- If you'd like help with technical validation, or would like to discuss UX considerations for AI mention the AI Assisted group using `@gitlab-org/modelops/applied-ml`. +- Read about our [AI Integration strategy](https://internal-handbook.gitlab.io/handbook/product/ai-strategy/ai-integration-effort/) +- Slack channels + - `#wg_ai_integration` - Slack channel for the working group and the high level alignment on getting AI ready for Production (Development, Product, UX, Legal, etc.) But from the other channels fell free to reach out and post progress here + - `#ai_integration_dev_lobby` - Channel for all implementation related topics and discussions of actual AI features (e.g. explain the code) + - `#ai_enablement_team` - Channel for the AI Enablement Team which is building the base for all features (experimentation API, Abstraction Layer, Embeddings, etc.) + + +/label ~wg-ai-integration +/cc @tmccaslin @hbenson @wayne @pedroms @jmandell +/confidential + +[Make change to this template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/AI%20Project%20Proposal.md) diff --git a/.gitlab/issue_templates/Deprecations.md b/.gitlab/issue_templates/Deprecations.md index 49f1129fe89..30d01c5f5c4 100644 --- a/.gitlab/issue_templates/Deprecations.md +++ b/.gitlab/issue_templates/Deprecations.md @@ -49,9 +49,9 @@ Which tier is this feature available in? Please add links to the relevant merge requests. - As soon as possible, but no later than the third milestone preceding the major release (for example, given the following release schedule: `14.8, 14.9, 14.10, 15.0` – `14.8` is the third milestone preceding the major release): - - [ ] A [deprecation announcement entry](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-a-deprecation-announcement) has been created so the deprecation will appear in release posts and on the [general deprecation page](https://docs.gitlab.com/ee/update/deprecations). + - [ ] A [deprecation announcement entry](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-the-announcement) has been created so the deprecation will appear in release posts and on the [general deprecation page](https://docs.gitlab.com/ee/update/deprecations). - [ ] Documentation has been updated to mark the feature as [deprecated](https://docs.gitlab.com/ee/development/documentation/versions.html#deprecations-and-removals). -- [ ] On or before the major milestone: A [removal entry](https://about.gitlab.com/handbook/marketing/blog/release-posts/#removals) has been created so the removal will appear on the [removals by milestones](https://docs.gitlab.com/ee/update/removals) page and be announced in the release post. +- [ ] On or before the major milestone: A [removal entry](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-the-announcement-1) has been created so the removal will appear on the [removals by milestones](https://docs.gitlab.com/ee/update/removals) page and be announced in the release post. - On the major milestone: - [ ] The deprecated item has been removed. - [ ] If the removal of the deprecated item is a [breaking change](https://about.gitlab.com/handbook/product/gitlab-the-product/#examples-of-breaking-changes), the merge request is labeled ~"breaking change". diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md index 5791eca11ff..5efc9304a4e 100644 --- a/.gitlab/issue_templates/Feature Flag Roll Out.md +++ b/.gitlab/issue_templates/Feature Flag Roll Out.md @@ -43,9 +43,9 @@ Are there any other stages or teams involved that need to be kept in the loop? <!-- What are the settings we need to configure in order to have this feature viable? --> -<!-- +<!-- Example below: - + 1. Enable service ping collection `ApplicationSetting.first.update(usage_ping_enabled: true)` --> @@ -57,7 +57,7 @@ Example below: ### What can we monitor to detect problems with this? <!-- Which dashboards from https://dashboards.gitlab.net are most relevant? --> -_Consider mentioning checks for 5xx errors or other anomalies like an increase in redirects +_Consider mentioning checks for 5xx errors or other anomalies like an increase in redirects (302 HTTP response status)_ ### What can we check for monitoring production after rollouts? @@ -66,7 +66,7 @@ _Consider adding links to check for Sentry errors, Production logs for 5xx, 302s ## Rollout Steps -Note: Please make sure to run the chatops commands in the slack channel that gets impacted by the command. +Note: Please make sure to run the chatops commands in the slack channel that gets impacted by the command. ### Rollout on non-production environments @@ -75,11 +75,15 @@ Note: Please make sure to run the chatops commands in the slack channel that get - [ ] `/chatops run auto_deploy status <merge-commit-of-your-feature>` - [ ] Enable the feature globally on non-production environments. - [ ] `/chatops run feature set <feature-flag-name> true --dev --staging --staging-ref` + - If the feature flag causes QA end-to-end tests to fail: + - [ ] Disable the feature flag on staging to avoid blocking [deployments](https://about.gitlab.com/handbook/engineering/deployments-and-releases/deployments/). - [ ] Verify that the feature works as expected. Posting the QA result in this issue is preferable. The best environment to validate the feature in is [staging-canary](https://about.gitlab.com/handbook/engineering/infrastructure/environments/#staging-canary) as this is the first environment deployed to. Note you will need to make sure you are configured to use canary as outlined [here](https://about.gitlab.com/handbook/engineering/infrastructure/environments/canary-stage/) when accessing the staging environment in order to make sure you are testing appropriately. +For assistance with QA end-to-end test failures, please reach out via the `#quality` Slack channel. Note that QA test failures on staging-ref [don't block deployments](https://about.gitlab.com/handbook/engineering/infrastructure/environments/staging-ref/#how-to-use-staging-ref). + ### Specific rollout on production For visibility, all `/chatops` commands that target production should be executed in the `#production` slack channel and cross-posted (with the command results) to the responsible team's slack channel (`#g_TEAM_NAME`). @@ -104,7 +108,7 @@ For visibility, all `/chatops` commands that target production should be execute - [ ] Ensure that you or a representative in development can be available for at least 2 hours after feature flag updates in production. If a different developer will be covering, or an exception is needed, please inform the oncall SRE by using the `@sre-oncall` Slack alias. - [ ] Ensure that documentation has been updated ([More info](https://docs.gitlab.com/ee/development/documentation/feature_flags.html#features-that-became-enabled-by-default)). -- [ ] Leave a comment on [the feature issue][main-issue] announcing estimated time when this feature flag will be enabled on GitLab.com. +- [ ] Leave a comment on [the feature issue][main-issue] announcing estimated time when this feature flag will be enabled on GitLab.com. - [ ] Ensure that any breaking changes have been announced following the [release post process](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecations-removals-and-breaking-changes) to ensure GitLab customers are aware. - [ ] Notify `#support_gitlab-com` and your team channel ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#communicate-the-change)). - [ ] Ensure that the feature flag rollout plan is reviewed by another developer familiar with the domain. 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 c33e5f8eb68..60b091b04a2 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 @@ -465,6 +465,7 @@ That's all of the required database changes. state { Geo::CoolWidgetRegistry.state_value(:failed) } last_synced_at { 1.day.ago } retry_count { 2 } + retry_at { 2.hours.from_now } last_sync_failure { 'Random error' } end 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 0c5dbaebacf..df2d1871a85 100644 --- a/.gitlab/issue_templates/Geo Replicate a new blob type.md +++ b/.gitlab/issue_templates/Geo Replicate a new blob type.md @@ -425,6 +425,7 @@ That's all of the required database changes. state { Geo::CoolWidgetRegistry.state_value(:failed) } last_synced_at { 1.day.ago } retry_count { 2 } + retry_at { 2.hours.from_now } last_sync_failure { 'Random error' } end diff --git a/.gitlab/issue_templates/Navigation Proposals.md b/.gitlab/issue_templates/Navigation Proposals.md index 72c8f43cc97..934cf440006 100644 --- a/.gitlab/issue_templates/Navigation Proposals.md +++ b/.gitlab/issue_templates/Navigation Proposals.md @@ -4,12 +4,23 @@ <!-- Use this section to explain the proposed changes, including details around usage and business drivers. --> + +#### Other locations that were considered + + <!-- Include other design patterns or places you considered for this feature besides navigation. --> + ### Checklist +- [ ] Review the handbook page for [navigation changes](https://about.gitlab.com/handbook/product/ux/navigation/#when-to-consider-making-a-change-to-the-navigation) - [ ] Add relevant information to the issue description detailing your proposal, including usage and business drivers. -- [ ] Follow the [product development workflow](https://about.gitlab.com/handbook/product-development-flow/#validation-phase-2-problem-validation) validation process to ensure you are solving a well understood problem and that the proposed change is understandable and non-disruptive to users. Navigation-specific research is strongly encouraged. -- [ ] Engage the [Foundations Product Manager](https://about.gitlab.com/handbook/product/categories/#foundations-group) for approval. The Foundations DRI will work with UX partners in product design, research, and technical writing, as applicable. -- [ ] Engage the [Foundations](https://about.gitlab.com/handbook/product/categories/#foundations-group) team to ensure your proposal is in alignment with holistic changes happening to the left side bar. -- [ ] Consider whether you need to communicate the change somehow, or if you will have an interim period in the UI where your nav item will live in more than one place. +- [ ] List at least two other places you considered to introduce your feature +- [ ] Add relevant designs to the Design Management area of the issue +- [ ] Ensure your UI suggestion align with the [Documentation Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide/) +- [ ] Engage ~"Technical Writing". They can help craft a term that best describes the feature(s) you’re proposing. +- [ ] Follow the [product development workflow](https://about.gitlab.com/handbook/product-development-flow/#validation-phase-2-problem-validation) validation process to ensure you are solving a well understood problem and that the proposed change is understandable and non-disruptive to users. Navigation-specific research is mandatory for additions or when restructuring. +- [ ] Engage the [Foundations Product Manager](https://about.gitlab.com/handbook/product/categories/#foundations-group) for approval. The Foundations DRI (@cdybenko) will work with UX partners in product design, research, and technical writing, as applicable. +- [ ] Consider whether you need to [communicate the change somehow](https://design.gitlab.com/patterns/navigation#messaging-changes-to-users), or if you will have an interim period in the UI where your item will live in more than one place. +- [ ] Ensure engineers are familiar with the [implementation steps for navigation](https://docs.gitlab.com/ee/development/navigation_sidebar.html#navigation-sidebar). -/label ~UX ~"UI text" ~"documentation" ~"documentation" ~"Category:Navigation & Settings" ~"Category:Foundations" ~navigation +/label ~UX ~"UI text" ~"documentation" ~"Category:Navigation & Settings" ~navigation ~type::ignore +/label ~"Nav request::Start" diff --git a/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md b/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md index 7bb602feed2..26dc1c97a99 100644 --- a/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md +++ b/.gitlab/issue_templates/Pipeline Authoring Issue Implementation.md @@ -20,6 +20,7 @@ _NOTE: If the issue has addressed all of these questions, this separate section Some relevant technical details, if applicable, such as: - Does this need a ~"feature flag"? +- Does there need to be an associated ~"instrumentation" issue created related to this work? - Is there an example response showing the data structure that should be returned (new endpoints only)? - What permissions should be used? - Is this EE or CE? diff --git a/.gitlab/issue_templates/Security developer workflow.md b/.gitlab/issue_templates/Security developer workflow.md index 3857303f2c4..294d699ea2f 100644 --- a/.gitlab/issue_templates/Security developer workflow.md +++ b/.gitlab/issue_templates/Security developer workflow.md @@ -13,6 +13,7 @@ Set the title to: `Description of the original issue` - [ ] Add a `~severity::x` label to the issue and all associated merge requests. - [ ] **IMPORTANT**: Mark this [issue as linked] to the Security Release Tracking Issue. You can find it [here](https://gitlab.com/gitlab-org/gitlab/-/issues?sort=created_date&state=opened&label_name[]=upcoming+security+release). This issue MUST be linked for the release bot to know that the associated merge requests should be merged for this security release. +- [ ] Mark this [issue as linked] to the `gitlab-org/gitlab` issue that describes the security vulnerability. - Fill out the [Links section](#links): - [ ] Next to **Issue on GitLab**, add a link to the `gitlab-org/gitlab` issue that describes the security vulnerability. - [ ] If this change affects the public interface (public API or UI) of the product, post in the `#support_gitlab-com` Slack channel to explain the impact and discuss a mitigation plan for users that might be affected. If you need Support feedback or approval, reach out in `#spt_managers` Slack channel or mention `@gitlab-com/support/managers`. diff --git a/.gitlab/issue_templates/rca.md b/.gitlab/issue_templates/rca.md new file mode 100644 index 00000000000..238039bd712 --- /dev/null +++ b/.gitlab/issue_templates/rca.md @@ -0,0 +1,125 @@ +**Please note:** if the incident relates to sensitive data or is security-related, consider +labeling this issue with ~security and mark it confidential, or create it in a private repository. + +There is now a separate internal-only RCA template for SIRT issues referenced https://about.gitlab.com/handbook/security/root-cause-analysis.html +*** + +## Summary + +A brief summary of what happened. Try to make it as executive-friendly as possible. + +- Service(s) affected: +- Team attribution: +- Minutes downtime or degradation: + +## Impact & Metrics + +Start with the following: + +| Question | Answer | +| ----- | ----- | +| What was the impact? | (i.e. service outage, sub-service brown-out, exposure of sensitive data, ...) | +| Who was impacted? | (i.e. external customers, internal customers, specific teams, ...) | +| How did this impact customers? | (i.e. preventing them from doing X, incorrect display of Y, ...) | +| How many attempts made to access? | | +| How many customers affected? | | +| How many customers tried to access? | | + +Include any additional metrics that are of relevance. + +Provide any relevant graphs that could help understand the impact of the incident and its dynamics. + +## Detection & Response + +Start with the following: + +| Question | Answer | +| ----- | ----- | +| When was the incident detected? | YYYY-MM-DD UTC | +| How was the incident detected? | (i.e. DELKE, H1 Report, ...) | +| Did alarming work as expected? | | +| How long did it take from the start of the incident to its detection? | | +| How long did it take from detection to remediation? | | +| What steps were taken to remediate? | | +| Were there any issues with the response? | (i.e. bastion host used to access the service was not available, relevant team member wasn't page-able, ...) | + +## MR Checklist + +Consider these questions if a code change introduced the issue. + +| Question | Answer | +| ----- | ----- | +| Was the [MR acceptance checklist](https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist) marked as reviewed in the MR? | | +| Should the checklist be updated to help reduce chances of future recurrences? If so, who is the DRI to do so? | | + +## Timeline + +YYYY-MM-DD + +- 00:00 UTC - something happened +- 00:01 UTC - something else happened +- ... + +YYYY-MM-DD+1 + +- 00:00 UTC - and then this happened +- 00:01 UTC - and more happened +- ... + + +## Root Cause Analysis + +The purpose of this document is to understand the reasons that caused an incident, and to create mechanisms to prevent it from recurring in the future. A root cause can **never be a person**, the way of writing has to refer to the system and the context rather than the specific actors. + +Follow the "**5 whys**" in a **blameless** manner as the core of the root cause analysis. + +For this, it is necessary to start with the incident and question why it happened. Keep iterating asking "why?" 5 times. While it's not a hard rule that it has to be 5 times, it helps to keep questions get deeper in finding the actual root cause. + +Keep in mind that from one "why?" there may come more than one answer, consider following the different branches. + +### Example of the usage of "5 whys" + +The vehicle will not start. (the problem) + +1. Why? - The battery is dead. +2. Why? - The alternator is not functioning. +3. Why? - The alternator belt has broken. +4. Why? - The alternator belt was well beyond its useful service life and not replaced. +5. Why? - The vehicle was not maintained according to the recommended service schedule. (Fifth why, a root cause) + +## What went well + +Start with the following: + +- Identify the things that worked well or as expected. +- Any additional call-outs for what went particularly well. + +## What can be improved + +Start with the following: + +- Using the root cause analysis, explain what can be improved to prevent this from happening again. +- Is there anything that could have been done to improve the detection or time to detection? +- Is there anything that could have been done to improve the response or time to response? +- Is there an existing issue that would have either prevented this incident or reduced the impact? +- Did we have any indication or beforehand knowledge that this incident might take place? +- Was the [MR acceptance checklist](https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist) marked as reviewed in the MR? +- Should the checklist be updated to help reduce chances of future recurrences? + + + +## Corrective actions + +- List issues that have been created as corrective actions from this incident. +- For each issue, include the following: + - `<Bare issue link>` - Issue labeled as ~"corrective action". + - An estimated date of completion of the corrective action. + - The named individual who owns the delivery of the corrective action. + +## Guidelines + +- [Blameless RCA Guideline](https://about.gitlab.com/handbook/customer-success/professional-services-engineering/workflows/internal/root-cause-analysis.html) +- [5 whys](https://en.wikipedia.org/wiki/5_Whys) + +/confidential +/label ~RCA diff --git a/.gitlab/merge_request_templates/New End To End Test.md b/.gitlab/merge_request_templates/New End To End Test.md index 46ccdb1cb0c..9a42cf2a6d9 100644 --- a/.gitlab/merge_request_templates/New End To End Test.md +++ b/.gitlab/merge_request_templates/New End To End Test.md @@ -4,6 +4,26 @@ Please link to the respective test case in the testcases project --> +## How to set up and validate locally + +<!-- +In most cases this will be the command to run the test, e.g.: + +From the `qa` directory: +``` +bundle install +export WEBDRIVER_HEADLESS=false # If you'd like to watch the test in action +export QA_GITLAB_URL="http://gdk.test:3000" # Only needed if GDK is not running on http://127.0.0.1:3000 +bundle exec rspec <path/to/spec.rb> +``` + +This may be particularly helpful if you're requesting reviews from engineers who aren't familiar with GitLab's E2E tests. + +Any other necessary setup should be included here as well, especially if it's an orchestrated test that requires a +[special setup](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/running_tests_that_require_special_setup.html) +to run locally against GDK. +--> + ### Checklist - [ ] Confirm the test has a [`testcase:` tag linking to an existing test case](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/best_practices.html#link-a-test-to-its-test-case-issue) in the test case project. diff --git a/.gitlab/merge_request_templates/Stable Branch.md b/.gitlab/merge_request_templates/Stable Branch.md index 2196af1a214..949aa6386ab 100644 --- a/.gitlab/merge_request_templates/Stable Branch.md +++ b/.gitlab/merge_request_templates/Stable Branch.md @@ -18,7 +18,8 @@ This checklist encourages us to confirm any changes have been analyzed to reduce * [ ] This MR is backporting a bug fix, documentation update, or spec fix, previously merged in the default branch. * [ ] The original MR has been deployed to GitLab.com (not applicable for documentation or spec changes). * [ ] This MR has a [severity label] assigned (if applicable). -* [ ] Ensure the `e2e:package-and-test` job has either succeeded or been approved by a Software Engineer in Test. +* [ ] This MR has been approved by a maintainer (only one approval is required). +* [ ] Ensure the `e2e:package-and-test-ee` job has either succeeded or been approved by a Software Engineer in Test. #### Note to the merge request author and maintainer |