jujube 0.11.0 → 0.12.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 +4 -4
- data/.travis.yml +3 -2
- data/CHANGELOG.md +12 -2
- data/README.md +2 -2
- data/acceptance/fixtures/endToEnd/endToEnd.job +31 -1
- data/acceptance/fixtures/endToEnd/expected.yml +42 -2
- data/acceptance/jujube/acceptance_test.rb +2 -2
- data/jujube.gemspec +3 -3
- data/lib/jujube/components.rb +2 -0
- data/lib/jujube/components/axes.rb +46 -0
- data/lib/jujube/components/parameters.rb +13 -36
- data/lib/jujube/components/publishers.rb +58 -0
- data/lib/jujube/components/triggers.rb +1 -0
- data/lib/jujube/job.rb +18 -0
- data/lib/jujube/version.rb +3 -1
- data/test/components/axes_test.rb +15 -0
- data/test/components/parameters_test.rb +6 -6
- data/test/components/properties_test.rb +5 -5
- data/test/components/publishers_test.rb +76 -16
- data/test/components/wrappers_test.rb +4 -4
- metadata +13 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1899d2c440e2e60202c88f29a5d90aaa45777aa
|
4
|
+
data.tar.gz: 25b2892d7bccb5b856025e826fac787dd917527f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ace24b0117da72efc6548ff513a3eec219cfaca63a623287f05644f83c74e69afba1bec1a0196c2e0504e5b2763c065f9b42d6875fcc41d64b75a0e1216281d3
|
7
|
+
data.tar.gz: 0676524d33bd24cfad3bc54338cb29ec2a8b7a4d0bfc8dd8ca6f4793dcb3bf14218abcd24e29552ee82217144aee9c6e5de78a4d7f19ac14fac7d7616a58dc16
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,15 @@ adheres to [Semantic Versioning](http://semver.org/).
|
|
5
5
|
|
6
6
|
## [Unreleased][unreleased]
|
7
7
|
|
8
|
+
## [0.12.0][0.12.0]
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
* Support the `string` parameter (see http://docs.openstack.org/infra/jenkins-job-builder/parameters.html#parameters.string) ([#3](https://github.com/randycoulman/jujube/pull/3)) (@jgeysens)
|
13
|
+
* Support Rake 11.x versions ([#4](https://github.com/randycoulman/jujube/pull/4))
|
14
|
+
* Support the `validating_string` parameter (see http://docs.openstack.org/infra/jenkins-job-builder/parameters.html#parameters.validating-string) ([#7](https://github.com/randycoulman/jujube/pull/7))
|
15
|
+
* Support the `trigger_parameterized_builds` publisher (see http://docs.openstack.org/infra/jenkins-job-builder/publishers.html#publishers.trigger-parameterized-builds) ([#9](https://github.com/randycoulman/jujube/pull/9))
|
16
|
+
|
8
17
|
## [0.11.0][0.11.0]
|
9
18
|
|
10
19
|
### Breaking Changes
|
@@ -25,7 +34,7 @@ adheres to [Semantic Versioning](http://semver.org/).
|
|
25
34
|
|
26
35
|
### Added
|
27
36
|
|
28
|
-
* Support the `priority_sorter` property
|
37
|
+
* Support the `priority_sorter` property (see http://docs.openstack.org/infra/jenkins-job-builder/properties.html#properties.priority-sorter).
|
29
38
|
* Links to documentation for the `fitnesse` publisher and `store` SCM that have now been merged into jenkins-job-builder.
|
30
39
|
* This CHANGELOG.
|
31
40
|
|
@@ -70,7 +79,8 @@ adheres to [Semantic Versioning](http://semver.org/).
|
|
70
79
|
|
71
80
|
* Initial public release.
|
72
81
|
|
73
|
-
[unreleased]: https://github.com/randycoulman/jujube/compare/v0.
|
82
|
+
[unreleased]: https://github.com/randycoulman/jujube/compare/v0.12.0...HEAD
|
83
|
+
[0.12.0]: https://github.com/randycoulman/jujube/compare/v0.11.0...v0.12.0
|
74
84
|
[0.11.0]: https://github.com/randycoulman/jujube/compare/v0.10.0...v0.11.0
|
75
85
|
[0.10.0]: https://github.com/randycoulman/jujube/compare/v0.9.0...v0.10.0
|
76
86
|
[0.9.0]: https://github.com/randycoulman/jujube/compare/v0.8.0...v0.9.0
|
data/README.md
CHANGED
@@ -94,7 +94,6 @@ end
|
|
94
94
|
|
95
95
|
The following job attributes are supported:
|
96
96
|
|
97
|
-
* `description`
|
98
97
|
* `project_type` -- doesn't normally need to be specified. If any `axes` are added to the
|
99
98
|
job, then `project_type` is automatically inferred to be `matrix`
|
100
99
|
* `description`
|
@@ -107,13 +106,14 @@ The following job attributes are supported:
|
|
107
106
|
The following sections and components are supported:
|
108
107
|
|
109
108
|
* `axes`: (`label_expression`, `slave`)
|
109
|
+
* `parameters`: (`string`, `validating_string`)
|
110
110
|
* `properties`: (`throttle`)
|
111
111
|
* `scm`: (`git`, `store`)
|
112
112
|
* `triggers`: (`pollscm`, `pollurl`, `reverse`)
|
113
113
|
* `wrappers`: (`timeout`, `timestamps`)
|
114
114
|
* `builders`: (`shell`)
|
115
115
|
* `publishers`: (`archive`, `cppcheck`, `email_ext`, `fitnesse`, `ircbot`, `junit`,
|
116
|
-
`trigger`, `unittest`, `xunit`)
|
116
|
+
`trigger`, `trigger_parameterized_builds`, `unittest`, `xunit`)
|
117
117
|
* `notifications`: None defined yet
|
118
118
|
|
119
119
|
See [the end-to-end example job](examples/fixtures/endToEnd/endToEnd.job) for example
|
@@ -8,11 +8,18 @@ job "endToEnd" do |j|
|
|
8
8
|
|
9
9
|
j.axes << slave(:arch, %w{i386 amd64})
|
10
10
|
|
11
|
+
j.parameters << string(name: "STRING_PARAM", default: "DEFAULT VALUE", description: "DESCRIPTION")
|
12
|
+
j.parameters << validating_string(name: "VALIDATING",
|
13
|
+
default: "DEFAULT",
|
14
|
+
description: "DESCRIPTION",
|
15
|
+
regex: "REGEX",
|
16
|
+
msg: "MESSAGE")
|
17
|
+
|
18
|
+
j.properties << priority_sorter(priority: 150)
|
11
19
|
j.properties << throttle(max_per_node: 2,
|
12
20
|
max_total: 4,
|
13
21
|
option: "category",
|
14
22
|
categories: %w{CAT1 CAT2})
|
15
|
-
j.properties << priority_sorter(priority: 150)
|
16
23
|
|
17
24
|
j.scm << git(url: "URL", branches: %w{master dev}, wipe_workspace: false)
|
18
25
|
j.scm << store(script: "SCRIPT",
|
@@ -53,6 +60,29 @@ job "endToEnd" do |j|
|
|
53
60
|
j.publishers << ircbot(notify_start: true)
|
54
61
|
j.publishers << junit(results: "RESULTS", keep_long_stdio: false)
|
55
62
|
j.publishers << trigger(project: "PROJECT")
|
63
|
+
j.publishers << trigger_parameterized_builds do |builds|
|
64
|
+
builds << build(project: %w[PROJECT1 PROJECT2],
|
65
|
+
predefined_parameters: { param1: "VALUE1", param2: "VALUE2" },
|
66
|
+
current_parameters: true,
|
67
|
+
node_parameters: false,
|
68
|
+
svn_revision: true,
|
69
|
+
include_upstream: false,
|
70
|
+
git_revision: { combine_queued_commits: true },
|
71
|
+
boolean_parameters: { bool1: true, bool2: false },
|
72
|
+
condition: "FAILED_OR_BETTER",
|
73
|
+
property_file: "FILE.properties",
|
74
|
+
fail_on_missing: true,
|
75
|
+
use_matrix_child_files: false,
|
76
|
+
only_exact_matrix_child_runs: true,
|
77
|
+
file_encoding: "UTF-8",
|
78
|
+
trigger_with_no_params: false,
|
79
|
+
restrict_matrix_project: 'label=="x86"',
|
80
|
+
node_label_name: "LABEL_NAME",
|
81
|
+
node_label: "LABEL")
|
82
|
+
builds << build(project: "SINGLE_PROJECT",
|
83
|
+
predefined_parameters: { param: "VALUE" },
|
84
|
+
git_revision: true)
|
85
|
+
end
|
56
86
|
j.publishers << xunit do |types|
|
57
87
|
types << unittest(pattern: "PATTERN", deleteoutput: false)
|
58
88
|
end
|
@@ -15,7 +15,20 @@
|
|
15
15
|
values:
|
16
16
|
- i386
|
17
17
|
- amd64
|
18
|
+
parameters:
|
19
|
+
- string:
|
20
|
+
name: STRING_PARAM
|
21
|
+
default: "DEFAULT VALUE"
|
22
|
+
description: DESCRIPTION
|
23
|
+
- validating-string:
|
24
|
+
name: VALIDATING
|
25
|
+
default: DEFAULT
|
26
|
+
description: DESCRIPTION
|
27
|
+
regex: REGEX
|
28
|
+
msg: MESSAGE
|
18
29
|
properties:
|
30
|
+
- priority-sorter:
|
31
|
+
priority: 150
|
19
32
|
- throttle:
|
20
33
|
max-per-node: 2
|
21
34
|
max-total: 4
|
@@ -23,8 +36,6 @@
|
|
23
36
|
categories:
|
24
37
|
- CAT1
|
25
38
|
- CAT2
|
26
|
-
- priority-sorter:
|
27
|
-
priority: 150
|
28
39
|
scm:
|
29
40
|
- git:
|
30
41
|
url: URL
|
@@ -100,6 +111,35 @@
|
|
100
111
|
keep-long-stdio: false
|
101
112
|
- trigger:
|
102
113
|
project: PROJECT
|
114
|
+
- trigger-parameterized-builds:
|
115
|
+
- project:
|
116
|
+
- PROJECT1
|
117
|
+
- PROJECT2
|
118
|
+
predefined-parameters: |
|
119
|
+
param1=VALUE1
|
120
|
+
param2=VALUE2
|
121
|
+
current-parameters: true
|
122
|
+
node-parameters: false
|
123
|
+
svn-revision: true
|
124
|
+
include-upstream: false
|
125
|
+
git-revision:
|
126
|
+
combine-queued-commits: true
|
127
|
+
boolean-parameters:
|
128
|
+
bool1: true
|
129
|
+
bool2: false
|
130
|
+
condition: FAILED_OR_BETTER
|
131
|
+
property-file: FILE.properties
|
132
|
+
fail-on-missing: true
|
133
|
+
use-matrix-child-files: false
|
134
|
+
only-exact-matrix-child-runs: true
|
135
|
+
file-encoding: UTF-8
|
136
|
+
trigger-with-no-params: false
|
137
|
+
restrict-matrix-project: label=="x86"
|
138
|
+
node-label-name: LABEL_NAME
|
139
|
+
node-label: LABEL
|
140
|
+
- project: SINGLE_PROJECT
|
141
|
+
predefined-parameters: param=VALUE
|
142
|
+
git-revision: true
|
103
143
|
- xunit:
|
104
144
|
types:
|
105
145
|
- unittest:
|
@@ -26,11 +26,11 @@ class AcceptanceTest < Minitest::Test
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def assert_file_exists(filename)
|
29
|
-
assert(File.
|
29
|
+
assert(File.exist?(filename), "File #{filename} does not exist")
|
30
30
|
end
|
31
31
|
|
32
32
|
def assert_directory_exists(filename)
|
33
|
-
assert(Dir.
|
33
|
+
assert(Dir.exist?(filename), "Directory #{filename} does not exist")
|
34
34
|
end
|
35
35
|
|
36
36
|
def fixture_root
|
data/jujube.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "jujube/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "jujube"
|
@@ -22,7 +22,7 @@ EOF
|
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
|
-
spec.add_development_dependency "rake", "
|
25
|
+
spec.add_development_dependency "rake", ">= 10.1", "< 12"
|
26
26
|
spec.add_development_dependency "minitest", "~> 5.3"
|
27
27
|
spec.add_development_dependency "flexmock", "~> 2.0"
|
28
28
|
spec.add_development_dependency "yard", "~>0.8.7"
|
data/lib/jujube/components.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative "components/macros"
|
2
2
|
require_relative "components/helpers"
|
3
|
+
require_relative "components/axes"
|
3
4
|
require_relative "components/parameters"
|
4
5
|
require_relative "components/properties"
|
5
6
|
require_relative "components/scm"
|
@@ -13,6 +14,7 @@ module Jujube
|
|
13
14
|
# Helper methods for creating jenkins-job-builder components.
|
14
15
|
module Components
|
15
16
|
include Helpers
|
17
|
+
include Axes
|
16
18
|
include Parameters
|
17
19
|
include Properties
|
18
20
|
include Scm
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Jujube
|
2
|
+
module Components
|
3
|
+
|
4
|
+
# Helper methods for creating matrix axes components.
|
5
|
+
module Axes
|
6
|
+
extend Macros
|
7
|
+
|
8
|
+
# Specify a `label-expression` axis for a matrix job.
|
9
|
+
#
|
10
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/project_matrix.html}.
|
11
|
+
#
|
12
|
+
# @param name [Symbol, String] The name of the axis.
|
13
|
+
# @param values [Array<String>] The values of the axis.
|
14
|
+
# @return [Hash] The specification for the axis.
|
15
|
+
def label_expression(name, values)
|
16
|
+
axis(name, values, :label_expression)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Specify a `slave` axis for a matrix job.
|
20
|
+
#
|
21
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/project_matrix.html}.
|
22
|
+
#
|
23
|
+
# @param name [Symbol, String] The name of the axis.
|
24
|
+
# @param values [Array<String>] The values of the axis.
|
25
|
+
# @return [Hash] The specification for the axis.
|
26
|
+
def slave(name, values)
|
27
|
+
axis(name, values, :slave)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Specify an axis for a matrix job.
|
33
|
+
#
|
34
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/project_matrix.html}.
|
35
|
+
#
|
36
|
+
# @param name [Symbol, String] The name of the axis.
|
37
|
+
# @param values [Array<String>] The values of the axis.
|
38
|
+
# @param type [Symbol, String] The axis type.
|
39
|
+
# @return [Hash] The specification for the axis.
|
40
|
+
def axis(name, values, type)
|
41
|
+
options = {type: canonicalize(type), name: canonicalize(name), values: values}
|
42
|
+
to_config("axis", options)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -3,48 +3,25 @@ module Jujube
|
|
3
3
|
|
4
4
|
# Helper methods for creating job parameter components.
|
5
5
|
module Parameters
|
6
|
+
extend Macros
|
6
7
|
|
7
|
-
# @!
|
8
|
-
|
9
|
-
# Specify a `label-expression` axis for a matrix job.
|
8
|
+
# @!method string(options = {})
|
9
|
+
# Specify a `string` parameter for a job.
|
10
10
|
#
|
11
|
-
# See {http://docs.openstack.org/infra/jenkins-job-builder/
|
11
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/parameters.html#parameters.string}.
|
12
12
|
#
|
13
|
-
# @param
|
14
|
-
# @
|
15
|
-
|
16
|
-
def label_expression(name, values)
|
17
|
-
axis(name, values, :label_expression)
|
18
|
-
end
|
13
|
+
# @param options [Hash] The configuration options for the component.
|
14
|
+
# @return [Hash] The specification for the component.
|
15
|
+
standard_component :string
|
19
16
|
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# See {http://docs.openstack.org/infra/jenkins-job-builder/project_matrix.html}.
|
17
|
+
# @!method validating_string(options = {})
|
18
|
+
# Specify a `validating-string` parameter for a job.
|
23
19
|
#
|
24
|
-
#
|
25
|
-
# @param values [Array<String>] The values of the axis.
|
26
|
-
# @return [Hash] The specification for the axis.
|
27
|
-
def slave(name, values)
|
28
|
-
axis(name, values, :slave)
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
# Specify an axis for a matrix job.
|
20
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/parameters.html#parameters.validating-string}.
|
34
21
|
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
|
38
|
-
# @param values [Array<String>] The values of the axis.
|
39
|
-
# @param type [Symbol, String] The axis type.
|
40
|
-
# @return [Hash] The specification for the axis.
|
41
|
-
def axis(name, values, type)
|
42
|
-
options = {type: canonicalize(type), name: canonicalize(name), values: values}
|
43
|
-
to_config("axis", options)
|
44
|
-
end
|
45
|
-
|
46
|
-
# @!endgroup
|
47
|
-
|
22
|
+
# @param options [Hash] The configuration options for the component.
|
23
|
+
# @return [Hash] The specification for the component.
|
24
|
+
standard_component :validating_string
|
48
25
|
end
|
49
26
|
end
|
50
27
|
end
|
@@ -68,6 +68,31 @@ module Jujube
|
|
68
68
|
# @return [Hash] The specification for the component.
|
69
69
|
standard_component :trigger
|
70
70
|
|
71
|
+
# Specify a `trigger-parameterized-builds` publisher for a job.
|
72
|
+
#
|
73
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/publishers.html#publishers.trigger-parameterized-builds}.
|
74
|
+
#
|
75
|
+
# `trigger-parameterized-builds` can trigger multiple sets of builds,
|
76
|
+
# each with their own configuration. Each build specification is added
|
77
|
+
# in a nested configuration block using the {#build} method.
|
78
|
+
#
|
79
|
+
# @example
|
80
|
+
# job "trigger-parameterized-builds-example" do |j|
|
81
|
+
# j.publishers << trigger_parameterized_builds do |builds|
|
82
|
+
# builds << build(project: %w[PROJECT1 PROJECT2], condition: "SUCCESS")
|
83
|
+
# builds << build(project: "SINGLE_PROJECT", current_parameters: true)
|
84
|
+
# end
|
85
|
+
# end
|
86
|
+
#
|
87
|
+
# @yieldparam builds [Array] An array to which nested build specifications
|
88
|
+
# should be added by the block.
|
89
|
+
# @return [Hash] The specification for the component.
|
90
|
+
def trigger_parameterized_builds
|
91
|
+
builds = []
|
92
|
+
yield(builds) if block_given?
|
93
|
+
{"trigger-parameterized-builds" => builds}
|
94
|
+
end
|
95
|
+
|
71
96
|
# Specify an `xunit` publisher for a job.
|
72
97
|
#
|
73
98
|
# See {http://docs.openstack.org/infra/jenkins-job-builder/publishers.html#publishers.xunit}.
|
@@ -90,6 +115,38 @@ module Jujube
|
|
90
115
|
to_config("xunit", nested_options(:types, options, &block))
|
91
116
|
end
|
92
117
|
|
118
|
+
# @!group trigger_parameterized_builds Builds
|
119
|
+
|
120
|
+
# Configure a `build` for a {#trigger_parameterized_builds} publisher.
|
121
|
+
#
|
122
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/publishers.html#publishers.trigger-parameterized-builds}.
|
123
|
+
#
|
124
|
+
# @param options [Hash] The configuration options for the build.
|
125
|
+
# @return [Hash] The specification for the build.
|
126
|
+
def build(options = {})
|
127
|
+
identity = ->(value) { value }
|
128
|
+
transforms = {
|
129
|
+
predefined_parameters: ->(value) do
|
130
|
+
result = value.map { |k,v| "#{k}=#{v}" }.join("\n")
|
131
|
+
value.size > 1 ? result + "\n" : result
|
132
|
+
end,
|
133
|
+
boolean_parameters: ->(value) do
|
134
|
+
Hash[value.map { |k,v| [k.to_s, v] }]
|
135
|
+
end,
|
136
|
+
git_revision: ->(value) do
|
137
|
+
value.is_a?(Hash) ? canonicalize_options(value) : value
|
138
|
+
end
|
139
|
+
}
|
140
|
+
transformed_options = options.map do |k, v|
|
141
|
+
transform = transforms.fetch(k) { identity }
|
142
|
+
[k, transform.call(v)]
|
143
|
+
end
|
144
|
+
|
145
|
+
canonicalize_options(Hash[transformed_options])
|
146
|
+
end
|
147
|
+
|
148
|
+
# @!endgroup
|
149
|
+
|
93
150
|
# @!group xunit Test Types
|
94
151
|
|
95
152
|
# @!method unittest(options = {})
|
@@ -101,6 +158,7 @@ module Jujube
|
|
101
158
|
# @return [Hash] The specification for the test type.
|
102
159
|
named_config :unittest
|
103
160
|
|
161
|
+
# @!endgroup
|
104
162
|
end
|
105
163
|
end
|
106
164
|
end
|
data/lib/jujube/job.rb
CHANGED
@@ -93,6 +93,11 @@ module Jujube
|
|
93
93
|
|
94
94
|
# @!group Sections
|
95
95
|
|
96
|
+
# Sections are listed in the order specified under Module Execution in the
|
97
|
+
# Jenkins Job Builder documentation.
|
98
|
+
#
|
99
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/definition.html#module-execution}.
|
100
|
+
|
96
101
|
# @!method axes
|
97
102
|
# The matrix axes for the job.
|
98
103
|
#
|
@@ -104,6 +109,17 @@ module Jujube
|
|
104
109
|
# @return [Array]
|
105
110
|
section :axes
|
106
111
|
|
112
|
+
# @!method parameters
|
113
|
+
# The parameters for the job.
|
114
|
+
#
|
115
|
+
# Add parameters in the job's configuration block using helper methods defined in
|
116
|
+
# {Components::Parameters}.
|
117
|
+
#
|
118
|
+
# See {http://docs.openstack.org/infra/jenkins-job-builder/parameters.html}.
|
119
|
+
#
|
120
|
+
# @return [Array]
|
121
|
+
section :parameters
|
122
|
+
|
107
123
|
# @!method properties
|
108
124
|
# The Properties for the job.
|
109
125
|
#
|
@@ -194,6 +210,8 @@ module Jujube
|
|
194
210
|
{'job' => config}
|
195
211
|
end
|
196
212
|
|
213
|
+
@registry = nil
|
214
|
+
|
197
215
|
# Keep track of all `Job`s defined during the execution of the passed block.
|
198
216
|
#
|
199
217
|
# This is used during job loading so that no extra syntax is required in the job
|
data/lib/jujube/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
class AxesTest < Minitest::Test
|
4
|
+
include Jujube::Components
|
5
|
+
|
6
|
+
def test_label_expression
|
7
|
+
expected = {"axis" => {"type" => "label-expression", "name" => "arch", "values" => %w{i386 amd64}}}
|
8
|
+
assert_equal(expected, label_expression(:arch, %w{i386 amd64}))
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_slave
|
12
|
+
expected = {"axis" => {"type" => "slave", "name" => "arch", "values" => %w{i386 amd64}}}
|
13
|
+
assert_equal(expected, slave(:arch, %w{i386 amd64}))
|
14
|
+
end
|
15
|
+
end
|
@@ -3,13 +3,13 @@ require_relative "../test_helper"
|
|
3
3
|
class ParametersTest < Minitest::Test
|
4
4
|
include Jujube::Components
|
5
5
|
|
6
|
-
def
|
7
|
-
expected = {"
|
8
|
-
assert_equal(expected,
|
6
|
+
def test_string
|
7
|
+
expected = {"string" => {"name" => "NAME", "default" => "DEFAULT"}}
|
8
|
+
assert_equal(expected, string(name: "NAME", default: "DEFAULT"))
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
expected = {"
|
13
|
-
assert_equal(expected,
|
11
|
+
def test_validating_string
|
12
|
+
expected = {"validating-string" => {"name" => "NAME", "regex" => "REGEX", "msg" => "MESSAGE" }}
|
13
|
+
assert_equal(expected, validating_string(name: "NAME", regex: "REGEX", msg: "MESSAGE"))
|
14
14
|
end
|
15
15
|
end
|
@@ -3,13 +3,13 @@ require_relative "../test_helper"
|
|
3
3
|
class PropertiesTest < Minitest::Test
|
4
4
|
include Jujube::Components
|
5
5
|
|
6
|
-
def test_throttle
|
7
|
-
expected = {"throttle" => {"max-total" => 42, "option" => "category", "categories" => %w{cat1 cat2}}}
|
8
|
-
assert_equal(expected, throttle(max_total: 42, option: "category", categories: %w{cat1 cat2}))
|
9
|
-
end
|
10
|
-
|
11
6
|
def test_priority_sorter
|
12
7
|
expected = {"priority-sorter" => {"priority" => 42}}
|
13
8
|
assert_equal(expected, priority_sorter(priority: 42))
|
14
9
|
end
|
10
|
+
|
11
|
+
def test_throttle
|
12
|
+
expected = {"throttle" => {"max-total" => 42, "option" => "category", "categories" => %w{cat1 cat2}}}
|
13
|
+
assert_equal(expected, throttle(max_total: 42, option: "category", categories: %w{cat1 cat2}))
|
14
|
+
end
|
15
15
|
end
|
@@ -3,6 +3,16 @@ require_relative "../test_helper"
|
|
3
3
|
class PublishersTest < Minitest::Test
|
4
4
|
include Jujube::Components
|
5
5
|
|
6
|
+
def test_archive
|
7
|
+
expected = {"archive" => {"artifacts" => "ARTIFACTS", "latest-only" => true, "allow-empty" => true}}
|
8
|
+
assert_equal(expected, archive(artifacts: "ARTIFACTS", latest_only: true, allow_empty: true))
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_cppcheck
|
12
|
+
expected = {"cppcheck" => {"pattern" => "PATTERN"}}
|
13
|
+
assert_equal(expected, cppcheck(pattern: "PATTERN"))
|
14
|
+
end
|
15
|
+
|
6
16
|
def test_email_ext
|
7
17
|
assert_equal("email-ext", email_ext)
|
8
18
|
end
|
@@ -12,6 +22,11 @@ class PublishersTest < Minitest::Test
|
|
12
22
|
assert_equal(expected, email_ext(recipients: %w{fred barney}.join(", ")))
|
13
23
|
end
|
14
24
|
|
25
|
+
def test_fitnesse
|
26
|
+
expected = {"fitnesse" => {"results" => "RESULTS"}}
|
27
|
+
assert_equal(expected, fitnesse(results: "RESULTS"))
|
28
|
+
end
|
29
|
+
|
15
30
|
def test_ircbot
|
16
31
|
expected = {"ircbot" => {"notify-start" => true}}
|
17
32
|
assert_equal(expected, ircbot(notify_start: true))
|
@@ -22,14 +37,69 @@ class PublishersTest < Minitest::Test
|
|
22
37
|
assert_equal(expected, junit(results: "RESULTS", keep_long_stdio: false))
|
23
38
|
end
|
24
39
|
|
25
|
-
def
|
26
|
-
expected = {"
|
27
|
-
assert_equal(expected,
|
40
|
+
def test_trigger
|
41
|
+
expected = {"trigger" => {"project" => "PROJECT"}}
|
42
|
+
assert_equal(expected, trigger(project: "PROJECT"))
|
28
43
|
end
|
29
44
|
|
30
|
-
def
|
31
|
-
expected = {"
|
32
|
-
|
45
|
+
def test_trigger_parameterized_builds
|
46
|
+
expected = {"trigger-parameterized-builds" => [
|
47
|
+
{"project" => ["PROJECT1", "PROJECT2"], "condition" => "UNSTABLE"}
|
48
|
+
]}
|
49
|
+
actual = trigger_parameterized_builds do |builds|
|
50
|
+
builds << build(project: %w[PROJECT1 PROJECT2], condition: "UNSTABLE")
|
51
|
+
end
|
52
|
+
assert_equal(expected, actual)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_trigger_parameterized_builds_formats_single_predefined_parameter
|
56
|
+
expected = {"trigger-parameterized-builds" => [
|
57
|
+
{"predefined-parameters" => "param=value"}
|
58
|
+
]}
|
59
|
+
actual = trigger_parameterized_builds do |builds|
|
60
|
+
builds << build(predefined_parameters: {param: 'value'})
|
61
|
+
end
|
62
|
+
assert_equal(expected, actual)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_trigger_parameterized_builds_formats_multiiple_predefined_parameters
|
66
|
+
expected = {"trigger-parameterized-builds" => [
|
67
|
+
{"predefined-parameters" => "param1=value1\nparam2=value2\n"}
|
68
|
+
]}
|
69
|
+
actual = trigger_parameterized_builds do |builds|
|
70
|
+
builds << build(predefined_parameters: {param1: 'value1', param2: 'value2'})
|
71
|
+
end
|
72
|
+
assert_equal(expected, actual)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_trigger_parameterized_builds_formats_boolean_parameters
|
76
|
+
expected = {"trigger-parameterized-builds" => [
|
77
|
+
{"boolean-parameters" => {"param_1" => true, "param_2" => false}}
|
78
|
+
]}
|
79
|
+
actual = trigger_parameterized_builds do |builds|
|
80
|
+
builds << build(boolean_parameters: {param_1: true, param_2: false})
|
81
|
+
end
|
82
|
+
assert_equal(expected, actual)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_trigger_parameterized_builds_formats_git_revision_as_boolean
|
86
|
+
expected = {"trigger-parameterized-builds" => [
|
87
|
+
{"git-revision" => true}
|
88
|
+
]}
|
89
|
+
actual = trigger_parameterized_builds do |builds|
|
90
|
+
builds << build(git_revision: true)
|
91
|
+
end
|
92
|
+
assert_equal(expected, actual)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_trigger_parameterized_builds_formats_git_revision_as_nested_hash
|
96
|
+
expected = {"trigger-parameterized-builds" => [
|
97
|
+
{"git-revision" => {"combine-queued-commits" => true}}
|
98
|
+
]}
|
99
|
+
actual = trigger_parameterized_builds do |builds|
|
100
|
+
builds << build(git_revision: {combine_queued_commits: true})
|
101
|
+
end
|
102
|
+
assert_equal(expected, actual)
|
33
103
|
end
|
34
104
|
|
35
105
|
def test_xunit
|
@@ -43,14 +113,4 @@ class PublishersTest < Minitest::Test
|
|
43
113
|
end
|
44
114
|
assert_equal(expected, actual)
|
45
115
|
end
|
46
|
-
|
47
|
-
def test_trigger
|
48
|
-
expected = {"trigger" => {"project" => "PROJECT"}}
|
49
|
-
assert_equal(expected, trigger(project: "PROJECT"))
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_fitnesse
|
53
|
-
expected = {"fitnesse" => {"results" => "RESULTS"}}
|
54
|
-
assert_equal(expected, fitnesse(results: "RESULTS"))
|
55
|
-
end
|
56
116
|
end
|
@@ -3,10 +3,6 @@ require_relative "../test_helper"
|
|
3
3
|
class WrappersTest < Minitest::Test
|
4
4
|
include Jujube::Components
|
5
5
|
|
6
|
-
def test_timestamps
|
7
|
-
assert_equal('timestamps', timestamps)
|
8
|
-
end
|
9
|
-
|
10
6
|
def test_timeout
|
11
7
|
expected = {'timeout' => {'type' => 'elastic', 'fail' => true}}
|
12
8
|
assert_equal(expected, timeout(type: 'elastic', fail: true))
|
@@ -16,4 +12,8 @@ class WrappersTest < Minitest::Test
|
|
16
12
|
expected = {'timeout' => {'elastic-percentage' => 150, 'elastic-default-timeout' => 3}}
|
17
13
|
assert_equal(expected, timeout(elastic_percentage: 150, elastic_default_timeout: 3))
|
18
14
|
end
|
15
|
+
|
16
|
+
def test_timestamps
|
17
|
+
assert_equal('timestamps', timestamps)
|
18
|
+
end
|
19
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jujube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Randy Coulman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,16 +28,22 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.1'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '12'
|
34
37
|
type: :development
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '10.1'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '12'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: minitest
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,6 +119,7 @@ files:
|
|
113
119
|
- jujube.gemspec
|
114
120
|
- lib/jujube.rb
|
115
121
|
- lib/jujube/components.rb
|
122
|
+
- lib/jujube/components/axes.rb
|
116
123
|
- lib/jujube/components/builders.rb
|
117
124
|
- lib/jujube/components/helpers.rb
|
118
125
|
- lib/jujube/components/macros.rb
|
@@ -131,6 +138,7 @@ files:
|
|
131
138
|
- lib/jujube/macros.rb
|
132
139
|
- lib/jujube/utils.rb
|
133
140
|
- lib/jujube/version.rb
|
141
|
+
- test/components/axes_test.rb
|
134
142
|
- test/components/builders_test.rb
|
135
143
|
- test/components/parameters_test.rb
|
136
144
|
- test/components/properties_test.rb
|
@@ -177,6 +185,7 @@ test_files:
|
|
177
185
|
- acceptance/jujube/acceptance_test.rb
|
178
186
|
- acceptance/jujube/end_to_end_test.rb
|
179
187
|
- acceptance/jujube/usage_test.rb
|
188
|
+
- test/components/axes_test.rb
|
180
189
|
- test/components/builders_test.rb
|
181
190
|
- test/components/parameters_test.rb
|
182
191
|
- test/components/properties_test.rb
|