diff options
-rw-r--r-- | app/services/ci/create_trigger_request_service.rb | 13 | ||||
-rw-r--r-- | app/services/ci/web_hook_service.rb | 1 | ||||
-rw-r--r-- | spec/factories/ci/builds.rb | 1 | ||||
-rw-r--r-- | spec/features/ci/commits_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/ci/project_services/hip_chat_message_spec.rb | 83 | ||||
-rw-r--r-- | spec/models/ci/project_services/slack_message_spec.rb | 97 |
6 files changed, 67 insertions, 136 deletions
diff --git a/app/services/ci/create_trigger_request_service.rb b/app/services/ci/create_trigger_request_service.rb index 083cea77202..ea82dbb2bf4 100644 --- a/app/services/ci/create_trigger_request_service.rb +++ b/app/services/ci/create_trigger_request_service.rb @@ -1,15 +1,14 @@ module Ci class CreateTriggerRequestService def execute(project, trigger, ref, variables = nil) - return unless project.gl_project - return unless project.gl_project.repository + commit = project.gl_project.commit(ref) + return unless commit # check if ref is tag - target = project.gl_project.repository.rev_parse_target(ref) - sha = target.oid - tag = target.is_a?(Rugged::Tag) || target.is_a?(Rugged::Tag::Annotation) + tag = project.gl_project.repository.find_tag(ref).present? + + ci_commit = project.gl_project.ensure_ci_commit(commit.sha) - ci_commit = project.gl_project.ensure_ci_commit(sha) trigger_request = trigger.trigger_requests.create!( variables: variables ) @@ -17,8 +16,6 @@ module Ci if ci_commit.create_builds(ref, tag, nil, trigger_request) trigger_request end - rescue Rugged::OdbError - nil end end end diff --git a/app/services/ci/web_hook_service.rb b/app/services/ci/web_hook_service.rb index 4bbca5c7da1..92e6df442b4 100644 --- a/app/services/ci/web_hook_service.rb +++ b/app/services/ci/web_hook_service.rb @@ -27,6 +27,7 @@ module Ci project_name: project.name, gitlab_url: project.gitlab_url, ref: build.ref, + before_sha: build.before_sha, sha: build.sha, }) end diff --git a/spec/factories/ci/builds.rb b/spec/factories/ci/builds.rb index 8e2496398a6..21b582afba4 100644 --- a/spec/factories/ci/builds.rb +++ b/spec/factories/ci/builds.rb @@ -31,6 +31,7 @@ FactoryGirl.define do tag false started_at 'Di 29. Okt 09:51:28 CET 2013' finished_at 'Di 29. Okt 09:53:28 CET 2013' + commands 'ls -a' options do { image: "ruby:2.1", diff --git a/spec/features/ci/commits_spec.rb b/spec/features/ci/commits_spec.rb index 712a6137260..b4236e1e589 100644 --- a/spec/features/ci/commits_spec.rb +++ b/spec/features/ci/commits_spec.rb @@ -11,6 +11,10 @@ describe "Commits" do @commit.project.gl_project.team << [@user, :master] end + before do + stub_ci_commit_to_return_yaml_file + end + describe "GET /:project/commits/:sha" do before do visit ci_commit_path(@commit) @@ -38,9 +42,9 @@ describe "Commits" do end it "shows warning" do - @commit_no_yaml = FactoryGirl.create :ci_empty_commit + stub_ci_commit_yaml_file(nil) - visit ci_commit_path(@commit_no_yaml) + visit ci_commit_path(@commit) expect(page).to have_content ".gitlab-ci.yml not found in this commit" end diff --git a/spec/models/ci/project_services/hip_chat_message_spec.rb b/spec/models/ci/project_services/hip_chat_message_spec.rb index 6d257638359..e23d6ae2c28 100644 --- a/spec/models/ci/project_services/hip_chat_message_spec.rb +++ b/spec/models/ci/project_services/hip_chat_message_spec.rb @@ -3,70 +3,37 @@ require 'spec_helper' describe Ci::HipChatMessage do subject { Ci::HipChatMessage.new(build) } - context "One build" do - let(:commit) { FactoryGirl.create(:ci_commit_with_one_job) } + let(:commit) { FactoryGirl.create(:ci_commit_with_two_jobs) } - let(:build) do - commit.create_builds('master', false, nil) - commit.builds.first - end - - context 'when build succeeds' do - it 'returns a successful message' do - build.update(status: "success") - - expect( subject.status_color ).to eq 'green' - expect( subject.notify? ).to be_falsey - expect( subject.to_s ).to match(/Build '[^']+' #\d+/) - expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) - end - end - - context 'when build fails' do - it 'returns a failure message' do - build.update(status: "failed") - - expect( subject.status_color ).to eq 'red' - expect( subject.notify? ).to be_truthy - expect( subject.to_s ).to match(/Build '[^']+' #\d+/) - expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) - end - end + let(:build) do + commit.builds.first end - context "Several builds" do - let(:commit) { FactoryGirl.create(:ci_commit_with_two_jobs) } - - let(:build) do - commit.builds.first - end - - context 'when all matrix builds succeed' do - it 'returns a successful message' do - commit.create_builds('master', false, nil) - commit.builds.update_all(status: "success") - commit.reload + context 'when all matrix builds succeed' do + it 'returns a successful message' do + commit.create_builds('master', false, nil) + commit.builds.update_all(status: "success") + commit.reload - expect( subject.status_color ).to eq 'green' - expect( subject.notify? ).to be_falsey - expect( subject.to_s ).to match(/Commit #\d+/) - expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) - end + expect(subject.status_color).to eq 'green' + expect(subject.notify?).to be_falsey + expect(subject.to_s).to match(/Commit #\d+/) + expect(subject.to_s).to match(/Successful in \d+ second\(s\)\./) end + end - context 'when at least one matrix build fails' do - it 'returns a failure message' do - commit.create_builds('master', false, nil) - first_build = commit.builds.first - second_build = commit.builds.last - first_build.update(status: "success") - second_build.update(status: "failed") - - expect( subject.status_color ).to eq 'red' - expect( subject.notify? ).to be_truthy - expect( subject.to_s ).to match(/Commit #\d+/) - expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) - end + context 'when at least one matrix build fails' do + it 'returns a failure message' do + commit.create_builds('master', false, nil) + first_build = commit.builds.first + second_build = commit.builds.last + first_build.update(status: "success") + second_build.update(status: "failed") + + expect(subject.status_color).to eq 'red' + expect(subject.notify?).to be_truthy + expect(subject.to_s).to match(/Commit #\d+/) + expect(subject.to_s).to match(/Failed in \d+ second\(s\)\./) end end end diff --git a/spec/models/ci/project_services/slack_message_spec.rb b/spec/models/ci/project_services/slack_message_spec.rb index 0870276c78f..8adda6c86cc 100644 --- a/spec/models/ci/project_services/slack_message_spec.rb +++ b/spec/models/ci/project_services/slack_message_spec.rb @@ -3,80 +3,41 @@ require 'spec_helper' describe Ci::SlackMessage do subject { Ci::SlackMessage.new(commit) } - context "One build" do - let(:commit) { FactoryGirl.create(:ci_commit_with_one_job) } + let(:commit) { FactoryGirl.create(:ci_commit_with_two_jobs) } - let(:build) do - commit.create_builds('master', false, nil) - commit.builds.first - end - - context 'when build succeeded' do - let(:color) { 'good' } - - it 'returns a message with succeeded build' do - build.update(status: "success") - - expect(subject.color).to eq(color) - expect(subject.fallback).to include('Build') - expect(subject.fallback).to include("\##{build.id}") - expect(subject.fallback).to include('succeeded') - expect(subject.attachments.first[:fields]).to be_empty - end - end - - context 'when build failed' do - let(:color) { 'danger' } - - it 'returns a message with failed build' do - build.update(status: "failed") + context 'when all matrix builds succeeded' do + let(:color) { 'good' } - expect(subject.color).to eq(color) - expect(subject.fallback).to include('Build') - expect(subject.fallback).to include("\##{build.id}") - expect(subject.fallback).to include('failed') - expect(subject.attachments.first[:fields]).to be_empty - end + it 'returns a message with success' do + commit.create_builds('master', false, nil) + commit.builds.update_all(status: "success") + commit.reload + + expect(subject.color).to eq(color) + expect(subject.fallback).to include('Commit') + expect(subject.fallback).to include("\##{commit.id}") + expect(subject.fallback).to include('succeeded') + expect(subject.attachments.first[:fields]).to be_empty end end - context "Several builds" do - let(:commit) { FactoryGirl.create(:ci_commit_with_two_jobs) } - - context 'when all matrix builds succeeded' do - let(:color) { 'good' } - - it 'returns a message with success' do - commit.create_builds('master', false, nil) - commit.builds.update_all(status: "success") - commit.reload - - expect(subject.color).to eq(color) - expect(subject.fallback).to include('Commit') - expect(subject.fallback).to include("\##{commit.id}") - expect(subject.fallback).to include('succeeded') - expect(subject.attachments.first[:fields]).to be_empty - end - end - - context 'when one of matrix builds failed' do - let(:color) { 'danger' } + context 'when one of matrix builds failed' do + let(:color) { 'danger' } - it 'returns a message with information about failed build' do - commit.create_builds('master', false, nil) - first_build = commit.builds.first - second_build = commit.builds.last - first_build.update(status: "success") - second_build.update(status: "failed") - - expect(subject.color).to eq(color) - expect(subject.fallback).to include('Commit') - expect(subject.fallback).to include("\##{commit.id}") - expect(subject.fallback).to include('failed') - expect(subject.attachments.first[:fields].size).to eq(1) - expect(subject.attachments.first[:fields].first[:title]).to eq(second_build.name) - expect(subject.attachments.first[:fields].first[:value]).to include("\##{second_build.id}") - end + it 'returns a message with information about failed build' do + commit.create_builds('master', false, nil) + first_build = commit.builds.first + second_build = commit.builds.last + first_build.update(status: "success") + second_build.update(status: "failed") + + expect(subject.color).to eq(color) + expect(subject.fallback).to include('Commit') + expect(subject.fallback).to include("\##{commit.id}") + expect(subject.fallback).to include('failed') + expect(subject.attachments.first[:fields].size).to eq(1) + expect(subject.attachments.first[:fields].first[:title]).to eq(second_build.name) + expect(subject.attachments.first[:fields].first[:value]).to include("\##{second_build.id}") end end end |