diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | app/models/job.rb | 2 | ||||
-rw-r--r-- | app/models/project.rb | 5 | ||||
-rw-r--r-- | app/services/create_commit_service.rb | 4 | ||||
-rw-r--r-- | spec/factories/job.rb | 4 | ||||
-rw-r--r-- | spec/services/create_commit_service_spec.rb | 44 |
6 files changed, 57 insertions, 3 deletions
@@ -8,6 +8,7 @@ v7.10.0 - UI improvements: created separated admin section, removed useless project show page - Runners sorting in admin area (by id) - Remove protected_attributes gem + - Skip commit creation if there is no appropriate job v7.9.3 - Contains no changes diff --git a/app/models/job.rb b/app/models/job.rb index 005a778..82dac8f 100644 --- a/app/models/job.rb +++ b/app/models/job.rb @@ -33,7 +33,7 @@ class Job < ActiveRecord::Base end def run_for_ref?(ref) - if !refs.blank? + if refs.present? refs.split(",").map(&:strip).each do |refs_val| return true if File.fnmatch(refs_val, ref) end diff --git a/app/models/project.rb b/app/models/project.rb index 10916ab..247824c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -179,6 +179,11 @@ ls -la end end + def create_commit_for_tag?(tag) + jobs.where(build_tags: true).active.parallel.any? || + jobs.active.deploy.any?{ |job| job.run_for_ref?(tag)} + end + def coverage_enabled? coverage_regex.present? end diff --git a/app/services/create_commit_service.rb b/app/services/create_commit_service.rb index 1d1d3dc..0671a70 100644 --- a/app/services/create_commit_service.rb +++ b/app/services/create_commit_service.rb @@ -15,6 +15,10 @@ class CreateCommitService return false end + if origin_ref.start_with?('refs/tags/') && !project.create_commit_for_tag?(ref) + return false + end + if project.skip_ref?(ref) return false end diff --git a/spec/factories/job.rb b/spec/factories/job.rb index 93f2ff7..9a00a13 100644 --- a/spec/factories/job.rb +++ b/spec/factories/job.rb @@ -2,5 +2,9 @@ FactoryGirl.define do factory :job do name 'rspec' commands 'bundle exec rspec spec' + + factory :deploy_job do + job_type :deploy + end end end diff --git a/spec/services/create_commit_service_spec.rb b/spec/services/create_commit_service_spec.rb index 725ea08..761bfaf 100644 --- a/spec/services/create_commit_service_spec.rb +++ b/spec/services/create_commit_service_spec.rb @@ -25,12 +25,52 @@ describe CreateCommitService 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') + 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') + service.execute(project, ref: 'refs/heads/master', before: '00000000', after: '31das312') + end + end + + context "skip tag if there is no build for it" do + it "does not create commit if there is no appropriate job" do + project.jobs + + result = service.execute(project, ref: 'refs/tags/0_1', before: '00000000', after: '31das312') + result.should be_false + end + + it "creates commit if there is appropriate job" do + project.jobs.first.update(build_tags: true) + + result = service.execute(project, ref: 'refs/tags/0_1', before: '00000000', after: '31das312') + result.should be_persisted + end + + it "does not create commit if there is no appropriate job nor deploy job" do + project.jobs.first.update(build_tags: false) + FactoryGirl.create(:deploy_job, project: project, refs: "release") + + result = service.execute(project, ref: 'refs/tags/0_1', before: '00000000', after: '31das312') + result.should be_false + end + + it "creates commit if there is no appropriate job but deploy job has right ref setting" do + project.jobs.first.update(build_tags: false) + FactoryGirl.create(:deploy_job, project: project, refs: "0_1") + + result = service.execute(project, ref: 'refs/tags/0_1', before: '00000000', after: '31das312') + result.should be_persisted + end + + it "creates commit if there is no appropriate job and deploy job has no ref setting" do + project.jobs.first.update(build_tags: true) + FactoryGirl.create(:deploy_job, project: project) + + result = service.execute(project, ref: 'refs/tags/0_1', before: '00000000', after: '31das312') + result.should be_persisted end end end |