Merge branch 'sh-fix-ci-lint-500-error' into 'master'

Fix 500 error in CI lint when included templates are an array

Closes #66605

See merge request gitlab-org/gitlab-ce!32232
This commit is contained in:
Ash McKenzie 2019-09-02 01:00:29 +00:00
commit 6e744f7071
4 changed files with 26 additions and 1 deletions

View file

@ -0,0 +1,5 @@
---
title: Fix 500 error in CI lint when included templates are an array
merge_request: 32232
author:
type: fixed

View file

@ -2171,6 +2171,14 @@ include:
- template: Auto-DevOps.gitlab-ci.yml
```
Multiple `include:template` files:
```yaml
include:
- template: Android-Fastlane.gitlab-ci.yml
- template: Auto-DevOps.gitlab-ci.yml
```
All [nested includes](#nested-includes) will be executed only with the permission of the user,
so it is possible to use project, remote or template includes.

View file

@ -26,6 +26,10 @@ module Gitlab
location.present?
end
def invalid_location_type?
!location.is_a?(String)
end
def invalid_extension?
location.nil? || !::File.basename(location).match?(YAML_WHITELIST_EXTENSION)
end
@ -71,7 +75,9 @@ module Gitlab
end
def validate_location!
if invalid_extension?
if invalid_location_type?
errors.push("Included file `#{location}` needs to be a string")
elsif invalid_extension?
errors.push("Included file `#{location}` does not have YAML extension!")
end
end

View file

@ -41,6 +41,12 @@ describe Gitlab::Ci::Config::External::File::Base do
end
describe '#valid?' do
context 'when location is not a string' do
let(:location) { %w(some/file.txt other/file.txt) }
it { is_expected.not_to be_valid }
end
context 'when location is not a YAML file' do
let(:location) { 'some/file.txt' }