jenkins_pipeline_builder 0.15.4 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/example/pipeline/Example-Pipeline.yaml +21 -21
- data/example/pipeline/Example-Promotion.yaml +32 -0
- data/example/pipeline/Example-Release.yaml +2 -0
- data/example/pipeline/project.yaml +2 -0
- data/jenkins_pipeline_builder.gemspec +1 -0
- data/lib/jenkins_pipeline_builder.rb +5 -0
- data/lib/jenkins_pipeline_builder/cli/describe.rb +5 -3
- data/lib/jenkins_pipeline_builder/custom_errors.rb +20 -0
- data/lib/jenkins_pipeline_builder/extension_dsl.rb +2 -2
- data/lib/jenkins_pipeline_builder/extension_set.rb +12 -5
- data/lib/jenkins_pipeline_builder/extensions.rb +7 -6
- data/lib/jenkins_pipeline_builder/extensions/build_steps.rb +93 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/build_steps/triggered_job.rb +36 -0
- data/lib/jenkins_pipeline_builder/extensions/helpers/builders/blocking_downstream_helper.rb +2 -2
- data/lib/jenkins_pipeline_builder/extensions/helpers/builders/maven3_helper.rb +2 -2
- data/lib/jenkins_pipeline_builder/extensions/helpers/extension_helper.rb +7 -7
- data/lib/jenkins_pipeline_builder/extensions/helpers/triggers/upstream_helper.rb +2 -2
- data/lib/jenkins_pipeline_builder/extensions/job_attributes.rb +60 -1
- data/lib/jenkins_pipeline_builder/extensions/promotion_conditions.rb +80 -0
- data/lib/jenkins_pipeline_builder/generator.rb +65 -57
- data/lib/jenkins_pipeline_builder/job.rb +1 -7
- data/lib/jenkins_pipeline_builder/job_collection.rb +16 -14
- data/lib/jenkins_pipeline_builder/module_registry.rb +4 -4
- data/lib/jenkins_pipeline_builder/promotion.rb +82 -0
- data/lib/jenkins_pipeline_builder/utils.rb +6 -0
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/lib/jenkins_pipeline_builder/view.rb +1 -4
- data/spec/lib/jenkins_pipeline_builder/extensions/build_steps_spec.rb +198 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/builders_spec.rb +1 -3
- data/spec/lib/jenkins_pipeline_builder/extensions/job_attributes_spec.rb +63 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/promotion_conditions_spec.rb +281 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/registered_spec.rb +11 -3
- data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-30-Release.yaml +3 -1
- data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-40-Promotion.yaml +31 -0
- data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/project.yaml +3 -1
- data/spec/lib/jenkins_pipeline_builder/fixtures/promotions_test/sample_promotion.yaml +31 -0
- data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +2 -2
- data/spec/lib/jenkins_pipeline_builder/job_spec.rb +1 -19
- data/spec/lib/jenkins_pipeline_builder/promotion_spec.rb +88 -0
- data/spec/lib/jenkins_pipeline_builder/spec_helper.rb +6 -0
- metadata +86 -59
- data/lib/jenkins_pipeline_builder/project.rb +0 -26
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
Yzc4NmM2NjllNzIyMzVlNWNlZjViMjFhZmYwMzJkYWU0Y2M2ZmJiNw==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2435d7d3bfbce44945a8ac65b3a2e974447659aa
|
4
|
+
data.tar.gz: 91f22ff5ea5254f056d3ebbd2966b2ddb1a968d2
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MzllZDExOGQ5MGU1YjhhMjFmMmVlMTEyYmE4M2YzZjEzMDYyMjg1NWU4OTJi
|
11
|
-
Y2UzYTdmNjkxMzZlYzA4MmU4YzM1YzZhMjhlY2NiYzRlZTE5NGU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ODVkNDhlNjdjY2M3YzkyMGNlMzBiM2VmYzhjMjE3MzMxZDFiZjY1MTEyMTk4
|
14
|
-
MmMxMjZkMzlmOTE4YzNiYTA0ZDU5MmZiNDAwNDc2ODY3MDM1ZTJjYmQ2MWY3
|
15
|
-
YjI5NTA4OWRhZjIxZmU3ZGNjYmZkZDZjNTZmNGY0ZTE4M2JmN2I=
|
6
|
+
metadata.gz: e3eaad5a500bbe56cfd70dac4d56ee3834d041e935b984386432b0d84e7eacc2db8541348f79d19e083a0e412089232d36cc5400d7f646e00a6eda8cbfb90936
|
7
|
+
data.tar.gz: 8b55b43d229e060aca4165941242acdbaca512ad3b645314c76a13ac780496ee65312952fcf2aab456fbe46cfb4def734f41eed798efe7fc6bba4e5c30e56acb
|
@@ -3,25 +3,25 @@
|
|
3
3
|
description: 'Pipeline'
|
4
4
|
job_type: multi_project
|
5
5
|
wrappers:
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
- timestamp: true
|
7
|
+
- ansicolor: true
|
8
|
+
- rvm: '{{rvm}}'
|
9
9
|
builders:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
10
|
+
- multi_job:
|
11
|
+
phases:
|
12
|
+
Commit:
|
13
|
+
jobs:
|
14
|
+
- name: '{{name}}-Commit'
|
15
|
+
continue_condition: SUCCESSFUL
|
16
|
+
Acceptance:
|
17
|
+
jobs:
|
18
|
+
- name: '{{name}}-Acceptance'
|
19
|
+
continue_condition: SUCCESSFUL
|
20
|
+
Upgrade:
|
21
|
+
jobs:
|
22
|
+
- name: '{{name}}-Upgrade'
|
23
|
+
continue_condition: SUCCESSFUL
|
24
|
+
Release:
|
25
|
+
jobs:
|
26
|
+
- name: '{{name}}-Release'
|
27
|
+
continue_condition: SUCCESSFUL
|
@@ -0,0 +1,32 @@
|
|
1
|
+
- promotion:
|
2
|
+
name: '01. Stage Promotion'
|
3
|
+
promotion_description: 'Describe the promotion process in play'
|
4
|
+
job_type: promotion
|
5
|
+
block_when_downstream_building: false # unless defined? false
|
6
|
+
block_when_upstream_building: false # unless defined? false
|
7
|
+
promotion_icon: 'silver' # defaults to gold, silver white blue green orange purple red
|
8
|
+
promotion_conditions: # follow parameters
|
9
|
+
- manual:
|
10
|
+
users: 'authenticated' # || ''
|
11
|
+
- self_promotion:
|
12
|
+
even_if_unstable: true # unless defined? false
|
13
|
+
- parameterized_self_promotion:
|
14
|
+
parameter_name: 'SOME_ENV_VAR'
|
15
|
+
parameter_value: true
|
16
|
+
even_if_unstable: true # unless defined? false
|
17
|
+
- downstream_pass:
|
18
|
+
jobs: '{{name}}-Commit'
|
19
|
+
even_if_unstable: true # unless defined? false
|
20
|
+
- upstream_promotion:
|
21
|
+
promotion_name: '01. Staging Promotion'
|
22
|
+
build_steps: # follow builders
|
23
|
+
- triggered_job:
|
24
|
+
name: '{{name}}-Release' # maps to <projects>
|
25
|
+
block_condition: # included in xml only if checked on UI
|
26
|
+
build_step_failure_threshold: 'FAILURE' # 'FAILURE' # %s(never FAILURE UNSTABLE SUCCESS)
|
27
|
+
failure_threshold: 'FAILURE' # || # %s(never FAILURE UNSTABLE SUCCESS)
|
28
|
+
unstable_threshold: 'UNSTABLE' # || # %s(never FAILURE UNSTABLE SUCCESS)
|
29
|
+
build_parameters:
|
30
|
+
current: true # unless defined? false
|
31
|
+
- keep_builds_forever:
|
32
|
+
value: true
|
@@ -40,6 +40,7 @@ automating Job & Pipeline creation from the YAML files checked-in with your appl
|
|
40
40
|
spec.add_development_dependency 'equivalent-xml'
|
41
41
|
spec.add_development_dependency 'yard-thor'
|
42
42
|
spec.add_development_dependency 'yard'
|
43
|
+
spec.add_development_dependency 'pry'
|
43
44
|
spec.add_development_dependency 'rspec_junit_formatter'
|
44
45
|
spec.add_development_dependency 'webmock', '~> 1.0'
|
45
46
|
spec.add_development_dependency 'rubocop', '= 0.40.0'
|
@@ -25,12 +25,14 @@ require 'active_support/core_ext'
|
|
25
25
|
|
26
26
|
require 'jenkins_pipeline_builder/version'
|
27
27
|
require 'jenkins_pipeline_builder/utils'
|
28
|
+
require 'jenkins_pipeline_builder/custom_errors'
|
28
29
|
require 'jenkins_pipeline_builder/compiler'
|
29
30
|
require 'jenkins_pipeline_builder/module_registry'
|
30
31
|
require 'jenkins_pipeline_builder/pull_request_generator'
|
31
32
|
require 'jenkins_pipeline_builder/view'
|
32
33
|
require 'jenkins_pipeline_builder/job_collection'
|
33
34
|
require 'jenkins_pipeline_builder/job'
|
35
|
+
require 'jenkins_pipeline_builder/promotion'
|
34
36
|
require 'jenkins_pipeline_builder/remote_dependencies'
|
35
37
|
require 'jenkins_pipeline_builder/generator'
|
36
38
|
|
@@ -75,6 +77,7 @@ module JenkinsPipelineBuilder
|
|
75
77
|
end
|
76
78
|
end
|
77
79
|
end
|
80
|
+
|
78
81
|
JenkinsPipelineBuilder.generator
|
79
82
|
require 'jenkins_pipeline_builder/extensions'
|
80
83
|
require 'jenkins_pipeline_builder/extension_dsl'
|
@@ -89,6 +92,8 @@ require 'jenkins_pipeline_builder/extensions/job_attributes'
|
|
89
92
|
require 'jenkins_pipeline_builder/extensions/wrappers'
|
90
93
|
require 'jenkins_pipeline_builder/extensions/publishers'
|
91
94
|
require 'jenkins_pipeline_builder/extensions/triggers'
|
95
|
+
require 'jenkins_pipeline_builder/extensions/build_steps'
|
96
|
+
require 'jenkins_pipeline_builder/extensions/promotion_conditions'
|
92
97
|
|
93
98
|
require 'jenkins_pipeline_builder/cli/helper'
|
94
99
|
require 'jenkins_pipeline_builder/cli/view'
|
@@ -24,7 +24,7 @@ module JenkinsPipelineBuilder
|
|
24
24
|
module CLI
|
25
25
|
entries = JenkinsPipelineBuilder.registry.entries.keys
|
26
26
|
entries << :job_attributes
|
27
|
-
entries.each do |entry|
|
27
|
+
entries.try(:each) do |entry|
|
28
28
|
klass_name = entry.to_s.classify
|
29
29
|
# rubocop:disable Style/AccessModifierIndentation
|
30
30
|
klass = Class.new(Thor) do
|
@@ -34,7 +34,7 @@ module JenkinsPipelineBuilder
|
|
34
34
|
JenkinsPipelineBuilder.registry.registry[:job][entry]
|
35
35
|
end
|
36
36
|
|
37
|
-
extensions.each do |key, extset|
|
37
|
+
extensions.try(:each) do |key, extset|
|
38
38
|
# TODO: don't just take the first
|
39
39
|
ext = extset.extensions.first
|
40
40
|
desc key, "Details for #{ext.name}"
|
@@ -52,10 +52,12 @@ module JenkinsPipelineBuilder
|
|
52
52
|
# rubocop:enable Style/AccessModifierIndentation
|
53
53
|
Module.const_set(klass_name, klass)
|
54
54
|
end
|
55
|
+
|
55
56
|
class Describe < Thor
|
56
57
|
entries = JenkinsPipelineBuilder.registry.entries.keys
|
57
58
|
entries << :job_attributes
|
58
|
-
|
59
|
+
|
60
|
+
entries.try(:each) do |entry, _path|
|
59
61
|
klass_name = entry.to_s.classify
|
60
62
|
singular_model = entry.to_s.singularize
|
61
63
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module CustomErrors
|
2
|
+
class ParseError < StandardError
|
3
|
+
def initialize(msg, path = nil)
|
4
|
+
super(format_msg(msg, path).squeeze(' '))
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def format_msg(msg, path)
|
10
|
+
if path.nil?
|
11
|
+
%(There was an error while parsing a file:
|
12
|
+
#{msg})
|
13
|
+
else
|
14
|
+
%(There was an error while parsing a file:
|
15
|
+
#{path}
|
16
|
+
#{msg})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -6,7 +6,7 @@ JenkinsPipelineBuilder.registry.entries.each do |type, path|
|
|
6
6
|
|
7
7
|
JenkinsPipelineBuilder.registry.register([:job, type], set)
|
8
8
|
versions = set.extensions.map(&:min_version)
|
9
|
-
|
9
|
+
JenkinsPipelineBuilder.logger.info "Successfully registered #{set.name} for versions #{versions}" if set.announced
|
10
10
|
true
|
11
11
|
end
|
12
12
|
end
|
@@ -17,6 +17,6 @@ def job_attribute(&block)
|
|
17
17
|
|
18
18
|
JenkinsPipelineBuilder.registry.register([:job], set)
|
19
19
|
versions = set.extensions.map(&:min_version)
|
20
|
-
|
20
|
+
JenkinsPipelineBuilder.logger.info "Successfully registered #{set.name} for versions #{versions}" if set.announced
|
21
21
|
true
|
22
22
|
end
|
@@ -8,6 +8,7 @@ module JenkinsPipelineBuilder
|
|
8
8
|
:announced,
|
9
9
|
:type
|
10
10
|
].freeze
|
11
|
+
|
11
12
|
SET_METHODS.each do |method_name|
|
12
13
|
define_method method_name do |value = nil|
|
13
14
|
return settings[method_name] if value.nil?
|
@@ -66,7 +67,8 @@ module JenkinsPipelineBuilder
|
|
66
67
|
extension = versions[highest_allowed_version]
|
67
68
|
|
68
69
|
unless extension
|
69
|
-
raise
|
70
|
+
raise %(Can't find version of #{name} lte #{installed_version}.
|
71
|
+
Available versions: #{versions.keys.map(&:to_s)})
|
70
72
|
end
|
71
73
|
extension
|
72
74
|
end
|
@@ -79,7 +81,7 @@ module JenkinsPipelineBuilder
|
|
79
81
|
mismatch << "The values for #{method_name} do not match '#{val1}' : '#{val2}'" unless val1 == val2
|
80
82
|
end
|
81
83
|
mismatch.each do |error|
|
82
|
-
|
84
|
+
logger.error error
|
83
85
|
end
|
84
86
|
raise 'Values did not match, cannot merge extension sets' if mismatch.any?
|
85
87
|
|
@@ -129,8 +131,8 @@ module JenkinsPipelineBuilder
|
|
129
131
|
valid = errors.empty?
|
130
132
|
unless valid
|
131
133
|
name ||= 'A plugin with no name provided'
|
132
|
-
|
133
|
-
|
134
|
+
logger.error "Encountered errors while registering #{name}"
|
135
|
+
logger.error errors.map { |k, v| "#{k}: #{v}" }.join(', ')
|
134
136
|
end
|
135
137
|
valid
|
136
138
|
end
|
@@ -154,6 +156,10 @@ module JenkinsPipelineBuilder
|
|
154
156
|
|
155
157
|
private
|
156
158
|
|
159
|
+
def logger
|
160
|
+
JenkinsPipelineBuilder.logger
|
161
|
+
end
|
162
|
+
|
157
163
|
def highest_allowed_version
|
158
164
|
ordered_version_list.each do |version|
|
159
165
|
return version if version <= installed_version
|
@@ -173,7 +179,8 @@ module JenkinsPipelineBuilder
|
|
173
179
|
end
|
174
180
|
|
175
181
|
def deprecation_warning(name, block)
|
176
|
-
|
182
|
+
logger.warn %(WARNING: #{name} set the version in the #{block} block, this is deprecated.
|
183
|
+
Please use a version block.)
|
177
184
|
end
|
178
185
|
end
|
179
186
|
end
|
@@ -36,6 +36,7 @@ module JenkinsPipelineBuilder
|
|
36
36
|
xml: false,
|
37
37
|
parameters: []
|
38
38
|
}.freeze
|
39
|
+
|
39
40
|
EXT_METHODS.keys.each do |method_name|
|
40
41
|
define_method method_name do |value = nil|
|
41
42
|
return instance_variable_get("@#{method_name}") if value.nil?
|
@@ -57,10 +58,11 @@ module JenkinsPipelineBuilder
|
|
57
58
|
|
58
59
|
def execute(value, n_xml)
|
59
60
|
errors = check_parameters value
|
60
|
-
errors.
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
raise ArgumentError, errors.join("\n") if errors.any?
|
62
|
+
raise ArgumentError, %(Extension #{name} has no valid path
|
63
|
+
Check ModuleRegistry#entries and the definition of the extension
|
64
|
+
Note: job_attributes have no implicit path and must be set in the builder
|
65
|
+
).squeeze(' ') unless path
|
64
66
|
|
65
67
|
n_builders = n_xml.xpath(path).first
|
66
68
|
n_builders.instance_exec(value, &before) if before
|
@@ -93,7 +95,6 @@ module JenkinsPipelineBuilder
|
|
93
95
|
def build_extension_xml(n_builders, value)
|
94
96
|
Nokogiri::XML::Builder.with(n_builders) do |builder|
|
95
97
|
include_helper value, builder
|
96
|
-
helper.extension = self
|
97
98
|
builder.instance_exec helper, &xml
|
98
99
|
end
|
99
100
|
end
|
@@ -101,7 +102,7 @@ module JenkinsPipelineBuilder
|
|
101
102
|
def include_helper(params, builder)
|
102
103
|
klass = "#{name.to_s.camelize}Helper".safe_constantize
|
103
104
|
klass ||= ExtensionHelper
|
104
|
-
self.helper = klass.new params, builder
|
105
|
+
self.helper = klass.new self, params, builder
|
105
106
|
end
|
106
107
|
end
|
107
108
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# Technically triggered_job takes multiple jobs in the xml
|
2
|
+
# Since Nokogiri builders don't allow modifying existing nodes this is not
|
3
|
+
# straightforward to abstract away the underlying XML from the user.
|
4
|
+
#
|
5
|
+
# 1. So either we need to only accept 1 triggered job per promotion process OR
|
6
|
+
# 2. Make it take array of triggered jobs
|
7
|
+
#
|
8
|
+
# Current implementation went with option 1.
|
9
|
+
#
|
10
|
+
# This is very similar to the implementation for :blocking_downstream, but
|
11
|
+
# unfortunately sharing code between extensions doesn't seem to be possible
|
12
|
+
|
13
|
+
build_step do
|
14
|
+
name :triggered_job
|
15
|
+
plugin_id 'parameterized-trigger'
|
16
|
+
parameters [
|
17
|
+
:name,
|
18
|
+
# block_condition: { }
|
19
|
+
# or
|
20
|
+
# block_condition: _ # for the defaults
|
21
|
+
:block_condition,
|
22
|
+
# build_parameters: [
|
23
|
+
# [ :current, _ ],
|
24
|
+
# [ :predefined, {val: x, val2: y} ],
|
25
|
+
# [ :file, 'filpath' ] ]
|
26
|
+
:build_parameters
|
27
|
+
]
|
28
|
+
|
29
|
+
xml do |state|
|
30
|
+
send('hudson.plugins.parameterizedtrigger.TriggerBuilder',
|
31
|
+
'plugin' => 'parameterized-trigger@2.31') do
|
32
|
+
configs do
|
33
|
+
send('hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig') do
|
34
|
+
if state[:build_parameters].present? && state[:build_parameters].respond_to?(:each)
|
35
|
+
configs do
|
36
|
+
state[:build_parameters].each do |param_key, param_val|
|
37
|
+
case param_key
|
38
|
+
when /current/i, :current
|
39
|
+
send('hudson.plugins.parameterizedtrigger.CurrentBuildParameters')
|
40
|
+
|
41
|
+
when /predefined/i, :predefined
|
42
|
+
send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do
|
43
|
+
properties param_val.map { |k, v| "#{k.upcase}=#{v}" }.join(' ')
|
44
|
+
end
|
45
|
+
|
46
|
+
when /file/i, :file
|
47
|
+
send('hudson.plugins.parameterizedtrigger.FileBuildParameters') do
|
48
|
+
propertiesFile param_val
|
49
|
+
failTriggerOnMissing false
|
50
|
+
useMatrixChild false
|
51
|
+
onlyExactRuns false
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
else
|
57
|
+
configs(class: 'empty-list') {}
|
58
|
+
end
|
59
|
+
|
60
|
+
projects state[:name]
|
61
|
+
condition 'ALWAYS'
|
62
|
+
triggerWithNoParameters false
|
63
|
+
|
64
|
+
block do
|
65
|
+
buildStepFailureThreshold do
|
66
|
+
state.generate_for_threshold(self,
|
67
|
+
state.resolve_block_condition(:build_step_failure_threshold) || :failure)
|
68
|
+
end
|
69
|
+
unstableThreshold do
|
70
|
+
state.generate_for_threshold(self,
|
71
|
+
state.resolve_block_condition(:unstable_threshold) || :unstable)
|
72
|
+
end
|
73
|
+
failureThreshold do
|
74
|
+
state.generate_for_threshold(self,
|
75
|
+
state.resolve_block_condition(:failure_threshold) || :failure)
|
76
|
+
end
|
77
|
+
end if state.block_condition?
|
78
|
+
|
79
|
+
buildAllNodesWithLabel false
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
build_step do
|
87
|
+
name :keep_builds_forever
|
88
|
+
plugin_id 'promoted-builds'
|
89
|
+
|
90
|
+
xml do
|
91
|
+
send('hudson.plugins.promoted__builds.KeepBuildForeverAction')
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class TriggeredJobHelper < ExtensionHelper
|
2
|
+
# @param xml_builder [Nokogiri::Builder] this will be self inside an extension
|
3
|
+
# @param threshold_type [String, Symbol] case-insensitive string or symbol
|
4
|
+
# from the %(failure unstable success)
|
5
|
+
# @returns [Nokogiri::Builder] continues the mutation of the passed in builder
|
6
|
+
def generate_for_threshold(xml_builder, threshold_type)
|
7
|
+
case threshold_type
|
8
|
+
when /failure/i, :failure
|
9
|
+
generate_threshold_xml({ name: 'FAILURE', ordinal: 2, color: 'RED' }, xml_builder)
|
10
|
+
when /unstable/i, :unstable
|
11
|
+
generate_threshold_xml({ name: 'UNSTABLE', ordinal: 1, color: 'YELLOW' }, xml_builder)
|
12
|
+
when /success/i, :success
|
13
|
+
generate_threshold_xml({ name: 'SUCCESS', ordinal: 0, color: 'BLUE' }, xml_builder)
|
14
|
+
else
|
15
|
+
raise ArgumentError("Input should be one of the following either as a case insensitive string or symbol: \n
|
16
|
+
'failure', 'unstable', 'success'")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def resolve_block_condition(key)
|
21
|
+
try(:block_condition).try([], key)
|
22
|
+
end
|
23
|
+
|
24
|
+
def block_condition?
|
25
|
+
respond_to?(:block_condition) && block_condition != false
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def generate_threshold_xml(data, xml)
|
31
|
+
xml.send(:name, data[:name])
|
32
|
+
xml.send(:ordinal, data[:ordinal])
|
33
|
+
xml.send(:color, data[:color])
|
34
|
+
xml.send(:completeBuild, 'true')
|
35
|
+
end
|
36
|
+
end
|