diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2017-12-07 19:59:01 +0000 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2017-12-07 19:59:01 +0000 |
commit | af4d4e7067525e02eb2c17d2d0c524621c8ed345 (patch) | |
tree | ab20c3fadf806bbaf2ceb0aaa59f2301b6133c4a /app | |
parent | 1c02af274e6f7bc0959235c01105ca5b43178c06 (diff) | |
parent | 2ac6d806900f3aea708b3fcdc32463235f83eb73 (diff) | |
download | gitlab-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.rb | 20 | ||||
-rw-r--r-- | app/models/commit_status.rb | 3 | ||||
-rw-r--r-- | app/services/ci/register_job_service.rb | 3 |
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 |