Build `deployments` associations in `before_create` hook
Problem
As per, https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22993#note_116620866
We should not create deployments relation after_create
hook, instead we should build deployments
associations in before_create
hook in order to avoid redandant reloading.
diff --git a/app/models/concerns/deployable.rb b/app/models/concerns/deployable.rb
index a1bec950665..9f1e2713b84 100644
--- a/app/models/concerns/deployable.rb
+++ b/app/models/concerns/deployable.rb
@@ -4,7 +4,7 @@ module Deployable
extend ActiveSupport::Concern
included do
- after_create :create_deployment
+ before_create :create_deployment
def create_deployment
return unless starts_environment? && !has_deployment?
@@ -13,14 +13,12 @@ module Deployable
name: expanded_environment_name
)
- environment.deployments.create!(
+ self.deployment = environment.deployments.build(
project_id: environment.project_id,
- environment: environment,
ref: ref,
tag: tag,
sha: sha,
user: user,
- deployable: self,
on_stop: on_stop)
end
end
diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb
index d2322fa4cab..193148d403a 100644
--- a/spec/services/ci/create_pipeline_service_spec.rb
+++ b/spec/services/ci/create_pipeline_service_spec.rb
@@ -403,6 +403,8 @@ describe Ci::CreatePipelineService do
expect(result).to be_persisted
expect(Environment.find_by(name: "review/master")).to be_present
expect(result.builds.first.tag_list).to contain_exactly('hello')
+ expect(result.builds.first.deployment).to be_persisted
+ expect(result.builds.first.deployment.deployable).to be_a(Ci::Build)
end
end
/cc @ayufan