jenkins_pipeline_builder 0.11.0 → 0.11.1

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
- MWM3M2NlYzkyODVkOTJiMDcxNjgyY2U4MDFhZWRkNDkyMDViNGFmZg==
4
+ ZWQ5ODAzODU5ZTFiZjA1NzkwMDgyMGEyYzFjMDcwNGY5NDQ4MGZlMg==
5
5
  data.tar.gz: !binary |-
6
- MGQ1MDM2NDQ4OGJjMWExNzRiZGI1ZDEwMzAwODcxNDFkMjAyYTE0Yw==
6
+ ZjFkOGIxYTJiMjc0NmViZGNiMTU1NTlmZGViN2Y4ODFiZTgyODBlNA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YTQ2ZjU1YzkwOWNlN2RjNTJjNzhhZGEwNmZmNTI5ZWU5ZjE5MzgwN2YzNjAx
10
- NDIyNzJhMTI2ODkwMDhhOGE2NGNlYTc4OTgxYmZiODZjZjk3NmRhYTNiMWJh
11
- YTRjMTQxMGYyM2U4YTM0N2JmMTg3NGMzMWI4NzdmY2I3ZmVlNWQ=
9
+ OGZkNzk1ZmE2ODZmZTg4MzhiMTBiZDNlMzNkY2E1OGM4N2QzZDJmNzA0MTRi
10
+ Zjk5ZGRiNjJkNjhjNzYzNDY1OGY4MmRlMTE5YzliYjBmMjY3OTg4NWViOTE2
11
+ NmIxN2JiZjY3NmVkMWUzNzFiZjEyMjcyNDU5NmYxMmIyODdmYWM=
12
12
  data.tar.gz: !binary |-
13
- ZDE3OGY2ZDU3N2VjOTExN2MzNDYyZjEyYjU2MmZmM2I3ZmFkY2QxYzY4OGIw
14
- YzY0NDZjZTczNWMzMGQ5NWFiYzY0N2Q4ZjUxYTMwYzY3ZTZjY2U4N2M2ZjNl
15
- YmNiNjk2OTI4YmViODEyNWMxMzYxYTIzZjU3Y2I1YWQxMGU1MWE=
13
+ MzdiMDJkMWMyOTg1ZjI5MGQwYTllZTIxOWMwNTNjNjU4NWI4MjhmMmUxNmQ2
14
+ MTFmOTdlNDgyYjE0Nzc2M2U5NzE2ODIwMDI3NzgyMjQ2MjBmYWU5MjA1ZGMx
15
+ NTNiMTA5Y2UwZmQyOTdmMTdjOTg1NmZjYTM4NGJlODBjMTY4MDY=
@@ -1,13 +1,11 @@
1
1
  #######
2
2
  # WIP These should all go back to defaults at some point
3
- Metrics/CyclomaticComplexity:
4
- Max: 9
5
- Metrics/PerceivedComplexity:
6
- Max: 11
3
+ Metrics/AbcSize:
4
+ Max: 22
7
5
  Metrics/MethodLength:
8
6
  Max: 20
9
7
  Metrics/ClassLength:
10
- Max: 175
8
+ Max: 180
11
9
 
12
10
  #######
13
11
  # Finalized settings
@@ -17,7 +15,6 @@ Metrics/LineLength:
17
15
  Exclude:
18
16
  - 'spec/lib/jenkins_pipeline_builder/compiler_spec.rb'
19
17
  - 'spec/lib/jenkins_pipeline_builder/view_spec.rb'
20
- - 'spec/lib/jenkins_pipeline_builder/pull_request_spec.rb'
21
18
  - 'spec/lib/jenkins_pipeline_builder/pull_request_generator_spec.rb'
22
19
  - 'lib/jenkins_pipeline_builder/extensions/**/*'
23
20
 
@@ -15,8 +15,8 @@ automating Job & Pipeline creation from the YAML files checked-in with your appl
15
15
  spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files`.split($RS)
18
- spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(/^(test|spec|features)\//)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = 'true'
@@ -42,7 +42,5 @@ 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'
47
- spec.add_development_dependency 'rubocop', '= 0.26.1'
45
+ spec.add_development_dependency 'rubocop'
48
46
  end
@@ -49,20 +49,14 @@ module JenkinsPipelineBuilder
49
49
  end
50
50
 
51
51
  def self.process_creds(options)
52
- if options[:username] && options[:server] && (options[:password] || options[:password_base64])
53
- return process_cli_creds(options)
52
+ if valid_cli_creds? options
53
+ process_cli_creds(options)
54
54
  elsif options[:creds_file]
55
- if options[:creds_file].end_with? 'json'
56
- return JSON.parse(IO.read(File.expand_path(options[:creds_file])))
57
- else
58
- return YAML.load_file(File.expand_path(options[:creds_file]))
59
- end
55
+ process_creds_file options[:creds_file]
60
56
  elsif File.exist?("#{ENV['HOME']}/.jenkins_api_client/login.yml")
61
- return YAML.load_file(
62
- File.expand_path("#{ENV['HOME']}/.jenkins_api_client/login.yml", __FILE__)
63
- )
57
+ YAML.load_file(File.expand_path("#{ENV['HOME']}/.jenkins_api_client/login.yml", __FILE__))
64
58
  elsif options[:debug]
65
- return { username: :foo, password: :bar, server_ip: :baz }
59
+ { username: :foo, password: :bar, server_ip: :baz }
66
60
  else
67
61
  msg = 'Credentials are not set. Please pass them as parameters or'
68
62
  msg << ' set them in the default credentials file'
@@ -71,6 +65,18 @@ module JenkinsPipelineBuilder
71
65
  end
72
66
  end
73
67
 
68
+ def self.valid_cli_creds?(options)
69
+ options[:username] && options[:server] && (options[:password] || options[:password_base64])
70
+ end
71
+
72
+ def self.process_creds_file(file)
73
+ if file.end_with? 'json'
74
+ return JSON.parse(IO.read(File.expand_path(file)))
75
+ else
76
+ return YAML.load_file(File.expand_path(file))
77
+ end
78
+ end
79
+
74
80
  def self.process_cli_creds(options)
75
81
  creds = {}.with_indifferent_access.merge options
76
82
  if creds[:server] =~ Resolv::AddressRegex
@@ -61,7 +61,7 @@ module JenkinsPipelineBuilder
61
61
 
62
62
  def handle_enable(item, settings)
63
63
  return true, item unless item.is_a? Hash
64
- if item.key?(:enabled) && item.key?(:parameters) && item.length == 2
64
+ if enable_block_present? item
65
65
  enabled_switch = resolve_value(item[:enabled], settings)
66
66
  return [true, {}] if enabled_switch == 'false'
67
67
  if enabled_switch != 'true'
@@ -80,6 +80,10 @@ module JenkinsPipelineBuilder
80
80
 
81
81
  private
82
82
 
83
+ def enable_block_present?(item)
84
+ item.key?(:enabled) && item.key?(:parameters) && item.length == 2
85
+ end
86
+
83
87
  def compile_string(item, settings)
84
88
  errors = {}
85
89
  new_value = resolve_value(item, settings)
@@ -65,11 +65,7 @@ module JenkinsPipelineBuilder
65
65
 
66
66
  n_builders = n_xml.xpath(path).first
67
67
  n_builders.instance_exec(value, &before) if before
68
- Nokogiri::XML::Builder.with(n_builders) do |builder|
69
- include_helper value, builder
70
- helper.extension = self
71
- builder.instance_exec helper, &xml
72
- end
68
+ build_extension_xml n_builders, value
73
69
  n_builders.instance_exec(value, &after) if after
74
70
  true
75
71
  end
@@ -93,6 +89,14 @@ module JenkinsPipelineBuilder
93
89
 
94
90
  private
95
91
 
92
+ def build_extension_xml(n_builders, value)
93
+ Nokogiri::XML::Builder.with(n_builders) do |builder|
94
+ include_helper value, builder
95
+ helper.extension = self
96
+ builder.instance_exec helper, &xml
97
+ end
98
+ end
99
+
96
100
  def include_helper(params, builder)
97
101
  klass = "#{name.to_s.camelize}Helper".safe_constantize
98
102
  klass ||= ExtensionHelper
@@ -238,7 +238,6 @@ job_attribute do
238
238
  send('hudson.model.ParametersDefinitionProperty') do
239
239
  parameterDefinitions do
240
240
  params.each do |param|
241
-
242
241
  send(params.param_type param) do
243
242
  name param[:name]
244
243
  description param[:description]
@@ -108,7 +108,6 @@ publisher do
108
108
  end
109
109
  end
110
110
  end
111
-
112
111
  end
113
112
 
114
113
  publisher do
@@ -328,7 +327,6 @@ publisher do
328
327
  announced false
329
328
 
330
329
  xml do |params|
331
-
332
330
  send('hudson.plugins.brakeman.BrakemanPublisher', 'plugin' => 'brakeman') do
333
331
  healthy params[:healthy] || ''
334
332
  unHealthy params[:unhealthy] || ''
@@ -356,7 +354,6 @@ publisher do
356
354
  doNotResolveRelativePaths { text(params[:do_not_resolve_relative_paths] || false) }
357
355
  outputFile { text(params[:output_file] || 'brakeman-output.tabs') }
358
356
  end
359
-
360
357
  end
361
358
  end
362
359
 
@@ -381,7 +378,6 @@ publisher do
381
378
 
382
379
  xml do |params|
383
380
  send('hudson.plugins.cobertura.CoberturaPublisher', 'plugin' => 'cobertura') do
384
-
385
381
  coberturaReportFile params[:cobertura_report_file]
386
382
  onlyStable params[:only_stable] || false
387
383
  failUnhealthy params[:fail_unhealthy] || false
@@ -399,7 +395,6 @@ publisher do
399
395
  sourceEncoding params[:source_encoding] || 'ASCII'
400
396
  end
401
397
  end
402
-
403
398
  end
404
399
 
405
400
  publisher do
@@ -417,7 +412,6 @@ publisher do
417
412
 
418
413
  configuredTriggers do
419
414
  params[:triggers].each do |trigger_params|
420
-
421
415
  trigger_type = trigger_params[:type].to_sym
422
416
  defaults = params.trigger_defaults[trigger_type]
423
417
 
@@ -507,7 +501,6 @@ publisher do
507
501
  validateNumberOfTests params[:validate_number_tests] || false
508
502
  end
509
503
  end
510
-
511
504
  end
512
505
 
513
506
  publisher do
@@ -174,7 +174,7 @@ wrapper do
174
174
  repositoryKey wrapper[:'release-repo']
175
175
  snapshotsRepositoryKey wrapper.fetch(:'snapshot-repo', wrapper[:'release-repo'])
176
176
  end
177
- deployArtifacts wrapper.fetch(:'deploy', true)
177
+ deployArtifacts wrapper.fetch(:deploy, true)
178
178
  artifactDeploymentPatterns do
179
179
  includePatterns
180
180
  excludePatterns
@@ -49,33 +49,28 @@ module JenkinsPipelineBuilder
49
49
  def bootstrap(path, project_name = nil)
50
50
  logger.info "Bootstrapping pipeline from path #{path}"
51
51
  job_collection.load_from_path(path)
52
- errors = {}
52
+ job_collection.remote_dependencies.cleanup
53
+
53
54
  if job_collection.projects.any?
54
55
  errors = publish_project(project_name)
55
56
  else
56
57
  errors = publish_jobs(job_collection.standalone_jobs)
57
58
  end
58
- errors.each do |k, v|
59
- logger.error "Encountered errors compiling: #{k}:"
60
- logger.error v
61
- end
59
+ print_compile_errors errors
62
60
  errors
63
61
  end
64
62
 
65
63
  def pull_request(path, project_name)
66
64
  logger.info "Pull Request Generator Running from path #{path}"
67
65
  job_collection.load_from_path(path)
66
+ job_collection.remote_dependencies.cleanup
68
67
  logger.info "Project: #{job_collection.projects}"
69
68
  errors = {}
70
69
  job_collection.projects.each do |project|
71
70
  next unless project[:name] == project_name || project_name.nil?
72
71
  errors.merge! process_pull_request_project project
73
-
74
- end
75
- errors.each do |k, v|
76
- logger.error "Encountered errors compiling: #{k}:"
77
- logger.error v
78
72
  end
73
+ print_compile_errors errors
79
74
  errors.empty?
80
75
  end
81
76
 
@@ -97,7 +92,7 @@ module JenkinsPipelineBuilder
97
92
  fail "Failed to locate job by name '#{name}'" if job.nil?
98
93
  job_value = job[:value]
99
94
  logger.debug "Compiling job #{name}"
100
- compiler = Compiler.new self
95
+ compiler = JenkinsPipelineBuilder::Compiler.new self
101
96
  success, payload = compiler.compile(job_value, settings)
102
97
  [success, payload]
103
98
  end
@@ -105,15 +100,36 @@ module JenkinsPipelineBuilder
105
100
  def resolve_project(project)
106
101
  defaults = job_collection.defaults
107
102
  settings = defaults.nil? ? {} : defaults[:value] || {}
108
- compiler = Compiler.new self
103
+ compiler = JenkinsPipelineBuilder::Compiler.new self
109
104
  project[:settings] = compiler.get_settings_bag(project, settings) unless project[:settings]
110
- project_body = project[:value]
111
105
 
106
+ errors = process_project project
107
+ print_project_errors errors
108
+ return false, 'Encountered errors exiting' unless errors.empty?
109
+
110
+ [true, project]
111
+ end
112
+
113
+ private
114
+
115
+ def process_project(project)
116
+ project_body = project[:value]
112
117
  jobs = prepare_jobs(project_body[:jobs]) if project_body[:jobs]
113
118
  logger.info project
114
119
  process_job_changes(jobs)
115
120
  errors = process_jobs(jobs, project)
116
121
  errors = process_views(project_body[:views], project, errors) if project_body[:views]
122
+ errors
123
+ end
124
+
125
+ def print_compile_errors(errors)
126
+ errors.each do |k, v|
127
+ logger.error "Encountered errors compiling: #{k}:"
128
+ logger.error v
129
+ end
130
+ end
131
+
132
+ def print_project_errors(errors)
117
133
  errors.each do |k, v|
118
134
  puts "Encountered errors processing: #{k}:"
119
135
  v.each do |key, error|
@@ -121,13 +137,8 @@ module JenkinsPipelineBuilder
121
137
  puts " #{error.inspect}"
122
138
  end
123
139
  end
124
- return false, 'Encountered errors exiting' unless errors.empty?
125
-
126
- [true, project]
127
140
  end
128
141
 
129
- private
130
-
131
142
  def process_pull_request_project(project)
132
143
  logger.info "Using Project #{project}"
133
144
 
@@ -187,6 +198,13 @@ module JenkinsPipelineBuilder
187
198
  errors
188
199
  end
189
200
 
201
+ def create_views(views)
202
+ views.each do |v|
203
+ compiled_view = v[:result]
204
+ view.create(compiled_view)
205
+ end
206
+ end
207
+
190
208
  def publish_project(project_name, errors = {})
191
209
  job_collection.projects.each do |project|
192
210
  next unless project_name.nil? || project[:name] == project_name
@@ -200,10 +218,7 @@ module JenkinsPipelineBuilder
200
218
 
201
219
  errors = publish_jobs(compiled_project[:value][:jobs]) if compiled_project[:value][:jobs]
202
220
  next unless compiled_project[:value][:views]
203
- compiled_project[:value][:views].each do |v|
204
- compiled_view = v[:result]
205
- view.create(compiled_view)
206
- end
221
+ create_views compiled_project[:value][:views]
207
222
  end
208
223
  errors
209
224
  end
@@ -61,7 +61,6 @@ module JenkinsPipelineBuilder
61
61
  else
62
62
  load_file(path, remote)
63
63
  end
64
- remote_dependencies.cleanup if remote
65
64
  end
66
65
 
67
66
  private
@@ -94,19 +94,28 @@ module JenkinsPipelineBuilder
94
94
  next
95
95
  end
96
96
  reg_value = registry[key]
97
- if reg_value.is_a? ExtensionSet
98
- ext = reg_value.extension
99
- logger.debug "Using #{ext.type} #{ext.name} version #{ext.min_version}"
100
- success = ext.execute value, n_xml
101
- fail 'Encountered errors compiling the xml' unless success
102
- elsif value.is_a? Hash
103
- traverse_registry reg_value, value, n_xml, true
104
- elsif value.is_a? Array
105
- value.each do |v|
106
- traverse_registry reg_value, v, n_xml, true
107
- end
97
+ execute_registry_value reg_value, value, n_xml
98
+ end
99
+ end
100
+
101
+ private
102
+
103
+ def execute_registry_value(reg_value, value, n_xml)
104
+ if reg_value.is_a? ExtensionSet
105
+ execute_extension reg_value.extension, value, n_xml
106
+ elsif value.is_a? Hash
107
+ traverse_registry reg_value, value, n_xml, true
108
+ elsif value.is_a? Array
109
+ value.each do |v|
110
+ traverse_registry reg_value, v, n_xml, true
108
111
  end
109
112
  end
110
113
  end
114
+
115
+ def execute_extension(ext, value, n_xml)
116
+ logger.debug "Using #{ext.type} #{ext.name} version #{ext.min_version}"
117
+ success = ext.execute value, n_xml
118
+ fail 'Encountered errors compiling the xml' unless success
119
+ end
111
120
  end
112
121
  end
@@ -43,7 +43,7 @@ module JenkinsPipelineBuilder
43
43
  find_old_pull_requests
44
44
  generate_pull_requests
45
45
 
46
- @generator.job_collection.collection.merge! @jobs
46
+ collection.merge! @jobs
47
47
  @errors.merge! create_jobs
48
48
 
49
49
  purge_jobs
@@ -90,14 +90,18 @@ module JenkinsPipelineBuilder
90
90
  errors
91
91
  end
92
92
 
93
+ def collection
94
+ generator.job_collection.collection
95
+ end
96
+
93
97
  def filter_jobs
94
98
  jobs = {}
95
99
  pull_jobs = pull_generator[:value][:jobs] || []
96
100
  pull_jobs.each do |job|
97
101
  if job.is_a? String
98
- jobs[job.to_s] = generator.job_collection.collection[job.to_s]
102
+ jobs[job.to_s] = collection[job.to_s]
99
103
  else
100
- jobs[job.keys.first.to_s] = generator.job_collection.collection[job.keys.first.to_s]
104
+ jobs[job.keys.first.to_s] = collection[job.keys.first.to_s]
101
105
  end
102
106
  end
103
107
  fail 'No jobs found for pull request' if jobs.empty?
@@ -121,7 +125,7 @@ module JenkinsPipelineBuilder
121
125
  pull_job = nil
122
126
  project_jobs.each do |job|
123
127
  job = job.keys.first if job.is_a? Hash
124
- job = generator.job_collection.collection[job.to_s]
128
+ job = collection[job.to_s]
125
129
 
126
130
  pull_job = job if job[:value][:job_type] == 'pull_request_generator'
127
131
  end
@@ -18,11 +18,7 @@ module JenkinsPipelineBuilder
18
18
  end
19
19
  end
20
20
 
21
- # TODO: Look into remote jobs not working according to sinan
22
-
23
21
  def load(dependencies)
24
- ### Load remote YAML
25
- # Download Tar.gz
26
22
  dependencies.each do |source|
27
23
  source = source[:source]
28
24
  url = source[:url]
@@ -37,13 +33,7 @@ module JenkinsPipelineBuilder
37
33
  end
38
34
 
39
35
  path = File.expand_path(file, Dir.getwd)
40
- # Load templates recursively
41
- unless source[:templates]
42
- logger.info 'No specific template specified'
43
- # Try to load the folder or the pipeline folder
44
- path = File.join(path, 'pipeline') if Dir.entries(path).include? 'pipeline'
45
- return job_collection.load_from_path(path, true)
46
- end
36
+ return load_default_path path unless source[:templates]
47
37
 
48
38
  load_templates(path, source[:templates])
49
39
  end
@@ -51,29 +41,50 @@ module JenkinsPipelineBuilder
51
41
 
52
42
  private
53
43
 
44
+ def load_default_path(path)
45
+ logger.info 'No specific template specified'
46
+ path = File.join(path, 'pipeline') if Dir.entries(path).include? 'pipeline'
47
+ job_collection.load_from_path(path, true)
48
+ end
49
+
54
50
  def load_template(path, template)
55
51
  # If we specify what folder the yaml is in, load that
52
+ path = template_path path, template
53
+
54
+ if File.directory?(path)
55
+ logger.info "Loading from #{path}"
56
+ job_collection.load_from_path(path, true)
57
+ true
58
+ else
59
+ false
60
+ end
61
+ end
62
+
63
+ def highest_template_version(path)
64
+ folders = Dir.entries(path)
65
+ highest = folders.max
66
+ highest = highest unless highest == 0
67
+ highest
68
+ end
69
+
70
+ def use_newest_version?(template, path)
71
+ (template[:version].nil? || template[:version] == 'newest') && File.directory?(path)
72
+ end
73
+
74
+ def template_path(path, template)
56
75
  if template[:folder]
57
76
  path = File.join(path, template[:folder])
58
77
  else
59
78
  path = File.join(path, template[:name]) unless template[:name] == 'default'
60
79
  # If we are looking for the newest version or no version was set
61
- if (template[:version].nil? || template[:version] == 'newest') && File.directory?(path)
62
- folders = Dir.entries(path)
63
- highest = folders.max
64
- template[:version] = highest unless highest == 0
80
+ if use_newest_version? template, path
81
+ template[:version] = highest_template_version path
65
82
  end
66
83
  path = File.join(path, template[:version]) unless template[:version].nil?
67
84
  path = File.join(path, 'pipeline')
68
85
  end
69
86
 
70
- if File.directory?(path)
71
- logger.info "Loading from #{path}"
72
- job_collection.load_from_path(path, true)
73
- true
74
- else
75
- false
76
- end
87
+ path
77
88
  end
78
89
 
79
90
  def download_yaml(url, file, remote_opts = {})
@@ -21,5 +21,5 @@
21
21
  #
22
22
 
23
23
  module JenkinsPipelineBuilder
24
- VERSION = '0.11.0'
24
+ VERSION = '0.11.1'
25
25
  end
@@ -96,6 +96,14 @@ module JenkinsPipelineBuilder
96
96
  end
97
97
 
98
98
  def post_params(params)
99
+ payload = post_payload params
100
+ payload.merge!('filterQueue' => 'on') if params[:filter_queue]
101
+ payload.merge!('filterExecutors' => 'on') if params[:filter_executors]
102
+ payload.merge!('useincluderegex' => 'on', 'includeRegex' => params[:regex]) if params[:regex]
103
+ payload
104
+ end
105
+
106
+ def post_payload(params)
99
107
  statuses = { 'enabled_jobs_only' => '1', 'disabled_jobs_only' => '2' }
100
108
 
101
109
  json = {
@@ -106,36 +114,27 @@ module JenkinsPipelineBuilder
106
114
  'columns' => get_columns(params[:type])
107
115
  }
108
116
  json.merge!('groupingRules' => params[:groupingRules]) if params[:groupingRules]
109
- payload = {
117
+
118
+ {
110
119
  'name' => params[:name],
111
120
  'mode' => get_mode(params[:type]),
112
121
  'description' => params[:description],
113
122
  'statusFilter' => statuses.fetch(params[:status_filter], ''),
114
123
  'json' => json.to_json
115
124
  }
116
- payload.merge!('filterQueue' => 'on') if params[:filter_queue]
117
- payload.merge!('filterExecutors' => 'on') if params[:filter_executors]
118
- payload.merge!('useincluderegex' => 'on', 'includeRegex' => params[:regex]) if params[:regex]
119
- payload
120
125
  end
121
126
 
122
127
  def get_mode(type)
123
- case type
124
- when 'listview'
125
- 'hudson.model.ListView'
126
- when 'myview'
127
- 'hudson.model.MyView'
128
- when 'nestedView'
129
- 'hudson.plugins.nested_view.NestedView'
130
- when 'categorizedView'
131
- 'org.jenkinsci.plugins.categorizedview.CategorizedJobsView'
132
- when 'dashboardView'
133
- 'hudson.plugins.view.dashboard.Dashboard'
134
- when 'multijobView'
135
- 'com.tikal.jenkins.plugins.multijob.views.MultiJobView'
136
- else
137
- fail "Type #{type} is not supported by Jenkins."
138
- end
128
+ types = {
129
+ 'listview' => 'hudson.model.ListView',
130
+ 'myview' => 'hudson.model.MyView',
131
+ 'nestedView' => 'hudson.plugins.nested_view.NestedView',
132
+ 'categorizedView' => 'org.jenkinsci.plugins.categorizedview.CategorizedJobsView',
133
+ 'dashboardView' => 'hudson.plugins.view.dashboard.Dashboard',
134
+ 'multijobView' => 'com.tikal.jenkins.plugins.multijob.views.MultiJobView'
135
+ }
136
+ fail "Type #{type} is not supported by Jenkins." unless types.keys.include? type
137
+ types[type]
139
138
  end
140
139
 
141
140
  # Creates a new empty view of the given type
@@ -139,7 +139,7 @@ describe JenkinsPipelineBuilder::Compiler do
139
139
  it 'fails when value not found' do
140
140
  item = { enabled: '{{use_fail}}', parameters: { rootPom: 'path_to_pomasd' } }
141
141
  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 }
142
- success, _ = compiler.handle_enable(item, settings)
142
+ success, _item = compiler.handle_enable(item, settings)
143
143
  expect(success).to be false
144
144
  end
145
145
 
@@ -0,0 +1,15 @@
1
+ - defaults:
2
+ name: global
3
+ description: 'Test pipeline for generator_spec.rb'
4
+
5
+ - dependencies:
6
+ - source:
7
+ url: 'spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline_nested/jobs.tar.gz'
8
+ templates:
9
+ - name: test_temp
10
+
11
+ - project:
12
+ name: TemplatePipeline_nested
13
+ jobs:
14
+ - '{{name}}-10'
15
+ - '{{name}}-11'
@@ -61,8 +61,7 @@ describe JenkinsPipelineBuilder::Generator do
61
61
 
62
62
  def bootstrap(fixture_path, job_name)
63
63
  JenkinsPipelineBuilder.debug!
64
- errors = @generator.bootstrap(fixture_path, job_name)
65
- errors
64
+ @generator.bootstrap(fixture_path, job_name)
66
65
  end
67
66
 
68
67
  def fixture_path(fixture)
@@ -84,6 +83,11 @@ describe JenkinsPipelineBuilder::Generator do
84
83
  expect(errors).to be_empty
85
84
  end
86
85
 
86
+ it 'produces no errors while creating pipeline TemplatePipeline_nested' do
87
+ errors = bootstrap(fixture_path('template_pipeline_nested'), 'TemplatePipeline_nested')
88
+ expect(errors).to be_empty
89
+ end
90
+
87
91
  it 'loads extensions in remote dependencies' do
88
92
  errors = bootstrap(fixture_path('template_pipeline'), 'TemplatePipeline')
89
93
  expect(errors).to be_empty
@@ -135,7 +135,7 @@ describe JenkinsPipelineBuilder::Job do
135
135
  it 'fails on an unknown type' do
136
136
  job = described_class.new job_type: 'unknonw', name: 'asdf'
137
137
 
138
- success, _ = job.to_xml
138
+ success, _payload = job.to_xml
139
139
  expect(success).to be false
140
140
  end
141
141
  end
@@ -8,7 +8,6 @@ describe JenkinsPipelineBuilder::PullRequest do
8
8
  after :each do
9
9
  JenkinsPipelineBuilder.registry.registry[:job][:scm_params].clear_installed_version
10
10
  end
11
- let(:pull_request_class) { JenkinsPipelineBuilder::PullRequest }
12
11
  let(:project) do
13
12
  {
14
13
  name: 'pull_req_test',
@@ -19,6 +18,7 @@ describe JenkinsPipelineBuilder::PullRequest do
19
18
  }
20
19
  }
21
20
  end
21
+ let(:value) { { jobs: ['{{name}}-10', '{{name}}-11'] } }
22
22
  let(:pull_request) do
23
23
  {
24
24
  name: '{{name}}-00',
@@ -28,15 +28,45 @@ describe JenkinsPipelineBuilder::PullRequest do
28
28
  git_url: 'https://www.github.com/',
29
29
  git_repo: 'jenkins_pipeline_builder',
30
30
  git_org: 'constantcontact',
31
- value: {
32
- jobs: ['{{name}}-10', '{{name}}-11']
33
- },
31
+ value: value,
34
32
  builders: [
35
- { shell_command: 'generate -v || gem install jenkins_pipeline_builder\ngenerate pipeline -c config/{{login_config}} pull_request pipeline/ {{name}}\n' }
33
+ { shell_command: 'echo "shell command"' }
36
34
  ]
37
35
  }
38
36
  end
37
+ let(:job1) { '{{name}}-10' }
38
+ let(:job2) { '{{name}}-11' }
39
39
  let(:jobs) do
40
+ {
41
+ job1 => {
42
+ name: job1,
43
+ type: :'job-template',
44
+ value: {
45
+ name: job1,
46
+ description: '{{description}}',
47
+ publishers: [{ downstream: { project: "{{job@#{job2}}}" } }]
48
+ }
49
+ },
50
+ job2 => {
51
+ name: job2,
52
+ type: :'job-template',
53
+ value: {
54
+ name: job2,
55
+ description: '{{description}}'
56
+ }
57
+ }
58
+ }
59
+ end
60
+ let(:post_scm_params) do
61
+ {
62
+ changelog_to_branch: {
63
+ remote: 'origin',
64
+ branch: 'pr/{{pull_request_number}}/head'
65
+ },
66
+ refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head'
67
+ }
68
+ end
69
+ let(:post_jobs) do
40
70
  {
41
71
  '{{name}}-10' => {
42
72
  name: '{{name}}-10',
@@ -44,7 +74,9 @@ describe JenkinsPipelineBuilder::PullRequest do
44
74
  value: {
45
75
  name: '{{name}}-10',
46
76
  description: '{{description}}',
47
- publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }]
77
+ publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }],
78
+ scm_branch: 'origin/pr/{{pull_request_number}}/head',
79
+ scm_params: post_scm_params
48
80
  }
49
81
  },
50
82
  '{{name}}-11' => {
@@ -52,16 +84,25 @@ describe JenkinsPipelineBuilder::PullRequest do
52
84
  type: :'job-template',
53
85
  value: {
54
86
  name: '{{name}}-11',
55
- description: '{{description}}'
87
+ description: '{{description}}',
88
+ scm_branch: 'origin/pr/{{pull_request_number}}/head',
89
+ scm_params: post_scm_params
56
90
  }
57
91
  }
58
92
  }
59
93
  end
60
94
  describe '#initialize' do
61
95
  it 'process pull_request' do
62
- pull = pull_request_class.new(project, 2, jobs, pull_request)
63
- post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' }, refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}', scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' }, refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } } }
64
- post_project = { name: 'pull_req_test-PR2', type: :project, value: { name: 'pull_req_test-PR2', jobs: ['{{name}}-00', '{{name}}-10', '{{name}}-11'], pull_request_number: '2' } }
96
+ pull = described_class.new(project, 2, jobs, pull_request)
97
+ post_project = {
98
+ name: 'pull_req_test-PR2',
99
+ type: :project,
100
+ value: {
101
+ name: 'pull_req_test-PR2',
102
+ jobs: ['{{name}}-00', '{{name}}-10', '{{name}}-11'],
103
+ pull_request_number: '2'
104
+ }
105
+ }
65
106
 
66
107
  expect(pull.project).to eq(post_project)
67
108
  expect(pull.jobs).to eq(post_jobs)
@@ -69,12 +110,15 @@ describe JenkinsPipelineBuilder::PullRequest do
69
110
  end
70
111
 
71
112
  describe '#git_version_0' do
113
+ let(:post_scm_params) do
114
+ { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' }
115
+ end
116
+
72
117
  before :each do
73
118
  JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version = '0'
74
119
  end
75
120
  it 'process pull_request' do
76
- pull = pull_request_class.new(project, 2, jobs, pull_request)
77
- post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}', scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } } }
121
+ pull = described_class.new(project, 2, jobs, pull_request)
78
122
  expect(pull.jobs).to eq(post_jobs)
79
123
  end
80
124
  end
@@ -84,8 +128,7 @@ describe JenkinsPipelineBuilder::PullRequest do
84
128
  JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version = '2.0'
85
129
  end
86
130
  it 'process pull_request' do
87
- pull = pull_request_class.new(project, 2, jobs, pull_request)
88
- post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head', changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' } } } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}', scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head', changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' } } } } }
131
+ pull = described_class.new(project, 2, jobs, pull_request)
89
132
  expect(pull.jobs).to eq(post_jobs)
90
133
  end
91
134
  end
@@ -103,46 +146,16 @@ describe JenkinsPipelineBuilder::PullRequest do
103
146
  }
104
147
  }
105
148
  end
106
- let(:pull_request) do
107
- {
108
- name: '{{name}}-00',
109
- type: :pull_request_generator,
110
- job_type: 'pull_request_generator',
111
- git_url: 'https://www.github.com/',
112
- git_repo: 'jenkins_pipeline_builder',
113
- git_org: 'constantcontact',
114
- value: {
115
- inject_pr_into: :app_name,
116
- jobs: ['{{app_name}}-10', '{{app_name}}-11']
117
- },
118
- builders: [
119
- { shell_command: 'generate -v || gem install jenkins_pipeline_builder\ngenerate pipeline -c config/{{login_config}} pull_request pipeline/ {{name}}\n' }
120
- ]
121
- }
122
- end
123
- let(:jobs) do
149
+ let(:value) do
124
150
  {
125
- '{{app_name}}-10' => {
126
- name: '{{app_name}}-10',
127
- type: :'job-template',
128
- value: {
129
- name: '{{app_name}}-10',
130
- description: '{{description}}',
131
- publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }]
132
- }
133
- },
134
- '{{app_name}}-11' => {
135
- name: '{{app_name}}-11',
136
- type: :'job-template',
137
- value: {
138
- name: '{{app_name}}-11',
139
- description: '{{description}}'
140
- }
141
- }
151
+ inject_pr_into: :app_name,
152
+ jobs: ['{{app_name}}-10', '{{app_name}}-11']
142
153
  }
143
154
  end
155
+ let(:job1) { '{{app_name}}-10' }
156
+ let(:job2) { '{{app_name}}-11' }
144
157
  it 'injects the pr number into the job name when told to' do
145
- pull = pull_request_class.new project, 2, jobs, pull_request
158
+ pull = described_class.new project, 2, jobs, pull_request
146
159
  expect(pull.project[:value][:app_name]).to eq '{{app_name}}-PR2'
147
160
  end
148
161
  end
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.11.0
4
+ version: 0.11.1
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-04-23 00:00:00.000000000 Z
12
+ date: 2015-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -295,16 +295,16 @@ dependencies:
295
295
  name: rubocop
296
296
  requirement: !ruby/object:Gem::Requirement
297
297
  requirements:
298
- - - '='
298
+ - - ! '>='
299
299
  - !ruby/object:Gem::Version
300
- version: 0.26.1
300
+ version: '0'
301
301
  type: :development
302
302
  prerelease: false
303
303
  version_requirements: !ruby/object:Gem::Requirement
304
304
  requirements:
305
- - - '='
305
+ - - ! '>='
306
306
  - !ruby/object:Gem::Version
307
- version: 0.26.1
307
+ version: '0'
308
308
  description: ! 'This is a simple and easy-to-use Jenkins Pipeline generator with features
309
309
  focused on
310
310
 
@@ -406,6 +406,8 @@ files:
406
406
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/view.yaml
407
407
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/jobs.tar.gz
408
408
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/project.yaml
409
+ - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline_nested/jobs.tar.gz
410
+ - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline_nested/project.yaml
409
411
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_combo_files/project.json
410
412
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_combo_files/view.yaml
411
413
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_job.xml
@@ -482,6 +484,8 @@ test_files:
482
484
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/view.yaml
483
485
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/jobs.tar.gz
484
486
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/project.yaml
487
+ - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline_nested/jobs.tar.gz
488
+ - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline_nested/project.yaml
485
489
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_combo_files/project.json
486
490
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_combo_files/view.yaml
487
491
  - spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_job.xml