From f690cfa8c6e2faa61573f3959ddec701e21b9abb Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 2 Dec 2024 15:32:14 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/qa-common/main.gitlab-ci.yml | 4 +- .gitlab/ci/qa-common/variables.gitlab-ci.yml | 2 +- app/assets/images/web-ide-promo-popover.svg | 101 -------- .../projects/shared/web_ide_link/index.js | 3 +- .../protected_tags/protected_tag_edit.vue | 16 +- .../repository/components/header_area.vue | 97 ++++++- .../javascripts/repository/init_header_app.js | 46 +++- .../snippets/components/snippet_header.vue | 10 +- .../components/action_buttons.vue | 4 +- .../components/widget/action_buttons.vue | 2 +- .../clone_code_dropdown.stories.js | 21 ++ ...e_dropdown.vue => clone_code_dropdown.vue} | 28 +- .../snippet_code_dropdownstories.js | 33 --- .../vue_shared/components/web_ide_link.vue | 5 - app/assets/javascripts/work_items/utils.js | 7 + app/models/ci/job_token/scope.rb | 10 +- app/models/user.rb | 4 + app/models/work_items/widgets/milestone.rb | 8 + .../aggregate_last30_day_usage_service.rb | 39 +++ app/services/issuable_base_service.rb | 13 +- .../quick_actions/interpret_service.rb | 2 + app/services/work_items/update_service.rb | 1 - app/views/projects/_files.html.haml | 25 +- app/views/projects/_readme.html.haml | 15 +- .../protected_tags/_protected_tag.html.haml | 2 +- app/views/shared/_web_ide_button.html.haml | 2 +- ...i_catalog_ranking_from_new_usage_table.yml | 9 + data/deprecations/templates/example.yml | 2 +- ...kfill_issuable_severities_namespace_id.yml | 8 + db/docs/issuable_severities.yml | 1 + ...add_namespace_id_to_issuable_severities.rb | 9 + ...dex_issuable_severities_on_namespace_id.rb | 16 ++ ...add_issuable_severities_namespace_id_fk.rb | 16 ++ ...ssuable_severities_namespace_id_trigger.rb | 25 ++ ...ckfill_issuable_severities_namespace_id.rb | 40 +++ db/schema_migrations/20241125145005 | 1 + db/schema_migrations/20241125145006 | 1 + db/schema_migrations/20241125145007 | 1 + db/schema_migrations/20241125145008 | 1 + db/schema_migrations/20241125145009 | 1 + db/structure.sql | 26 +- doc/api/product_analytics.md | 2 +- .../metrics/metrics_dictionary.md | 25 +- doc/user/markdown.md | 5 +- .../milestones/burndown_and_burnup_charts.md | 10 +- lib/api/deployments.rb | 1 + lib/api/environments.rb | 2 +- lib/api/helpers.rb | 28 +- lib/authn/tokens/jwt.rb | 5 +- ...ckfill_issuable_severities_namespace_id.rb | 10 + qa/gems/gitlab-cng/Gemfile | 4 +- qa/gems/gitlab-cng/Gemfile.lock | 12 +- qa/qa/page/component/snippet.rb | 2 +- scripts/internal_events/cli.rb | 1 + .../cli/flows/metric_definer.rb | 29 ++- scripts/internal_events/cli/global_state.rb | 23 +- .../cli/helpers/metric_options.rb | 2 +- scripts/internal_events/cli/metric.rb | 25 +- .../cli/time_framed_key_path.rb | 17 ++ .../event_definer_examples.yml | 6 +- .../metric_definer_examples.yml | 111 ++++---- ...ric_7d.yml => keyboard_smashed_metric.yml} | 8 +- .../metrics/keyboard_smashed_metric_28d.yml | 24 -- ...abel_28d_single_event_additional_props.yml | 24 -- ...> label_single_event_additional_props.yml} | 8 +- .../project_id_28d_multiple_events.yml | 26 -- ...nts.yml => project_id_multiple_events.yml} | 8 +- ...r_id_28d_single_event_additional_props.yml | 30 --- ..._28d_single_event_all_additional_props.yml | 46 ---- ..._id_28d_single_event_custom_key_filter.yml | 36 --- ...gle_event.yml => user_id_single_event.yml} | 8 +- ...user_id_single_event_additional_props.yml} | 8 +- ..._id_single_event_all_additional_props.yml} | 8 +- ...ser_id_single_event_custom_key_filter.yml} | 8 +- .../protected_tags/protected_tag_edit_spec.js | 2 + .../repository/components/header_area_spec.js | 74 ++++++ .../components/snippet_header_spec.js | 6 +- ...wn_spec.js => clone_code_dropdown_spec.js} | 50 ++-- spec/frontend/work_items/utils_spec.js | 6 + spec/lib/api/helpers_spec.rb | 31 ++- spec/lib/authn/tokens/jwt_spec.rb | 4 +- ...l_issuable_severities_namespace_id_spec.rb | 15 ++ spec/lib/gitlab/import_export/all_models.yml | 1 + ...l_issuable_severities_namespace_id_spec.rb | 33 +++ spec/models/ci/job_token/scope_spec.rb | 27 +- spec/models/user_spec.rb | 21 ++ .../work_items/widgets/milestone_spec.rb | 4 + spec/requests/api/deployments_spec.rb | 17 ++ spec/requests/api/environments_spec.rb | 2 +- .../cli/flows/metric_definer_spec.rb | 91 ++++++- .../cli/flows/usage_viewer_spec.rb | 105 ++++++++ .../cli/helpers/metric_options_spec.rb | 18 +- spec/scripts/internal_events/cli_spec.rb | 9 +- ...aggregate_last30_day_usage_service_spec.rb | 239 +++++++++++------- .../work_items/update_service_spec.rb | 3 +- .../ci/job_token_policies_shared_examples.rb | 29 ++- ...rotected_tags_with_deploy_keys_examples.rb | 23 ++ ...scription_quick_actions_shared_examples.rb | 4 +- .../aggregate_last30_day_usage_worker_spec.rb | 4 + 99 files changed, 1357 insertions(+), 680 deletions(-) delete mode 100644 app/assets/images/web-ide-promo-popover.svg create mode 100644 app/assets/javascripts/vue_shared/components/code_dropdown/clone_code_dropdown.stories.js rename app/assets/javascripts/vue_shared/components/code_dropdown/{snippet_code_dropdown.vue => clone_code_dropdown.vue} (72%) delete mode 100644 app/assets/javascripts/vue_shared/components/code_dropdown/snippet_code_dropdownstories.js create mode 100644 config/feature_flags/gitlab_com_derisk/ci_catalog_ranking_from_new_usage_table.yml create mode 100644 db/docs/batched_background_migrations/backfill_issuable_severities_namespace_id.yml create mode 100644 db/migrate/20241125145005_add_namespace_id_to_issuable_severities.rb create mode 100644 db/post_migrate/20241125145006_index_issuable_severities_on_namespace_id.rb create mode 100644 db/post_migrate/20241125145007_add_issuable_severities_namespace_id_fk.rb create mode 100644 db/post_migrate/20241125145008_add_issuable_severities_namespace_id_trigger.rb create mode 100644 db/post_migrate/20241125145009_queue_backfill_issuable_severities_namespace_id.rb create mode 100644 db/schema_migrations/20241125145005 create mode 100644 db/schema_migrations/20241125145006 create mode 100644 db/schema_migrations/20241125145007 create mode 100644 db/schema_migrations/20241125145008 create mode 100644 db/schema_migrations/20241125145009 create mode 100644 lib/gitlab/background_migration/backfill_issuable_severities_namespace_id.rb create mode 100644 scripts/internal_events/cli/time_framed_key_path.rb rename spec/fixtures/scripts/internal_events/metrics/{keyboard_smashed_metric_7d.yml => keyboard_smashed_metric.yml} (81%) delete mode 100644 spec/fixtures/scripts/internal_events/metrics/keyboard_smashed_metric_28d.yml delete mode 100644 spec/fixtures/scripts/internal_events/metrics/label_28d_single_event_additional_props.yml rename spec/fixtures/scripts/internal_events/metrics/{label_7d_single_event_additional_props.yml => label_single_event_additional_props.yml} (80%) delete mode 100644 spec/fixtures/scripts/internal_events/metrics/project_id_28d_multiple_events.yml rename spec/fixtures/scripts/internal_events/metrics/{project_id_7d_multiple_events.yml => project_id_multiple_events.yml} (74%) delete mode 100644 spec/fixtures/scripts/internal_events/metrics/user_id_28d_single_event_additional_props.yml delete mode 100644 spec/fixtures/scripts/internal_events/metrics/user_id_28d_single_event_all_additional_props.yml delete mode 100644 spec/fixtures/scripts/internal_events/metrics/user_id_28d_single_event_custom_key_filter.yml rename spec/fixtures/scripts/internal_events/metrics/{user_id_28d_single_event.yml => user_id_single_event.yml} (76%) rename spec/fixtures/scripts/internal_events/metrics/{user_id_7d_single_event_additional_props.yml => user_id_single_event_additional_props.yml} (78%) rename spec/fixtures/scripts/internal_events/metrics/{user_id_7d_single_event_all_additional_props.yml => user_id_single_event_all_additional_props.yml} (84%) rename spec/fixtures/scripts/internal_events/metrics/{user_id_7d_single_event_custom_key_filter.yml => user_id_single_event_custom_key_filter.yml} (81%) rename spec/frontend/vue_shared/components/code_dropdown/{snippet_code_dropdown_spec.js => clone_code_dropdown_spec.js} (61%) create mode 100644 spec/lib/gitlab/background_migration/backfill_issuable_severities_namespace_id_spec.rb create mode 100644 spec/migrations/20241125145009_queue_backfill_issuable_severities_namespace_id_spec.rb diff --git a/.gitlab/ci/qa-common/main.gitlab-ci.yml b/.gitlab/ci/qa-common/main.gitlab-ci.yml index b54d8fdb983..65b060b6d6c 100644 --- a/.gitlab/ci/qa-common/main.gitlab-ci.yml +++ b/.gitlab/ci/qa-common/main.gitlab-ci.yml @@ -6,7 +6,7 @@ workflow: include: - local: .gitlab/ci/version.yml - - component: "gitlab.com/gitlab-org/quality/pipeline-common/allure-report@9.6.2" + - component: "gitlab.com/gitlab-org/quality/pipeline-common/allure-report@9.6.3" inputs: job_name: "e2e-test-report" job_stage: "report" @@ -16,7 +16,7 @@ include: gitlab_auth_token_variable_name: "PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE" allure_job_name: "${QA_RUN_TYPE}" - project: gitlab-org/quality/pipeline-common - ref: 9.6.2 + ref: 9.6.3 file: - /ci/base.gitlab-ci.yml - /ci/knapsack-report.yml diff --git a/.gitlab/ci/qa-common/variables.gitlab-ci.yml b/.gitlab/ci/qa-common/variables.gitlab-ci.yml index 866f1f3dfbd..79bc85011d2 100644 --- a/.gitlab/ci/qa-common/variables.gitlab-ci.yml +++ b/.gitlab/ci/qa-common/variables.gitlab-ci.yml @@ -18,4 +18,4 @@ variables: # Retry failed specs in separate process QA_RETRY_FAILED_SPECS: "true" # helm chart ref used by test-on-cng pipeline - GITLAB_HELM_CHART_REF: "04b75b6610e7f1e4a013bef4964563d0219cbd72" + GITLAB_HELM_CHART_REF: "37f35b47e7762d1c4b229ed7f00579666d9c0d9c" diff --git a/app/assets/images/web-ide-promo-popover.svg b/app/assets/images/web-ide-promo-popover.svg deleted file mode 100644 index 3ced89860da..00000000000 --- a/app/assets/images/web-ide-promo-popover.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/javascripts/pages/projects/shared/web_ide_link/index.js b/app/assets/javascripts/pages/projects/shared/web_ide_link/index.js index 275a9cf76d1..a2c93f0345d 100644 --- a/app/assets/javascripts/pages/projects/shared/web_ide_link/index.js +++ b/app/assets/javascripts/pages/projects/shared/web_ide_link/index.js @@ -18,7 +18,7 @@ export default ({ el, router }) => { const { projectPath, ref, isBlob, webIdeUrl, ...options } = convertObjectPropsToCamelCase( JSON.parse(el.dataset.options), ); - const { webIdePromoPopoverImg, cssClasses, defaultBranch } = el.dataset; + const { cssClasses, defaultBranch } = el.dataset; // eslint-disable-next-line no-new new Vue({ @@ -33,7 +33,6 @@ export default ({ el, router }) => { return h(WebIdeButton, { props: { isBlob, - webIdePromoPopoverImg, webIdeUrl: isBlob ? webIdeUrl : webIDEUrl( diff --git a/app/assets/javascripts/protected_tags/protected_tag_edit.vue b/app/assets/javascripts/protected_tags/protected_tag_edit.vue index da7d981f32d..94765e85f6c 100644 --- a/app/assets/javascripts/protected_tags/protected_tag_edit.vue +++ b/app/assets/javascripts/protected_tags/protected_tag_edit.vue @@ -74,7 +74,13 @@ export default { setSelected({ data }) { if (!data) return; this.selected = data[ACCESS_LEVELS.CREATE].map( - ({ id, user_id: userId, group_id: groupId, access_level: accessLevel }) => { + ({ + id, + user_id: userId, + group_id: groupId, + access_level: accessLevel, + deploy_key_id: deployKeyId, + }) => { if (userId) { return { id, @@ -91,6 +97,14 @@ export default { }; } + if (deployKeyId) { + return { + id, + deploy_key_id: deployKeyId, + type: LEVEL_TYPES.DEPLOY_KEY, + }; + } + return { id, access_level: accessLevel, diff --git a/app/assets/javascripts/repository/components/header_area.vue b/app/assets/javascripts/repository/components/header_area.vue index adb53b911b7..f3f7e61a8e2 100644 --- a/app/assets/javascripts/repository/components/header_area.vue +++ b/app/assets/javascripts/repository/components/header_area.vue @@ -7,11 +7,15 @@ import { keysFor, START_SEARCH_PROJECT_FILE } from '~/behaviors/shortcuts/keybin import { sanitize } from '~/lib/dompurify'; import { InternalEvents } from '~/tracking'; import { FIND_FILE_BUTTON_CLICK } from '~/tracking/constants'; -import { visitUrl, joinPaths } from '~/lib/utils/url_utility'; +import { visitUrl, joinPaths, webIDEUrl } from '~/lib/utils/url_utility'; +import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import { generateRefDestinationPath } from '~/repository/utils/ref_switcher_utils'; import RefSelector from '~/ref/components/ref_selector.vue'; import Breadcrumbs from '~/repository/components/header_area/breadcrumbs.vue'; import BlobControls from '~/repository/components/header_area/blob_controls.vue'; +import CodeDropdown from '~/vue_shared/components/code_dropdown/code_dropdown.vue'; +import SourceCodeDownloadDropdown from '~/vue_shared/components/download_dropdown/download_dropdown.vue'; +import CloneCodeDropdown from '~/vue_shared/components/code_dropdown/clone_code_dropdown.vue'; export default { name: 'HeaderArea', @@ -24,6 +28,10 @@ export default { RefSelector, Breadcrumbs, BlobControls, + CodeDropdown, + SourceCodeDownloadDropdown, + CloneCodeDropdown, + WebIdeLink: () => import('ee_else_ce/vue_shared/components/web_ide_link.vue'), }, directives: { GlTooltip: GlTooltipDirective, @@ -45,6 +53,26 @@ export default { 'projectRootPath', 'comparePath', 'isReadmeView', + 'isFork', + 'needsToFork', + 'gitpodEnabled', + 'isBlob', + 'showEditButton', + 'showWebIdeButton', + 'showGitpodButton', + 'showPipelineEditorUrl', + 'webIdeUrl', + 'editUrl', + 'pipelineEditorUrl', + 'gitpodUrl', + 'userPreferencesGitpodPath', + 'userProfileEnableGitpodPath', + 'httpUrl', + 'xcodeUrl', + 'sshUrl', + 'kerberosUrl', + 'downloadLinks', + 'downloadArtifacts', ], props: { projectPath: { @@ -84,6 +112,24 @@ export default { refSelectorValue() { return this.refType ? joinPaths('refs', this.refType, this.currentRef) : this.currentRef; }, + webIDEUrl() { + return this.isBlob + ? this.webIdeUrl + : webIDEUrl( + joinPaths( + '/', + this.projectPath, + 'edit', + this.currentRef, + '-', + this.$route?.params.path || '', + '/', + ), + ); + }, + projectIdAsNumber() { + return getIdFromGraphQLId(this.projectId); + }, findFileTooltip() { const { description } = START_SEARCH_PROJECT_FILE; const key = this.findFileShortcutKey; @@ -108,7 +154,7 @@ export default {