summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-06-02 17:17:23 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-06-03 11:34:36 +0200
commitc6bce7e63c305d07dbc91d032df9c783e0cf0c9f (patch)
tree4486203a362731ea5ff90361243b9ca3a09d575e
parent07af37a243ea0d6b5741754ea116044ee46614b3 (diff)
downloadgitlab-ce-c6bce7e63c305d07dbc91d032df9c783e0cf0c9f.tar.gz
Save Ci::Commit object to persist all created builds
-rw-r--r--app/models/ci/build.rb5
-rw-r--r--app/models/ci/commit.rb6
-rw-r--r--app/services/ci/create_pipeline_service.rb2
-rw-r--r--app/services/ci/create_trigger_request_service.rb1
-rw-r--r--spec/models/ci/commit_spec.rb8
-rw-r--r--spec/requests/ci/api/builds_spec.rb5
6 files changed, 21 insertions, 6 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 64723ab6b4b..fd6fba42a34 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -66,7 +66,10 @@ module Ci
# We use around_transition to create builds for next stage as soon as possible, before the `after_*` is executed
around_transition any => [:success, :failed, :canceled] do |build, block|
block.call
- build.commit.create_next_builds(build) if build.commit
+ if build.commit
+ build.commit.create_next_builds(build)
+ build.commit.save
+ end
end
after_transition any => [:success, :failed, :canceled] do |build|
diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb
index ccd26959ad1..7e6bb4f8c1b 100644
--- a/app/models/ci/commit.rb
+++ b/app/models/ci/commit.rb
@@ -13,7 +13,7 @@ module Ci
validate :valid_commit_sha
# Invalidate object and save if when touched
- after_touch :update_state!
+ after_touch :update_state
def self.truncate_sha(sha)
sha[0...8]
@@ -159,7 +159,9 @@ module Ci
git_commit_message =~ /(\[ci skip\])/ if git_commit_message
end
- def update_state!
+ private
+
+ def update_state
statuses.reload
self.status = if yaml_errors.blank?
statuses.latest.status || 'skipped'
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb
index 0336b767de5..864415ef747 100644
--- a/app/services/ci/create_pipeline_service.rb
+++ b/app/services/ci/create_pipeline_service.rb
@@ -31,7 +31,7 @@ module Ci
pipeline.errors.add(:base, 'No builds for this pipeline.')
end
- pipeline.update_state!
+ pipeline.save
pipeline
end
diff --git a/app/services/ci/create_trigger_request_service.rb b/app/services/ci/create_trigger_request_service.rb
index 993acf11db9..c611a963112 100644
--- a/app/services/ci/create_trigger_request_service.rb
+++ b/app/services/ci/create_trigger_request_service.rb
@@ -15,6 +15,7 @@ module Ci
)
if ci_commit.create_builds(nil, trigger_request)
+ ci_commit.save
trigger_request
end
end
diff --git a/spec/models/ci/commit_spec.rb b/spec/models/ci/commit_spec.rb
index 0939eb946ac..07b875e4f88 100644
--- a/spec/models/ci/commit_spec.rb
+++ b/spec/models/ci/commit_spec.rb
@@ -55,11 +55,15 @@ describe Ci::Commit, models: true do
let!(:commit) { FactoryGirl.create :ci_commit, project: project, ref: 'master', tag: false }
def create_builds(trigger_request = nil)
- commit.create_builds(nil, trigger_request)
+ if commit.create_builds(nil, trigger_request)
+ commit.save
+ end
end
def create_next_builds
- commit.create_next_builds(commit.builds.order(:id).last)
+ if commit.create_next_builds(commit.builds.order(:id).last)
+ commit.save
+ end
end
it 'creates builds' do
diff --git a/spec/requests/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb
index e5124ea5ea7..7eff8048667 100644
--- a/spec/requests/ci/api/builds_spec.rb
+++ b/spec/requests/ci/api/builds_spec.rb
@@ -22,6 +22,7 @@ describe Ci::API::API do
it "should start a build" do
commit = FactoryGirl.create(:ci_commit, project: project, ref: 'master')
commit.create_builds(nil)
+ commit.save
build = commit.builds.first
post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin }
@@ -58,6 +59,7 @@ describe Ci::API::API do
it "returns options" do
commit = FactoryGirl.create(:ci_commit, project: project, ref: 'master')
commit.create_builds(nil)
+ commit.save
post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin }
@@ -68,6 +70,7 @@ describe Ci::API::API do
it "returns variables" do
commit = FactoryGirl.create(:ci_commit, project: project, ref: 'master')
commit.create_builds(nil)
+ commit.save
project.variables << Ci::Variable.new(key: "SECRET_KEY", value: "secret_value")
post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin }
@@ -87,6 +90,7 @@ describe Ci::API::API do
trigger_request = FactoryGirl.create(:ci_trigger_request_with_variables, commit: commit, trigger: trigger)
commit.create_builds(nil, trigger_request)
+ commit.save
project.variables << Ci::Variable.new(key: "SECRET_KEY", value: "secret_value")
post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin }
@@ -105,6 +109,7 @@ describe Ci::API::API do
it "returns dependent builds" do
commit = FactoryGirl.create(:ci_commit, project: project, ref: 'master')
commit.create_builds(nil, nil)
+ commit.save
commit.builds.where(stage: 'test').each(&:success)
post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin }