jenkins_pipeline_builder 0.10.11 → 0.10.12
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 +8 -8
- data/.rubocop.yml +1 -1
- data/lib/jenkins_pipeline_builder.rb +24 -1
- data/lib/jenkins_pipeline_builder/cli/helper.rb +14 -10
- data/lib/jenkins_pipeline_builder/extension_dsl.rb +21 -0
- data/lib/jenkins_pipeline_builder/extension_set.rb +174 -0
- data/lib/jenkins_pipeline_builder/extensions.rb +0 -175
- data/lib/jenkins_pipeline_builder/generator.rb +41 -370
- data/lib/jenkins_pipeline_builder/job.rb +128 -0
- data/lib/jenkins_pipeline_builder/job_collection.rb +112 -0
- data/lib/jenkins_pipeline_builder/module_registry.rb +1 -1
- data/lib/jenkins_pipeline_builder/pull_request.rb +1 -1
- data/lib/jenkins_pipeline_builder/remote_dependencies.rb +112 -0
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/lib/jenkins_pipeline_builder/view.rb +3 -3
- data/spec/lib/jenkins_pipeline_builder/cli/helper_spec.rb +1 -11
- data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +26 -47
- data/spec/lib/jenkins_pipeline_builder/pull_request_spec.rb +1 -1
- data/spec/requests/pipeline_spec.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTM5YTI4ZDgwN2M1YjZjNzQ3MWY5NzliM2U4MTA4NmQ3MjQ5N2Y4NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWFhY2QyYzc5MWQyOGM5MmE3YTM2MzhhNGY5ZWUxODdmMTQ0YjFiMg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NThjODRiYzA3ZDY1NDJmY2NjZWJjOTY3MTY0YmJmMTkyZTllODc4YTc0YmI5
|
10
|
+
MDhhODgyYWM3ZjdlZTQwZmFhY2U4YWJkZTQ4MjYwNzg4YmYyZWQ4ZGZmNjJh
|
11
|
+
NTMzMzJlOTBlOGY4MGViZjFiMWU0Yzk3NjYyNjI2MWQ2YzM0MjI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzhmYjZkNGRlMTVmYTBlNDBkNDRkMjE5YzMzZGIwYzZlMjRkMjI2YjkwYzlm
|
14
|
+
ODY2NGUwMDlkODVlNjcyZmNjNzIzMDk3NWJkMTJkMDdlMGFmZmE1NDE1NGNl
|
15
|
+
NzhkMjRmNmM4MDBkOTIzNTFhMDFkYmViNDc0MzQyNzcxYzNhNGY=
|
data/.rubocop.yml
CHANGED
@@ -30,15 +30,36 @@ require 'jenkins_pipeline_builder/module_registry'
|
|
30
30
|
require 'jenkins_pipeline_builder/pull_request_generator'
|
31
31
|
require 'jenkins_pipeline_builder/pull_request'
|
32
32
|
require 'jenkins_pipeline_builder/view'
|
33
|
+
require 'jenkins_pipeline_builder/job_collection'
|
34
|
+
require 'jenkins_pipeline_builder/job'
|
35
|
+
require 'jenkins_pipeline_builder/remote_dependencies'
|
33
36
|
require 'jenkins_pipeline_builder/generator'
|
34
37
|
|
35
38
|
module JenkinsPipelineBuilder
|
36
39
|
class << self
|
37
|
-
attr_reader :client, :credentials
|
40
|
+
attr_reader :client, :credentials, :debug, :file_mode
|
38
41
|
def generator
|
39
42
|
@_generator ||= Generator.new
|
40
43
|
end
|
41
44
|
|
45
|
+
def file_mode!
|
46
|
+
@file_mode = true
|
47
|
+
end
|
48
|
+
|
49
|
+
def normal_mode!
|
50
|
+
@file_mode = false
|
51
|
+
end
|
52
|
+
|
53
|
+
def debug!
|
54
|
+
@debug = true
|
55
|
+
@client.logger.level = Logger::DEBUG
|
56
|
+
end
|
57
|
+
|
58
|
+
def no_debug!
|
59
|
+
@debug = false
|
60
|
+
@client.logger.level = Logger::INFO
|
61
|
+
end
|
62
|
+
|
42
63
|
def credentials=(creds)
|
43
64
|
@credentials = creds
|
44
65
|
@client = JenkinsApi::Client.new(credentials)
|
@@ -57,6 +78,8 @@ module JenkinsPipelineBuilder
|
|
57
78
|
end
|
58
79
|
JenkinsPipelineBuilder.generator
|
59
80
|
require 'jenkins_pipeline_builder/extensions'
|
81
|
+
require 'jenkins_pipeline_builder/extension_dsl'
|
82
|
+
require 'jenkins_pipeline_builder/extension_set'
|
60
83
|
require 'jenkins_pipeline_builder/extensions/builders'
|
61
84
|
require 'jenkins_pipeline_builder/extensions/job_attributes'
|
62
85
|
require 'jenkins_pipeline_builder/extensions/wrappers'
|
@@ -40,31 +40,35 @@ module JenkinsPipelineBuilder
|
|
40
40
|
# @return [JenkinsPipelineBuilder::Generator] A new Client object
|
41
41
|
#
|
42
42
|
def self.setup(options)
|
43
|
+
creds = process_creds options
|
44
|
+
|
45
|
+
JenkinsPipelineBuilder.credentials = creds
|
46
|
+
generator = JenkinsPipelineBuilder.generator
|
47
|
+
JenkinsPipelineBuilder.debug! if options[:debug]
|
48
|
+
generator
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.process_creds(options)
|
43
52
|
if options[:username] && options[:server] && (options[:password] || options[:password_base64])
|
44
|
-
|
53
|
+
return process_cli_creds(options)
|
45
54
|
elsif options[:creds_file]
|
46
55
|
if options[:creds_file].end_with? 'json'
|
47
|
-
|
56
|
+
return JSON.parse(IO.read(File.expand_path(options[:creds_file])))
|
48
57
|
else
|
49
|
-
|
58
|
+
return YAML.load_file(File.expand_path(options[:creds_file]))
|
50
59
|
end
|
51
60
|
elsif File.exist?("#{ENV['HOME']}/.jenkins_api_client/login.yml")
|
52
|
-
|
61
|
+
return YAML.load_file(
|
53
62
|
File.expand_path("#{ENV['HOME']}/.jenkins_api_client/login.yml", __FILE__)
|
54
63
|
)
|
55
64
|
elsif options[:debug]
|
56
|
-
|
65
|
+
return { username: :foo, password: :bar, server_ip: :baz }
|
57
66
|
else
|
58
67
|
msg = 'Credentials are not set. Please pass them as parameters or'
|
59
68
|
msg << ' set them in the default credentials file'
|
60
69
|
$stderr.puts msg
|
61
70
|
exit 1
|
62
71
|
end
|
63
|
-
|
64
|
-
JenkinsPipelineBuilder.credentials = creds
|
65
|
-
generator = JenkinsPipelineBuilder.generator
|
66
|
-
generator.debug = options[:debug]
|
67
|
-
generator
|
68
72
|
end
|
69
73
|
|
70
74
|
def self.process_cli_creds(options)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
JenkinsPipelineBuilder.registry.entries.each do |type, path|
|
2
|
+
singular_type = type.to_s.singularize
|
3
|
+
define_method singular_type do |&block|
|
4
|
+
set = JenkinsPipelineBuilder::ExtensionSet.new singular_type, path, &block
|
5
|
+
return false unless set.valid?
|
6
|
+
|
7
|
+
JenkinsPipelineBuilder.registry.register([:job, type], set)
|
8
|
+
versions = set.extensions.map(&:min_version)
|
9
|
+
puts "Successfully registered #{set.name} for versions #{versions}" if set.announced
|
10
|
+
true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def job_attribute(&block)
|
15
|
+
set = JenkinsPipelineBuilder::ExtensionSet.new :job_attribute, &block
|
16
|
+
return false unless set.valid?
|
17
|
+
|
18
|
+
JenkinsPipelineBuilder.registry.register([:job], set)
|
19
|
+
versions = set.extensions.map(&:min_version)
|
20
|
+
puts "Successfully registered #{set.name} for versions #{versions}" if set.announced
|
21
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
module JenkinsPipelineBuilder
|
2
|
+
class ExtensionSet
|
3
|
+
SET_METHODS = [
|
4
|
+
:name,
|
5
|
+
:plugin_id,
|
6
|
+
:jenkins_name,
|
7
|
+
:description,
|
8
|
+
:announced,
|
9
|
+
:type
|
10
|
+
]
|
11
|
+
SET_METHODS.each do |method_name|
|
12
|
+
define_method method_name do |value = nil|
|
13
|
+
return settings[method_name] if value.nil?
|
14
|
+
settings[method_name] = value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_accessor :blocks, :extensions, :settings
|
19
|
+
|
20
|
+
def initialize(type, path = nil, &block)
|
21
|
+
@blocks = {}
|
22
|
+
@settings = {}
|
23
|
+
@extensions = []
|
24
|
+
|
25
|
+
instance_eval(&block)
|
26
|
+
|
27
|
+
blocks.each do |version, settings|
|
28
|
+
add_extension type, version, settings, path
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def installed_version=(version)
|
33
|
+
version = version.match(/\d+\.\d+/)
|
34
|
+
@version = Gem::Version.new version
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_extension(type, version, settings, path = nil)
|
38
|
+
ext = JenkinsPipelineBuilder::Extension.new
|
39
|
+
ext.min_version version
|
40
|
+
ext.type type
|
41
|
+
self.settings.merge(settings).each do |key, value|
|
42
|
+
ext.send key, value
|
43
|
+
end
|
44
|
+
|
45
|
+
ext.path path unless ext.path
|
46
|
+
extensions << ext
|
47
|
+
end
|
48
|
+
|
49
|
+
def installed_version
|
50
|
+
return @version if @version
|
51
|
+
reg = JenkinsPipelineBuilder.registry
|
52
|
+
version = reg.versions[settings[:plugin_id]]
|
53
|
+
fail "Plugin #{settings[:name]} is not installed (plugin_id: #{settings[:plugin_id]})" if version.nil?
|
54
|
+
self.installed_version = version
|
55
|
+
@version
|
56
|
+
end
|
57
|
+
|
58
|
+
def extension
|
59
|
+
# TODO: Support multiple xml sections for the native to jenkins plugins
|
60
|
+
return extensions.first if settings[:plugin_id] == 'builtin'
|
61
|
+
|
62
|
+
extension = versions[highest_allowed_version]
|
63
|
+
|
64
|
+
unless extension
|
65
|
+
fail "Can't find version of #{name} lte #{installed_version}, available versions: #{versions.keys.map(&:to_s)}"
|
66
|
+
end
|
67
|
+
extension
|
68
|
+
end
|
69
|
+
|
70
|
+
def merge(other_set)
|
71
|
+
mismatch = []
|
72
|
+
SET_METHODS.each do |method_name|
|
73
|
+
val1 = settings[method_name]
|
74
|
+
val2 = other_set.settings[method_name]
|
75
|
+
mismatch << "The values for #{method_name} do not match '#{val1}' : '#{val2}'" unless val1 == val2
|
76
|
+
end
|
77
|
+
mismatch.each do |error|
|
78
|
+
puts error
|
79
|
+
end
|
80
|
+
fail 'Values did not match, cannot merge extension sets' if mismatch.any?
|
81
|
+
|
82
|
+
blocks.merge other_set.blocks
|
83
|
+
end
|
84
|
+
|
85
|
+
def parameters(params)
|
86
|
+
version = @min_version || '0'
|
87
|
+
|
88
|
+
blocks[version] = {} unless blocks[version]
|
89
|
+
blocks[version][:parameters] = params
|
90
|
+
end
|
91
|
+
|
92
|
+
def xml(path: false, version: '0', &block)
|
93
|
+
if @min_version
|
94
|
+
version = @min_version
|
95
|
+
elsif version != '0'
|
96
|
+
deprecation_warning(settings[:name], 'xml')
|
97
|
+
end
|
98
|
+
unless block
|
99
|
+
fail "no block found for version #{version}" unless blocks.key version
|
100
|
+
return blocks[version][:block]
|
101
|
+
end
|
102
|
+
store_xml version, block, path
|
103
|
+
end
|
104
|
+
|
105
|
+
def version(ver, &block)
|
106
|
+
@min_version = ver
|
107
|
+
yield block
|
108
|
+
end
|
109
|
+
|
110
|
+
[:after, :before].each do |method_name|
|
111
|
+
define_method method_name do |version: '0', &block|
|
112
|
+
if @min_version
|
113
|
+
version = @min_version
|
114
|
+
elsif version != '0'
|
115
|
+
deprecation_warning(settings[:name], method_name)
|
116
|
+
end
|
117
|
+
|
118
|
+
return instance_variable_get(method_name) unless block
|
119
|
+
blocks[version] = {} unless blocks[version]
|
120
|
+
blocks[version][method_name] = block
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def valid?
|
125
|
+
valid = errors.empty?
|
126
|
+
unless valid
|
127
|
+
name ||= 'A plugin with no name provided'
|
128
|
+
puts "Encountered errors while registering #{name}"
|
129
|
+
puts errors.map { |k, v| "#{k}: #{v}" }.join(', ')
|
130
|
+
end
|
131
|
+
valid
|
132
|
+
end
|
133
|
+
|
134
|
+
def errors
|
135
|
+
errors = {}
|
136
|
+
errors['ExtensionSet'] = 'no extensions successfully registered' if extensions.empty?
|
137
|
+
extensions.each do |ext|
|
138
|
+
ver = ext.min_version || 'unknown'
|
139
|
+
errors["#{ext.name} version #{ver}"] = ext.errors unless ext.valid?
|
140
|
+
end
|
141
|
+
errors
|
142
|
+
end
|
143
|
+
|
144
|
+
private
|
145
|
+
|
146
|
+
def highest_allowed_version
|
147
|
+
ordered_version_list.each do |version|
|
148
|
+
return version if version <= installed_version
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def store_xml(version, block, path)
|
153
|
+
if blocks[version]
|
154
|
+
blocks[version].merge!(xml: block, path: path)
|
155
|
+
else
|
156
|
+
blocks[version] = { xml: block, path: path }
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def versions
|
161
|
+
@versions ||= extensions.each_with_object({}) do |ext, hash|
|
162
|
+
hash[Gem::Version.new(ext.min_version)] = ext
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def ordered_version_list
|
167
|
+
versions.keys.sort.reverse
|
168
|
+
end
|
169
|
+
|
170
|
+
def deprecation_warning(name, block)
|
171
|
+
puts "WARNING: #{name} set the version in the #{block} block, this is deprecated. Please use a version block."
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -42,181 +42,6 @@ def job_attribute(&block)
|
|
42
42
|
puts "Successfully registered #{set.name} for versions #{versions}" if set.announced
|
43
43
|
end
|
44
44
|
|
45
|
-
module JenkinsPipelineBuilder
|
46
|
-
class ExtensionSet
|
47
|
-
SET_METHODS = [
|
48
|
-
:name,
|
49
|
-
:plugin_id,
|
50
|
-
:jenkins_name,
|
51
|
-
:description,
|
52
|
-
:announced,
|
53
|
-
:type
|
54
|
-
]
|
55
|
-
SET_METHODS.each do |method_name|
|
56
|
-
define_method method_name do |value = nil|
|
57
|
-
return settings[method_name] if value.nil?
|
58
|
-
settings[method_name] = value
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
attr_accessor :blocks, :extensions, :settings
|
63
|
-
|
64
|
-
def initialize(type, path = nil, &block)
|
65
|
-
@blocks = {}
|
66
|
-
@settings = {}
|
67
|
-
@extensions = []
|
68
|
-
|
69
|
-
instance_eval(&block)
|
70
|
-
|
71
|
-
blocks.each do |version, settings|
|
72
|
-
add_extension type, version, settings, path
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def installed_version=(version)
|
77
|
-
version = version.match(/\d+\.\d+/)
|
78
|
-
@version = Gem::Version.new version
|
79
|
-
end
|
80
|
-
|
81
|
-
def add_extension(type, version, settings, path = nil)
|
82
|
-
ext = JenkinsPipelineBuilder::Extension.new
|
83
|
-
ext.min_version version
|
84
|
-
ext.type type
|
85
|
-
self.settings.merge(settings).each do |key, value|
|
86
|
-
ext.send key, value
|
87
|
-
end
|
88
|
-
|
89
|
-
ext.path path unless ext.path
|
90
|
-
extensions << ext
|
91
|
-
end
|
92
|
-
|
93
|
-
def installed_version
|
94
|
-
return @version if @version
|
95
|
-
reg = JenkinsPipelineBuilder.registry
|
96
|
-
version = reg.versions[settings[:plugin_id]]
|
97
|
-
fail "Plugin #{settings[:name]} is not installed (plugin_id: #{settings[:plugin_id]})" if version.nil?
|
98
|
-
self.installed_version = version
|
99
|
-
@version
|
100
|
-
end
|
101
|
-
|
102
|
-
def extension
|
103
|
-
# TODO: Support multiple xml sections for the native to jenkins plugins
|
104
|
-
return extensions.first if settings[:plugin_id] == 'builtin'
|
105
|
-
|
106
|
-
extension = versions[highest_allowed_version]
|
107
|
-
|
108
|
-
unless extension
|
109
|
-
fail "Can't find version of #{name} lte #{installed_version}, available versions: #{versions.keys.map(&:to_s)}"
|
110
|
-
end
|
111
|
-
extension
|
112
|
-
end
|
113
|
-
|
114
|
-
def merge(other_set)
|
115
|
-
mismatch = []
|
116
|
-
SET_METHODS.each do |method_name|
|
117
|
-
val1 = settings[method_name]
|
118
|
-
val2 = other_set.settings[method_name]
|
119
|
-
mismatch << "The values for #{method_name} do not match '#{val1}' : '#{val2}'" unless val1 == val2
|
120
|
-
end
|
121
|
-
mismatch.each do |error|
|
122
|
-
puts error
|
123
|
-
end
|
124
|
-
fail 'Values did not match, cannot merge extension sets' if mismatch.any?
|
125
|
-
|
126
|
-
blocks.merge other_set.blocks
|
127
|
-
end
|
128
|
-
|
129
|
-
def parameters(params)
|
130
|
-
version = @min_version || '0'
|
131
|
-
|
132
|
-
blocks[version] = {} unless blocks[version]
|
133
|
-
blocks[version][:parameters] = params
|
134
|
-
end
|
135
|
-
|
136
|
-
def xml(path: false, version: '0', &block)
|
137
|
-
if @min_version
|
138
|
-
version = @min_version
|
139
|
-
elsif version != '0'
|
140
|
-
deprecation_warning(settings[:name], 'xml')
|
141
|
-
end
|
142
|
-
unless block
|
143
|
-
fail "no block found for version #{version}" unless blocks.key version
|
144
|
-
return blocks[version][:block]
|
145
|
-
end
|
146
|
-
store_xml version, block, path
|
147
|
-
end
|
148
|
-
|
149
|
-
def version(ver, &block)
|
150
|
-
@min_version = ver
|
151
|
-
yield block
|
152
|
-
end
|
153
|
-
|
154
|
-
[:after, :before].each do |method_name|
|
155
|
-
define_method method_name do |version: '0', &block|
|
156
|
-
if @min_version
|
157
|
-
version = @min_version
|
158
|
-
elsif version != '0'
|
159
|
-
deprecation_warning(settings[:name], method_name)
|
160
|
-
end
|
161
|
-
|
162
|
-
return instance_variable_get(method_name) unless block
|
163
|
-
blocks[version] = {} unless blocks[version]
|
164
|
-
blocks[version][method_name] = block
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def valid?
|
169
|
-
valid = errors.empty?
|
170
|
-
unless valid
|
171
|
-
name ||= 'A plugin with no name provided'
|
172
|
-
puts "Encountered errors while registering #{name}"
|
173
|
-
puts errors.map { |k, v| "#{k}: #{v}" }.join(', ')
|
174
|
-
end
|
175
|
-
valid
|
176
|
-
end
|
177
|
-
|
178
|
-
def errors
|
179
|
-
errors = {}
|
180
|
-
errors['ExtensionSet'] = 'no extensions successfully registered' if extensions.empty?
|
181
|
-
extensions.each do |ext|
|
182
|
-
ver = ext.min_version || 'unknown'
|
183
|
-
errors["#{ext.name} version #{ver}"] = ext.errors unless ext.valid?
|
184
|
-
end
|
185
|
-
errors
|
186
|
-
end
|
187
|
-
|
188
|
-
private
|
189
|
-
|
190
|
-
def highest_allowed_version
|
191
|
-
ordered_version_list.each do |version|
|
192
|
-
return version if version <= installed_version
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
def store_xml(version, block, path)
|
197
|
-
if blocks[version]
|
198
|
-
blocks[version].merge!(xml: block, path: path)
|
199
|
-
else
|
200
|
-
blocks[version] = { xml: block, path: path }
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def versions
|
205
|
-
@versions ||= extensions.each_with_object({}) do |ext, hash|
|
206
|
-
hash[Gem::Version.new(ext.min_version)] = ext
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
def ordered_version_list
|
211
|
-
versions.keys.sort.reverse
|
212
|
-
end
|
213
|
-
|
214
|
-
def deprecation_warning(name, block)
|
215
|
-
puts "WARNING: #{name} set the version in the #{block} block, this is deprecated. Please use a version block."
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
45
|
module JenkinsPipelineBuilder
|
221
46
|
class Extension
|
222
47
|
EXT_METHODS = {
|