Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-10-20 18:18:12 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-10-20 18:18:12 +0300
commit3a3e4bcbd1512ff31a11b9747b19b60140f8834f (patch)
tree67d70eef61000d98ed9ac691458fe2d180d0175f /app
parent34c88d512f2697cd96dd3788e8ffaf1b9c8935b4 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/batch_comments/components/submit_dropdown.vue172
-rw-r--r--app/assets/javascripts/content_editor/extensions/word_break.js2
-rw-r--r--app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue7
-rw-r--r--app/assets/javascripts/packages_and_registries/package_registry/components/list/publish_method.vue9
-rw-r--r--app/assets/stylesheets/page_bundles/merge_requests.scss25
-rw-r--r--app/assets/stylesheets/page_bundles/wiki.scss10
-rw-r--r--app/graphql/mutations/commits/create.rb2
-rw-r--r--app/graphql/resolvers/analytics/cycle_analytics/deployment_count_resolver.rb2
-rw-r--r--app/graphql/resolvers/analytics/cycle_analytics/issue_count_resolver.rb2
-rw-r--r--app/graphql/resolvers/concerns/caching_array_resolver.rb2
-rw-r--r--app/graphql/resolvers/group_issues_resolver.rb2
-rw-r--r--app/graphql/resolvers/namespaces/work_items_resolver.rb2
-rw-r--r--app/graphql/resolvers/project_issues_resolver.rb2
-rw-r--r--app/graphql/resolvers/project_members_resolver.rb4
-rw-r--r--app/graphql/resolvers/project_milestones_resolver.rb1
-rw-r--r--app/graphql/resolvers/projects/snippets_resolver.rb4
-rw-r--r--app/graphql/resolvers/snippets_resolver.rb4
-rw-r--r--app/graphql/resolvers/users/snippets_resolver.rb4
-rw-r--r--app/graphql/types/security/codequality_reports_comparer/degradation_type.rb2
-rw-r--r--app/graphql/types/security/codequality_reports_comparer/report_type.rb2
-rw-r--r--app/graphql/types/security/codequality_reports_comparer/summary_type.rb2
-rw-r--r--app/graphql/types/security/codequality_reports_comparer_type.rb2
-rw-r--r--app/helpers/projects_helper.rb4
-rw-r--r--app/models/deployment.rb3
-rw-r--r--app/policies/group_policy.rb1
-rw-r--r--app/services/merge_requests/update_service.rb5
-rw-r--r--app/views/projects/_home_panel.html.haml2
-rw-r--r--app/views/shared/_ci_catalog_badge.html.haml1
-rw-r--r--app/views/shared/projects/_list.html.haml1
-rw-r--r--app/views/shared/projects/_project.html.haml3
30 files changed, 162 insertions, 122 deletions
diff --git a/app/assets/javascripts/batch_comments/components/submit_dropdown.vue b/app/assets/javascripts/batch_comments/components/submit_dropdown.vue
index fac45f32464..0527b56b464 100644
--- a/app/assets/javascripts/batch_comments/components/submit_dropdown.vue
+++ b/app/assets/javascripts/batch_comments/components/submit_dropdown.vue
@@ -1,5 +1,5 @@
<script>
-import { GlDropdown, GlButton, GlIcon, GlForm, GlFormCheckbox } from '@gitlab/ui';
+import { GlDisclosureDropdown, GlButton, GlIcon, GlForm, GlFormCheckbox } from '@gitlab/ui';
// eslint-disable-next-line no-restricted-imports
import { mapGetters, mapActions, mapState } from 'vuex';
import { __ } from '~/locale';
@@ -12,7 +12,7 @@ import { trackSavedUsingEditor } from '~/vue_shared/components/markdown/tracking
export default {
components: {
- GlDropdown,
+ GlDisclosureDropdown,
GlButton,
GlIcon,
GlForm,
@@ -64,17 +64,6 @@ export default {
mounted() {
this.noteData.noteable_type = this.noteableType;
this.noteData.noteable_id = this.getNoteableData.id;
-
- // We override the Bootstrap Vue click outside behaviour
- // to allow for clicking in the autocomplete dropdowns
- // without this override the submit dropdown will close
- // whenever a item in the autocomplete dropdown is clicked
- const originalClickOutHandler = this.$refs.submitDropdown.$refs.dropdown.clickOutHandler;
- this.$refs.submitDropdown.$refs.dropdown.clickOutHandler = (e) => {
- if (!e.target.closest('.atwho-container')) {
- originalClickOutHandler(e);
- }
- };
},
methods: {
...mapActions('batchComments', ['publishReview']),
@@ -113,86 +102,103 @@ export default {
updateNote(note) {
this.noteData.note = note;
},
+ onBeforeClose({ originalEvent: { target }, preventDefault }) {
+ if (
+ target &&
+ [document.querySelector('.atwho-container'), document.querySelector('.dz-hidden-input')]
+ .filter(Boolean)
+ .some((el) => el.contains(target))
+ ) {
+ preventDefault();
+ }
+ },
},
restrictedToolbarItems: ['full-screen'],
};
</script>
<template>
- <gl-dropdown
+ <gl-disclosure-dropdown
ref="submitDropdown"
- right
- dropup
+ placement="right"
class="submit-review-dropdown"
:class="{ 'submit-review-dropdown-animated': shouldAnimateReviewButton }"
data-testid="submit-review-dropdown"
- variant="info"
- category="primary"
+ fluid-width
+ @beforeClose="onBeforeClose"
>
- <template #button-content>
- {{ __('Finish review') }}
- <gl-icon class="dropdown-chevron" name="chevron-up" />
+ <template #toggle>
+ <gl-button variant="info" category="primary">
+ {{ __('Finish review') }}
+ <gl-icon class="dropdown-chevron" name="chevron-up" />
+ </gl-button>
+ </template>
+ <template #default>
+ <gl-form
+ class="submit-review-dropdown-form gl-p-4"
+ data-testid="submit-gl-form"
+ @submit.prevent="submitReview"
+ >
+ <div class="gl-display-flex gl-mb-4 gl-align-items-center">
+ <label for="review-note-body" class="gl-mb-0">
+ {{ __('Summary comment (optional)') }}
+ </label>
+ <summarize-my-review
+ v-if="canSummarize"
+ :id="getNoteableData.id"
+ class="gl-ml-auto"
+ @input="updateNote"
+ />
+ </div>
+ <div class="common-note-form gfm-form">
+ <markdown-editor
+ ref="markdownEditor"
+ v-model="noteData.note"
+ class="js-no-autosize"
+ :is-submitting="isSubmitting"
+ :render-markdown-path="getNoteableData.preview_note_path"
+ :markdown-docs-path="getNotesData.markdownDocsPath"
+ :form-field-props="formFieldProps"
+ enable-autocomplete
+ :autocomplete-data-sources="autocompleteDataSources"
+ :disabled="isSubmitting"
+ :restricted-tool-bar-items="$options.restrictedToolbarItems"
+ :force-autosize="false"
+ :autosave-key="autosaveKey"
+ supports-quick-actions
+ @input="$emit('input', $event)"
+ @keydown.meta.enter="submitReview"
+ @keydown.ctrl.enter="submitReview"
+ />
+ </div>
+ <template v-if="getNoteableData.current_user.can_approve">
+ <gl-form-checkbox
+ v-model="noteData.approve"
+ data-testid="approve_merge_request"
+ class="gl-mt-4"
+ >
+ {{ __('Approve merge request') }}
+ </gl-form-checkbox>
+ <approval-password
+ v-if="getNoteableData.require_password_to_approve"
+ v-show="noteData.approve"
+ v-model="noteData.approval_password"
+ class="gl-mt-3"
+ data-testid="approve_password"
+ />
+ </template>
+ <div class="gl-display-flex gl-justify-content-start gl-mt-4">
+ <gl-button
+ :loading="isSubmitting"
+ variant="confirm"
+ type="submit"
+ class="js-no-auto-disable"
+ data-testid="submit-review-button"
+ >
+ {{ __('Submit review') }}
+ </gl-button>
+ </div>
+ </gl-form>
</template>
- <gl-form data-testid="submit-gl-form" @submit.prevent="submitReview">
- <div class="gl-display-flex gl-mb-4 gl-align-items-center">
- <label for="review-note-body" class="gl-mb-0">
- {{ __('Summary comment (optional)') }}
- </label>
- <summarize-my-review
- v-if="canSummarize"
- :id="getNoteableData.id"
- class="gl-ml-auto"
- @input="updateNote"
- />
- </div>
- <div class="common-note-form gfm-form">
- <markdown-editor
- ref="markdownEditor"
- v-model="noteData.note"
- class="js-no-autosize"
- :is-submitting="isSubmitting"
- :render-markdown-path="getNoteableData.preview_note_path"
- :markdown-docs-path="getNotesData.markdownDocsPath"
- :form-field-props="formFieldProps"
- enable-autocomplete
- :autocomplete-data-sources="autocompleteDataSources"
- :disabled="isSubmitting"
- :restricted-tool-bar-items="$options.restrictedToolbarItems"
- :force-autosize="false"
- :autosave-key="autosaveKey"
- supports-quick-actions
- @input="$emit('input', $event)"
- @keydown.meta.enter="submitReview"
- @keydown.ctrl.enter="submitReview"
- />
- </div>
- <template v-if="getNoteableData.current_user.can_approve">
- <gl-form-checkbox
- v-model="noteData.approve"
- data-testid="approve_merge_request"
- class="gl-mt-4"
- >
- {{ __('Approve merge request') }}
- </gl-form-checkbox>
- <approval-password
- v-if="getNoteableData.require_password_to_approve"
- v-show="noteData.approve"
- v-model="noteData.approval_password"
- class="gl-mt-3"
- data-testid="approve_password"
- />
- </template>
- <div class="gl-display-flex gl-justify-content-start gl-mt-4">
- <gl-button
- :loading="isSubmitting"
- variant="confirm"
- type="submit"
- class="js-no-auto-disable"
- data-testid="submit-review-button"
- >
- {{ __('Submit review') }}
- </gl-button>
- </div>
- </gl-form>
- </gl-dropdown>
+ </gl-disclosure-dropdown>
</template>
diff --git a/app/assets/javascripts/content_editor/extensions/word_break.js b/app/assets/javascripts/content_editor/extensions/word_break.js
index 457b7c36564..01b19cbbd13 100644
--- a/app/assets/javascripts/content_editor/extensions/word_break.js
+++ b/app/assets/javascripts/content_editor/extensions/word_break.js
@@ -24,7 +24,7 @@ export default Node.create({
},
addInputRules() {
- const inputRegex = /^<wbr>$/;
+ const inputRegex = /<wbr>$/;
return [nodeInputRule({ find: inputRegex, type: this.type })];
},
diff --git a/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue b/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue
index a545ad1d09c..674683aa02f 100644
--- a/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue
+++ b/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue
@@ -183,7 +183,12 @@ export default {
<span data-testid="right-secondary">
<gl-sprintf :message="publishedMessage">
<template v-if="isGroupPage" #projectName>
- <gl-link data-testid="root-link" :href="projectLink">{{ projectName }}</gl-link>
+ <gl-link
+ data-testid="root-link"
+ class="gl-text-decoration-underline"
+ :href="projectLink"
+ >{{ projectName }}</gl-link
+ >
</template>
<template #date>
<timeago-tooltip :time="packageEntity.createdAt" />
diff --git a/app/assets/javascripts/packages_and_registries/package_registry/components/list/publish_method.vue b/app/assets/javascripts/packages_and_registries/package_registry/components/list/publish_method.vue
index 8ecf433f3ab..2f74de9a615 100644
--- a/app/assets/javascripts/packages_and_registries/package_registry/components/list/publish_method.vue
+++ b/app/assets/javascripts/packages_and_registries/package_registry/components/list/publish_method.vue
@@ -39,9 +39,12 @@ export default {
<span data-testid="pipeline-ref" class="gl-mr-2">{{ pipeline.ref }}</span>
<gl-icon name="commit" class="gl-mr-2" />
- <gl-link data-testid="pipeline-sha" :href="pipeline.commitPath" class="gl-mr-2">{{
- packageShaShort
- }}</gl-link>
+ <gl-link
+ data-testid="pipeline-sha"
+ :href="pipeline.commitPath"
+ class="gl-mr-2 gl-text-decoration-underline"
+ >{{ packageShaShort }}</gl-link
+ >
<clipboard-button
:text="pipeline.sha"
diff --git a/app/assets/stylesheets/page_bundles/merge_requests.scss b/app/assets/stylesheets/page_bundles/merge_requests.scss
index b00e1813696..440fc7ad586 100644
--- a/app/assets/stylesheets/page_bundles/merge_requests.scss
+++ b/app/assets/stylesheets/page_bundles/merge_requests.scss
@@ -994,24 +994,13 @@ $tabs-holder-z-index: 250;
}
}
-.submit-review-dropdown {
- &.show .dropdown-menu {
- width: calc(100vw - 20px);
- max-width: 680px;
- max-height: calc(100vh - 50px);
-
- .gl-dropdown-inner {
- max-height: none !important;
- }
- }
-
- .gl-dropdown-contents {
- padding: $gl-spacing-scale-4 !important;
- }
+.submit-review-dropdown .gl-new-dropdown-panel {
+ max-width: none;
+}
- .md-preview-holder {
- max-height: 182px;
- }
+.submit-review-dropdown-form {
+ width: calc(100vw - 20px);
+ max-width: 680px;
}
.submit-review-dropdown-animated {
@@ -1128,7 +1117,7 @@ $tabs-holder-z-index: 250;
padding-right: 0;
}
- .dropdown {
+ .submit-review-dropdown {
margin-left: $grid-size;
}
}
diff --git a/app/assets/stylesheets/page_bundles/wiki.scss b/app/assets/stylesheets/page_bundles/wiki.scss
index 4fb07328493..d87386f68ce 100644
--- a/app/assets/stylesheets/page_bundles/wiki.scss
+++ b/app/assets/stylesheets/page_bundles/wiki.scss
@@ -161,6 +161,16 @@
}
}
+.right-sidebar.wiki-sidebar {
+ .active > .wiki-list {
+ a,
+ .wiki-list-expand-button,
+ .wiki-list-collapse-button {
+ color: $white;
+ }
+ }
+}
+
ul.wiki-pages-list.content-list {
a {
color: var(--blue-600, $blue-600);
diff --git a/app/graphql/mutations/commits/create.rb b/app/graphql/mutations/commits/create.rb
index 02e1e4c78bf..cbe2c49e950 100644
--- a/app/graphql/mutations/commits/create.rb
+++ b/app/graphql/mutations/commits/create.rb
@@ -64,7 +64,7 @@ module Mutations
result = ::Files::MultiService.new(project, current_user, attributes).execute
{
- content: actions.pluck(:content), # rubocop:disable CodeReuse/ActiveRecord because actions is an Array, not a Relation
+ content: actions.pluck(:content), # rubocop:disable CodeReuse/ActiveRecord -- Array#pluck
commit: (project.repository.commit(result[:result]) if result[:status] == :success),
commit_pipeline_path: UrlHelpers.new.graphql_etag_pipeline_sha_path(result[:result]),
errors: Array.wrap(result[:message])
diff --git a/app/graphql/resolvers/analytics/cycle_analytics/deployment_count_resolver.rb b/app/graphql/resolvers/analytics/cycle_analytics/deployment_count_resolver.rb
index 51a1afdd5ab..2d722b02bf1 100644
--- a/app/graphql/resolvers/analytics/cycle_analytics/deployment_count_resolver.rb
+++ b/app/graphql/resolvers/analytics/cycle_analytics/deployment_count_resolver.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from Resolvers::Analytics::CycleAnalytics::BaseCountResolver)
+# rubocop:disable Graphql/ResolverType -- inherited from Resolvers::Analytics::CycleAnalytics::BaseCountResolver
module Resolvers
module Analytics
module CycleAnalytics
diff --git a/app/graphql/resolvers/analytics/cycle_analytics/issue_count_resolver.rb b/app/graphql/resolvers/analytics/cycle_analytics/issue_count_resolver.rb
index fd20800ee16..32b884df84f 100644
--- a/app/graphql/resolvers/analytics/cycle_analytics/issue_count_resolver.rb
+++ b/app/graphql/resolvers/analytics/cycle_analytics/issue_count_resolver.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from Resolvers::Analytics::CycleAnalytics::BaseIssueResolver)
+# rubocop:disable Graphql/ResolverType -- inherited from Resolvers::Analytics::CycleAnalytics::BaseIssueResolver
module Resolvers
module Analytics
module CycleAnalytics
diff --git a/app/graphql/resolvers/concerns/caching_array_resolver.rb b/app/graphql/resolvers/concerns/caching_array_resolver.rb
index 15bf9a90e46..f678e02533d 100644
--- a/app/graphql/resolvers/concerns/caching_array_resolver.rb
+++ b/app/graphql/resolvers/concerns/caching_array_resolver.rb
@@ -132,7 +132,7 @@ module CachingArrayResolver
model_class.arel_table[Arel.star]
end
- # rubocop: disable Graphql/Descriptions (false positive!)
+ # rubocop: disable Graphql/Descriptions -- false positive
def query_limit
field&.max_page_size.presence || context.schema.default_max_page_size
end
diff --git a/app/graphql/resolvers/group_issues_resolver.rb b/app/graphql/resolvers/group_issues_resolver.rb
index 5e0fb27bafa..5a6a3d678b9 100644
--- a/app/graphql/resolvers/group_issues_resolver.rb
+++ b/app/graphql/resolvers/group_issues_resolver.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from Issues::BaseParentResolver)
+# rubocop:disable Graphql/ResolverType -- inherited from Issues::BaseParentResolver
module Resolvers
class GroupIssuesResolver < Issues::BaseParentResolver
def self.issuable_collection_name
diff --git a/app/graphql/resolvers/namespaces/work_items_resolver.rb b/app/graphql/resolvers/namespaces/work_items_resolver.rb
index 6985a7a898a..671788668b1 100644
--- a/app/graphql/resolvers/namespaces/work_items_resolver.rb
+++ b/app/graphql/resolvers/namespaces/work_items_resolver.rb
@@ -2,7 +2,7 @@
module Resolvers
module Namespaces
- # rubocop:disable Graphql/ResolverType (inherited from Resolvers::WorkItemsResolver)
+ # rubocop:disable Graphql/ResolverType -- inherited from Resolvers::WorkItemsResolver
class WorkItemsResolver < ::Resolvers::WorkItemsResolver
def ready?(**args)
return false if Feature.disabled?(:namespace_level_work_items, resource_parent)
diff --git a/app/graphql/resolvers/project_issues_resolver.rb b/app/graphql/resolvers/project_issues_resolver.rb
index f869d8f11c6..2bc610e8266 100644
--- a/app/graphql/resolvers/project_issues_resolver.rb
+++ b/app/graphql/resolvers/project_issues_resolver.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from Issues::BaseParentResolver)
+# rubocop:disable Graphql/ResolverType -- inherited from Issues::BaseParentResolver
module Resolvers
class ProjectIssuesResolver < Issues::BaseParentResolver
accept_release_tag
diff --git a/app/graphql/resolvers/project_members_resolver.rb b/app/graphql/resolvers/project_members_resolver.rb
index e889b47c000..a27183438cd 100644
--- a/app/graphql/resolvers/project_members_resolver.rb
+++ b/app/graphql/resolvers/project_members_resolver.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from MembersResolver)
+
+# rubocop:disable Graphql/ResolverType -- inherited from MembersResolver
module Resolvers
class ProjectMembersResolver < MembersResolver
@@ -17,3 +18,4 @@ module Resolvers
end
end
end
+# rubocop:enable Graphql/ResolverType
diff --git a/app/graphql/resolvers/project_milestones_resolver.rb b/app/graphql/resolvers/project_milestones_resolver.rb
index 567a55aa09b..cb4e9a5cdf7 100644
--- a/app/graphql/resolvers/project_milestones_resolver.rb
+++ b/app/graphql/resolvers/project_milestones_resolver.rb
@@ -1,5 +1,4 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from MilestonesResolver)
module Resolvers
class ProjectMilestonesResolver < MilestonesResolver
diff --git a/app/graphql/resolvers/projects/snippets_resolver.rb b/app/graphql/resolvers/projects/snippets_resolver.rb
index 448918be2f5..9ab9db21e89 100644
--- a/app/graphql/resolvers/projects/snippets_resolver.rb
+++ b/app/graphql/resolvers/projects/snippets_resolver.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from ResolvesSnippets)
+
+# rubocop:disable Graphql/ResolverType -- inherited from ResolvesSnippets
module Resolvers
module Projects
@@ -27,3 +28,4 @@ module Resolvers
end
end
end
+# rubocop:enable Graphql/ResolverType
diff --git a/app/graphql/resolvers/snippets_resolver.rb b/app/graphql/resolvers/snippets_resolver.rb
index 90f5f2cb534..759cc61a8a7 100644
--- a/app/graphql/resolvers/snippets_resolver.rb
+++ b/app/graphql/resolvers/snippets_resolver.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from ResolvesSnippets)
+
+# rubocop:disable Graphql/ResolverType -- inherited from ResolvesSnippets
module Resolvers
class SnippetsResolver < BaseResolver
@@ -45,3 +46,4 @@ module Resolvers
end
end
end
+# rubocop:enable Graphql/ResolverType
diff --git a/app/graphql/resolvers/users/snippets_resolver.rb b/app/graphql/resolvers/users/snippets_resolver.rb
index 75bba8debab..ea5f6b7b8c9 100644
--- a/app/graphql/resolvers/users/snippets_resolver.rb
+++ b/app/graphql/resolvers/users/snippets_resolver.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-# rubocop:disable Graphql/ResolverType (inherited from ResolvesSnippets)
+
+# rubocop:disable Graphql/ResolverType -- inherited from ResolvesSnippets
module Resolvers
module Users
@@ -27,3 +28,4 @@ module Resolvers
end
end
end
+# rubocop:enable Graphql/ResolverType
diff --git a/app/graphql/types/security/codequality_reports_comparer/degradation_type.rb b/app/graphql/types/security/codequality_reports_comparer/degradation_type.rb
index fb7d722069f..e5fcd846190 100644
--- a/app/graphql/types/security/codequality_reports_comparer/degradation_type.rb
+++ b/app/graphql/types/security/codequality_reports_comparer/degradation_type.rb
@@ -3,7 +3,7 @@
module Types
module Security
module CodequalityReportsComparer
- # rubocop: disable Graphql/AuthorizeTypes (The resolver authorizes the request)
+ # rubocop: disable Graphql/AuthorizeTypes -- The resolver authorizes the request
class DegradationType < BaseObject
graphql_name 'CodequalityReportsComparerReportDegradation'
diff --git a/app/graphql/types/security/codequality_reports_comparer/report_type.rb b/app/graphql/types/security/codequality_reports_comparer/report_type.rb
index 8a41160141a..d20c9dd9ab6 100644
--- a/app/graphql/types/security/codequality_reports_comparer/report_type.rb
+++ b/app/graphql/types/security/codequality_reports_comparer/report_type.rb
@@ -3,7 +3,7 @@
module Types
module Security
module CodequalityReportsComparer
- # rubocop: disable Graphql/AuthorizeTypes (Parent node applies authorization)
+ # rubocop: disable Graphql/AuthorizeTypes -- Parent node applies authorization
class ReportType < BaseObject
graphql_name 'CodequalityReportsComparerReport'
diff --git a/app/graphql/types/security/codequality_reports_comparer/summary_type.rb b/app/graphql/types/security/codequality_reports_comparer/summary_type.rb
index cd4a594c193..43037be5245 100644
--- a/app/graphql/types/security/codequality_reports_comparer/summary_type.rb
+++ b/app/graphql/types/security/codequality_reports_comparer/summary_type.rb
@@ -3,7 +3,7 @@
module Types
module Security
module CodequalityReportsComparer
- # rubocop: disable Graphql/AuthorizeTypes (The resolver authorizes the request)
+ # rubocop: disable Graphql/AuthorizeTypes -- The resolver authorizes the request
class SummaryType < BaseObject
graphql_name 'CodequalityReportsComparerReportSummary'
diff --git a/app/graphql/types/security/codequality_reports_comparer_type.rb b/app/graphql/types/security/codequality_reports_comparer_type.rb
index 8088bf84627..c8c5a482830 100644
--- a/app/graphql/types/security/codequality_reports_comparer_type.rb
+++ b/app/graphql/types/security/codequality_reports_comparer_type.rb
@@ -2,7 +2,7 @@
module Types
module Security
- # rubocop: disable Graphql/AuthorizeTypes (The resolver authorizes the request)
+ # rubocop: disable Graphql/AuthorizeTypes -- The resolver authorizes the request
class CodequalityReportsComparerType < BaseObject
graphql_name 'CodequalityReportsComparer'
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 04fe0a4450c..7dc0f63924f 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -200,6 +200,10 @@ module ProjectsHelper
.load_in_batch_for_projects(projects)
end
+ def load_catalog_resources(projects)
+ ActiveRecord::Associations::Preloader.new(records: projects, associations: :catalog_resource).call
+ end
+
def last_pipeline_from_status_cache(project)
if Feature.enabled?(:last_pipeline_from_pipeline_status, project)
pipeline_status = project.pipeline_status
diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index 0bdce18bab5..ae970ca9e6b 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -8,12 +8,15 @@ class Deployment < ApplicationRecord
include Importable
include Gitlab::Utils::StrongMemoize
include FastDestroyAll
+ include IgnorableColumns
StatusUpdateError = Class.new(StandardError)
StatusSyncError = Class.new(StandardError)
ARCHIVABLE_OFFSET = 50_000
+ ignore_column :cluster_id, remove_with: '16.8', remove_after: '2023-12-22'
+
belongs_to :project, optional: false
belongs_to :environment, optional: false
belongs_to :user
diff --git a/app/policies/group_policy.rb b/app/policies/group_policy.rb
index 2ab59f5a34d..ca170133105 100644
--- a/app/policies/group_policy.rb
+++ b/app/policies/group_policy.rb
@@ -121,6 +121,7 @@ class GroupPolicy < Namespaces::GroupProjectNamespaceSharedPolicy
enable :upload_file
enable :guest_access
enable :read_release
+ enable :award_emoji
end
rule { admin }.policy do
diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb
index 37a829e3014..fb6544a910a 100644
--- a/app/services/merge_requests/update_service.rb
+++ b/app/services/merge_requests/update_service.rb
@@ -168,6 +168,7 @@ module MergeRequests
merge_request.target_branch
)
+ delete_approvals_on_target_branch_change(merge_request)
refresh_pipelines_on_merge_requests(merge_request, allow_duplicate: true)
abort_auto_merge(merge_request, 'target branch was changed')
@@ -321,6 +322,10 @@ module MergeRequests
def trigger_merge_request_status_updated(merge_request)
GraphqlTriggers.merge_request_merge_status_updated(merge_request)
end
+
+ def delete_approvals_on_target_branch_change(_merge_request)
+ # Overridden in EE. No-op since we only want to delete approvals in EE.
+ end
end
end
diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml
index 93f4fe62568..21004b7eb8a 100644
--- a/app/views/projects/_home_panel.html.haml
+++ b/app/views/projects/_home_panel.html.haml
@@ -12,6 +12,8 @@
= @project.name
= visibility_level_content(@project, css_class: 'visibility-icon gl-text-secondary gl-ml-2', icon_css_class: 'icon')
= render_if_exists 'compliance_management/compliance_framework/compliance_framework_badge', project: @project, additional_classes: 'gl-align-self-center gl-ml-2'
+ - if @project.catalog_resource
+ = render partial: 'shared/ci_catalog_badge', locals: { href: project_ci_catalog_resource_path(@project, @project.catalog_resource) }
- if @project.group
= render_if_exists 'shared/tier_badge', source: @project, source_type: 'Project'
.home-panel-metadata.gl-font-sm.gl-text-secondary.gl-font-base.gl-font-weight-normal.gl-line-height-normal{ data: { testid: 'project-id-content' }, itemprop: 'identifier' }
diff --git a/app/views/shared/_ci_catalog_badge.html.haml b/app/views/shared/_ci_catalog_badge.html.haml
new file mode 100644
index 00000000000..345bfb5e022
--- /dev/null
+++ b/app/views/shared/_ci_catalog_badge.html.haml
@@ -0,0 +1 @@
+= render Pajamas::BadgeComponent.new(s_('CiCatalog|CI/CD catalog resource'), variant: 'info', icon: 'catalog-checkmark', class: 'gl-mx-2', href: href)
diff --git a/app/views/shared/projects/_list.html.haml b/app/views/shared/projects/_list.html.haml
index 14785870dc0..74c325383a1 100644
--- a/app/views/shared/projects/_list.html.haml
+++ b/app/views/shared/projects/_list.html.haml
@@ -32,6 +32,7 @@
- if any_projects?(projects)
- load_pipeline_status(projects) if pipeline_status
- load_max_project_member_accesses(projects) # Prime cache used in shared/projects/project view rendered below
+ - load_catalog_resources(projects)
%ul.projects-list.gl-text-secondary.gl-w-full.gl-my-2{ class: css_classes }
- projects.each_with_index do |project, i|
- css_class = (i >= projects_limit) || project.pending_delete? ? 'hide' : nil
diff --git a/app/views/shared/projects/_project.html.haml b/app/views/shared/projects/_project.html.haml
index 2de4a9d7780..fc9522e3f32 100644
--- a/app/views/shared/projects/_project.html.haml
+++ b/app/views/shared/projects/_project.html.haml
@@ -37,6 +37,9 @@
= visibility_level_content(project, css_class: 'gl-mr-3')
+ - if project.catalog_resource
+ = render partial: 'shared/ci_catalog_badge', locals: { href: project_ci_catalog_resource_path(project, project.catalog_resource) }
+
- if explore_projects_tab? && project_license_name(project)
%span.gl-display-inline-flex.gl-align-items-center.gl-mr-3
= sprite_icon('scale', size: 14, css_class: 'gl-mr-2')