From 4a50c598f3163ff2bd799abc4355d51f8ad2cfbe Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 15 Jul 2025 18:18:58 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/reports.gitlab-ci.yml | 16 +- .gitlab/ci/rules.gitlab-ci.yml | 13 +- .gitlab/ci/test-metadata.gitlab-ci.yml | 23 +- Gemfile.checksum | 4 +- Gemfile.lock | 4 +- Gemfile.next.checksum | 4 +- Gemfile.next.lock | 4 +- .../homepage/components/activity_widget.vue | 2 +- .../homepage/components/greeting_header.vue | 24 ++ .../homepage/components/homepage_app.vue | 4 +- .../components/merge_requests_widget.vue | 2 +- .../components/recently_viewed_widget.vue | 2 +- .../homepage/components/work_items_widget.vue | 2 +- .../profile/preferences/index.js | 40 --- .../pages/profiles/preferences/show/index.js | 2 - .../profiles/preferences_controller.rb | 1 - app/controllers/projects_controller.rb | 4 +- .../organizations/organization_helper.rb | 6 - app/models/concerns/ci/metadatable.rb | 7 +- app/models/concerns/counter_attribute.rb | 62 ++++- app/models/project.rb | 4 + app/models/user.rb | 1 - app/models/user_preference.rb | 16 +- .../concerns/projects/archive_events.rb | 31 +++ app/services/projects/archive_service.rb | 41 +++ app/services/projects/unarchive_service.rb | 39 +++ app/services/projects/update_service.rb | 19 -- app/views/profiles/preferences/show.html.haml | 3 - app/views/projects/_files.html.haml | 3 +- app/views/projects/tree/show.html.haml | 8 +- .../flush_counter_increments_worker.rb | 2 +- ...registries_packages_maven_cache_entries.rb | 12 + db/schema_migrations/20250618130943 | 1 + db/structure.sql | 34 +++ doc/api/graphql/reference/_index.md | 2 + doc/development/fe_guide/pinia.md | 45 ++- doc/user/gitlab_duo/_index.md | 8 - doc/user/gitlab_duo/feature_summary.md | 8 + doc/user/gitlab_duo_chat/agentic_chat.md | 13 +- doc/user/profile/preferences.md | 27 -- .../entities/ci/job_request/runner_info.rb | 2 +- lib/api/projects.rb | 16 +- lib/ci/job_token/jwt.rb | 2 +- lib/gitlab/ci/build/step.rb | 6 +- lib/gitlab/ci/jwt.rb | 2 +- lib/gitlab/ci/jwt_v2.rb | 2 +- lib/gitlab/counters/buffered_counter.rb | 3 +- .../flush_stale_counter_increments.rb | 2 +- .../import_export/project/import_export.yml | 1 + locale/gitlab.pot | 15 +- package.json | 2 +- .../profiles/preferences_controller_spec.rb | 6 +- .../components/greeting_header_spec.js | 53 ++++ .../organizations/organization_helper_spec.rb | 13 - spec/lib/ci/job_token/jwt_spec.rb | 6 +- spec/lib/gitlab/ci/jwt_spec.rb | 4 +- .../gitlab/counters/buffered_counter_spec.rb | 41 +-- spec/lib/gitlab/import_export/all_models.yml | 1 + spec/models/concerns/ci/metadatable_spec.rb | 29 ++ .../models/concerns/counter_attribute_spec.rb | 4 +- spec/models/project_spec.rb | 45 +++ spec/models/projects/data_transfer_spec.rb | 2 +- spec/models/user_preference_spec.rb | 34 --- spec/models/user_spec.rb | 4 - .../api/ci/runner/jobs_request_post_spec.rb | 4 +- spec/requests/api/projects_spec.rb | 30 +- .../services/projects/archive_service_spec.rb | 128 +++++++++ .../projects/unarchive_service_spec.rb | 119 ++++++++ spec/services/projects/update_service_spec.rb | 41 +-- spec/support/counter_attribute.rb | 1 + .../buffered_counter_shared_examples.rb | 46 ++++ .../counter_attribute_shared_examples.rb | 6 +- .../frontend_metrics_exporter_spec.rb | 256 ++++++++++++++++++ .../predictive_tests/metrics_exporter_spec.rb | 4 +- .../flush_counter_increments_worker_spec.rb | 3 +- tooling/bin/predictive_tests | 30 +- .../frontend_metrics_exporter.rb | 163 +++++++++++ .../predictive_tests/metrics_exporter.rb | 9 +- yarn.lock | 18 +- 79 files changed, 1315 insertions(+), 381 deletions(-) create mode 100644 app/assets/javascripts/homepage/components/greeting_header.vue delete mode 100644 app/assets/javascripts/organizations/profile/preferences/index.js create mode 100644 app/services/concerns/projects/archive_events.rb create mode 100644 app/services/projects/archive_service.rb create mode 100644 app/services/projects/unarchive_service.rb create mode 100644 db/migrate/20250618130943_add_downloads_counters_to_virtual_registries_packages_maven_cache_entries.rb create mode 100644 db/schema_migrations/20250618130943 create mode 100644 spec/frontend/homepage/components/greeting_header_spec.js create mode 100644 spec/models/concerns/ci/metadatable_spec.rb create mode 100644 spec/services/projects/archive_service_spec.rb create mode 100644 spec/services/projects/unarchive_service_spec.rb create mode 100644 spec/support/shared_examples/lib/gitlab/counters/buffered_counter_shared_examples.rb create mode 100644 spec/tooling/lib/tooling/predictive_tests/frontend_metrics_exporter_spec.rb create mode 100644 tooling/lib/tooling/predictive_tests/frontend_metrics_exporter.rb diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 901db22402a..4d473a20a71 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -1,7 +1,7 @@ include: - template: Jobs/SAST.gitlab-ci.yml - template: Jobs/Secret-Detection.gitlab-ci.yml - - template: Jobs/Dependency-Scanning.gitlab-ci.yml + - template: Jobs/Dependency-Scanning.latest.gitlab-ci.yml .sast-analyzer: # We need to re-`extends` from `sast` as the `extends` here overrides the one from the template. @@ -45,7 +45,8 @@ secret_detection: needs: [] variables: DS_EXCLUDED_PATHS: "qa/qa/ee/fixtures/secure_premade_reports, spec, ee/spec, tmp, storybook" # GitLab-specific - DS_EXCLUDED_ANALYZERS: "gemnasium-maven" + DS_ENFORCE_NEW_ANALYZER: "true" + DS_STATIC_REACHABILITY_ENABLED: "false" artifacts: paths: - gl-dependency-scanning-report.json # GitLab-specific @@ -55,13 +56,10 @@ secret_detection: # Remove sboms in test fixtures so that they are not ingested and scanned. - find spec ee/spec qa -path '**/fixtures/**/gl-sbom*.cdx.json' -delete -gemnasium-dependency_scanning: - variables: - DS_REMEDIATE: "false" - rules: !reference [".reports:rules:gemnasium-dependency_scanning", rules] - -gemnasium-python-dependency_scanning: - rules: !reference [".reports:rules:gemnasium-python-dependency_scanning", rules] +dependency-scanning: + extends: + - .ds-analyzer + - .reports:rules:dependency_scanning # Analyze dependencies for malicious behavior # See https://gitlab.com/gitlab-com/gl-security/security-research/package-hunter diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 60a2d817683..6f197806c88 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -2840,7 +2840,7 @@ - <<: *if-default-refs changes: *code-backstage-qa-patterns -.reports:rules:gemnasium-dependency_scanning: +.reports:rules:dependency_scanning: rules: - <<: *if-merge-request-labels-pipeline-expedite when: never @@ -2851,17 +2851,6 @@ - <<: *if-default-refs changes: *dependency-patterns -.reports:rules:gemnasium-python-dependency_scanning: - rules: - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - if: '$DEPENDENCY_SCANNING_DISABLED || $GITLAB_FEATURES !~ /\bdependency_scanning\b/ || $DS_EXCLUDED_ANALYZERS =~ /gemnasium-python/' - when: never - # Run Dependency Scanning on master until https://gitlab.com/gitlab-org/gitlab/-/issues/504908#note_2218591981 is resolved - - <<: *if-default-branch-refs - - <<: *if-default-refs - changes: *python-patterns - .reports:rules:test-dast: rules: - <<: *if-merge-request-labels-pipeline-expedite diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index 38487d2f233..169fcbf5e65 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -97,9 +97,30 @@ export-predictive-test-metrics: mkdir -p "$GLCI_CRYSTALBALL_MAPPING_DIR/coverage" retrieve_tests_mapping "$RSPEC_PACKED_TESTS_MAPPING_ALT_PATH" "$GLCI_CRYSTALBALL_MAPPING_DIR/coverage/mapping.json" script: - - tooling/bin/predictive_tests --export-selected-test-metrics + - tooling/bin/predictive_tests --export-predictive-backend-metrics artifacts: expire_in: 7d paths: - $GLCI_CRYSTALBALL_MAPPING_DIR - $GLCI_PREDICTIVE_TEST_METRICS_OUTPUT_DIR + +export-predictive-test-metrics-frontend: + extends: + - export-predictive-test-metrics + - .yarn-cache + - .with-ci-node-image + dependencies: + - detect-tests + - graphql-schema-dump + variables: + GLCI_JEST_FAILED_TESTS_FILE: "${GLCI_PREDICTIVE_TEST_METRICS_OUTPUT_DIR}/jest_failed_tests.txt" + before_script: + - !reference [export-predictive-test-metrics, before_script] + - yarn_install_script + script: + - tooling/bin/predictive_tests --export-predictive-frontend-metrics + artifacts: + expire_in: 7d + paths: + - $GLCI_PREDICTIVE_TEST_METRICS_OUTPUT_DIR + - $JEST_MATCHING_TEST_FILES_PATH diff --git a/Gemfile.checksum b/Gemfile.checksum index 3f9851ac831..d84a35787fe 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -159,7 +159,7 @@ {"name":"extended-markdown-filter","version":"0.7.0","platform":"ruby","checksum":"c8eeef7409fbae18c6b407cd3e4eeb5d25c35cb08fe1ac06f375df3db2d4f138"}, {"name":"factory_bot","version":"6.5.0","platform":"ruby","checksum":"6374b3a3593b8077ee9856d553d2e84d75b47b912cc24eafea4062f9363d2261"}, {"name":"factory_bot_rails","version":"6.5.0","platform":"ruby","checksum":"4a7b61635424a57cc60412a18b72b9dcfb02fabfce2c930447a01dce8b37c0a2"}, -{"name":"faraday","version":"2.13.1","platform":"ruby","checksum":"cc531eb5467e7d74d4517630fa96f1a7003647cbf20a9a3e067d098941217b75"}, +{"name":"faraday","version":"2.13.2","platform":"ruby","checksum":"5c19762e3bbe78e61d8007c5119f2968373c5296d6c6d6aa05b6f9cec34f2a1a"}, {"name":"faraday-follow_redirects","version":"0.3.0","platform":"ruby","checksum":"d92d975635e2c7fe525dd494fcd4b9bb7f0a4a0ec0d5f4c15c729530fdb807f9"}, {"name":"faraday-http-cache","version":"2.5.0","platform":"ruby","checksum":"64b7366d66e508e1c3dd855ebb20ce9da429330e412a23d9ebbc0a7a7b227463"}, {"name":"faraday-multipart","version":"1.1.1","platform":"ruby","checksum":"77a18ff40149030fd1aef55bb4fc7a67ce46419a8a3fcd010e28c2526e8d8903"}, @@ -457,7 +457,7 @@ {"name":"omniauth-google-oauth2","version":"1.1.1","platform":"ruby","checksum":"4496f126e84eaf760f9c6a5c69e5e7511f98092d7f25ad79fd2c0ae5e09b5039"}, {"name":"omniauth-oauth2","version":"1.8.0","platform":"ruby","checksum":"b2f8e9559cc7e2d4efba57607691d6d2b634b879fc5b5b6ccfefa3da85089e78"}, {"name":"omniauth-oauth2-generic","version":"0.2.8","platform":"ruby","checksum":"ce6e8539019d5ebf2f48867072b9f248f148bb4cbe7166dee655865abfae7613"}, -{"name":"omniauth-saml","version":"2.2.3","platform":"ruby","checksum":"d4e0dbdcb304e4bb74410eb75deaa1873b08a42afa7634c9c3171be0b34751b0"}, +{"name":"omniauth-saml","version":"2.2.4","platform":"ruby","checksum":"5acc45aee728ecc5c8f9f02b56c424cb359b62d9a25fb8039f15432c1a61f6eb"}, {"name":"omniauth-shibboleth-redux","version":"2.0.0","platform":"ruby","checksum":"e9b353fd103405fcc8549e8510b9cad857acf0b286d764fac5dba8a93ab8ffe1"}, {"name":"omniauth_openid_connect","version":"0.8.0","platform":"ruby","checksum":"1f2f3890386e2a742221cee0d2e903b78d874e6fab9ea3bfa31c1462f4793d25"}, {"name":"open4","version":"1.3.4","platform":"ruby","checksum":"a1df037310624ecc1ea1d81264b11c83e96d0c3c1c6043108d37d396dcd0f4b1"}, diff --git a/Gemfile.lock b/Gemfile.lock index fa3c6928178..9b4d90359b5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -612,7 +612,7 @@ GEM factory_bot_rails (6.5.0) factory_bot (~> 6.5) railties (>= 6.1.0) - faraday (2.13.1) + faraday (2.13.2) faraday-net_http (>= 2.0, < 3.5) json logger @@ -1288,7 +1288,7 @@ GEM omniauth-oauth2-generic (0.2.8) omniauth-oauth2 (~> 1.0) rake - omniauth-saml (2.2.3) + omniauth-saml (2.2.4) omniauth (~> 2.1) ruby-saml (~> 1.18) omniauth-shibboleth-redux (2.0.0) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 737e7c4c652..304dc1d0ae9 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -159,7 +159,7 @@ {"name":"extended-markdown-filter","version":"0.7.0","platform":"ruby","checksum":"c8eeef7409fbae18c6b407cd3e4eeb5d25c35cb08fe1ac06f375df3db2d4f138"}, {"name":"factory_bot","version":"6.5.0","platform":"ruby","checksum":"6374b3a3593b8077ee9856d553d2e84d75b47b912cc24eafea4062f9363d2261"}, {"name":"factory_bot_rails","version":"6.5.0","platform":"ruby","checksum":"4a7b61635424a57cc60412a18b72b9dcfb02fabfce2c930447a01dce8b37c0a2"}, -{"name":"faraday","version":"2.13.1","platform":"ruby","checksum":"cc531eb5467e7d74d4517630fa96f1a7003647cbf20a9a3e067d098941217b75"}, +{"name":"faraday","version":"2.13.2","platform":"ruby","checksum":"5c19762e3bbe78e61d8007c5119f2968373c5296d6c6d6aa05b6f9cec34f2a1a"}, {"name":"faraday-follow_redirects","version":"0.3.0","platform":"ruby","checksum":"d92d975635e2c7fe525dd494fcd4b9bb7f0a4a0ec0d5f4c15c729530fdb807f9"}, {"name":"faraday-http-cache","version":"2.5.0","platform":"ruby","checksum":"64b7366d66e508e1c3dd855ebb20ce9da429330e412a23d9ebbc0a7a7b227463"}, {"name":"faraday-multipart","version":"1.1.1","platform":"ruby","checksum":"77a18ff40149030fd1aef55bb4fc7a67ce46419a8a3fcd010e28c2526e8d8903"}, @@ -457,7 +457,7 @@ {"name":"omniauth-google-oauth2","version":"1.1.1","platform":"ruby","checksum":"4496f126e84eaf760f9c6a5c69e5e7511f98092d7f25ad79fd2c0ae5e09b5039"}, {"name":"omniauth-oauth2","version":"1.8.0","platform":"ruby","checksum":"b2f8e9559cc7e2d4efba57607691d6d2b634b879fc5b5b6ccfefa3da85089e78"}, {"name":"omniauth-oauth2-generic","version":"0.2.8","platform":"ruby","checksum":"ce6e8539019d5ebf2f48867072b9f248f148bb4cbe7166dee655865abfae7613"}, -{"name":"omniauth-saml","version":"2.2.3","platform":"ruby","checksum":"d4e0dbdcb304e4bb74410eb75deaa1873b08a42afa7634c9c3171be0b34751b0"}, +{"name":"omniauth-saml","version":"2.2.4","platform":"ruby","checksum":"5acc45aee728ecc5c8f9f02b56c424cb359b62d9a25fb8039f15432c1a61f6eb"}, {"name":"omniauth-shibboleth-redux","version":"2.0.0","platform":"ruby","checksum":"e9b353fd103405fcc8549e8510b9cad857acf0b286d764fac5dba8a93ab8ffe1"}, {"name":"omniauth_openid_connect","version":"0.8.0","platform":"ruby","checksum":"1f2f3890386e2a742221cee0d2e903b78d874e6fab9ea3bfa31c1462f4793d25"}, {"name":"open4","version":"1.3.4","platform":"ruby","checksum":"a1df037310624ecc1ea1d81264b11c83e96d0c3c1c6043108d37d396dcd0f4b1"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index 553c2b2aada..1e9cd1426ac 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -606,7 +606,7 @@ GEM factory_bot_rails (6.5.0) factory_bot (~> 6.5) railties (>= 6.1.0) - faraday (2.13.1) + faraday (2.13.2) faraday-net_http (>= 2.0, < 3.5) json logger @@ -1282,7 +1282,7 @@ GEM omniauth-oauth2-generic (0.2.8) omniauth-oauth2 (~> 1.0) rake - omniauth-saml (2.2.3) + omniauth-saml (2.2.4) omniauth (~> 2.1) ruby-saml (~> 1.18) omniauth-shibboleth-redux (2.0.0) diff --git a/app/assets/javascripts/homepage/components/activity_widget.vue b/app/assets/javascripts/homepage/components/activity_widget.vue index 3daae4b7af5..115a6762965 100644 --- a/app/assets/javascripts/homepage/components/activity_widget.vue +++ b/app/assets/javascripts/homepage/components/activity_widget.vue @@ -56,7 +56,7 @@ export default {