diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-15 18:08:13 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-15 18:08:13 +0300 |
commit | a29eae68f453c371271641899e00ea24339fb1c6 (patch) | |
tree | 5c7d43159cdaee44d3f510db0f42941ed3f3bb90 /app | |
parent | f58a5001b9c4988d8b95178b028a3d82bb346e28 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
5 files changed, 116 insertions, 77 deletions
diff --git a/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue b/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue index 343b555c4d8..ccef50e469d 100644 --- a/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue +++ b/app/assets/javascripts/ci/catalog/components/details/ci_resource_readme.vue @@ -50,6 +50,6 @@ export default { <template> <div> <gl-loading-icon v-if="isLoading" class="gl-mt-5" size="lg" /> - <div v-else v-safe-html="readmeHtml"></div> + <div v-else v-safe-html="readmeHtml" class="md"></div> </div> </template> diff --git a/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue b/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue index 7413e2237c3..afdb9e9ff08 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/widget/widget_content_row.vue @@ -72,6 +72,11 @@ export default { return this.actionButtons.length > 0; }, }, + methods: { + hasHeader() { + return Boolean(this.$scopedSlots.header || this.header || this.shouldShowHeaderActions); + }, + }, i18n: { learnMore: __('Learn more'), }, @@ -91,9 +96,9 @@ export default { :icon-name="statusIconName" /> <div class="gl-w-full gl-min-w-0"> - <div class="gl-display-flex"> + <div v-if="hasHeader()" class="gl-display-flex"> <slot name="header"> - <div v-if="header" class="gl-mb-2"> + <div class="gl-mb-2"> <strong v-safe-html="generatedHeader" class="gl-display-block"></strong ><span v-if="generatedSubheader" diff --git a/app/finders/ci/runners_finder.rb b/app/finders/ci/runners_finder.rb index 88402748083..18be2aec2e2 100644 --- a/app/finders/ci/runners_finder.rb +++ b/app/finders/ci/runners_finder.rb @@ -14,18 +14,25 @@ module Ci end def execute - search! - filter_by_active! - filter_by_status! - filter_by_upgrade_status! - filter_by_runner_type! - filter_by_tag_list! - filter_by_creator_id! - filter_by_version_prefix! - sort! - request_tag_list! - - @runners + items = if @project + project_runners + elsif @group + group_runners + else + all_runners + end + + items = search(items) + items = by_active(items) + items = by_status(items) + items = by_upgrade_status(items) + items = by_runner_type(items) + items = by_tag_list(items) + items = by_creator_id(items) + items = by_version_prefix(items) + items = request_tag_list(items) + + sort(items) end def sort_key @@ -40,105 +47,104 @@ module Ci %w[contacted_asc contacted_desc created_at_asc created_at_desc created_date token_expires_at_asc token_expires_at_desc] end - def search! - if @project - project_runners - elsif @group - group_runners - else - all_runners - end - - @runners = @runners.search(@params[:search]) if @params[:search].present? - end - def all_runners raise Gitlab::Access::AccessDeniedError unless @current_user&.can_admin_all_resources? - @runners = Ci::Runner.all + Ci::Runner.all end def group_runners raise Gitlab::Access::AccessDeniedError unless can?(@current_user, :read_group_runners, @group) - @runners = case @params[:membership] - when :direct - Ci::Runner.belonging_to_group(@group.id) - when :descendants, nil - Ci::Runner.belonging_to_group_or_project_descendants(@group.id) - when :all_available - unless can?(@current_user, :read_group_all_available_runners, @group) - raise Gitlab::Access::AccessDeniedError - end - - Ci::Runner.usable_from_scope(@group) - else - raise ArgumentError, 'Invalid membership filter' - end + case @params[:membership] + when :direct + Ci::Runner.belonging_to_group(@group.id) + when :descendants, nil + Ci::Runner.belonging_to_group_or_project_descendants(@group.id) + when :all_available + unless can?(@current_user, :read_group_all_available_runners, @group) + raise Gitlab::Access::AccessDeniedError + end + + Ci::Runner.usable_from_scope(@group) + else + raise ArgumentError, 'Invalid membership filter' + end end def project_runners raise Gitlab::Access::AccessDeniedError unless can?(@current_user, :read_project_runners, @project) - @runners = ::Ci::Runner.owned_or_instance_wide(@project.id) + ::Ci::Runner.owned_or_instance_wide(@project.id) end - def filter_by_active! - @runners = @runners.active(@params[:active]) if @params.include?(:active) + def search(items) + return items unless @params[:search].present? + + items.search(@params[:search]) end - def filter_by_status! - @runners = @runners.with_status(@params[:status_status]) if @params[:status_status].present? + def by_active(items) + return items if @params.exclude?(:active) + + items.active(@params[:active]) end - def filter_by_upgrade_status! + def by_status(items) + status = @params[:status_status].presence + return items unless status + + items.with_status(status) + end + + def by_upgrade_status(items) upgrade_status = @params[:upgrade_status] - return unless upgrade_status + return items unless upgrade_status unless Ci::RunnerVersion.statuses.key?(upgrade_status) raise ArgumentError, "Invalid upgrade status value '#{upgrade_status}'" end - @runners = @runners.with_upgrade_status(upgrade_status) + items.with_upgrade_status(upgrade_status) end - def filter_by_runner_type! - runner_type = @params[:type_type] - return if runner_type.blank? + def by_runner_type(items) + runner_type = @params[:type_type].presence + return items unless runner_type - @runners = @runners.with_runner_type(runner_type) + items.with_runner_type(runner_type) end - def filter_by_tag_list! + def by_tag_list(items) tag_list = @params[:tag_name].presence + return items unless tag_list - if tag_list - @runners = @runners.tagged_with(tag_list) - end + items.tagged_with(tag_list) end - def filter_by_creator_id! - creator_id = @params[:creator_id] - @runners = @runners.with_creator_id(creator_id) if creator_id.present? - end - - def filter_by_version_prefix! - return @runners unless @params[:version_prefix] + def by_creator_id(items) + creator_id = @params[:creator_id].presence + return items unless creator_id - sanitized_prefix = @params[:version_prefix][/^[\d+.]+/] + items.with_creator_id(creator_id) + end - return @runners unless sanitized_prefix + def by_version_prefix(items) + sanitized_prefix = @params.fetch(:version_prefix, '')[/^[\d+.]+/] + return items unless sanitized_prefix - @runners = @runners.with_version_prefix(sanitized_prefix) + items.with_version_prefix(sanitized_prefix) end - def sort! - @runners = @runners.order_by(sort_key) + def sort(items) + items.order_by(sort_key) end - def request_tag_list! - @runners = @runners.with_tags if @params.exclude?(:preload) || @params.dig(:preload, :tag_name) + def request_tag_list(items) + return items if @params.include?(:preload) && !@params.dig(:preload, :tag_name) # Backward-compatible behavior + + items.with_tags end end end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index f1ce4738015..47102418152 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -461,18 +461,25 @@ class MergeRequestDiff < ApplicationRecord fetching_repository_diffs({}) do |comparison| reorder_diff_files! + collapse_generated = Feature.enabled?(:collapse_generated_diff_files, project) + diff_options = { collapse_generated: collapse_generated } + collection = Gitlab::Diff::FileCollection::PaginatedMergeRequestDiff.new( self, page, - per_page + per_page, + diff_options ) if comparison + diff_options[:generated_files] = comparison.generated_files if collapse_generated + comparison.diffs( - paths: collection.diff_paths, - page: collection.current_page, - per_page: collection.limit_value, - count: collection.total_count + diff_options.merge( + paths: collection.diff_paths, + page: collection.current_page, + per_page: collection.limit_value, + count: collection.total_count) ) else collection diff --git a/app/services/import/github_service.rb b/app/services/import/github_service.rb index b8389192b18..ffd26e2aaca 100644 --- a/app/services/import/github_service.rb +++ b/app/services/import/github_service.rb @@ -5,6 +5,8 @@ module Import include ActiveSupport::NumberHelper include Gitlab::Utils::StrongMemoize + COLLAB_IMPORT_SCOPES = %w[admin:org read:org].freeze + attr_accessor :client attr_reader :params, :current_user @@ -12,6 +14,9 @@ module Import context_error = validate_context return context_error if context_error + scope_error = validate_collaborators_import_scope + return scope_error if scope_error + project = create_project(access_params, provider) track_access_level('github') @@ -98,6 +103,22 @@ module Import private + def validate_collaborators_import_scope + collaborators_import = params.dig(:optional_stages, :collaborators_import) + # A value for `collaborators_import` may not be included in POST params + # and the default value is `true` + return unless collaborators_import == true || collaborators_import.nil? + + # We need to call `#repo` to ensure the `#last_response` from the client has the headers we need. + repo + scopes = client.octokit.last_response.headers["x-oauth-scopes"] + scopes = scopes.split(',').map(&:strip) + + return if (scopes & COLLAB_IMPORT_SCOPES).any? + + log_and_return_error('Invalid scope', _('Your GitHub access token does not have the correct scope to import collaborators.'), :unprocessable_entity) + end + def validate_context if blocked_url? log_and_return_error("Invalid URL: #{url}", _("Invalid URL: %{url}") % { url: url }, :bad_request) |