jenkins_pipeline_builder 0.10.8 → 0.10.9

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MGYzYTA1YjUyZmViMzkwMTdiODdhZjhlM2YzMmJhYzY1Y2Y0NDlmYg==
4
+ Y2NjMWU0N2Q4MmNhYzVmNGM5YmY5OTBlYjA1YmE0NmIyY2ZlNDU2ZQ==
5
5
  data.tar.gz: !binary |-
6
- YjIzZjFkZGY2ZDk3MGIxYzQ2MTFiMzI1MDllY2RiMTkxOGY2NDljNA==
6
+ YmJmNzUzMDZiOTRmYTZkODY0MTllNDQ2OWM1ZGM4MTYxZGQyYzE3Nw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZjQ1YjI2YzYxZjgxMzRkNzNlOWEzY2VkZDYzOGUxZGRhY2E2YjgyNTExNTBj
10
- YmQ4N2U4ZjA3NWI3NDdkMzU3NzJmZTI3M2RjMDQ1OWY3YjZmYjJjNzM5NzE1
11
- NTZhYjNmYmVlOTdkNzY1YzNiNWM3NTlkY2Q3NWY2ZmQ1ZjZkYjE=
9
+ NmI4ZmY2OWQxNTQ1NDA0NmY2ZGRmNjgyNjg4YjBjZDUwMmI2MDg2MGM4YjI5
10
+ MTcxMWY4ZmU2Y2RhMTIwZjc3MzI2NTRkNWYyYjZmM2M0ZDgzNGJhNmM0ZmIz
11
+ M2Q0YmFiMzFmODg3YWNhMjM0YmUwZjBlZTI5ODQ4MDcyNjZjNDQ=
12
12
  data.tar.gz: !binary |-
13
- ZjI4MTkwNDFhMWYwMDdhMGY4YTBhN2NjZjBkNmE2ODY3MGJhYWIwYjY1MTgx
14
- ZDhhNDQ3YTkzMTA2OWYyY2Q1ZTA5OWU5YmQ4MDdjYmM1YzMzY2RmNzJjMzcx
15
- Y2U4YTAyYmExNjAwMWFiYTVjYzRiYmI1NGJmMzVjZGVkNzdlYzY=
13
+ ZGQ1ODhjNzViZWYwMWViYmVkYmQ5MGYxYjY1ZGU1Y2I0NTE3ZGQzY2Q5NzRm
14
+ OTEwOGZhNTE1YjI1YmI0NDJkZjc3NzJmOWI2OGY1OTlhODFmNjZjZGY5Yzcy
15
+ ODA4MjVjOWFlNWUyZmY4N2I4YjlkY2Q5NjhmMWE3NzY4MzVhNjY=
@@ -42,5 +42,7 @@ automating Job & Pipeline creation from the YAML files checked-in with your appl
42
42
  spec.add_development_dependency 'yard'
43
43
  spec.add_development_dependency 'rspec_junit_formatter'
44
44
  spec.add_development_dependency 'webmock'
45
+ # Eventually, we'll fix all the Complexity that ties us to 0.26.1
46
+ # spec.add_development_dependency 'rubocop'
45
47
  spec.add_development_dependency 'rubocop', '= 0.26.1'
46
48
  end
@@ -28,7 +28,6 @@ module JenkinsPipelineBuilder
28
28
  klass_name = entry.to_s.classify
29
29
  # rubocop:disable Style/AccessModifierIndentation
30
30
  klass = Class.new(Thor) do
31
-
32
31
  if entry == :job_attributes
33
32
  extensions = JenkinsPipelineBuilder.registry.registry[:job].select { |_, x| x.is_a? ExtensionSet }
34
33
  else
@@ -23,35 +23,20 @@ require 'jenkins_pipeline_builder'
23
23
  JenkinsPipelineBuilder.registry.entries.each do |type, path|
24
24
  singular_type = type.to_s.singularize
25
25
  define_method singular_type do |&block|
26
- set = JenkinsPipelineBuilder::ExtensionSet.new
27
- set.instance_eval(&block)
28
- set.blocks.each do |version, settings|
29
- set.add_extension singular_type, version, settings, path
30
- end
31
- unless set.valid?
32
- name = set.name || 'A plugin with no name provided'
33
- puts "Encountered errors while registering #{name}"
34
- puts set.errors.map { |k, v| "#{k}: #{v}" }.join(', ')
35
- return false
36
- end
26
+ set = JenkinsPipelineBuilder::ExtensionSet.new singular_type, path, &block
27
+ return false unless set.valid?
28
+
37
29
  JenkinsPipelineBuilder.registry.register([:job, type], set)
38
30
  versions = set.extensions.map(&:min_version)
39
31
  puts "Successfully registered #{set.name} for versions #{versions}" if set.announced
32
+ true
40
33
  end
41
34
  end
42
35
 
43
36
  def job_attribute(&block)
44
- set = JenkinsPipelineBuilder::ExtensionSet.new
45
- set.instance_eval(&block)
46
- set.blocks.each do |version, settings|
47
- set.add_extension :job_attribute, version, settings
48
- end
49
- unless set.valid?
50
- name = set.name || 'A plugin with no name provided'
51
- puts "Encountered errors while registering #{name}"
52
- puts set.errors.map { |k, v| "#{k}: #{v}" }.join(', ')
53
- return false
54
- end
37
+ set = JenkinsPipelineBuilder::ExtensionSet.new :job_attribute, &block
38
+ return false unless set.valid?
39
+
55
40
  JenkinsPipelineBuilder.registry.register([:job], set)
56
41
  versions = set.extensions.map(&:min_version)
57
42
  puts "Successfully registered #{set.name} for versions #{versions}" if set.announced
@@ -76,10 +61,16 @@ module JenkinsPipelineBuilder
76
61
 
77
62
  attr_accessor :blocks, :extensions, :settings
78
63
 
79
- def initialize
64
+ def initialize(type, path = nil, &block)
80
65
  @blocks = {}
81
66
  @settings = {}
82
67
  @extensions = []
68
+
69
+ instance_eval(&block)
70
+
71
+ blocks.each do |version, settings|
72
+ add_extension type, version, settings, path
73
+ end
83
74
  end
84
75
 
85
76
  def installed_version=(version)
@@ -103,7 +94,6 @@ module JenkinsPipelineBuilder
103
94
  return @version if @version
104
95
  reg = JenkinsPipelineBuilder.registry
105
96
  version = reg.versions[settings[:plugin_id]]
106
- puts reg.versions.inspect if version.nil?
107
97
  fail "Plugin #{settings[:name]} is not installed (plugin_id: #{settings[:plugin_id]})" if version.nil?
108
98
  self.installed_version = version
109
99
  @version
@@ -113,11 +103,12 @@ module JenkinsPipelineBuilder
113
103
  # TODO: Support multiple xml sections for the native to jenkins plugins
114
104
  return extensions.first if settings[:plugin_id] == 'builtin'
115
105
 
116
- ordered_version_list.each do |version|
117
- return versions[version] if version <= installed_version
118
- end
106
+ extension = versions[highest_allowed_version]
119
107
 
120
- fail "Can't find version of #{name} lte #{installed_version}, versions available are #{versions.keys.map(&:to_s)}"
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
121
112
  end
122
113
 
123
114
  def merge(other_set)
@@ -130,7 +121,7 @@ module JenkinsPipelineBuilder
130
121
  mismatch.each do |error|
131
122
  puts error
132
123
  end
133
- fail 'Values did not match, cannot merge exception sets' if mismatch.any?
124
+ fail 'Values did not match, cannot merge extension sets' if mismatch.any?
134
125
 
135
126
  blocks.merge other_set.blocks
136
127
  end
@@ -152,11 +143,7 @@ module JenkinsPipelineBuilder
152
143
  fail "no block found for version #{version}" unless blocks.key version
153
144
  return blocks[version][:block]
154
145
  end
155
- if blocks[version]
156
- blocks[version].merge!(xml: block, path: path)
157
- else
158
- blocks[version] = { xml: block, path: path }
159
- end
146
+ store_xml version, block, path
160
147
  end
161
148
 
162
149
  def version(ver, &block)
@@ -179,7 +166,13 @@ module JenkinsPipelineBuilder
179
166
  end
180
167
 
181
168
  def valid?
182
- errors.empty?
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
183
176
  end
184
177
 
185
178
  def errors
@@ -194,6 +187,20 @@ module JenkinsPipelineBuilder
194
187
 
195
188
  private
196
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
+
197
204
  def versions
198
205
  @versions ||= extensions.each_with_object({}) do |ext, hash|
199
206
  hash[Gem::Version.new(ext.min_version)] = ext
@@ -117,7 +117,6 @@ builder do
117
117
  send('hudson.plugins.parameterizedtrigger.TriggerBuilder', 'plugin' => 'parameterized-trigger') do
118
118
  configs do
119
119
  send('hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig') do
120
-
121
120
  configs do
122
121
  params[:data] = [{ params: '' }] unless params[:data]
123
122
  params[:data].each do |config|
@@ -220,7 +220,6 @@ publisher do
220
220
  excludes params[:excludes] if params[:excludes]
221
221
  latestOnly params[:latest_only] || false
222
222
  allowEmptyArchive params[:allow_empty] || false
223
-
224
223
  end
225
224
  end
226
225
  end
@@ -129,6 +129,14 @@ module JenkinsPipelineBuilder
129
129
 
130
130
  private
131
131
 
132
+ def create_or_update_job(job_name, xml)
133
+ if client.job.exists?(job_name)
134
+ client.job.update(job_name, xml)
135
+ else
136
+ client.job.create(job_name, xml)
137
+ end
138
+ end
139
+
132
140
  # Converts standalone jobs to the format that they have when loaded as part of a project.
133
141
  # This addresses an issue where #pubish_jobs assumes that each job will be wrapped
134
142
  # with in a hash a referenced under a key called :result, which is what happens when
@@ -189,7 +197,7 @@ module JenkinsPipelineBuilder
189
197
  end
190
198
 
191
199
  def compile_pull_request_generator(pull_job, project)
192
- defaults = get_item('global')
200
+ defaults = find_defaults
193
201
  settings = defaults.nil? ? {} : defaults[:value] || {}
194
202
  settings = Compiler.get_settings_bag(project, settings)
195
203
  resolve_job_by_name(pull_job, settings)
@@ -514,11 +522,7 @@ module JenkinsPipelineBuilder
514
522
  return
515
523
  end
516
524
 
517
- if client.job.exists?(job_name)
518
- client.job.update(job_name, xml)
519
- else
520
- client.job.create(job_name, xml)
521
- end
525
+ create_or_update_job job_name, xml
522
526
  end
523
527
 
524
528
  def compile_job_to_xml(job)
@@ -46,8 +46,7 @@ module JenkinsPipelineBuilder
46
46
  git_version = JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version
47
47
  if git_version >= Gem::Version.new(2.0)
48
48
  @jobs.each_value do |j|
49
- j[:value][:scm_params] ||= {}
50
- j[:value][:scm_params][:changelog_to_branch] = { remote: 'origin', branch: 'pr-{{pull_request_number}}' }
49
+ override_git_2_params j
51
50
  end
52
51
  end
53
52
  update_jobs!
@@ -55,6 +54,11 @@ module JenkinsPipelineBuilder
55
54
  change_name!
56
55
  end
57
56
 
57
+ def override_git_2_params(job)
58
+ job[:value][:scm_params] ||= {}
59
+ job[:value][:scm_params][:changelog_to_branch] = { remote: 'origin', branch: 'pr-{{pull_request_number}}' }
60
+ end
61
+
58
62
  # Change the git branch for each job
59
63
  def change_git!
60
64
  @jobs.each_value do |job|
@@ -21,5 +21,5 @@
21
21
  #
22
22
 
23
23
  module JenkinsPipelineBuilder
24
- VERSION = '0.10.8'
24
+ VERSION = '0.10.9'
25
25
  end
@@ -50,7 +50,6 @@ describe JenkinsPipelineBuilder::Compiler do
50
50
  end
51
51
 
52
52
  describe '#enable_blocks' do
53
-
54
53
  it 'generates correct new jobs with true' do
55
54
  item = { enabled: '{{use1}}', parameters: { rootPom: 'path_to_pomasd' } }
56
55
  settings = { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true }
@@ -25,6 +25,28 @@ describe 'builders' do
25
25
  File.open("./out/xml/builder_#{name}.xml", 'w') { |f| @n_xml.write_xml_to f }
26
26
  end
27
27
 
28
+ context 'generic' do
29
+ it 'can register a builder' do
30
+ result = builder do
31
+ name :test_generic
32
+ plugin_id :foo
33
+ xml do
34
+ foo :bar
35
+ end
36
+ end
37
+ JenkinsPipelineBuilder.registry.registry[:job][:builders].delete :test_generic
38
+ expect(result).to be true
39
+ end
40
+
41
+ it 'fails to register an invalid builder' do
42
+ result = builder do
43
+ name :test_generic
44
+ end
45
+ JenkinsPipelineBuilder.registry.registry[:job][:builders].delete :test_generic
46
+ expect(result).to be false
47
+ end
48
+ end
49
+
28
50
  context 'multi_job builder' do
29
51
  before :each do
30
52
  allow(JenkinsPipelineBuilder.client).to receive(:plugin).and_return double(
@@ -40,7 +40,6 @@ describe 'job_attributes' do
40
40
 
41
41
  context 'scm params' do
42
42
  before :each do
43
-
44
43
  builder = Nokogiri::XML::Builder.new { |xml| xml.scm }
45
44
  @n_xml = builder.doc
46
45
 
@@ -69,7 +69,6 @@ describe 'publishers' do
69
69
  root_pom = sonar_nodes.select { |node| node.name == 'rootPom' }
70
70
  expect(root_pom.first.content).to match 'project_war/pom.xml'
71
71
  end
72
-
73
72
  end
74
73
 
75
74
  context 'description_setter' do
@@ -55,9 +55,6 @@ describe 'wrappers' do
55
55
  JenkinsPipelineBuilder.registry.traverse_registry_path('job', { wrappers: { xvfb: {} } }, @n_xml)
56
56
 
57
57
  node = @n_xml.root.xpath('//buildWrappers/org.jenkinsci.plugins.xvfb.XvfbBuildWrapper')
58
- puts node.inspect
59
- t = node.css('timeout')
60
- puts t.inspect
61
58
  expect(node.first).to_not be_nil
62
59
  end
63
60
  end
@@ -119,5 +116,4 @@ describe 'wrappers' do
119
116
  expect(node.first.content).to match 'Node-0.10.24'
120
117
  end
121
118
  end
122
-
123
119
  end
@@ -119,6 +119,7 @@ describe JenkinsPipelineBuilder::Extension do
119
119
  expect(extension.errors).to be_empty
120
120
  expect(extension.valid?).to be true
121
121
  end
122
+
122
123
  it 'returns false if errors is not empty' do
123
124
  expect(extension.errors).to_not be_empty
124
125
  expect(extension.valid?).to be false
@@ -128,7 +129,7 @@ describe JenkinsPipelineBuilder::Extension do
128
129
  end
129
130
 
130
131
  describe JenkinsPipelineBuilder::ExtensionSet do
131
- subject(:set) { JenkinsPipelineBuilder::ExtensionSet.new }
132
+ subject(:set) { JenkinsPipelineBuilder::ExtensionSet.new('foo') {} }
132
133
 
133
134
  before :each do
134
135
  set.name 'example'
@@ -219,9 +220,7 @@ describe JenkinsPipelineBuilder::ExtensionSet do
219
220
  # set.installed_version = '2.0-beta-1'
220
221
  # set.installed_version = '2.0+build.93'
221
222
  # set.installed_version = '2.0.8'
222
-
223
223
  expect(set.extension.min_version).to eq '1.9'
224
-
225
224
  end
226
225
  end
227
226
  end
@@ -258,7 +258,7 @@ describe JenkinsPipelineBuilder::Generator do
258
258
  end
259
259
  end
260
260
  stub_request(:get, 'http://username:password@127.0.0.1:8080/job/test_job/config.xml')
261
- .to_return(status: 200, body: "#{body}", headers: {})
261
+ .to_return(status: 200, body: "#{body}", headers: {})
262
262
  @generator.dump(job_name)
263
263
  expect(File.exist?("#{job_name}.xml")).to be true
264
264
  File.delete("#{job_name}.xml")
@@ -6,7 +6,6 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
6
6
  end
7
7
  describe '#register' do
8
8
  it 'should return item by a specified path' do
9
-
10
9
  registry = JenkinsPipelineBuilder::ModuleRegistry.new
11
10
  set = double
12
11
  allow(set).to receive(:name).and_return :foo
@@ -126,7 +125,6 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
126
125
  end
127
126
  end
128
127
  describe '#initialize' do
129
-
130
128
  end
131
129
 
132
130
  describe '#version' do
@@ -147,23 +145,18 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
147
145
  end
148
146
 
149
147
  describe '#entries' do
150
-
151
148
  end
152
149
 
153
150
  describe '#get' do
154
-
155
151
  end
156
152
 
157
153
  describe '#get_by_path_collection' do
158
-
159
154
  end
160
155
 
161
156
  describe '#traverse_registry_path' do
162
-
163
157
  end
164
158
 
165
159
  describe '#traverse_registry' do
166
-
167
160
  end
168
161
 
169
162
  describe '#execute_extension' do
@@ -203,7 +196,6 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
203
196
  end
204
197
  expect(JenkinsPipelineBuilder.registry.registry[:job][:wrappers]).to have_key :test_name
205
198
  @ext = JenkinsPipelineBuilder.registry.registry[:job][:wrappers][:test_name].extension
206
-
207
199
  end
208
200
 
209
201
  after :each do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_pipeline_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.8
4
+ version: 0.10.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Moochnick
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-02-27 00:00:00.000000000 Z
12
+ date: 2015-03-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri