Commit 9f36097d authored by Paul 🐻's avatar Paul 🐻 Committed by Grzegorz Bizon

fix(gitlab-ci-config): allow strings in the 'include' keyword

This fix is a followup to !24098 which introduced a validation of the
`include:` keyword of a gitlab-ci configuration file when triggered
from /ci/lint API calls.

However, there was a test case missing: the case of a single string as
value. I have added a test case for that which shows that the code was
not validating it correctly.

This commit fixes that to allow all `include:` valid inputs.
parent 48022ab3
---
title: Fix single string values for the 'include' keyword validation of gitlab-ci.yml.
merge_request: 26998
author: Paul Bonaud (@paulrbr)
type: fixed
...@@ -11,7 +11,7 @@ module Gitlab ...@@ -11,7 +11,7 @@ module Gitlab
include ::Gitlab::Config::Entry::Validatable include ::Gitlab::Config::Entry::Validatable
validations do validations do
validates :config, type: Array validates :config, array_or_string: true
end end
def self.aspects def self.aspects
......
...@@ -54,6 +54,14 @@ module Gitlab ...@@ -54,6 +54,14 @@ module Gitlab
end end
end end
class ArrayOrStringValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value.is_a?(Array) || value.is_a?(String)
record.errors.add(attribute, 'should be an array or a string')
end
end
end
class BooleanValidator < ActiveModel::EachValidator class BooleanValidator < ActiveModel::EachValidator
include LegacyValidationHelpers include LegacyValidationHelpers
......
...@@ -615,6 +615,14 @@ module Gitlab ...@@ -615,6 +615,14 @@ module Gitlab
subject { Gitlab::Ci::YamlProcessor.new(YAML.dump(config), opts) } subject { Gitlab::Ci::YamlProcessor.new(YAML.dump(config), opts) }
context "when validating a ci config file with no project context" do context "when validating a ci config file with no project context" do
context "when a single string is provided" do
let(:include_content) { "/local.gitlab-ci.yml" }
it "does not return any error" do
expect { subject }.not_to raise_error
end
end
context "when an array is provided" do context "when an array is provided" do
let(:include_content) { ["/local.gitlab-ci.yml"] } let(:include_content) { ["/local.gitlab-ci.yml"] }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment