BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
e8f09f02
Commit
e8f09f02
authored
Jun 14, 2016
by
Kamil Trzcinski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Validate environment name with regex
parent
3656a6ed
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
78 additions
and
10 deletions
+78
-10
environment.rb
app/models/environment.rb
+5
-1
gitlab_ci_yaml_processor.rb
lib/ci/gitlab_ci_yaml_processor.rb
+6
-2
regex.rb
lib/gitlab/regex.rb
+8
-0
gitlab_ci_yaml_processor_spec.rb
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+59
-7
No files found.
app/models/environment.rb
View file @
e8f09f02
...
...
@@ -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
...
...
lib/ci/gitlab_ci_yaml_processor.rb
View file @
e8f09f02
...
...
@@ -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
)
...
...
lib/gitlab/regex.rb
View file @
e8f09f02
...
...
@@ -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
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
View file @
e8f09f02
...
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment