diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-20 18:18:12 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-20 18:18:12 +0300 |
commit | 3a3e4bcbd1512ff31a11b9747b19b60140f8834f (patch) | |
tree | 67d70eef61000d98ed9ac691458fe2d180d0175f /app | |
parent | 34c88d512f2697cd96dd3788e8ffaf1b9c8935b4 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
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') |