Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
9458192f
Commit
9458192f
authored
Sep 09, 2019
by
drew
Committed by
Kamil Trzciński
Sep 09, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Passing job:rules downstream and E2E specs for job:rules configuration
parent
ee5bd244
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
382 additions
and
30 deletions
+382
-30
changelogs/unreleased/job-rules-e2e.yml
changelogs/unreleased/job-rules-e2e.yml
+5
-0
lib/gitlab/ci/build/rules.rb
lib/gitlab/ci/build/rules.rb
+8
-1
lib/gitlab/ci/build/rules/rule/clause.rb
lib/gitlab/ci/build/rules/rule/clause.rb
+1
-3
lib/gitlab/ci/config/entry/job.rb
lib/gitlab/ci/config/entry/job.rb
+9
-1
lib/gitlab/ci/config/entry/rules.rb
lib/gitlab/ci/config/entry/rules.rb
+4
-0
lib/gitlab/ci/pipeline/seed/build.rb
lib/gitlab/ci/pipeline/seed/build.rb
+1
-1
lib/gitlab/ci/yaml_processor.rb
lib/gitlab/ci/yaml_processor.rb
+1
-0
spec/lib/gitlab/ci/pipeline/seed/build_spec.rb
spec/lib/gitlab/ci/pipeline/seed/build_spec.rb
+2
-2
spec/lib/gitlab/ci/yaml_processor_spec.rb
spec/lib/gitlab/ci/yaml_processor_spec.rb
+36
-2
spec/services/ci/create_pipeline_service_spec.rb
spec/services/ci/create_pipeline_service_spec.rb
+315
-20
No files found.
changelogs/unreleased/job-rules-e2e.yml
0 → 100644
View file @
9458192f
---
title
:
Passing job rules downstream and E2E specs for job:rules configuration
merge_request
:
32609
author
:
type
:
fixed
lib/gitlab/ci/build/rules.rb
View file @
9458192f
...
@@ -6,7 +6,14 @@ module Gitlab
...
@@ -6,7 +6,14 @@ module Gitlab
class
Rules
class
Rules
include
::
Gitlab
::
Utils
::
StrongMemoize
include
::
Gitlab
::
Utils
::
StrongMemoize
Result
=
Struct
.
new
(
:when
,
:start_in
)
Result
=
Struct
.
new
(
:when
,
:start_in
)
do
def
build_attributes
{
when:
self
.
when
,
options:
{
start_in:
start_in
}.
compact
}.
compact
end
end
def
initialize
(
rule_hashes
,
default_when
=
'on_success'
)
def
initialize
(
rule_hashes
,
default_when
=
'on_success'
)
@rule_list
=
Rule
.
fabricate_list
(
rule_hashes
)
@rule_list
=
Rule
.
fabricate_list
(
rule_hashes
)
...
...
lib/gitlab/ci/build/rules/rule/clause.rb
View file @
9458192f
...
@@ -13,9 +13,7 @@ module Gitlab
...
@@ -13,9 +13,7 @@ module Gitlab
UnknownClauseError
=
Class
.
new
(
StandardError
)
UnknownClauseError
=
Class
.
new
(
StandardError
)
def
self
.
fabricate
(
type
,
value
)
def
self
.
fabricate
(
type
,
value
)
type
=
type
.
to_s
.
camelize
"
#{
self
}
::
#{
type
.
to_s
.
camelize
}
"
.
safe_constantize
&
.
new
(
value
)
self
.
const_get
(
type
).
new
(
value
)
if
self
.
const_defined?
(
type
)
end
end
def
initialize
(
spec
)
def
initialize
(
spec
)
...
...
lib/gitlab/ci/config/entry/job.rb
View file @
9458192f
...
@@ -122,7 +122,7 @@ module Gitlab
...
@@ -122,7 +122,7 @@ module Gitlab
helpers
:before_script
,
:script
,
:stage
,
:type
,
:after_script
,
helpers
:before_script
,
:script
,
:stage
,
:type
,
:after_script
,
:cache
,
:image
,
:services
,
:only
,
:except
,
:variables
,
:cache
,
:image
,
:services
,
:only
,
:except
,
:variables
,
:artifacts
,
:environment
,
:coverage
,
:retry
,
:artifacts
,
:environment
,
:coverage
,
:retry
,
:rules
,
:parallel
,
:needs
,
:interruptible
:parallel
,
:needs
,
:interruptible
attributes
:script
,
:tags
,
:allow_failure
,
:when
,
:dependencies
,
attributes
:script
,
:tags
,
:allow_failure
,
:when
,
:dependencies
,
...
@@ -145,6 +145,13 @@ module Gitlab
...
@@ -145,6 +145,13 @@ module Gitlab
end
end
@entries
.
delete
(
:type
)
@entries
.
delete
(
:type
)
# This is something of a hack, see issue for details:
# https://gitlab.com/gitlab-org/gitlab-ce/issues/67150
if
!
only_defined?
&&
has_rules?
@entries
.
delete
(
:only
)
@entries
.
delete
(
:except
)
end
end
end
inherit!
(
deps
)
inherit!
(
deps
)
...
@@ -203,6 +210,7 @@ module Gitlab
...
@@ -203,6 +210,7 @@ module Gitlab
cache:
cache_value
,
cache:
cache_value
,
only:
only_value
,
only:
only_value
,
except:
except_value
,
except:
except_value
,
rules:
has_rules?
?
rules_value
:
nil
,
variables:
variables_defined?
?
variables_value
:
{},
variables:
variables_defined?
?
variables_value
:
{},
environment:
environment_defined?
?
environment_value
:
nil
,
environment:
environment_defined?
?
environment_value
:
nil
,
environment_name:
environment_defined?
?
environment_value
[
:name
]
:
nil
,
environment_name:
environment_defined?
?
environment_value
[
:name
]
:
nil
,
...
...
lib/gitlab/ci/config/entry/rules.rb
View file @
9458192f
...
@@ -26,6 +26,10 @@ module Gitlab
...
@@ -26,6 +26,10 @@ module Gitlab
end
end
end
end
end
end
def
value
@config
end
end
end
end
end
end
end
...
...
lib/gitlab/ci/pipeline/seed/build.rb
View file @
9458192f
...
@@ -145,7 +145,7 @@ module Gitlab
...
@@ -145,7 +145,7 @@ module Gitlab
def
rules_attributes
def
rules_attributes
strong_memoize
(
:rules_attributes
)
do
strong_memoize
(
:rules_attributes
)
do
@using_rules
?
@rules
.
evaluate
(
@pipeline
,
self
).
to_h
.
compact
:
{}
@using_rules
?
@rules
.
evaluate
(
@pipeline
,
self
).
build_attributes
:
{}
end
end
end
end
end
end
...
...
lib/gitlab/ci/yaml_processor.rb
View file @
9458192f
...
@@ -42,6 +42,7 @@ module Gitlab
...
@@ -42,6 +42,7 @@ module Gitlab
yaml_variables:
yaml_variables
(
name
),
yaml_variables:
yaml_variables
(
name
),
needs_attributes:
job
[
:needs
]
&
.
map
{
|
need
|
{
name:
need
}
},
needs_attributes:
job
[
:needs
]
&
.
map
{
|
need
|
{
name:
need
}
},
interruptible:
job
[
:interruptible
],
interruptible:
job
[
:interruptible
],
rules:
job
[
:rules
],
options:
{
options:
{
image:
job
[
:image
],
image:
job
[
:image
],
services:
job
[
:services
],
services:
job
[
:services
],
...
...
spec/lib/gitlab/ci/pipeline/seed/build_spec.rb
View file @
9458192f
...
@@ -46,7 +46,7 @@ describe Gitlab::Ci::Pipeline::Seed::Build do
...
@@ -46,7 +46,7 @@ describe Gitlab::Ci::Pipeline::Seed::Build do
context
'is matched'
do
context
'is matched'
do
let
(
:attributes
)
{
{
name:
'rspec'
,
ref:
'master'
,
rules:
[{
if:
'$VAR == null'
,
when:
'delayed'
,
start_in:
'3 hours'
}]
}
}
let
(
:attributes
)
{
{
name:
'rspec'
,
ref:
'master'
,
rules:
[{
if:
'$VAR == null'
,
when:
'delayed'
,
start_in:
'3 hours'
}]
}
}
it
{
is_expected
.
to
include
(
when:
'delayed'
,
start_in:
'3 hours'
)
}
it
{
is_expected
.
to
include
(
when:
'delayed'
,
options:
{
start_in:
'3 hours'
}
)
}
end
end
context
'is not matched'
do
context
'is not matched'
do
...
@@ -541,7 +541,7 @@ describe Gitlab::Ci::Pipeline::Seed::Build do
...
@@ -541,7 +541,7 @@ describe Gitlab::Ci::Pipeline::Seed::Build do
it
{
is_expected
.
to
be_included
}
it
{
is_expected
.
to
be_included
}
it
'correctly populates when:'
do
it
'correctly populates when:'
do
expect
(
seed_build
.
attributes
).
to
include
(
when:
'delayed'
,
start_in:
'1 day'
)
expect
(
seed_build
.
attributes
).
to
include
(
when:
'delayed'
,
options:
{
start_in:
'1 day'
}
)
end
end
end
end
end
end
...
...
spec/lib/gitlab/ci/yaml_processor_spec.rb
View file @
9458192f
...
@@ -16,7 +16,10 @@ module Gitlab
...
@@ -16,7 +16,10 @@ module Gitlab
let
(
:config
)
do
let
(
:config
)
do
YAML
.
dump
(
YAML
.
dump
(
before_script:
[
'pwd'
],
before_script:
[
'pwd'
],
rspec:
{
script:
'rspec'
}
rspec:
{
script:
'rspec'
,
interruptible:
true
}
)
)
end
end
...
@@ -29,6 +32,7 @@ module Gitlab
...
@@ -29,6 +32,7 @@ module Gitlab
before_script:
[
"pwd"
],
before_script:
[
"pwd"
],
script:
[
"rspec"
]
script:
[
"rspec"
]
},
},
interruptible:
true
,
allow_failure:
false
,
allow_failure:
false
,
when:
"on_success"
,
when:
"on_success"
,
yaml_variables:
[]
yaml_variables:
[]
...
@@ -36,6 +40,36 @@ module Gitlab
...
@@ -36,6 +40,36 @@ module Gitlab
end
end
end
end
context
'with job rules'
do
let
(
:config
)
do
YAML
.
dump
(
rspec:
{
script:
'rspec'
,
rules:
[
{
if:
'$CI_COMMIT_REF_NAME == "master"'
},
{
changes:
%w[README.md]
}
]
}
)
end
it
'returns valid build attributes'
do
expect
(
subject
).
to
eq
({
stage:
'test'
,
stage_idx:
1
,
name:
'rspec'
,
options:
{
script:
[
'rspec'
]
},
rules:
[
{
if:
'$CI_COMMIT_REF_NAME == "master"'
},
{
changes:
%w[README.md]
}
],
allow_failure:
false
,
when:
'on_success'
,
yaml_variables:
[]
})
end
end
describe
'coverage entry'
do
describe
'coverage entry'
do
describe
'code coverage regexp'
do
describe
'code coverage regexp'
do
let
(
:config
)
do
let
(
:config
)
do
...
@@ -1252,7 +1286,7 @@ module Gitlab
...
@@ -1252,7 +1286,7 @@ module Gitlab
end
end
end
end
describe
'rules
'
do
context
'with when/rules conflict
'
do
subject
{
Gitlab
::
Ci
::
YamlProcessor
.
new
(
YAML
.
dump
(
config
))
}
subject
{
Gitlab
::
Ci
::
YamlProcessor
.
new
(
YAML
.
dump
(
config
))
}
let
(
:config
)
do
let
(
:config
)
do
...
...
spec/services/ci/create_pipeline_service_spec.rb
View file @
9458192f
This diff is collapsed.
Click to expand it.
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