Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzegorz@gitlab.com>2019-01-10 10:50:19 +0300
committerGrzegorz Bizon <grzegorz@gitlab.com>2019-01-10 10:50:19 +0300
commit5f258b0cea1454e00cc65e6bd485af83baac05e6 (patch)
tree0131ae5b3b1f37a59ec5aab877133b5ce67c8c27
parentb2e807e62464a77dd9f4c50f4b339d4cd4f89718 (diff)
parent09dc4956ad86877ec0112018fd05f311be1743cf (diff)
Merge branch '55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded' into 'master'
Resolve "Artifacts from a job defined after a `parallel` job are NOT downloaded" Closes #55628 See merge request gitlab-org/gitlab-ce!24273
-rw-r--r--changelogs/unreleased/55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded.yml5
-rw-r--r--lib/gitlab/ci/config/normalizer.rb3
-rw-r--r--spec/lib/gitlab/ci/config/normalizer_spec.rb20
3 files changed, 27 insertions, 1 deletions
diff --git a/changelogs/unreleased/55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded.yml b/changelogs/unreleased/55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded.yml
new file mode 100644
index 00000000000..071036cd568
--- /dev/null
+++ b/changelogs/unreleased/55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded.yml
@@ -0,0 +1,5 @@
+---
+title: Handle regular job dependencies next to parallelized job dependencies.
+merge_request: 24273
+author:
+type: fixed
diff --git a/lib/gitlab/ci/config/normalizer.rb b/lib/gitlab/ci/config/normalizer.rb
index b7743bd2090..191f5d09645 100644
--- a/lib/gitlab/ci/config/normalizer.rb
+++ b/lib/gitlab/ci/config/normalizer.rb
@@ -46,7 +46,8 @@ module Gitlab
parallelized_job_names = @parallelized_jobs.keys.map(&:to_s)
parallelized_config.each_with_object({}) do |(job_name, config), hash|
if config[:dependencies] && (intersection = config[:dependencies] & parallelized_job_names).any?
- deps = intersection.map { |dep| @parallelized_jobs[dep.to_sym].map(&:first) }.flatten
+ parallelized_deps = intersection.map { |dep| @parallelized_jobs[dep.to_sym].map(&:first) }.flatten
+ deps = config[:dependencies] - intersection + parallelized_deps
hash[job_name] = config.merge(dependencies: deps)
else
hash[job_name] = config
diff --git a/spec/lib/gitlab/ci/config/normalizer_spec.rb b/spec/lib/gitlab/ci/config/normalizer_spec.rb
index 97926695b6e..cd880177170 100644
--- a/spec/lib/gitlab/ci/config/normalizer_spec.rb
+++ b/spec/lib/gitlab/ci/config/normalizer_spec.rb
@@ -62,5 +62,25 @@ describe Gitlab::Ci::Config::Normalizer do
expect(subject[:other_job][:dependencies]).not_to include(job_name)
end
end
+
+ context 'when there are dependencies which are both parallelized and not' do
+ let(:config) do
+ {
+ job_name => job_config,
+ other_job: { script: 'echo 1' },
+ final_job: { script: 'echo 1', dependencies: [job_name.to_s, "other_job"] }
+ }
+ end
+
+ it 'parallelizes dependencies' do
+ job_names = ["rspec 1/5", "rspec 2/5", "rspec 3/5", "rspec 4/5", "rspec 5/5"]
+
+ expect(subject[:final_job][:dependencies]).to include(*job_names)
+ end
+
+ it 'includes the regular job in dependencies' do
+ expect(subject[:final_job][:dependencies]).to include('other_job')
+ end
+ end
end
end