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:
commit
6e744f7071
4 changed files with 26 additions and 1 deletions
5
changelogs/unreleased/sh-fix-ci-lint-500-error.yml
Normal file
5
changelogs/unreleased/sh-fix-ci-lint-500-error.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix 500 error in CI lint when included templates are an array
|
||||
merge_request: 32232
|
||||
author:
|
||||
type: fixed
|
|
@ -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.
|
||||
|
||||
|
|
8
lib/gitlab/ci/config/external/file/base.rb
vendored
8
lib/gitlab/ci/config/external/file/base.rb
vendored
|
@ -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
|
||||
|
|
|
@ -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' }
|
||||
|
||||
|
|
Loading…
Reference in a new issue