From 2378f2c8cb0cdd9538c0336a359deadf52255adc Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Tue, 31 Mar 2015 17:50:08 +0300 Subject: [PATCH 1/2] Deploy without tests --- CHANGELOG | 1 + app/models/commit.rb | 2 +- app/services/create_commit_service.rb | 2 ++ spec/models/commit_spec.rb | 27 ++++++++++++++++++++++++--- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2a02c0650..afcb0fd1c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ v7.10.0 - Projects sorting by last commit date - Add project search at runner page + - Ability to run deploy job without test jobs (every push will trigger deploy job) v7.9.1 - [Security] Adding explicit is_shared parameter to runner diff --git a/app/models/commit.rb b/app/models/commit.rb index 2e1bd529b..32bd3348d 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -137,7 +137,7 @@ def retried_builds end def create_deploy_builds(ref) - if success? && !last_build.job.deploy? + if builds.empty? || (success? && !last_build.job.deploy?) project.jobs.deploy.active.each do |job| if job.run_for_ref?(ref) create_build_from_job(job) diff --git a/app/services/create_commit_service.rb b/app/services/create_commit_service.rb index e2e7053fd..9c8906f8b 100644 --- a/app/services/create_commit_service.rb +++ b/app/services/create_commit_service.rb @@ -48,6 +48,8 @@ def execute(project, params) commit.create_builds end + commit.create_deploy_builds(ref) + commit end end diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb index da57109bb..78be635ce 100644 --- a/spec/models/commit_spec.rb +++ b/spec/models/commit_spec.rb @@ -159,19 +159,40 @@ end describe "create_deploy_builds" do - before do + it "creates deploy build for projects without test jobs" do + FactoryGirl.create :job, job_type: :deploy, project: project + project.reload + + commit.create_deploy_builds(commit.ref) + commit.builds.reload + + commit.builds.size.should == 1 + end + + it "creates new build for deploy if all jobs succeed" do job = FactoryGirl.create :job, project: project job1 = FactoryGirl.create :job, project: project FactoryGirl.create :job, job_type: :deploy, project: project FactoryGirl.create :build, commit: commit, status: :success, job: job FactoryGirl.create :build, commit: commit, status: :success, job: job1 project.reload - end - it "creates new build for deploy" do commit.create_deploy_builds(commit.ref) commit.builds.size.should == 3 end + + it "does not create deploy build if one job failed" do + job = FactoryGirl.create :job, project: project + job1 = FactoryGirl.create :job, project: project + FactoryGirl.create :job, job_type: :deploy, project: project + FactoryGirl.create :build, commit: commit, status: :failed, job: job + FactoryGirl.create :build, commit: commit, status: :success, job: job1 + project.reload + + commit.create_deploy_builds(commit.ref) + + commit.builds.size.should == 2 + end end end From edfe6539b4c39caaffce119b8d716e94c86c9169 Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Wed, 1 Apr 2015 15:23:01 +0300 Subject: [PATCH 2/2] refactoring of deploy job creation --- app/models/build.rb | 5 +++- app/models/commit.rb | 8 +++--- app/services/create_commit_service.rb | 4 ++- spec/models/commit_spec.rb | 28 +-------------------- spec/services/create_commit_service_spec.rb | 13 ++++++++++ 5 files changed, 24 insertions(+), 34 deletions(-) diff --git a/app/models/build.rb b/app/models/build.rb index 0cecc197c..fa0cb8f92 100644 --- a/app/models/build.rb +++ b/app/models/build.rb @@ -118,7 +118,10 @@ def retry(build) WebHookService.new.build_end(build) end - build.commit.create_deploy_builds(build.ref) + if build.commit.success? && !build.job.deploy? + build.commit.create_deploy_builds(build.ref) + end + project.execute_services(build) if project.coverage_enabled? diff --git a/app/models/commit.rb b/app/models/commit.rb index 32bd3348d..5f1aa9225 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -137,11 +137,9 @@ def retried_builds end def create_deploy_builds(ref) - if builds.empty? || (success? && !last_build.job.deploy?) - project.jobs.deploy.active.each do |job| - if job.run_for_ref?(ref) - create_build_from_job(job) - end + project.jobs.deploy.active.each do |job| + if job.run_for_ref?(ref) + create_build_from_job(job) end end end diff --git a/app/services/create_commit_service.rb b/app/services/create_commit_service.rb index 9c8906f8b..1d1d3dcf0 100644 --- a/app/services/create_commit_service.rb +++ b/app/services/create_commit_service.rb @@ -48,7 +48,9 @@ def execute(project, params) commit.create_builds end - commit.create_deploy_builds(ref) + if commit.builds.empty? + commit.create_deploy_builds(ref) + end commit end diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb index 78be635ce..d4a516bac 100644 --- a/spec/models/commit_spec.rb +++ b/spec/models/commit_spec.rb @@ -159,7 +159,7 @@ end describe "create_deploy_builds" do - it "creates deploy build for projects without test jobs" do + it "creates deploy build" do FactoryGirl.create :job, job_type: :deploy, project: project project.reload @@ -168,31 +168,5 @@ commit.builds.size.should == 1 end - - it "creates new build for deploy if all jobs succeed" do - job = FactoryGirl.create :job, project: project - job1 = FactoryGirl.create :job, project: project - FactoryGirl.create :job, job_type: :deploy, project: project - FactoryGirl.create :build, commit: commit, status: :success, job: job - FactoryGirl.create :build, commit: commit, status: :success, job: job1 - project.reload - - commit.create_deploy_builds(commit.ref) - - commit.builds.size.should == 3 - end - - it "does not create deploy build if one job failed" do - job = FactoryGirl.create :job, project: project - job1 = FactoryGirl.create :job, project: project - FactoryGirl.create :job, job_type: :deploy, project: project - FactoryGirl.create :build, commit: commit, status: :failed, job: job - FactoryGirl.create :build, commit: commit, status: :success, job: job1 - project.reload - - commit.create_deploy_builds(commit.ref) - - commit.builds.size.should == 2 - end end end diff --git a/spec/services/create_commit_service_spec.rb b/spec/services/create_commit_service_spec.rb index d8f404e02..725ea0895 100644 --- a/spec/services/create_commit_service_spec.rb +++ b/spec/services/create_commit_service_spec.rb @@ -20,5 +20,18 @@ it { should be_false } end + + context "deploy builds" do + it "calls create_deploy_builds if there are no builds" do + project.jobs.destroy_all + Commit.any_instance.should_receive(:create_deploy_builds) + service.execute(project, ref: 'refs/heads/master', before: '00000000', after: '31das312') + end + + it "does not call create_deploy_builds if there is build" do + Commit.any_instance.should_not_receive(:create_deploy_builds) + service.execute(project, ref: 'refs/heads/master', before: '00000000', after: '31das312') + end + end end end