diff options
author | Kamil TrzciĆski <ayufan@ayufan.eu> | 2018-09-18 19:20:43 +0000 |
---|---|---|
committer | Bob Van Landuyt <bob@vanlanduyt.co> | 2018-09-19 13:15:19 +0200 |
commit | 6a22ef876abfc4c3314df8fd987bd1a92a08771c (patch) | |
tree | b387611d3c8a22066f3981afb52e2f8f256a5358 | |
parent | e950a59c5be85dac37b2fbdaccca1713f6ab374e (diff) | |
download | gitlab-ce-11-3-stable-prepare-rc11.tar.gz |
Merge branch '41729-enable-auto-devops-instance-wide-for-everyone' into 'master'11-3-stable-prepare-rc11
Resolve "Enable Auto DevOps by default for self managed instances of GitLab"
Closes #41729
See merge request gitlab-org/gitlab-ce!21157
-rw-r--r-- | changelogs/unreleased/41729-enable-auto-devops-instance-wide-for-everyone.yml | 5 | ||||
-rw-r--r-- | db/migrate/20180813101999_change_default_of_auto_devops_instance_wide.rb | 15 | ||||
-rw-r--r-- | db/migrate/20180813102000_enable_auto_devops_instance_wide_for_everyone.rb | 15 | ||||
-rw-r--r-- | db/schema.rb | 2 | ||||
-rw-r--r-- | spec/features/projects/pipelines/pipelines_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb | 184 | ||||
-rw-r--r-- | spec/helpers/auto_devops_helper_spec.rb | 10 | ||||
-rw-r--r-- | spec/models/ci/pipeline_spec.rb | 7 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 12 | ||||
-rw-r--r-- | spec/requests/api/pipelines_spec.rb | 16 | ||||
-rw-r--r-- | spec/services/git_push_service_spec.rb | 8 |
11 files changed, 173 insertions, 103 deletions
diff --git a/changelogs/unreleased/41729-enable-auto-devops-instance-wide-for-everyone.yml b/changelogs/unreleased/41729-enable-auto-devops-instance-wide-for-everyone.yml new file mode 100644 index 00000000000..ff925c4fc55 --- /dev/null +++ b/changelogs/unreleased/41729-enable-auto-devops-instance-wide-for-everyone.yml @@ -0,0 +1,5 @@ +--- +title: Enable Auto DevOps Instance Wide Default +merge_request: 21157 +author: +type: changed diff --git a/db/migrate/20180813101999_change_default_of_auto_devops_instance_wide.rb b/db/migrate/20180813101999_change_default_of_auto_devops_instance_wide.rb new file mode 100644 index 00000000000..05d1124f5c4 --- /dev/null +++ b/db/migrate/20180813101999_change_default_of_auto_devops_instance_wide.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class ChangeDefaultOfAutoDevopsInstanceWide < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def up + change_column_default :application_settings, :auto_devops_enabled, true + end + + def down + change_column_default :application_settings, :auto_devops_enabled, false + end +end diff --git a/db/migrate/20180813102000_enable_auto_devops_instance_wide_for_everyone.rb b/db/migrate/20180813102000_enable_auto_devops_instance_wide_for_everyone.rb new file mode 100644 index 00000000000..21fb62806b3 --- /dev/null +++ b/db/migrate/20180813102000_enable_auto_devops_instance_wide_for_everyone.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class EnableAutoDevopsInstanceWideForEveryone < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def up + execute "UPDATE application_settings SET auto_devops_enabled = true" + end + + def down + # No way to know here what their previous setting was... + end +end diff --git a/db/schema.rb b/db/schema.rb index 13814dd569e..f54ef805ae7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -141,7 +141,7 @@ ActiveRecord::Schema.define(version: 20180906101639) do t.integer "performance_bar_allowed_group_id" t.boolean "hashed_storage_enabled", default: false, null: false t.boolean "project_export_enabled", default: true, null: false - t.boolean "auto_devops_enabled", default: false, null: false + t.boolean "auto_devops_enabled", default: true, null: false t.integer "circuitbreaker_failure_count_threshold", default: 3 t.integer "circuitbreaker_failure_reset_time", default: 1800 t.integer "circuitbreaker_storage_timeout", default: 15 diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb index 26a92f14787..41822babbc9 100644 --- a/spec/features/projects/pipelines/pipelines_spec.rb +++ b/spec/features/projects/pipelines/pipelines_spec.rb @@ -9,6 +9,7 @@ describe 'Pipelines', :js do before do sign_in(user) project.add_developer(user) + project.update!(auto_devops_attributes: { enabled: false }) end describe 'GET /:project/pipelines' do @@ -641,6 +642,7 @@ describe 'Pipelines', :js do context 'when user is not logged in' do before do + project.update!(auto_devops_attributes: { enabled: false }) visit project_pipelines_path(project) end diff --git a/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb b/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb index b8326edd4fd..6fe21579e8e 100644 --- a/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb +++ b/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb @@ -28,8 +28,6 @@ describe 'Projects > Show > User sees setup shortcut buttons' do end it '"Auto DevOps enabled" button not linked' do - project.create_auto_devops!(enabled: true) - visit project_path(project) page.within('.project-stats') do @@ -65,19 +63,23 @@ describe 'Projects > Show > User sees setup shortcut buttons' do end describe 'Auto DevOps button' do - it '"Enable Auto DevOps" button linked to settings page' do - page.within('.project-stats') do - expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + context 'when Auto DevOps is enabled' do + it '"Auto DevOps enabled" anchor linked to settings page' do + visit project_path(project) + + page.within('.project-stats') do + expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + end end end - it '"Auto DevOps enabled" anchor linked to settings page' do - project.create_auto_devops!(enabled: true) - - visit project_path(project) + context 'when Auto DevOps is not enabled' do + let(:project) { create(:project, :public, :empty_repo, auto_devops_attributes: { enabled: false }) } - page.within('.project-stats') do - expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + it '"Enable Auto DevOps" button linked to settings page' do + page.within('.project-stats') do + expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + end end end end @@ -113,27 +115,31 @@ describe 'Projects > Show > User sees setup shortcut buttons' do visit project_path(project) end - it 'no Auto DevOps button if can not manage pipelines' do - page.within('.project-stats') do - expect(page).not_to have_link('Enable Auto DevOps') - expect(page).not_to have_link('Auto DevOps enabled') + context 'when Auto DevOps is enabled' do + it '"Auto DevOps enabled" button not linked' do + visit project_path(project) + + page.within('.project-stats') do + expect(page).to have_text('Auto DevOps enabled') + end end end - it '"Auto DevOps enabled" button not linked' do - project.create_auto_devops!(enabled: true) - - visit project_path(project) + context 'when Auto DevOps is not enabled' do + let(:project) { create(:project, :public, :repository, auto_devops_attributes: { enabled: false }) } - page.within('.project-stats') do - expect(page).to have_text('Auto DevOps enabled') + it 'no Auto DevOps button if can not manage pipelines' do + page.within('.project-stats') do + expect(page).not_to have_link('Enable Auto DevOps') + expect(page).not_to have_link('Auto DevOps enabled') + end end - end - it 'no Kubernetes cluster button if can not manage clusters' do - page.within('.project-stats') do - expect(page).not_to have_link('Add Kubernetes cluster') - expect(page).not_to have_link('Kubernetes configured') + it 'no Kubernetes cluster button if can not manage clusters' do + page.within('.project-stats') do + expect(page).not_to have_link('Add Kubernetes cluster') + expect(page).not_to have_link('Kubernetes configured') + end end end end @@ -222,97 +228,105 @@ describe 'Projects > Show > User sees setup shortcut buttons' do end describe 'GitLab CI configuration button' do - it '"Set up CI/CD" button linked to new file populated for a .gitlab-ci.yml' do - visit project_path(project) - - expect(project.repository.gitlab_ci_yml).to be_nil + context 'when Auto DevOps is enabled' do + it 'no "Set up CI/CD" button if the project has Auto DevOps enabled' do + visit project_path(project) - page.within('.project-stats') do - expect(page).to have_link('Set up CI/CD', href: presenter.add_ci_yml_path) + page.within('.project-stats') do + expect(page).not_to have_link('Set up CI/CD') + end end end - it 'no "Set up CI/CD" button if the project already has a .gitlab-ci.yml' do - Files::CreateService.new( - project, - project.creator, - start_branch: 'master', - branch_name: 'master', - commit_message: "Add .gitlab-ci.yml", - file_path: '.gitlab-ci.yml', - file_content: File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml')) - ).execute + context 'when Auto DevOps is not enabled' do + let(:project) { create(:project, :public, :repository, auto_devops_attributes: { enabled: false }) } - expect(project.repository.gitlab_ci_yml).not_to be_nil + it '"Set up CI/CD" button linked to new file populated for a .gitlab-ci.yml' do + visit project_path(project) - visit project_path(project) + expect(project.repository.gitlab_ci_yml).to be_nil - page.within('.project-stats') do - expect(page).not_to have_link('Set up CI/CD') + page.within('.project-stats') do + expect(page).to have_link('Set up CI/CD', href: presenter.add_ci_yml_path) + end end - end - it 'no "Set up CI/CD" button if the project has Auto DevOps enabled' do - project.create_auto_devops!(enabled: true) + it 'no "Set up CI/CD" button if the project already has a .gitlab-ci.yml' do + Files::CreateService.new( + project, + project.creator, + start_branch: 'master', + branch_name: 'master', + commit_message: "Add .gitlab-ci.yml", + file_path: '.gitlab-ci.yml', + file_content: File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml')) + ).execute - visit project_path(project) + expect(project.repository.gitlab_ci_yml).not_to be_nil - page.within('.project-stats') do - expect(page).not_to have_link('Set up CI/CD') + visit project_path(project) + + page.within('.project-stats') do + expect(page).not_to have_link('Set up CI/CD') + end end end end describe 'Auto DevOps button' do - it '"Enable Auto DevOps" button linked to settings page' do - visit project_path(project) + context 'when Auto DevOps is enabled' do + it '"Auto DevOps enabled" anchor linked to settings page' do + visit project_path(project) - page.within('.project-stats') do - expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + page.within('.project-stats') do + expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + end end end - it '"Enable Auto DevOps" button linked to settings page' do - project.create_auto_devops!(enabled: true) + context 'when Auto DevOps is not enabled' do + let(:project) { create(:project, :public, :repository, auto_devops_attributes: { enabled: false }) } - visit project_path(project) + it '"Enable Auto DevOps" button linked to settings page' do + visit project_path(project) - page.within('.project-stats') do - expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + page.within('.project-stats') do + expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings')) + end end - end - it 'no Auto DevOps button if Auto DevOps callout is shown' do - allow_any_instance_of(AutoDevopsHelper).to receive(:show_auto_devops_callout?).and_return(true) + it 'no Auto DevOps button if Auto DevOps callout is shown' do + allow_any_instance_of(AutoDevopsHelper).to receive(:show_auto_devops_callout?).and_return(true) - visit project_path(project) + visit project_path(project) - expect(page).to have_selector('.js-autodevops-banner') + expect(page).to have_selector('.js-autodevops-banner') - page.within('.project-stats') do - expect(page).not_to have_link('Enable Auto DevOps') - expect(page).not_to have_link('Auto DevOps enabled') + page.within('.project-stats') do + expect(page).not_to have_link('Enable Auto DevOps') + expect(page).not_to have_link('Auto DevOps enabled') + end end - end - it 'no "Enable Auto DevOps" button when .gitlab-ci.yml already exists' do - Files::CreateService.new( - project, - project.creator, - start_branch: 'master', - branch_name: 'master', - commit_message: "Add .gitlab-ci.yml", - file_path: '.gitlab-ci.yml', - file_content: File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml')) - ).execute + it 'no "Enable Auto DevOps" button when .gitlab-ci.yml already exists' do + Files::CreateService.new( + project, + project.creator, + start_branch: 'master', + branch_name: 'master', + commit_message: "Add .gitlab-ci.yml", + file_path: '.gitlab-ci.yml', + file_content: File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml')) + ).execute - expect(project.repository.gitlab_ci_yml).not_to be_nil + expect(project.repository.gitlab_ci_yml).not_to be_nil - visit project_path(project) + visit project_path(project) - page.within('.project-stats') do - expect(page).not_to have_link('Enable Auto DevOps') - expect(page).not_to have_link('Auto DevOps enabled') + page.within('.project-stats') do + expect(page).not_to have_link('Enable Auto DevOps') + expect(page).not_to have_link('Auto DevOps enabled') + end end end end diff --git a/spec/helpers/auto_devops_helper_spec.rb b/spec/helpers/auto_devops_helper_spec.rb index 1950c2b129b..75c30dbfe48 100644 --- a/spec/helpers/auto_devops_helper_spec.rb +++ b/spec/helpers/auto_devops_helper_spec.rb @@ -16,7 +16,15 @@ describe AutoDevopsHelper do subject { helper.show_auto_devops_callout?(project) } - context 'when all conditions are met' do + context 'when auto devops is implicitly enabled' do + it { is_expected.to eq(false) } + end + + context 'when auto devops is not implicitly enabled' do + before do + Gitlab::CurrentSettings.update!(auto_devops_enabled: false) + end + it { is_expected.to eq(true) } end diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index 14ccc2960bb..47ae22740af 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -1151,7 +1151,11 @@ describe Ci::Pipeline, :mailer do end describe '#set_config_source' do - context 'when pipelines does not contain needed data' do + context 'when pipelines does not contain needed data and auto devops is disabled' do + before do + stub_application_setting(auto_devops_enabled: false) + end + it 'defines source to be unknown' do pipeline.set_config_source @@ -1196,7 +1200,6 @@ describe Ci::Pipeline, :mailer do context 'auto devops enabled' do before do - stub_application_setting(auto_devops_enabled: true) allow(project).to receive(:ci_config_path) { 'custom' } end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index cb844cd2102..3a285735682 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -3229,17 +3229,17 @@ describe Project do expect(repository).to receive(:gitlab_ci_yml) { nil } end - it "CI is not available" do - expect(project).not_to have_ci + it "CI is available" do + expect(project).to have_ci end - context 'when auto devops is enabled' do + context 'when auto devops is disabled' do before do - stub_application_setting(auto_devops_enabled: true) + stub_application_setting(auto_devops_enabled: false) end - it "CI is available" do - expect(project).to have_ci + it "CI is not available" do + expect(project).not_to have_ci end end end diff --git a/spec/requests/api/pipelines_spec.rb b/spec/requests/api/pipelines_spec.rb index 342a97b6a69..f0e1992bccd 100644 --- a/spec/requests/api/pipelines_spec.rb +++ b/spec/requests/api/pipelines_spec.rb @@ -370,12 +370,18 @@ describe API::Pipelines do end context 'without gitlab-ci.yml' do - it 'fails to create pipeline' do - post api("/projects/#{project.id}/pipeline", user), ref: project.default_branch + context 'without auto devops enabled' do + before do + project.update!(auto_devops_attributes: { enabled: false }) + end - expect(response).to have_gitlab_http_status(400) - expect(json_response['message']['base'].first).to eq 'Missing .gitlab-ci.yml file' - expect(json_response).not_to be_an Array + it 'fails to create pipeline' do + post api("/projects/#{project.id}/pipeline", user), ref: project.default_branch + + expect(response).to have_gitlab_http_status(400) + expect(json_response['message']['base'].first).to eq 'Missing .gitlab-ci.yml file' + expect(json_response).not_to be_an Array + end end end end diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb index d4528256640..45ef26aebbd 100644 --- a/spec/services/git_push_service_spec.rb +++ b/spec/services/git_push_service_spec.rb @@ -246,13 +246,15 @@ describe GitPushService, services: true do describe 'system hooks' do let!(:push_data) { push_data_from_service(project, user, oldrev, newrev, ref) } - let(:system_hooks_service) { SystemHooksService.new } + let!(:system_hooks_service) { SystemHooksService.new } it "sends a system hook after pushing a branch" do - expect(SystemHooksService).to receive(:new).and_return(system_hooks_service) - expect(system_hooks_service).to receive(:execute_hooks).with(push_data, :push_hooks) + allow(SystemHooksService).to receive(:new).and_return(system_hooks_service) + allow(system_hooks_service).to receive(:execute_hooks) execute_service(project, user, oldrev, newrev, ref) + + expect(system_hooks_service).to have_received(:execute_hooks).with(push_data, :push_hooks) end end end |