jenkins_pipeline_builder 0.10.8 → 0.10.9

Sign up to get free protection for your applications and to get access to all the features.
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