summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2017-12-07 19:59:01 +0000
committerKamil Trzciński <ayufan@ayufan.eu>2017-12-07 19:59:01 +0000
commitaf4d4e7067525e02eb2c17d2d0c524621c8ed345 (patch)
treeab20c3fadf806bbaf2ceb0aaa59f2301b6133c4a /app
parent1c02af274e6f7bc0959235c01105ca5b43178c06 (diff)
parent2ac6d806900f3aea708b3fcdc32463235f83eb73 (diff)
downloadgitlab-ce-af4d4e7067525e02eb2c17d2d0c524621c8ed345.tar.gz
Merge branch 'feature/sm/34834-missing-dependency-should-fail-job-2' into 'master'
Dependency validator Closes #34834 See merge request gitlab-org/gitlab-ce!14009
Diffstat (limited to 'app')
-rw-r--r--app/models/ci/build.rb20
-rw-r--r--app/models/commit_status.rb3
-rw-r--r--app/services/ci/register_job_service.rb3
3 files changed, 25 insertions, 1 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index d2402b55184..85960f1b6bb 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -6,6 +6,8 @@ module Ci
include Presentable
include Importable
+ MissingDependenciesError = Class.new(StandardError)
+
belongs_to :runner
belongs_to :trigger_request
belongs_to :erased_by, class_name: 'User'
@@ -139,6 +141,10 @@ module Ci
Ci::Build.retry(build, build.user)
end
end
+
+ before_transition any => [:running] do |build|
+ build.validates_dependencies! unless Feature.enabled?('ci_disable_validates_dependencies')
+ end
end
def detailed_status(current_user)
@@ -478,6 +484,20 @@ module Ci
options[:dependencies]&.empty?
end
+ def validates_dependencies!
+ dependencies.each do |dependency|
+ raise MissingDependenciesError unless dependency.valid_dependency?
+ end
+ end
+
+ def valid_dependency?
+ return false unless complete?
+ return false if artifacts_expired?
+ return false if erased?
+
+ true
+ end
+
def hide_secrets(trace)
return unless trace
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index ee21ed8e420..c0263c0b4e2 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -43,7 +43,8 @@ class CommitStatus < ActiveRecord::Base
script_failure: 1,
api_failure: 2,
stuck_or_timeout_failure: 3,
- runner_system_failure: 4
+ runner_system_failure: 4,
+ missing_dependency_failure: 5
}
##
diff --git a/app/services/ci/register_job_service.rb b/app/services/ci/register_job_service.rb
index 2ef76e03031..c8b6450c9b5 100644
--- a/app/services/ci/register_job_service.rb
+++ b/app/services/ci/register_job_service.rb
@@ -54,6 +54,9 @@ module Ci
# we still have to return 409 in the end,
# to make sure that this is properly handled by runner.
valid = false
+ rescue Ci::Build::MissingDependenciesError
+ build.drop!(:missing_dependency_failure)
+ valid = false
end
end