From e6a54b33a9712d7f1a995df47f678fbb78bcd6b7 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 9 Nov 2021 15:12:42 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/reports.gitlab-ci.yml | 7 ++ .gitlab/ci/rules.gitlab-ci.yml | 18 ++-- .gitlab/ci/static-analysis.gitlab-ci.yml | 12 --- app/assets/javascripts/init_confirm_danger.js | 21 ++++- .../javascripts/pages/groups/edit/index.js | 2 + .../components/header/pipeline_status.vue | 8 +- .../components/assignees/assignees.vue | 10 ++- .../assignees/issuable_assignees.vue | 6 ++ .../assignees/sidebar_assignees.vue | 4 + .../assignees/uncollapsed_assignee_list.vue | 11 +++ .../components/attention_required_toggle.vue | 74 +++++++++++++++ .../components/reviewers/reviewers.vue | 4 + .../reviewers/sidebar_reviewers.vue | 4 + .../reviewers/uncollapsed_reviewer_list.vue | 17 +++- .../attention_required.mutation.graphql | 5 ++ .../sidebar/services/sidebar_service.js | 12 +++ .../javascripts/sidebar/sidebar_mediator.js | 46 +++++++++- .../sidebar/stores/sidebar_store.js | 12 ++- .../confirm_danger/confirm_danger.vue | 7 +- .../confirm_danger/confirm_danger_modal.vue | 1 + ...endency_proxy_for_containers_controller.rb | 18 +++- .../projects/ci/pipeline_editor_controller.rb | 1 - .../types/dependency_proxy/manifest_type.rb | 1 + app/graphql/types/group_type.rb | 4 + app/helpers/groups/settings_helper.rb | 20 +++++ app/models/clusters/cluster.rb | 2 - app/models/dependency_proxy/manifest.rb | 3 + app/models/issue.rb | 7 ++ .../dependency_proxy/head_manifest_service.rb | 5 +- .../dependency_proxy/pull_manifest_service.rb | 8 +- app/views/groups/settings/_advanced.html.haml | 5 +- .../settings/_permanent_deletion.html.haml | 6 +- app/views/groups/settings/_remove.html.haml | 9 +- .../groups/settings/_remove_button.html.haml | 4 +- app/views/projects/confluences/show.html.haml | 7 +- bin/background_jobs | 18 ++-- bin/mail_room | 9 +- bin/parallel-rsync-repos | 6 +- bin/web | 10 +-- bin/with_env | 1 - .../pipeline_editor_mini_graph.yml | 8 -- doc/api/graphql/reference/index.md | 7 ++ .../documentation/styleguide/index.md | 6 +- doc/integration/jira/dvcs.md | 90 ++++++++++--------- lib/container_registry/client.rb | 4 +- .../database/load_balancing/primary_host.rb | 5 ++ .../prometheus/queries/validate_query.rb | 2 +- lib/gitlab/prometheus_client.rb | 8 +- .../projects/menus/confluence_menu.rb | 5 ++ locale/gitlab.pot | 20 ++++- ...cy_proxy_for_containers_controller_spec.rb | 67 ++++++++++---- .../user_views_confluence_page_spec.rb | 3 + .../components/header/pipeline_status_spec.js | 22 +---- .../attention_required_toggle_spec.js | 84 +++++++++++++++++ .../uncollapsed_reviewer_list_spec.js | 20 ++++- .../frontend/sidebar/sidebar_mediator_spec.js | 55 ++++++++++++ .../dependency_proxy/manifest_type_spec.rb | 2 +- spec/helpers/groups/settings_helper_spec.rb | 38 ++++++++ spec/lib/container_registry/client_spec.rb | 2 +- spec/lib/container_registry/tag_spec.rb | 2 +- .../load_balancing/primary_host_spec.rb | 6 +- spec/lib/gitlab/prometheus_client_spec.rb | 36 ++------ .../concerns/prometheus_adapter_spec.rb | 8 ++ spec/models/dependency_proxy/manifest_spec.rb | 11 +++ spec/models/issue_spec.rb | 18 +++- .../group/dependency_proxy_manifests_spec.rb | 22 +++++ .../find_or_create_manifest_service_spec.rb | 6 +- .../head_manifest_service_spec.rb | 2 +- .../pull_manifest_service_spec.rb | 2 +- .../delete_tags_service_shared_context.rb | 4 +- .../dependency_proxy_shared_examples.rb | 2 +- .../groups/settings/_remove.html.haml_spec.rb | 4 +- tooling/bin/shellcheck | 22 ----- 73 files changed, 770 insertions(+), 248 deletions(-) create mode 100644 app/assets/javascripts/sidebar/components/attention_required_toggle.vue create mode 100644 app/assets/javascripts/sidebar/queries/attention_required.mutation.graphql create mode 100644 app/helpers/groups/settings_helper.rb delete mode 100644 config/feature_flags/development/pipeline_editor_mini_graph.yml create mode 100644 spec/frontend/sidebar/components/attention_required_toggle_spec.js create mode 100644 spec/helpers/groups/settings_helper_spec.rb delete mode 100755 tooling/bin/shellcheck diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 40d9c55c5bd..33efc3c4788 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -96,6 +96,13 @@ retire-js-dependency_scanning: gemnasium-python-dependency_scanning: rules: !reference [".reports:rules:gemnasium-python-dependency_scanning", rules] +yarn-audit-dependency_scanning: + extends: .ds-analyzer + image: "registry.gitlab.com/gitlab-org/security-products/analyzers/npm-audit:1.4.0" + variables: + TOOL: yarn + rules: !reference [".reports:rules:yarn-audit-dependency_scanning", rules] + # Analyze dependencies for malicious behavior # See https://gitlab.com/gitlab-com/gl-security/security-research/package-hunter .package_hunter-base: diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 17e17712ff8..c5e936c4382 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -167,6 +167,7 @@ .nodejs-patterns: &nodejs-patterns - '{package.json,*/package.json,*/*/package.json}' + - '{yarn.lock,*/yarn.lock,*/*/yarn.lock}' .python-patterns: &python-patterns - '{requirements.txt,*/requirements.txt,*/*/requirements.txt}' @@ -373,10 +374,6 @@ - ".dockerignore" - "qa/**/*" -.code-shell-patterns: &code-shell-patterns - - "bin/**/*" - - "tooling/**/*" - # .code-backstage-qa-patterns + .workhorse-patterns .setup-test-env-patterns: &setup-test-env-patterns - "{package.json,yarn.lock}" @@ -1487,6 +1484,12 @@ when: never - changes: *python-patterns +.reports:rules:yarn-audit-dependency_scanning: + rules: + - if: '$DEPENDENCY_SCANNING_DISABLED || $GITLAB_FEATURES !~ /\bdependency_scanning\b/' + when: never + - changes: *nodejs-patterns + .reports:rules:schedule-dast: rules: - if: '$DAST_DISABLED || $GITLAB_FEATURES !~ /\bdast\b/' @@ -1779,13 +1782,6 @@ - changes: *code-backstage-qa-patterns - changes: *startup-css-patterns -############### -# Shell rules # -############### -.shell:rules: - rules: - - changes: *code-shell-patterns - ####################### # Test metadata rules # ####################### diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml index 82c11cb8009..8824d3d753f 100644 --- a/.gitlab/ci/static-analysis.gitlab-ci.yml +++ b/.gitlab/ci/static-analysis.gitlab-ci.yml @@ -107,15 +107,3 @@ feature-flags-usage: when: always paths: - tmp/feature_flags/ - -shellcheck: - extends: - - .default-retry - - .shell:rules - stage: lint - needs: [] - image: - name: koalaman/shellcheck-alpine - entrypoint: [""] - script: - - tooling/bin/shellcheck diff --git a/app/assets/javascripts/init_confirm_danger.js b/app/assets/javascripts/init_confirm_danger.js index 3e7f60bc237..d3d32c8be54 100644 --- a/app/assets/javascripts/init_confirm_danger.js +++ b/app/assets/javascripts/init_confirm_danger.js @@ -1,22 +1,37 @@ import Vue from 'vue'; +import { parseBoolean } from './lib/utils/common_utils'; import ConfirmDanger from './vue_shared/components/confirm_danger/confirm_danger.vue'; export default () => { const el = document.querySelector('.js-confirm-danger'); if (!el) return null; - const { phrase, buttonText, confirmDangerMessage } = el.dataset; + const { + removeFormId = null, + phrase, + buttonText, + buttonTestid = null, + confirmDangerMessage, + disabled = false, + } = el.dataset; return new Vue({ el, + provide: { + confirmDangerMessage, + }, render: (createElement) => createElement(ConfirmDanger, { props: { phrase, buttonText, + buttonTestid, + disabled: parseBoolean(disabled), }, - provide: { - confirmDangerMessage, + on: { + confirm: () => { + if (removeFormId) document.getElementById(removeFormId)?.submit(); + }, }, }), }); diff --git a/app/assets/javascripts/pages/groups/edit/index.js b/app/assets/javascripts/pages/groups/edit/index.js index 49b9822795c..604da77f60c 100644 --- a/app/assets/javascripts/pages/groups/edit/index.js +++ b/app/assets/javascripts/pages/groups/edit/index.js @@ -10,10 +10,12 @@ import projectSelect from '~/project_select'; import initSearchSettings from '~/search_settings'; import initSettingsPanels from '~/settings_panels'; import setupTransferEdit from '~/transfer_edit'; +import initConfirmDanger from '~/init_confirm_danger'; document.addEventListener('DOMContentLoaded', () => { initFilePickers(); initConfirmDangerModal(); + initConfirmDanger(); initSettingsPanels(); dirtySubmitFactory( document.querySelectorAll('.js-general-settings-form, .js-general-permissions-form'), diff --git a/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue b/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue index 97e21d67fa5..0163b8c572b 100644 --- a/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue +++ b/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue @@ -10,7 +10,6 @@ import { toggleQueryPollingByVisibility, } from '~/pipelines/components/graph/utils'; import CiIcon from '~/vue_shared/components/ci_icon.vue'; -import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import PipelineEditorMiniGraph from './pipeline_editor_mini_graph.vue'; const POLL_INTERVAL = 10000; @@ -37,7 +36,6 @@ export default { GlSprintf, PipelineEditorMiniGraph, }, - mixins: [glFeatureFlagMixin()], inject: ['projectFullPath'], props: { commitSha: { @@ -172,11 +170,7 @@ export default {
- + @@ -58,7 +61,12 @@ export default { - +
diff --git a/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue b/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue index 80caebad39d..c4856a801cf 100644 --- a/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue +++ b/app/assets/javascripts/sidebar/components/assignees/issuable_assignees.vue @@ -32,6 +32,11 @@ export default { return this.users.length === 0; }, }, + methods: { + toggleAttentionRequired(data) { + this.$emit('toggle-attention-required', data); + }, + }, }; @@ -61,6 +66,7 @@ export default { :users="users" :issuable-type="issuableType" class="gl-text-gray-800 gl-mt-2 hide-collapsed" + @toggle-attention-required="toggleAttentionRequired" /> diff --git a/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue b/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue index c6877226b7d..6af33f0eec2 100644 --- a/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue +++ b/app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue @@ -125,6 +125,9 @@ export default { availability: this.assigneeAvailabilityStatus[username] || '', })); }, + toggleAttentionRequired(data) { + this.mediator.toggleAttentionRequired('assignee', data); + }, }, }; @@ -152,6 +155,7 @@ export default { :editable="store.editable" :issuable-type="issuableType" @assign-self="assignSelf" + @toggle-attention-required="toggleAttentionRequired" /> diff --git a/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue b/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue index 9259b9f5a64..3bf0acf7216 100644 --- a/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue +++ b/app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue @@ -2,6 +2,7 @@ import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { IssuableType } from '~/issue_show/constants'; import { __, sprintf } from '~/locale'; +import AttentionRequiredToggle from '../attention_required_toggle.vue'; import AssigneeAvatarLink from './assignee_avatar_link.vue'; import UserNameWithStatus from './user_name_with_status.vue'; @@ -9,6 +10,7 @@ const DEFAULT_RENDER_COUNT = 5; export default { components: { + AttentionRequiredToggle, AssigneeAvatarLink, UserNameWithStatus, }, @@ -80,6 +82,9 @@ export default { } return u?.status?.availability || ''; }, + toggleAttentionRequired(data) { + this.$emit('toggle-attention-required', data); + }, }, }; @@ -108,6 +113,12 @@ export default { }" class="gl-display-inline-block" > + +import { GlButton, GlTooltipDirective } from '@gitlab/ui'; +import { __ } from '~/locale'; +import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants'; + +export default { + i18n: { + attentionRequiredReviewer: __('Request attention to review'), + attentionRequiredAssignee: __('Request attention'), + removeAttentionRequired: __('Remove attention request'), + }, + components: { + GlButton, + }, + directives: { + GlTooltip: GlTooltipDirective, + }, + props: { + type: { + type: String, + required: true, + }, + user: { + type: Object, + required: true, + }, + }, + data() { + return { + loading: false, + }; + }, + computed: { + tooltipTitle() { + if (this.user.attention_required) { + return this.$options.i18n.removeAttentionRequired; + } + + return this.type === 'reviewer' + ? this.$options.i18n.attentionRequiredReviewer + : this.$options.i18n.attentionRequiredAssignee; + }, + }, + methods: { + toggleAttentionRequired() { + if (this.loading) return; + + this.$root.$emit(BV_HIDE_TOOLTIP); + this.loading = true; + this.$emit('toggle-attention-required', { + user: this.user, + callback: this.toggleAttentionRequiredComplete, + }); + }, + toggleAttentionRequiredComplete() { + this.loading = false; + }, + }, +}; + + + diff --git a/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue b/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue index 5729b958b5d..78f095dc77d 100644 --- a/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue +++ b/app/assets/javascripts/sidebar/components/reviewers/reviewers.vue @@ -49,6 +49,9 @@ export default { requestReview(data) { this.$emit('request-review', data); }, + toggleAttentionRequired(data) { + this.$emit('toggle-attention-required', data); + }, }, }; @@ -70,6 +73,7 @@ export default { :root-path="rootPath" :issuable-type="issuableType" @request-review="requestReview" + @toggle-attention-required="toggleAttentionRequired" /> diff --git a/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue b/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue index e414aaf719b..8f33d4cd056 100644 --- a/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue +++ b/app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue @@ -88,6 +88,9 @@ export default { requestReview(data) { this.mediator.requestReview(data); }, + toggleAttentionRequired(data) { + this.mediator.toggleAttentionRequired('reviewer', data); + }, }, }; @@ -106,6 +109,7 @@ export default { :editable="store.editable" :issuable-type="issuableType" @request-review="requestReview" + @toggle-attention-required="toggleAttentionRequired" /> diff --git a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue index 2922008cfb2..adfb2491720 100644 --- a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue +++ b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue @@ -1,6 +1,8 @@