summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/ci/build.rb22
-rw-r--r--app/models/ci/pipeline.rb6
-rw-r--r--app/models/deployment.rb4
-rw-r--r--app/models/environment.rb15
-rw-r--r--app/models/merge_request.rb15
-rw-r--r--app/models/project.rb7
-rw-r--r--app/models/repository.rb8
7 files changed, 51 insertions, 26 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 5dbf66173de..87475119b23 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -1,6 +1,7 @@
module Ci
class Build < CommitStatus
include TokenAuthenticatable
+ include AfterCommitQueue
belongs_to :runner, class_name: 'Ci::Runner'
belongs_to :trigger_request, class_name: 'Ci::TriggerRequest'
@@ -75,25 +76,20 @@ module Ci
state_machine :status do
after_transition pending: :running do |build|
- build.execute_hooks
+ build.run_after_commit do
+ BuildHooksWorker.perform_async(id)
+ end
end
after_transition any => [:success, :failed, :canceled] do |build|
- build.update_coverage
- build.execute_hooks
+ build.run_after_commit do
+ BuildFinishedWorker.perform_async(id)
+ end
end
after_transition any => [:success] do |build|
- if build.environment.present?
- service = CreateDeploymentService.new(
- build.project, build.user,
- environment: build.environment,
- sha: build.sha,
- ref: build.ref,
- tag: build.tag,
- options: build.options.to_h[:environment],
- variables: build.variables)
- service.execute(build)
+ build.run_after_commit do
+ BuildSuccessWorker.perform_async(id)
end
end
end
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 957f6755b2e..4fdb5fef4fb 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -76,7 +76,11 @@ module Ci
end
after_transition do |pipeline, transition|
- pipeline.execute_hooks unless transition.loopback?
+ next if transition.loopback?
+
+ pipeline.run_after_commit do
+ PipelineHooksWorker.perform_async(id)
+ end
end
end
diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index f63cc179b9e..3d9902d496e 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -84,6 +84,10 @@ class Deployment < ActiveRecord::Base
take
end
+ def formatted_deployment_time
+ created_at.to_time.in_time_zone.to_s(:medium)
+ end
+
private
def ref_path
diff --git a/app/models/environment.rb b/app/models/environment.rb
index f0f3ee23223..d970bc0a005 100644
--- a/app/models/environment.rb
+++ b/app/models/environment.rb
@@ -48,7 +48,22 @@ class Environment < ActiveRecord::Base
self.name == "production"
end
+ def first_deployment_for(commit)
+ ref = project.repository.ref_name_for_sha(ref_path, commit.sha)
+
+ return nil unless ref
+
+ deployment_id = ref.split('/').last
+ deployments.find(deployment_id)
+ end
+
def ref_path
"refs/environments/#{Shellwords.shellescape(name)}"
end
+
+ def formatted_external_url
+ return nil unless external_url
+
+ external_url.gsub(/\A.*?:\/\//, '')
+ end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 1fb0371fe06..8c6905a442d 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -688,12 +688,15 @@ class MergeRequest < ActiveRecord::Base
def environments
return [] unless diff_head_commit
- environments = source_project.environments_for(
- source_branch, diff_head_commit)
- environments += target_project.environments_for(
- target_branch, diff_head_commit, with_tags: true)
-
- environments.uniq
+ @environments ||=
+ begin
+ environments = source_project.environments_for(
+ source_branch, diff_head_commit)
+ environments += target_project.environments_for(
+ target_branch, diff_head_commit, with_tags: true)
+
+ environments.uniq
+ end
end
def state_human_name
diff --git a/app/models/project.rb b/app/models/project.rb
index 758927edd5c..db3088677d8 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -490,7 +490,7 @@ class Project < ActiveRecord::Base
end
def import_url
- if import_data && super
+ if import_data && super.present?
import_url = Gitlab::UrlSanitizer.new(super, credentials: import_data.credentials)
import_url.full_url
else
@@ -829,11 +829,6 @@ class Project < ActiveRecord::Base
end
end
- def update_merge_requests(oldrev, newrev, ref, user)
- MergeRequests::RefreshService.new(self, user).
- execute(oldrev, newrev, ref)
- end
-
def valid_repo?
repository.exists?
rescue
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 608c99eed46..72e473871fa 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -719,6 +719,14 @@ class Repository
end
end
+ def ref_name_for_sha(ref_path, sha)
+ args = %W(#{Gitlab.config.git.bin_path} for-each-ref --count=1 #{ref_path} --contains #{sha})
+
+ # Not found -> ["", 0]
+ # Found -> ["b8d95eb4969eefacb0a58f6a28f6803f8070e7b9 commit\trefs/environments/production/77\n", 0]
+ Gitlab::Popen.popen(args, path_to_repo).first.split.last
+ end
+
def refs_contains_sha(ref_type, sha)
args = %W(#{Gitlab.config.git.bin_path} #{ref_type} --contains #{sha})
names = Gitlab::Popen.popen(args, path_to_repo).first