diff options
4 files changed, 115 insertions, 6 deletions
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 0cfc2db3285..2a673915a61 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -204,12 +204,10 @@ module ProjectsHelper current_user.require_extra_setup_for_git_auth? end - def show_auto_devops_implicitly_enabled_banner?(project) - cookie_key = "hide_auto_devops_implicitly_enabled_banner_#{project.id}" + def show_auto_devops_implicitly_enabled_banner?(project, user) + return false unless user_can_see_auto_devops_implicitly_enabled_banner?(project, user) - project.has_auto_devops_implicitly_enabled? && - cookies[cookie_key.to_sym].blank? && - (project.owner == current_user || project.team.maintainer?(current_user)) + cookies["hide_auto_devops_implicitly_enabled_banner_#{project.id}".to_sym].blank? end def link_to_set_password @@ -579,4 +577,11 @@ module ProjectsHelper gcp ] end + + def user_can_see_auto_devops_implicitly_enabled_banner?(project, user) + Ability.allowed?(user, :admin_project, project) && + project.has_auto_devops_implicitly_enabled? && + project.builds_enabled? && + !project.repository.gitlab_ci_yml + end end diff --git a/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml b/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml index 0d0a3c1aa64..422be28737c 100644 --- a/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml +++ b/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml @@ -1,4 +1,4 @@ -- if show_auto_devops_implicitly_enabled_banner?(project) +- if show_auto_devops_implicitly_enabled_banner?(project, current_user) .auto-devops-implicitly-enabled-banner.alert.alert-warning - more_information_link = link_to _('More information'), help_page_path('topics/autodevops/index.md'), target: '_blank', class: 'alert-link' - auto_devops_message = s_("AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}") % { more_information_link: more_information_link } diff --git a/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml b/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml new file mode 100644 index 00000000000..bd8d0699bd1 --- /dev/null +++ b/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml @@ -0,0 +1,5 @@ +--- +title: Don't show Auto DevOps enabled banner for projects with CI file or CI disabled +merge_request: 24067 +author: +type: other diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index edd680ee1d1..88b5d87f087 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -629,4 +629,103 @@ describe ProjectsHelper do end end end + + describe '#show_auto_devops_implicitly_enabled_banner?' do + using RSpec::Parameterized::TableSyntax + + let(:user) { create(:user) } + + let(:feature_visibilities) do + { + enabled: ProjectFeature::ENABLED, + disabled: ProjectFeature::DISABLED + } + end + + where(:global_setting, :project_setting, :builds_visibility, :gitlab_ci_yml, :user_access, :result) do + # With ADO implicitly enabled scenarios + true | nil | :disabled | true | :developer | false + true | nil | :disabled | true | :maintainer | false + true | nil | :disabled | true | :owner | false + + true | nil | :disabled | false | :developer | false + true | nil | :disabled | false | :maintainer | false + true | nil | :disabled | false | :owner | false + + true | nil | :enabled | true | :developer | false + true | nil | :enabled | true | :maintainer | false + true | nil | :enabled | true | :owner | false + + true | nil | :enabled | false | :developer | false + true | nil | :enabled | false | :maintainer | true + true | nil | :enabled | false | :owner | true + + # With ADO enabled scenarios + true | true | :disabled | true | :developer | false + true | true | :disabled | true | :maintainer | false + true | true | :disabled | true | :owner | false + + true | true | :disabled | false | :developer | false + true | true | :disabled | false | :maintainer | false + true | true | :disabled | false | :owner | false + + true | true | :enabled | true | :developer | false + true | true | :enabled | true | :maintainer | false + true | true | :enabled | true | :owner | false + + true | true | :enabled | false | :developer | false + true | true | :enabled | false | :maintainer | false + true | true | :enabled | false | :owner | false + + # With ADO disabled scenarios + true | false | :disabled | true | :developer | false + true | false | :disabled | true | :maintainer | false + true | false | :disabled | true | :owner | false + + true | false | :disabled | false | :developer | false + true | false | :disabled | false | :maintainer | false + true | false | :disabled | false | :owner | false + + true | false | :enabled | true | :developer | false + true | false | :enabled | true | :maintainer | false + true | false | :enabled | true | :owner | false + + true | false | :enabled | false | :developer | false + true | false | :enabled | false | :maintainer | false + true | false | :enabled | false | :owner | false + end + + def grant_user_access(project, user, access) + case access + when :developer, :maintainer + project.add_user(user, access) + when :owner + project.namespace.update(owner: user) + end + end + + with_them do + let(:project) do + if project_setting.nil? + create(:project, :repository) + else + create(:project, :repository, :auto_devops) + end + end + + before do + stub_application_setting(auto_devops_enabled: global_setting) + + allow_any_instance_of(Repository).to receive(:gitlab_ci_yml).and_return(gitlab_ci_yml) + + grant_user_access(project, user, user_access) + project.project_feature.update_attribute(:builds_access_level, feature_visibilities[builds_visibility]) + project.auto_devops.update_attribute(:enabled, project_setting) unless project_setting.nil? + end + + subject { helper.show_auto_devops_implicitly_enabled_banner?(project, user) } + + it { is_expected.to eq(result) } + end + end end |