提交 bf505737 编写于 作者: S Stan Hu

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

Previously the following syntax would fail in the linter with an
error 500:

```
include:
  template:
    - License-Management.gitlab-ci.yml
    - Dependency-Scanning.gitlab-ci.yml
    - SAST.gitlab-ci.yml
```

Now the error will call out specifically that the value
is not a string.

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/66605
上级 f7e36934
---
title: Fix 500 error in CI lint when included templates are an array
merge_request: 32232
author:
type: fixed
......@@ -2170,6 +2170,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.
......
......@@ -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' }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册