Skip to content
Snippets Groups Projects
Commit e8f09f02 authored by Kamil Trzcińśki's avatar Kamil Trzcińśki
Browse files

Validate environment name with regex

parent 3656a6ed
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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)
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -26,7 +26,8 @@ module Ci
tag_list: [],
options: {},
allow_failure: false,
when: "on_success"
when: "on_success",
environment: nil,
})
end
 
Loading
Loading
@@ -387,7 +388,8 @@ module Ci
services: ["mysql"]
},
allow_failure: false,
when: "on_success"
when: "on_success",
environment: nil,
})
end
 
Loading
Loading
@@ -415,7 +417,8 @@ module Ci
services: ["postgresql"]
},
allow_failure: false,
when: "on_success"
when: "on_success",
environment: nil,
})
end
end
Loading
Loading
@@ -599,7 +602,8 @@ module Ci
}
},
when: "on_success",
allow_failure: false
allow_failure: false,
environment: nil,
})
end
 
Loading
Loading
@@ -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
{
Loading
Loading
@@ -682,7 +731,8 @@ module Ci
tag_list: [],
options: {},
when: "on_success",
allow_failure: false
allow_failure: false,
environment: nil,
})
end
end
Loading
Loading
@@ -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,
Loading
Loading
@@ -739,7 +790,8 @@ module Ci
tag_list: [],
options: {},
when: "on_success",
allow_failure: false
allow_failure: false,
environment: nil,
})
end
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment