diff --git a/CHANGELOG b/CHANGELOG index e3d6c285d..d9ed4d68d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ v7.10.0 v7.9.2 - [Security] Already existing projects should not be served by shared runners + - 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/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 2e1bd529b..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 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 e2e7053fd..1d1d3dcf0 100644 --- a/app/services/create_commit_service.rb +++ b/app/services/create_commit_service.rb @@ -48,6 +48,10 @@ def execute(project, params) commit.create_builds end + if commit.builds.empty? + commit.create_deploy_builds(ref) + end + commit end end diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb index da57109bb..d4a516bac 100644 --- a/spec/models/commit_spec.rb +++ b/spec/models/commit_spec.rb @@ -159,19 +159,14 @@ end describe "create_deploy_builds" do - before do - job = FactoryGirl.create :job, project: project - job1 = FactoryGirl.create :job, project: project + it "creates deploy build" do 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.reload - commit.builds.size.should == 3 + commit.builds.size.should == 1 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