From 925235378f609e22de93974126af0cfb6a8502a0 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 31 Jan 2024 18:10:59 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/as-if-foss.gitlab-ci.yml | 8 +- .gitlab/ci/frontend.gitlab-ci.yml | 23 -- .gitlab/ci/preflight.gitlab-ci.yml | 6 - .gitlab/ci/qa.gitlab-ci.yml | 6 - .gitlab/ci/rails.gitlab-ci.yml | 180 +-------- .gitlab/ci/rules.gitlab-ci.yml | 359 ++++++++++++------ .gitlab/ci/static-analysis.gitlab-ci.yml | 20 - .rubocop_todo/layout/argument_alignment.yml | 7 - Gemfile | 5 +- Gemfile.checksum | 6 +- Gemfile.lock | 16 +- .../blob/components/blob_content.vue | 35 ++ app/assets/javascripts/editor/schema/ci.json | 13 + .../notes/components/mr_discussion_filter.vue | 2 +- app/assets/javascripts/notes/constants.js | 5 + .../javascripts/notes/stores/getters.js | 8 +- .../components/blob_content_viewer.vue | 10 +- .../snippets/components/snippet_blob_view.vue | 1 + .../components/blob_viewers/constants.js | 1 + .../components/blob_viewers/simple_viewer.vue | 144 ++++++- .../source_viewer/components/blame_info.vue | 2 +- .../source_viewer/source_viewer.vue | 4 +- .../components/source_viewer/utils.js | 12 +- .../stylesheets/framework/highlight.scss | 5 +- app/controllers/projects/blob_controller.rb | 21 +- app/controllers/projects/tree_controller.rb | 33 +- app/controllers/projects_controller.rb | 6 +- app/controllers/snippets_controller.rb | 18 +- app/graphql/mutations/work_items/delete.rb | 23 +- app/models/concerns/versioned_description.rb | 6 +- app/models/issue.rb | 6 +- app/models/work_items/widgets/base.rb | 8 - app/models/work_items/widgets/hierarchy.rb | 14 - app/models/work_items/widgets/labels.rb | 4 - app/policies/group_policy.rb | 1 + app/serializers/note_user_entity.rb | 2 + app/services/issuable/destroy_service.rb | 6 +- app/services/issuable_base_service.rb | 10 +- app/services/work_items/update_service.rb | 5 + app/views/devise/sessions/_new_base.html.haml | 2 +- .../devise/sessions/_new_crowd.html.haml | 3 +- app/views/devise/sessions/_new_ldap.html.haml | 3 +- app/views/shared/_file_highlight.html.haml | 14 +- app/views/snippets/index.html.haml | 13 - .../development/redirect_with_ref_type.yml | 8 - ...templates_opentofu_base_latest_monthly.yml | 24 ++ ...p_ci_templates_opentofu_latest_monthly.yml | 24 ++ ...i_templates_total_unique_counts_weekly.yml | 2 + ..._templates_opentofu_base_latest_weekly.yml | 24 ++ ..._p_ci_templates_opentofu_latest_weekly.yml | 24 ++ ...6-9-deprecate-terraform-cicd-templates.yml | 33 ++ ...dd_is_unique_to_issuable_resource_links.rb | 9 + ..._id_and_link_to_issuable_resource_links.rb | 19 + ...aversal_ids_columns_to_sbom_occurrences.rb | 10 + db/schema_migrations/20240110202002 | 1 + db/schema_migrations/20240110204949 | 1 + db/schema_migrations/20240129175101 | 1 + db/structure.sql | 5 + doc/administration/auth/test_oidc_oauth.md | 13 +- doc/api/graphql/reference/index.md | 3 +- doc/ci/yaml/index.md | 33 +- doc/development/ee_features.md | 2 +- doc/development/pipelines/index.md | 47 ++- doc/update/deprecations.md | 34 ++ doc/user/custom_roles.md | 168 ++++---- doc/user/gitlab_com/index.md | 3 +- doc/user/group/index.md | 2 +- doc/user/group/manage.md | 43 +-- doc/user/project/members/index.md | 2 +- lib/gitlab/ci/config/entry/job.rb | 2 +- .../templates/OpenTofu.latest.gitlab-ci.yml | 30 ++ .../OpenTofu/Base.latest.gitlab-ci.yml | 169 +++++++++ .../ci/templates/Terraform/Base.gitlab-ci.yml | 18 + .../Terraform/Base.latest.gitlab-ci.yml | 18 + lib/gitlab/ci/yaml_processor/feature_flags.rb | 4 +- locale/gitlab.pot | 9 +- package.json | 2 +- scripts/frontend/build_css.mjs | 13 + scripts/frontend/{ => lib}/compile_css.mjs | 88 +++-- scripts/frontend/webpack_dev_server.js | 11 + scripts/rspec_helpers.sh | 4 +- scripts/setup/generate-as-if-foss-env.rb | 12 +- .../projects/blob_controller_spec.rb | 61 +-- .../projects/tree_controller_spec.rb | 88 +---- spec/controllers/projects_controller_spec.rb | 4 +- spec/controllers/snippets_controller_spec.rb | 35 +- spec/dot_gitlab_ci/rules_spec.rb | 35 ++ .../blobs/blob_line_permalink_updater_spec.rb | 48 +-- .../schemas/entities/note_user_entity.json | 6 +- .../blob/components/blob_content_spec.js | 2 + .../components/design_presentation_spec.js | 337 ++++++++-------- .../negative_tests/identity_provider.yml | 5 + .../positive_tests/identity_provider.yml | 2 + .../components/mr_discussion_filter_spec.js | 7 +- spec/frontend/notes/stores/getters_spec.js | 13 + .../components/blob_content_viewer_spec.js | 2 +- .../components/snippet_blob_view_spec.js | 5 + .../__snapshots__/simple_viewer_spec.js.snap | 80 ++-- .../components/blob_viewers/mock_data.js | 41 ++ .../blob_viewers/simple_viewer_spec.js | 97 ++++- .../__snapshots__/utils_spec.js.snap | 2 +- .../source_viewer/source_viewer_spec.js | 1 - .../Terraform/base_gitlab_ci_yaml_spec.rb | 19 +- .../base_latest_gitlab_ci_yaml_spec.rb | 19 +- .../terraform_gitlab_ci_yaml_spec.rb | 8 + .../terraform_latest_gitlab_ci_yaml_spec.rb | 12 + .../ci/yaml_processor/feature_flags_spec.rb | 22 +- .../mutations/work_items/delete_spec.rb | 35 +- .../setup/generate_as_if_foss_env_spec.rb | 14 +- .../work_items/delete_service_spec.rb | 24 +- spec/simplecov_env.rb | 6 +- ...ambiguous_ref_controller_shared_context.rb | 1 - .../policies/group_policy_shared_context.rb | 1 + vite.config.js | 4 + 114 files changed, 1863 insertions(+), 1164 deletions(-) delete mode 100644 app/views/snippets/index.html.haml delete mode 100644 config/feature_flags/development/redirect_with_ref_type.yml create mode 100644 config/metrics/counts_28d/20240130072055_p_ci_templates_opentofu_base_latest_monthly.yml create mode 100644 config/metrics/counts_28d/20240130072115_p_ci_templates_opentofu_latest_monthly.yml create mode 100644 config/metrics/counts_7d/20240130072053_p_ci_templates_opentofu_base_latest_weekly.yml create mode 100644 config/metrics/counts_7d/20240130072114_p_ci_templates_opentofu_latest_weekly.yml create mode 100644 data/deprecations/16-9-deprecate-terraform-cicd-templates.yml create mode 100644 db/migrate/20240110202002_add_is_unique_to_issuable_resource_links.rb create mode 100644 db/migrate/20240110204949_add_partial_unique_index_on_issue_id_and_link_to_issuable_resource_links.rb create mode 100644 db/migrate/20240129175101_add_archived_and_traversal_ids_columns_to_sbom_occurrences.rb create mode 100644 db/schema_migrations/20240110202002 create mode 100644 db/schema_migrations/20240110204949 create mode 100644 db/schema_migrations/20240129175101 create mode 100644 lib/gitlab/ci/templates/OpenTofu.latest.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/OpenTofu/Base.latest.gitlab-ci.yml create mode 100755 scripts/frontend/build_css.mjs rename scripts/frontend/{ => lib}/compile_css.mjs (76%) mode change 100755 => 100644 create mode 100644 spec/frontend/editor/schema/ci/yaml_tests/negative_tests/identity_provider.yml create mode 100644 spec/frontend/editor/schema/ci/yaml_tests/positive_tests/identity_provider.yml create mode 100644 spec/frontend/vue_shared/components/blob_viewers/mock_data.js diff --git a/.gitlab/ci/as-if-foss.gitlab-ci.yml b/.gitlab/ci/as-if-foss.gitlab-ci.yml index fc8db3ba974..5bcf1ff696c 100644 --- a/.gitlab/ci/as-if-foss.gitlab-ci.yml +++ b/.gitlab/ci/as-if-foss.gitlab-ci.yml @@ -1,7 +1,7 @@ .as-if-foss-variables: variables: AS_IF_FOSS_BRANCH: "as-if-foss/${CI_COMMIT_REF_NAME}" - FOSS_REPOSITORY: "https://dummy:${AS_IF_FOSS_TOKEN}@gitlab.com/gitlab-org/gitlab-foss.git" + FOSS_REPOSITORY: "https://dummy:${AS_IF_FOSS_TOKEN}@gitlab.com/${CI_PROJECT_NAMESPACE}/gitlab-foss.git" prepare-as-if-foss-branch: extends: @@ -66,6 +66,10 @@ start-as-if-foss: RUBY_VERSION: $RUBY_VERSION ENABLE_RSPEC: $ENABLE_RSPEC ENABLE_RSPEC_FAST_SPEC_HELPER: $ENABLE_RSPEC_FAST_SPEC_HELPER + ENABLE_RSPEC_PRAEFECT: $ENABLE_RSPEC_PRAEFECT + ENABLE_RSPEC_SINGLE_DB: $ENABLE_RSPEC_SINGLE_DB + ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION: $ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION + ENABLE_RSPEC_SINGLE_REDIS: $ENABLE_RSPEC_SINGLE_REDIS ENABLE_RSPEC_UNIT: $ENABLE_RSPEC_UNIT ENABLE_RSPEC_INTEGRATION: $ENABLE_RSPEC_INTEGRATION ENABLE_RSPEC_SYSTEM: $ENABLE_RSPEC_SYSTEM @@ -86,7 +90,7 @@ start-as-if-foss: ENABLE_QA_SELECTORS: $ENABLE_QA_SELECTORS ENABLE_STATIC_ANALYSIS: $ENABLE_STATIC_ANALYSIS trigger: - project: gitlab-org/gitlab-foss + project: ${CI_PROJECT_NAMESPACE}/gitlab-foss branch: as-if-foss/${CI_COMMIT_REF_NAME} strategy: depend diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 9d78fb102f9..22a6b3d4842 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -226,12 +226,6 @@ graphql-schema-dump: - tmp/tests/graphql/gitlab_schema.graphql - tmp/tests/graphql/gitlab_schema.json -graphql-schema-dump as-if-foss: - extends: - - graphql-schema-dump - - .frontend:rules:default-frontend-jobs-as-if-foss - - .as-if-foss - .frontend-test-base: extends: - .default-retry @@ -279,14 +273,6 @@ jest predictive: script: - if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]] || [[ -s "$RSPEC_MATCHING_JS_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:predictive"; fi -jest as-if-foss: - extends: - - .jest-base - - .frontend:rules:jest:as-if-foss - - .as-if-foss - needs: ["rspec-all frontend_fixture as-if-foss"] - parallel: 10 - jest predictive as-if-foss: extends: - .jest-base @@ -434,12 +420,3 @@ compile-storybook: when: always paths: - storybook/public - -compile-storybook as-if-foss: - extends: - - .compile-storybook-base - - .as-if-foss - - .frontend:rules:default-frontend-jobs-as-if-foss - needs: - - job: "graphql-schema-dump as-if-foss" - - job: "rspec-all frontend_fixture as-if-foss" diff --git a/.gitlab/ci/preflight.gitlab-ci.yml b/.gitlab/ci/preflight.gitlab-ci.yml index cd1a9c753cb..9213ff4ca2b 100644 --- a/.gitlab/ci/preflight.gitlab-ci.yml +++ b/.gitlab/ci/preflight.gitlab-ci.yml @@ -85,9 +85,3 @@ qa:selectors: - .qa:rules:selectors script: - bundle exec bin/qa Test::Sanity::Selectors - -qa:selectors-as-if-foss: - extends: - - qa:selectors - - .qa:rules:selectors-as-if-foss - - .as-if-foss diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index 391e25956eb..7d0910f7ba5 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -48,12 +48,6 @@ qa:internal: script: - bundle exec rspec -O .rspec_internal -qa:internal-as-if-foss: - extends: - - qa:internal - - .qa:rules:internal-as-if-foss - - .as-if-foss - cache-qa-gems: extends: - .qa-job-base diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index e46e3d5b462..09ce8f8d0f9 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -358,6 +358,26 @@ rspec:artifact-collector unit: - job: rspec unit clickhouse # 1 job optional: true +rspec:artifact-collector as-if-foss: + extends: + - .artifact-collector + - .as-if-foss:rules:start-as-if-foss + needs: + # We need to wait for `start-as-if-foss` because cross project needs + # will not wait, and it'll simply look at the latest pipeline regardless + # status. This means we need to wait for the whole FOSS pipeline before + # trying to fetch the artifacts from there, ensuring they're available. + - job: start-as-if-foss + - project: gitlab-org/gitlab-foss + ref: as-if-foss/${CI_COMMIT_REF_NAME} + job: rspec:artifact-collector unit + - project: gitlab-org/gitlab-foss + ref: as-if-foss/${CI_COMMIT_REF_NAME} + job: rspec:artifact-collector system + - project: gitlab-org/gitlab-foss + ref: as-if-foss/${CI_COMMIT_REF_NAME} + job: rspec:artifact-collector remainder + rspec:artifact-collector system: extends: - .artifact-collector @@ -380,35 +400,6 @@ rspec:artifact-collector remainder: - !reference ['.rails:rules:ee-and-foss-migration', rules] - !reference ['.rails:rules:ee-and-foss-background-migration', rules] -rspec:artifact-collector as-if-foss unit: - extends: - - .artifact-collector - - .rails:rules:as-if-foss-unit - needs: - - rspec unit pg14-as-if-foss # 32 jobs - -rspec:artifact-collector as-if-foss system: - extends: - - .artifact-collector - - .rails:rules:as-if-foss-system - needs: - - rspec system pg14-as-if-foss # 32 jobs - -rspec:artifact-collector as-if-foss remainder: - extends: - - .artifact-collector - needs: - - job: rspec integration pg14-as-if-foss # 16 jobs - optional: true - - job: rspec migration pg14-as-if-foss # 15 jobs - optional: true - - job: rspec background_migration pg14-as-if-foss # 5 jobs - optional: true - rules: - - !reference ['.rails:rules:as-if-foss-integration', rules] - - !reference ['.rails:rules:as-if-foss-migration', rules] - - !reference ['.rails:rules:as-if-foss-background-migration', rules] - rspec:artifact-collector unit single-redis: extends: - .artifact-collector @@ -494,11 +485,7 @@ rspec:coverage: - job: rspec:artifact-collector remainder single-redis optional: true # as-if-foss jobs - - job: rspec:artifact-collector as-if-foss unit - optional: true - - job: rspec:artifact-collector as-if-foss system - optional: true - - job: rspec:artifact-collector as-if-foss remainder + - job: rspec:artifact-collector as-if-foss optional: true # EE jobs - job: rspec:artifact-collector ee single-redis @@ -656,131 +643,6 @@ rspec-ee:predictive:trigger: - artifact: "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml" job: rspec-predictive:pipeline-generate -rspec migration pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rspec-base-migration - - .rspec-migration-parallel - - .rails:rules:as-if-foss-migration - -rspec background_migration pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rspec-base-migration - - .rspec-background-migration-parallel - - .rails:rules:as-if-foss-background-migration - -rspec migration pg14-as-if-foss single-db: - extends: - - rspec migration pg14-as-if-foss - - .single-db-rspec - - .rspec-migration-parallel - - .rails:rules:single-db-as-if-foss - -rspec background_migration pg14-as-if-foss single-db: - extends: - - rspec background_migration pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec migration pg14-as-if-foss single-db-ci-connection: - extends: - - rspec migration pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rspec-migration-parallel - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec background_migration pg14-as-if-foss single-db-ci-connection: - extends: - - rspec background_migration pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec migration pg14-as-if-foss clusterwide-db: - extends: - - rspec migration pg14-as-if-foss - - .clusterwide-db - - .rspec-migration-parallel - - .rails:rules:clusterwide-db - -rspec background_migration pg14-as-if-foss clusterwide-db: - extends: - - rspec background_migration pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - -rspec unit pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rails:rules:as-if-foss-unit - - .rspec-unit-parallel - -rspec unit pg14-as-if-foss single-db: - extends: - - rspec unit pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec unit pg14-as-if-foss single-db-ci-connection: - extends: - - rspec unit pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec unit pg14-as-if-foss clusterwide-db: - extends: - - rspec unit pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - -rspec integration pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rails:rules:as-if-foss-integration - - .rspec-integration-parallel - -rspec integration pg14-as-if-foss single-db: - extends: - - rspec integration pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec integration pg14-as-if-foss single-db-ci-connection: - extends: - - rspec integration pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec integration pg14-as-if-foss clusterwide-db: - extends: - - rspec integration pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - -rspec system pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rails:rules:as-if-foss-system - - .rspec-system-parallel - -rspec system pg14-as-if-foss single-db: - extends: - - rspec system pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec system pg14-as-if-foss single-db-ci-connection: - extends: - - rspec system pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec system pg14-as-if-foss clusterwide-db: - extends: - - rspec system pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - .rspec-ee-base-gitlab-duo: extends: - .rspec-ee-base-pg14 diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 65b75c3e237..0e90594881b 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -38,6 +38,9 @@ .if-merge-request: &if-merge-request if: '$CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached"' +.if-not-merge-request: &if-not-merge-request + if: '$CI_MERGE_REQUEST_EVENT_TYPE == null' + # Once https://gitlab.com/gitlab-org/gitlab/-/issues/373904 is implemented, we should be able to change this back to # if: '($CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached") && $CI_MERGE_REQUEST_APPROVALS_COUNT > 0' # or any similar condition to check that the MR has *any* approval (not just required approval). @@ -68,9 +71,6 @@ .if-merge-request-labels-as-if-foss: &if-merge-request-labels-as-if-foss if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-as-if-foss/' -.if-merge-request-labels-as-if-foss-cross-project: &if-merge-request-labels-as-if-foss-cross-project - if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-as-if-foss-cross-project/' - .if-merge-request-labels-as-if-jh: &if-merge-request-labels-as-if-jh if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-as-if-jh/' @@ -1352,22 +1352,6 @@ - <<: *if-merge-request changes: *code-backstage-patterns -.frontend:rules:jest:as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - <<: *if-merge-request-labels-run-all-jest - - <<: *if-merge-request - changes: *frontend-dependency-patterns - - <<: *if-security-merge-request - changes: *code-backstage-patterns - - <<: *if-merge-request-not-approved - when: never - - <<: *if-merge-request - changes: *frontend-patterns-for-as-if-foss - .frontend:rules:jest:predictive:as-if-foss: rules: - !reference [".strict-ee-only-rules", rules] @@ -1384,15 +1368,6 @@ - <<: *if-merge-request changes: *frontend-patterns-for-as-if-foss -.frontend:rules:eslint-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - <<: *if-merge-request - changes: *frontend-patterns-for-as-if-foss - .frontend:rules:coverage-frontend: rules: - <<: *if-not-ee @@ -1504,20 +1479,6 @@ - <<: *if-default-refs changes: *code-qa-patterns -.qa:rules:selectors-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request - changes: *frontend-qa-patterns - - <<: *if-merge-request-labels-as-if-foss - - <<: *if-merge-request-labels-run-all-rspec - -.qa:rules:internal-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-default-refs - changes: *qa-patterns - .qa:rules:determine-e2e-tests: rules: - <<: *if-not-ee @@ -1950,6 +1911,7 @@ - <<: *if-merge-request-labels-run-single-db - <<: *if-merge-request-labels-pipeline-expedite when: never + - if: '$ENABLE_RSPEC_SINGLE_REDIS == "true"' - <<: *if-merge-request changes: *redis-patterns - <<: *if-default-branch-schedule-nightly @@ -1965,6 +1927,7 @@ - <<: *if-merge-request-labels-run-single-db - <<: *if-merge-request-labels-pipeline-expedite when: never + - if: '$ENABLE_RSPEC_SINGLE_DB == "true"' - <<: *if-merge-request changes: *db-patterns - <<: *if-merge-request @@ -1977,11 +1940,6 @@ when: never - !reference [".rails:rules:single-db", "rules"] -.rails:rules:single-db-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - !reference [".rails:rules:single-db", "rules"] - .rails:rules:db:check-migrations-single-db: rules: - <<: *if-merge-request-labels-run-single-db @@ -1997,6 +1955,7 @@ - <<: *if-merge-request-labels-run-single-db - <<: *if-merge-request-labels-pipeline-expedite when: never + - if: '$ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION == "true"' - <<: *if-merge-request changes: *db-patterns - <<: *if-merge-request @@ -2009,11 +1968,6 @@ when: never - !reference [".rails:rules:single-db-ci-connection", "rules"] -.rails:rules:single-db-ci-connection-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - !reference [".rails:rules:single-db-ci-connection", "rules"] - .rails:rules:db:check-migrations-single-db-ci-connection: rules: - <<: *if-merge-request-labels-run-single-db @@ -2047,6 +2001,8 @@ .rails:rules:praefect-with-db: rules: + - if: '$ENABLE_RSPEC_PRAEFECT == "true"' + allow_failure: true - if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-praefect-with-db/' allow_failure: true @@ -2264,64 +2220,6 @@ when: manual allow_failure: true -.rails:rules:as-if-foss-migration: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - # When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well. - # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840. - - <<: *if-merge-request-labels-as-if-foss - changes: *db-patterns - - <<: *if-automated-merge-request - changes: *db-patterns - - <<: *if-security-merge-request - changes: *db-patterns - - <<: *if-merge-request-not-approved - 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-unit: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-fork-merge-request - when: never - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - !reference [".rails:rules:ee-and-foss-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - -.rails:rules:as-if-foss-integration: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-fork-merge-request - when: never - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - !reference [".rails:rules:ee-and-foss-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - -.rails:rules:as-if-foss-system: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-fork-merge-request - when: never - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - !reference [".rails:rules:system-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *code-backstage-patterns - .rails:rules:ee-and-foss-db-library-code: rules: - <<: *if-merge-request-labels-pipeline-expedite @@ -2520,18 +2418,6 @@ - <<: *if-default-refs changes: *code-backstage-qa-patterns -.static-analysis:rules:static-analysis-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *code-backstage-qa-patterns - - <<: *if-security-merge-request - changes: *code-backstage-qa-patterns - - <<: *if-merge-request - changes: [".gitlab/ci/static-analysis.gitlab-ci.yml"] - - <<: *if-merge-request - changes: *static-analysis-patterns - .static-analysis:rules:trigger-depsaster: rules: - if: "$ENABLE_DEPSASTER != 'true'" @@ -3018,28 +2904,249 @@ #################### # as-if-foss rules # #################### + +# This is a very big rules set because it's the union of all as-if-foss jobs. +# We want to start this for any FOSS jobs we want to run. For example: +# (This is not an exhaustive list and can be outdated!) +# .build-images:rules:build-qa-image-merge-requests +# .build-images:rules:build-assets-image +# .frontend:rules:compile-production-assets +# .frontend:rules:default-frontend-jobs-as-if-foss +# .rails:rules:single-db +# .rails:rules:single-db-ci-connection +# .rails:rules:single-redis +# .rails:rules:ee-and-foss-default-rules +# .rails:rules:system-default-rules .as-if-foss:rules:start-as-if-foss: rules: - if: '$AS_IF_FOSS_TOKEN == null' when: never + - <<: *if-not-merge-request # This is only designed to run in a merge request + when: never - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss-cross-project + - <<: *if-merge-request-labels-as-if-foss + - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request-labels-run-all-jest + - <<: *if-merge-request-labels-run-clusterwide-db + - <<: *if-merge-request-labels-run-single-db + - <<: *if-merge-request-labels-run-review-app + - <<: *if-merge-request-labels-run-all-e2e + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - <<: *if-merge-request-not-approved + when: never + - <<: *if-merge-request-labels-frontend-and-feature-flag + - <<: *if-merge-request + changes: *code-backstage-qa-patterns + - <<: *if-merge-request + changes: *nodejs-patterns + - <<: *if-merge-request + changes: *static-analysis-patterns + - <<: *if-merge-request + changes: *db-patterns + - <<: *if-merge-request + changes: *workhorse-patterns + - <<: *if-merge-request + changes: *decomposed-db-models-patterns + - <<: *if-merge-request + changes: *redis-patterns + - <<: *if-merge-request + changes: *feature-flag-development-config-patterns + - <<: *if-merge-request-targeting-stable-branch + changes: *setup-test-env-patterns + - <<: *if-automated-merge-request + changes: *db-patterns + - <<: *if-automated-merge-request + changes: *backend-patterns + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + - <<: *if-security-merge-request + changes: *backend-patterns + - <<: *if-security-merge-request + changes: *code-backstage-qa-patterns + - <<: *if-security-merge-request + changes: *db-patterns + - <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e + changes: *feature-flag-development-config-patterns .as-if-foss:rules:start-as-if-foss:allow-failure:manual: rules: - if: '$AS_IF_FOSS_TOKEN == null' when: never + - <<: *if-not-merge-request + when: never - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss-cross-project - when: manual + # Copy everything from .as-if-foss:rules:start-as-if-foss + # and add `allow_failure: true` and `when: manual` to all + - <<: *if-merge-request-labels-as-if-foss allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-all-rspec + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-all-jest + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-clusterwide-db + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-single-db + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-review-app + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-all-e2e + allow_failure: true + when: manual + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - <<: *if-merge-request-not-approved + when: never + - <<: *if-merge-request-labels-frontend-and-feature-flag + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *code-backstage-qa-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *nodejs-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *static-analysis-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *db-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *workhorse-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *decomposed-db-models-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *redis-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *feature-flag-development-config-patterns + allow_failure: true + when: manual + - <<: *if-merge-request-targeting-stable-branch + changes: *setup-test-env-patterns + allow_failure: true + when: manual + - <<: *if-automated-merge-request + changes: *db-patterns + allow_failure: true + when: manual + - <<: *if-automated-merge-request + changes: *backend-patterns + allow_failure: true + when: manual + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + allow_failure: true + when: manual + - <<: *if-security-merge-request + changes: *backend-patterns + allow_failure: true + when: manual + - <<: *if-security-merge-request + changes: *code-backstage-qa-patterns + allow_failure: true + when: manual + - <<: *if-security-merge-request + changes: *db-patterns + allow_failure: true + when: manual + - <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e + changes: *feature-flag-development-config-patterns + allow_failure: true + when: manual .as-if-foss:rules:start-as-if-foss:allow-failure: rules: - if: '$AS_IF_FOSS_TOKEN == null' when: never + - <<: *if-not-merge-request + when: never - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss-cross-project + # Copy everything from .as-if-foss:rules:start-as-if-foss + # and add `allow_failure: true` to all + - <<: *if-merge-request-labels-as-if-foss + allow_failure: true + - <<: *if-merge-request-labels-run-all-rspec + allow_failure: true + - <<: *if-merge-request-labels-run-all-jest + allow_failure: true + - <<: *if-merge-request-labels-run-clusterwide-db + allow_failure: true + - <<: *if-merge-request-labels-run-single-db + allow_failure: true + - <<: *if-merge-request-labels-run-review-app + allow_failure: true + - <<: *if-merge-request-labels-run-all-e2e + allow_failure: true + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - <<: *if-merge-request-not-approved + when: never + - <<: *if-merge-request-labels-frontend-and-feature-flag + allow_failure: true + - <<: *if-merge-request + changes: *code-backstage-qa-patterns + allow_failure: true + - <<: *if-merge-request + changes: *nodejs-patterns + allow_failure: true + - <<: *if-merge-request + changes: *static-analysis-patterns + allow_failure: true + - <<: *if-merge-request + changes: *db-patterns + allow_failure: true + - <<: *if-merge-request + changes: *workhorse-patterns + allow_failure: true + - <<: *if-merge-request + changes: *decomposed-db-models-patterns + allow_failure: true + - <<: *if-merge-request + changes: *redis-patterns + allow_failure: true + - <<: *if-merge-request + changes: *feature-flag-development-config-patterns + allow_failure: true + - <<: *if-merge-request-targeting-stable-branch + changes: *setup-test-env-patterns + allow_failure: true + - <<: *if-automated-merge-request + changes: *db-patterns + allow_failure: true + - <<: *if-automated-merge-request + changes: *backend-patterns + allow_failure: true + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + allow_failure: true + - <<: *if-security-merge-request + changes: *backend-patterns + allow_failure: true + - <<: *if-security-merge-request + changes: *code-backstage-qa-patterns + allow_failure: true + - <<: *if-security-merge-request + changes: *db-patterns + allow_failure: true + - <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e + changes: *feature-flag-development-config-patterns allow_failure: true ################## diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml index 997dfde4271..cce0beaa5cd 100644 --- a/.gitlab/ci/static-analysis.gitlab-ci.yml +++ b/.gitlab/ci/static-analysis.gitlab-ci.yml @@ -34,12 +34,6 @@ static-analysis: - yarn_install_script - fail_on_warnings scripts/static-analysis -static-analysis as-if-foss: - extends: - - static-analysis - - .static-analysis:rules:static-analysis-as-if-foss - - .as-if-foss - static-verification-with-database: extends: - .static-analysis-base @@ -69,13 +63,6 @@ generate-apollo-graphql-schema: paths: - "${GRAPHQL_SCHEMA_APOLLO_FILE}" -generate-apollo-graphql-schema as-if-foss: - extends: - - generate-apollo-graphql-schema - - .frontend:rules:eslint-as-if-foss - - .as-if-foss - needs: ['graphql-schema-dump as-if-foss'] - eslint: extends: - .static-analysis-base @@ -88,13 +75,6 @@ eslint: - yarn_install_script - run_timed_command "yarn run lint:eslint:all" -eslint as-if-foss: - extends: - - eslint - - .frontend:rules:eslint-as-if-foss - - .as-if-foss - needs: ['generate-apollo-graphql-schema as-if-foss'] - haml-lint: extends: - .static-analysis-base diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml index 25e222a65dc..a60b91c69d5 100644 --- a/.rubocop_todo/layout/argument_alignment.yml +++ b/.rubocop_todo/layout/argument_alignment.yml @@ -819,10 +819,6 @@ Layout/ArgumentAlignment: - 'ee/db/geo/migrate/20180405074130_add_partial_index_project_repository_verification.rb' - 'ee/db/geo/post_migrate/20210217020154_add_unique_index_on_container_repository_registry.rb' - 'ee/db/geo/post_migrate/20210217020156_add_unique_index_on_terraform_state_version_registry.rb' - - 'ee/lib/audit/compliance_framework_changes_auditor.rb' - - 'ee/lib/audit/external_status_check_changes_auditor.rb' - - 'ee/lib/audit/group_changes_auditor.rb' - - 'ee/lib/audit/project_changes_auditor.rb' - 'ee/lib/ee/gitlab/background_migration/backfill_epic_cache_counts.rb' - 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb' - 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_storage_size_without_uploads_size.rb' @@ -855,9 +851,6 @@ Layout/ArgumentAlignment: - 'ee/spec/lib/api/entities/protected_environments/approval_rule_for_summary_spec.rb' - 'ee/spec/lib/api/entities/protected_environments/approval_rule_spec.rb' - 'ee/spec/lib/api/entities/protected_environments/deploy_access_level_spec.rb' - - 'ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb' - - 'ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb' - - 'ee/spec/lib/audit/protected_branches_changes_auditor_spec.rb' - 'ee/spec/lib/ee/api/entities/analytics/code_review/merge_request_spec.rb' - 'ee/spec/lib/ee/api/entities/geo_node_status_spec.rb' - 'ee/spec/lib/ee/gitlab/analytics/cycle_analytics/aggregated/base_query_builder_spec.rb' diff --git a/Gemfile b/Gemfile index d4d74a2c81a..84aee6fb99f 100644 --- a/Gemfile +++ b/Gemfile @@ -198,6 +198,7 @@ gem 'google-apis-androidpublisher_v3', '~> 0.34.0' # rubocop:todo Gemfile/Missin gem 'googleauth', '~> 1.8.1', feature_category: :shared gem 'google-cloud-artifact_registry-v1', '~> 0.11.0', feature_category: :shared +gem 'google-cloud-compute-v1', '~> 2.6.0', feature_category: :shared # Seed data gem 'seed-fu', '~> 2.3.7' # rubocop:todo Gemfile/MissingFeatureCategory @@ -276,7 +277,7 @@ gem 're2', '2.7.0' # rubocop:todo Gemfile/MissingFeatureCategory # Misc -gem 'semver_dialects', '~> 1.6', feature_category: :static_application_security_testing +gem 'semver_dialects', '~> 1.6.1', feature_category: :static_application_security_testing gem 'version_sorter', '~> 2.3' # rubocop:todo Gemfile/MissingFeatureCategory gem 'csv_builder', path: 'gems/csv_builder' # rubocop:todo Gemfile/MissingFeatureCategory @@ -556,7 +557,7 @@ gem 'ssh_data', '~> 1.3' # rubocop:todo Gemfile/MissingFeatureCategory gem 'spamcheck', '~> 1.3.0' # rubocop:todo Gemfile/MissingFeatureCategory # Gitaly GRPC protocol definitions -gem 'gitaly', '~> 16.8', feature_category: :gitaly +gem 'gitaly', '~> 16.9.0-rc2', feature_category: :gitaly # KAS GRPC protocol definitions gem 'kas-grpc', '~> 0.3.0', feature_category: :deployment_management diff --git a/Gemfile.checksum b/Gemfile.checksum index e38a2d1647b..6c0a4d1bab8 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -207,7 +207,7 @@ {"name":"gettext","version":"3.4.9","platform":"ruby","checksum":"292864fe6a15c224cee4125a4a72fab426fdbb280e4cff3cfe44935f549b009a"}, {"name":"gettext_i18n_rails","version":"1.11.0","platform":"ruby","checksum":"e19c7e4a256c500f7f38396dca44a282b9838ae278f57c362993a54964b22bbe"}, {"name":"git","version":"1.18.0","platform":"ruby","checksum":"c9b80462e4565cd3d7a9ba8440c41d2c52244b17b0dad0bfddb46de70630c465"}, -{"name":"gitaly","version":"16.9.0.pre.rc1","platform":"ruby","checksum":"10b6afe853d00a74198434fcbd9dd803e6ad6e0a9dc1b2aded1955bcbeb85eb5"}, +{"name":"gitaly","version":"16.9.0.pre.rc2","platform":"ruby","checksum":"6b2066f8df33ddeef9daeb02f0d749d64c6f2e970c8ba3fa14daf520799c9e32"}, {"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"}, {"name":"gitlab-chronic","version":"0.10.5","platform":"ruby","checksum":"f80f18dc699b708870a80685243331290bc10cfeedb6b99c92219722f729c875"}, {"name":"gitlab-dangerfiles","version":"4.6.0","platform":"ruby","checksum":"441b37b17d1dad36268517490a30aaf57e43dffb2e9ebc1da38d3bc9fa20741e"}, @@ -246,6 +246,8 @@ {"name":"google-apis-sqladmin_v1beta4","version":"0.41.0","platform":"ruby","checksum":"551553b6481879f1cd39fb83cc2a2c2ea9334afc4bf261b96900dd559f96749d"}, {"name":"google-apis-storage_v1","version":"0.29.0","platform":"ruby","checksum":"9dab410ab4671ed8ebf736d7eb4f4641fa072ad32a23d34c252c10d71f1683cc"}, {"name":"google-cloud-artifact_registry-v1","version":"0.11.0","platform":"ruby","checksum":"ba80d2dce9767e663931ded7929b7f8bf5983a6e2ea68078e27e7ca9a940783e"}, +{"name":"google-cloud-common","version":"1.1.0","platform":"ruby","checksum":"738db08fd144b4fe37b4578ffd63308b64a86fd59f6979d240048f917a6fb5fb"}, +{"name":"google-cloud-compute-v1","version":"2.6.0","platform":"ruby","checksum":"b96059b33ffc2f25644d20161a0c1aa1331197073c2e44786b18f8b670f1141e"}, {"name":"google-cloud-core","version":"1.6.0","platform":"ruby","checksum":"ea1744cd5a3085d3072de3fab9106afc769cd198609ebb5c6eeb5f13da46b72a"}, {"name":"google-cloud-env","version":"1.6.0","platform":"ruby","checksum":"6179acb946975892c7908748df5722a4ebadfc8cf5bb7b0d8d933ca67183fa15"}, {"name":"google-cloud-errors","version":"1.3.0","platform":"ruby","checksum":"450b681e24c089a20721a01acc4408bb4a7b0df28c175aaab488da917480d64b"}, @@ -591,7 +593,7 @@ {"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"}, {"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"}, {"name":"selenium-webdriver","version":"4.17.0","platform":"ruby","checksum":"d876814216cf4d731e0fad07060e184cefc120c9e0de2a8e0bbca4b96d1c743c"}, -{"name":"semver_dialects","version":"1.6.0","platform":"ruby","checksum":"0d2af91eac2262c5365a182bd516bf1e2a94ba0954c64d58d85570e8166c0641"}, +{"name":"semver_dialects","version":"1.6.1","platform":"ruby","checksum":"6e5f592d8958480ea9dab80cbbbef0eea1032d373968a15b07786eae3f5e558e"}, {"name":"sentry-rails","version":"5.10.0","platform":"ruby","checksum":"99aa2fac136c26942eb1897c65de65dac88ad43ac5eb183ff20711287a137ebd"}, {"name":"sentry-raven","version":"3.1.2","platform":"ruby","checksum":"103d3b122958810d34898ce2e705bcf549ddb9d855a70ce9a3970ee2484f364a"}, {"name":"sentry-ruby","version":"5.10.0","platform":"ruby","checksum":"115c24c0aee1309210f3a2988fb118e2bec1f11609feeda90e694388b1183619"}, diff --git a/Gemfile.lock b/Gemfile.lock index 63bef853606..e16c2e3bcc8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -676,7 +676,7 @@ GEM git (1.18.0) addressable (~> 2.8) rchardet (~> 1.8) - gitaly (16.9.0.pre.rc1) + gitaly (16.9.0.pre.rc2) grpc (~> 1.0) gitlab (4.19.0) httparty (~> 0.20) @@ -792,6 +792,13 @@ GEM google-cloud-errors (~> 1.0) google-cloud-location (>= 0.4, < 2.a) grpc-google-iam-v1 (~> 1.1) + google-cloud-common (1.1.0) + google-protobuf (~> 3.14) + googleapis-common-protos-types (~> 1.2) + google-cloud-compute-v1 (2.6.0) + gapic-common (>= 0.20.0, < 2.a) + google-cloud-common (~> 1.0) + google-cloud-errors (~> 1.0) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) @@ -1543,7 +1550,7 @@ GEM rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) - semver_dialects (1.6.0) + semver_dialects (1.6.1) deb_version (~> 1.0.1) pastel (~> 0.8.0) thor (~> 1.3) @@ -1897,7 +1904,7 @@ DEPENDENCIES fuubar (~> 2.2.0) gettext (~> 3.3) gettext_i18n_rails (~> 1.11.0) - gitaly (~> 16.8) + gitaly (~> 16.9.0.pre.rc2) gitlab-backup-cli! gitlab-chronic (~> 0.10.5) gitlab-dangerfiles (~> 4.6.0) @@ -1936,6 +1943,7 @@ DEPENDENCIES google-apis-sqladmin_v1beta4 (~> 0.41.0) google-apis-storage_v1 (~> 0.29) google-cloud-artifact_registry-v1 (~> 0.11.0) + google-cloud-compute-v1 (~> 2.6.0) google-cloud-storage (~> 1.45.0) google-protobuf (~> 3.25, >= 3.25.1) googleauth (~> 1.8.1) @@ -2087,7 +2095,7 @@ DEPENDENCIES sd_notify (~> 0.1.0) seed-fu (~> 2.3.7) selenium-webdriver (~> 4.17) - semver_dialects (~> 1.6) + semver_dialects (~> 1.6.1) sentry-rails (~> 5.10.0) sentry-raven (~> 3.1) sentry-ruby (~> 5.10.0) diff --git a/app/assets/javascripts/blob/components/blob_content.vue b/app/assets/javascripts/blob/components/blob_content.vue index 5592a75a4d2..d757ff4a706 100644 --- a/app/assets/javascripts/blob/components/blob_content.vue +++ b/app/assets/javascripts/blob/components/blob_content.vue @@ -21,11 +21,26 @@ export default { required: false, default: () => ({}), }, + projectPath: { + type: String, + required: false, + default: '', + }, + currentRef: { + type: String, + required: false, + default: '', + }, content: { type: String, default: '', required: false, }, + showBlame: { + type: Boolean, + required: false, + default: false, + }, isRawContent: { type: Boolean, default: false, @@ -45,6 +60,11 @@ export default { type: Object, required: true, }, + isBlameLinkHidden: { + type: Boolean, + required: false, + default: false, + }, hideLineNumbers: { type: Boolean, required: false, @@ -66,6 +86,14 @@ export default { viewerError() { return this.activeViewer.renderError; }, + lineNumbers() { + // rawTextBlob is used for source code files and content for snippets + return ( + (this?.blob?.rawTextBlob?.split('\n')?.length || 1) - 1 || + this?.content?.split('\n')?.length || + 0 + ); + }, isContentLoaded() { return this.activeViewer.type === RICH_BLOB_VIEWER ? !this.loading && this.richContentLoaded @@ -93,10 +121,17 @@ export default { v-else ref="contentViewer" :content="content" + :current-ref="currentRef" + :project-path="projectPath" + :blob-path="blob.path || ''" :rich-viewer="richViewer" :is-raw-content="isRawContent" + :show-blame="showBlame" :file-name="blob.name" + :blame-path="blob.blamePath" :type="activeViewer.fileType" + :line-numbers="lineNumbers" + :is-blame-link-hidden="isBlameLinkHidden" :hide-line-numbers="hideLineNumbers" data-testid="blob-viewer-file-content" @richContentLoaded="richContentLoaded = true" diff --git a/app/assets/javascripts/editor/schema/ci.json b/app/assets/javascripts/editor/schema/ci.json index 1da224c2174..a2a02d2fc90 100644 --- a/app/assets/javascripts/editor/schema/ci.json +++ b/app/assets/javascripts/editor/schema/ci.json @@ -61,6 +61,9 @@ "id_tokens": { "$ref": "#/definitions/id_tokens" }, + "identity_provider": { + "$ref": "#/definitions/identity_provider" + }, "retry": { "$ref": "#/definitions/retry" }, @@ -703,6 +706,13 @@ } } }, + "identity_provider": { + "type": "string", + "markdownDescription": "Sets an identity provider (experimental), allowing automatic authentication with the external provider. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#identity_provider).", + "enum": [ + "google_cloud" + ] + }, "secrets": { "type": "object", "markdownDescription": "Defines secrets to be injected as environment variables. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#secrets).", @@ -1632,6 +1642,9 @@ "id_tokens": { "$ref": "#/definitions/id_tokens" }, + "identity_provider": { + "$ref": "#/definitions/identity_provider" + }, "secrets": { "$ref": "#/definitions/secrets" }, diff --git a/app/assets/javascripts/notes/components/mr_discussion_filter.vue b/app/assets/javascripts/notes/components/mr_discussion_filter.vue index c2ac95ca56e..4d78a888be7 100644 --- a/app/assets/javascripts/notes/components/mr_discussion_filter.vue +++ b/app/assets/javascripts/notes/components/mr_discussion_filter.vue @@ -85,7 +85,7 @@ export default { /> diff --git a/app/assets/javascripts/notes/constants.js b/app/assets/javascripts/notes/constants.js index 999ef8ff905..464c1cd181e 100644 --- a/app/assets/javascripts/notes/constants.js +++ b/app/assets/javascripts/notes/constants.js @@ -76,6 +76,11 @@ export const MR_FILTER_OPTIONS = [ s__('IssuableEvents|unassigned'), ], }, + { + text: __('Bot comments'), + value: 'bot_comments', + bot: true, + }, { text: __('Comments'), value: 'comments', diff --git a/app/assets/javascripts/notes/stores/getters.js b/app/assets/javascripts/notes/stores/getters.js index 62d991c2d9e..56bbb44df53 100644 --- a/app/assets/javascripts/notes/stores/getters.js +++ b/app/assets/javascripts/notes/stores/getters.js @@ -33,13 +33,15 @@ const hideActivity = (filters, discussion) => { // the first in a discussion or a single note // If the filter option filters based on icon check against the first notes system note icon f.systemNoteIcons?.includes(firstNote.system_note_icon_name) || - // If the filter option filters based on note type user the first notes type - f.noteType?.includes(firstNote.type) || + // If the filter option filters based on note type use the first notes type + (f.noteType?.includes(firstNote.type) && !firstNote.author.bot) || // If the filter option filters based on the note text then check if it is sytem // and filter based on the text of the system note (firstNote.system && f.noteText?.some((t) => firstNote.note.includes(t))) || // For individual notes we filter if the discussion is a single note and is not a sytem - (f.individualNote === discussion.individual_note && !firstNote.system) + (f.individualNote === discussion.individual_note && !firstNote.system) || + // For bot comments we filter on the authors `bot` boolean attribute + (f.bot && firstNote.author.bot) ) { return true; } diff --git a/app/assets/javascripts/repository/components/blob_content_viewer.vue b/app/assets/javascripts/repository/components/blob_content_viewer.vue index 8033b5f1225..24de4661466 100644 --- a/app/assets/javascripts/repository/components/blob_content_viewer.vue +++ b/app/assets/javascripts/repository/components/blob_content_viewer.vue @@ -195,10 +195,6 @@ export default { isUsingLfs() { return this.blobInfo.storedExternally && this.blobInfo.externalStorage === LFS_STORAGE; }, - isBlameEnabled() { - // Blame information within the blob viewer is not yet supported in our fallback (HAML) viewers - return !this.useFallback; - }, }, watch: { // Watch the URL 'plain' query value to know if the viewer needs changing. @@ -318,7 +314,7 @@ export default { :show-path="false" :override-copy="true" :show-fork-suggestion="showForkSuggestion" - :show-blame-toggle="isBlameEnabled" + :show-blame-toggle="true" :project-path="projectPath" :project-id="projectId" @viewer-changed="handleViewerChanged" @@ -359,8 +355,10 @@ export default { :content="legacySimpleViewer" :is-raw-content="true" :active-viewer="viewer" - :hide-line-numbers="true" + :show-blame="showBlame" + :current-ref="currentRef" :loading="isLoadingLegacyViewer" + :project-path="projectPath" :data-loading="isRenderingLegacyTextViewer" /> -import { GlIcon } from '@gitlab/ui'; import SafeHtml from '~/vue_shared/directives/safe_html'; -import { HIGHLIGHT_CLASS_NAME } from './constants'; +import Blame from '../source_viewer/components/blame_info.vue'; +import { calculateBlameOffset, shouldRender, toggleBlameClasses } from '../source_viewer/utils'; +import blameDataQuery from '../source_viewer/queries/blame_data.query.graphql'; import ViewerMixin from './mixins'; +import { HIGHLIGHT_CLASS_NAME, MAX_BLAME_LINES } from './constants'; export default { name: 'SimpleViewer', components: { - GlIcon, + Blame, }, directives: { SafeHtml, }, mixins: [ViewerMixin], inject: ['blobHash'], + props: { + blobPath: { + type: String, + required: true, + }, + showBlame: { + type: Boolean, + required: false, + default: false, + }, + isBlameLinkHidden: { + type: Boolean, + required: false, + default: false, + }, + projectPath: { + type: String, + required: false, + default: '', + }, + lineNumbers: { + type: Number, + required: true, + }, + currentRef: { + type: String, + required: false, + default: '', + }, + blamePath: { + type: String, + required: false, + default: '', + }, + }, data() { return { highlightedLine: null, + blameData: [], + fromLine: 1, + toLine: MAX_BLAME_LINES, }; }, computed: { - lineNumbers() { - return this.content.split('\n').length; + showBlameLink() { + return !this.isBlameLinkHidden && !this.showBlame; + }, + blameInfoForRange() { + return this.blameData.reduce((result, blame, index) => { + if (shouldRender(this.blameData, index)) { + result.push({ + ...blame, + blameOffset: calculateBlameOffset(blame.lineno, index), + }); + } + + return result; + }, []); + }, + }, + watch: { + showBlame: { + handler(isVisible) { + toggleBlameClasses(this.blameData, isVisible); + this.requestBlameInfo(this.fromLine, this.toLine); + }, + immediate: true, + }, + blameData: { + handler(blameData) { + if (!this.showBlame) return; + toggleBlameClasses(blameData, true); + }, + immediate: true, }, }, mounted() { @@ -29,6 +97,7 @@ export default { if (hash) { this.scrollToLine(hash, true); } + this.toLine = this.lineNumbers <= MAX_BLAME_LINES ? this.lineNumbers : MAX_BLAME_LINES; }, methods: { scrollToLine(hash, scroll = false) { @@ -46,31 +115,68 @@ export default { } } }, + async requestBlameInfo(fromLine, toLine) { + if (!this.showBlame) return; + + const { data } = await this.$apollo.query({ + query: blameDataQuery, + variables: { + ref: this.currentRef, + fullPath: this.projectPath, + filePath: this.blobPath, + fromLine, + toLine, + }, + }); + + const blob = data?.project?.repository?.blobs?.nodes[0]; + const blameGroups = blob?.blame?.groups; + const isDuplicate = this.blameData.includes(blameGroups[0]); + if (blameGroups && !isDuplicate) this.blameData.push(...blameGroups); + if (this.toLine < this.lineNumbers) { + this.fromLine += MAX_BLAME_LINES; + this.toLine += MAX_BLAME_LINES; + this.requestBlameInfo(this.fromLine, this.toLine); + } + }, }, userColorScheme: window.gon.user_color_scheme, };