From 036c9c58ba04046241a2183ec98ad84fcfd0a5bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Thu, 8 Nov 2018 10:34:26 +0100 Subject: Limit parallel to 100 This prevents some of the abusive behaviors, of someone putting 100000 and creating out of memory condition easily --- doc/ci/yaml/README.md | 2 +- lib/gitlab/ci/config/entry/job.rb | 3 ++- spec/lib/gitlab/ci/config/entry/job_spec.rb | 10 ++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index c827faace33..5cca9d86560 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -1510,7 +1510,7 @@ Possible values for `when` are: > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22631) in GitLab 11.5. `parallel` allows you to configure how many instances of a job to run in -parallel. This value has to be greater than or equal to two (2). +parallel. This value has to be greater than or equal to two (2) and less or equal than 50. This creates N instances of the same job that run in parallel. They're named sequentially from `job_name 1/N` to `job_name N/N`. diff --git a/lib/gitlab/ci/config/entry/job.rb b/lib/gitlab/ci/config/entry/job.rb index 8e8c979f973..c8cb3248fa7 100644 --- a/lib/gitlab/ci/config/entry/job.rb +++ b/lib/gitlab/ci/config/entry/job.rb @@ -27,7 +27,8 @@ module Gitlab validates :tags, array_of_strings: true validates :allow_failure, boolean: true validates :parallel, numericality: { only_integer: true, - greater_than_or_equal_to: 2 } + greater_than_or_equal_to: 2, + less_than_or_equal_to: 50 } validates :when, inclusion: { in: %w[on_success on_failure always manual delayed], message: 'should be on_success, on_failure, ' \ diff --git a/spec/lib/gitlab/ci/config/entry/job_spec.rb b/spec/lib/gitlab/ci/config/entry/job_spec.rb index ac9b0c674a5..57d4577a90c 100644 --- a/spec/lib/gitlab/ci/config/entry/job_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/job_spec.rb @@ -118,6 +118,16 @@ describe Gitlab::Ci::Config::Entry::Job do end end + context 'when it is bigger than 50' do + let(:config) { { parallel: 51 } } + + it 'returns error about value too high' do + expect(entry).not_to be_valid + expect(entry.errors) + .to include 'job parallel must be less than or equal to 50' + end + end + context 'when it is not an integer' do let(:config) { { parallel: 1.5 } } -- cgit v1.2.1