Validate environment name with regex
This commit is contained in:
parent
3656a6edf3
commit
e8f09f02bf
4 changed files with 78 additions and 10 deletions
|
@ -3,7 +3,11 @@ class Environment < ActiveRecord::Base
|
|||
|
||||
has_many :deployments
|
||||
|
||||
validates_presence_of :name
|
||||
validates :name,
|
||||
presence: true,
|
||||
length: { within: 0..255 },
|
||||
format: { with: Gitlab::Regex.environment_name_regex,
|
||||
message: Gitlab::Regex.environment_name_regex_message }
|
||||
|
||||
def last_deployment
|
||||
deployments.last
|
||||
|
|
|
@ -214,8 +214,8 @@ module Ci
|
|||
raise ValidationError, "#{name} job: when parameter should be on_success, on_failure or always"
|
||||
end
|
||||
|
||||
if job[:environment] && !validate_string(job[:environment])
|
||||
raise ValidationError, "#{name} job: environment should be a string"
|
||||
if job[:environment] && !validate_environment(job[:environment])
|
||||
raise ValidationError, "#{name} job: environment parameter #{Gitlab::Regex.environment_name_regex_message}"
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -322,6 +322,10 @@ module Ci
|
|||
value.in?([true, false])
|
||||
end
|
||||
|
||||
def validate_environment(value)
|
||||
value.is_a?(String) && value =~ Gitlab::Regex.environment_name_regex
|
||||
end
|
||||
|
||||
def process?(only_params, except_params, ref, tag, trigger_request)
|
||||
if only_params.present?
|
||||
return false unless matching?(only_params, ref, tag, trigger_request)
|
||||
|
|
|
@ -100,5 +100,13 @@ module Gitlab
|
|||
def container_registry_reference_regex
|
||||
git_reference_regex
|
||||
end
|
||||
|
||||
def environment_name_regex
|
||||
@environment_name_regex ||= /\A[a-zA-Z0-9_-]+\z/.freeze
|
||||
end
|
||||
|
||||
def environment_name_regex_message
|
||||
"can contain only letters, digits, '-' and '_'."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -26,7 +26,8 @@ module Ci
|
|||
tag_list: [],
|
||||
options: {},
|
||||
allow_failure: false,
|
||||
when: "on_success"
|
||||
when: "on_success",
|
||||
environment: nil,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -387,7 +388,8 @@ module Ci
|
|||
services: ["mysql"]
|
||||
},
|
||||
allow_failure: false,
|
||||
when: "on_success"
|
||||
when: "on_success",
|
||||
environment: nil,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -415,7 +417,8 @@ module Ci
|
|||
services: ["postgresql"]
|
||||
},
|
||||
allow_failure: false,
|
||||
when: "on_success"
|
||||
when: "on_success",
|
||||
environment: nil,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
@ -599,7 +602,8 @@ module Ci
|
|||
}
|
||||
},
|
||||
when: "on_success",
|
||||
allow_failure: false
|
||||
allow_failure: false,
|
||||
environment: nil,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -621,6 +625,51 @@ module Ci
|
|||
end
|
||||
end
|
||||
|
||||
describe '#environment' do
|
||||
let(:config) do
|
||||
{
|
||||
deploy_to_production: { stage: 'deploy', script: 'test', environment: environment }
|
||||
}
|
||||
end
|
||||
|
||||
let(:processor) { GitlabCiYamlProcessor.new(YAML.dump(config)) }
|
||||
let(:builds) { processor.builds_for_stage_and_ref('deploy', 'master') }
|
||||
|
||||
context 'when a production environment is specified' do
|
||||
let(:environment) { 'production' }
|
||||
|
||||
it 'does return production' do
|
||||
expect(builds.size).to eq(1)
|
||||
expect(builds.first[:environment]).to eq(environment)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when no environment is specified' do
|
||||
let(:environment) { nil }
|
||||
|
||||
it 'does return nil environment' do
|
||||
expect(builds.size).to eq(1)
|
||||
expect(builds.first[:environment]).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'is not a string' do
|
||||
let(:environment) { 1 }
|
||||
|
||||
it 'raises error' do
|
||||
expect { builds }.to raise_error("deploy_to_production job: environment parameter #{Gitlab::Regex.environment_name_regex_message}")
|
||||
end
|
||||
end
|
||||
|
||||
context 'is not a valid string' do
|
||||
let(:environment) { 'production staging' }
|
||||
|
||||
it 'raises error' do
|
||||
expect { builds }.to raise_error("deploy_to_production job: environment parameter #{Gitlab::Regex.environment_name_regex_message}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "Dependencies" do
|
||||
let(:config) do
|
||||
{
|
||||
|
@ -682,7 +731,8 @@ module Ci
|
|||
tag_list: [],
|
||||
options: {},
|
||||
when: "on_success",
|
||||
allow_failure: false
|
||||
allow_failure: false,
|
||||
environment: nil,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
@ -727,7 +777,8 @@ module Ci
|
|||
tag_list: [],
|
||||
options: {},
|
||||
when: "on_success",
|
||||
allow_failure: false
|
||||
allow_failure: false,
|
||||
environment: nil,
|
||||
})
|
||||
expect(subject.second).to eq({
|
||||
except: nil,
|
||||
|
@ -739,7 +790,8 @@ module Ci
|
|||
tag_list: [],
|
||||
options: {},
|
||||
when: "on_success",
|
||||
allow_failure: false
|
||||
allow_failure: false,
|
||||
environment: nil,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue