jenkins_pipeline_builder 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/.rubocop_todo.yml +0 -6
  4. data/jenkins_pipeline_builder.gemspec +1 -2
  5. data/lib/jenkins_pipeline_builder.rb +1 -1
  6. data/lib/jenkins_pipeline_builder/cli/helper.rb +3 -2
  7. data/lib/jenkins_pipeline_builder/cli/list.rb +1 -0
  8. data/lib/jenkins_pipeline_builder/compiler.rb +14 -1
  9. data/lib/jenkins_pipeline_builder/extension_set.rb +5 -1
  10. data/lib/jenkins_pipeline_builder/extensions.rb +4 -0
  11. data/lib/jenkins_pipeline_builder/extensions/helpers/publishers/cobertura_report_helper.rb +1 -0
  12. data/lib/jenkins_pipeline_builder/extensions/job_attributes.rb +1 -0
  13. data/lib/jenkins_pipeline_builder/extensions/wrappers.rb +2 -1
  14. data/lib/jenkins_pipeline_builder/generator.rb +4 -0
  15. data/lib/jenkins_pipeline_builder/job.rb +3 -0
  16. data/lib/jenkins_pipeline_builder/job_collection.rb +2 -0
  17. data/lib/jenkins_pipeline_builder/module_registry.rb +4 -0
  18. data/lib/jenkins_pipeline_builder/promotion.rb +1 -0
  19. data/lib/jenkins_pipeline_builder/pull_request_generator.rb +1 -0
  20. data/lib/jenkins_pipeline_builder/remote_dependencies.rb +2 -2
  21. data/lib/jenkins_pipeline_builder/utils.rb +8 -7
  22. data/lib/jenkins_pipeline_builder/version.rb +1 -1
  23. data/lib/jenkins_pipeline_builder/view.rb +3 -1
  24. data/spec/lib/jenkins_pipeline_builder/cli/helper_spec.rb +1 -1
  25. data/spec/lib/jenkins_pipeline_builder/compiler_spec.rb +1 -1
  26. data/spec/lib/jenkins_pipeline_builder/extension_dsl_spec.rb +1 -1
  27. data/spec/lib/jenkins_pipeline_builder/extension_set_spec.rb +2 -2
  28. data/spec/lib/jenkins_pipeline_builder/extensions/build_steps_spec.rb +1 -1
  29. data/spec/lib/jenkins_pipeline_builder/extensions/builders_spec.rb +1 -1
  30. data/spec/lib/jenkins_pipeline_builder/extensions/job_attributes_spec.rb +1 -1
  31. data/spec/lib/jenkins_pipeline_builder/extensions/promotion_conditions_spec.rb +1 -1
  32. data/spec/lib/jenkins_pipeline_builder/extensions/publishers_spec.rb +1 -1
  33. data/spec/lib/jenkins_pipeline_builder/extensions/registered_spec.rb +1 -1
  34. data/spec/lib/jenkins_pipeline_builder/extensions/triggers_spec.rb +1 -1
  35. data/spec/lib/jenkins_pipeline_builder/extensions/wrappers_spec.rb +1 -1
  36. data/spec/lib/jenkins_pipeline_builder/extensions_spec.rb +1 -1
  37. data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +63 -32
  38. data/spec/lib/jenkins_pipeline_builder/job_collection_spec.rb +2 -2
  39. data/spec/lib/jenkins_pipeline_builder/job_spec.rb +1 -1
  40. data/spec/lib/jenkins_pipeline_builder/module_registry_spec.rb +1 -1
  41. data/spec/lib/jenkins_pipeline_builder/promotion_spec.rb +1 -1
  42. data/spec/lib/jenkins_pipeline_builder/pull_request_generator_spec.rb +1 -1
  43. data/spec/lib/jenkins_pipeline_builder/spec_helper.rb +1 -1
  44. data/spec/lib/jenkins_pipeline_builder/utils_spec.rb +1 -1
  45. data/spec/lib/jenkins_pipeline_builder/view_spec.rb +2 -2
  46. data/spec/requests/pipeline_spec.rb +1 -1
  47. metadata +3 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b2b8dbf5bb5aecf737f7de86141b559cf74704d23ceaa754f4d9c19803401a37
4
- data.tar.gz: a412dce1a03b09be9298c5d6381a0fe7c85f4b1f9d7bf2229292de1b845cad86
3
+ metadata.gz: a89e7eaacca4711e8cfba8ba745799d5b4eb01014a5a78740ff74ab606595f7a
4
+ data.tar.gz: d9adb6f45f1d7be7ea7c1815e491338ad32bfc7b15859c92955482d550930332
5
5
  SHA512:
6
- metadata.gz: d4c23fe8ad05dd27dd99a55c771a5b8a423f8b7af3e8069d70f9f6d2f4aa3d72c4a0348b5ffd487a98452190d6ff8c5fd8aad9b5d6d393f1d9ab9cd853cde4c5
7
- data.tar.gz: d40e0eb1e3a388975bf324822c334dcc085bf0dc58657b14cef9cbf744e393b383cd882c01fdee438c7e17934a4ca5f5a7563a595912d2a4a239a24baaa7761a
6
+ metadata.gz: 19c78e7c9801ce59933cd96b37cf259d76d0b9c0e427b2c6dcd3b40491d7e77efb6c22dd09f384cb1221ba062e3bc614bb9ecd4f2c7920f028bed18f7ced6079
7
+ data.tar.gz: 2fd655ec2dd99d45ddc6f2f794cf6b6b7ecf469f8b8eb4fe22aeb74f5f9791f42b06e5ffb37087e2d9bda7cb35c512e17915ebbe78055984299c97d235870025
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.1.5
2
+ TargetRubyVersion: 2.3.3
3
3
 
4
4
  inherit_from: .rubocop_todo.yml
5
5
 
@@ -41,3 +41,6 @@ Style/SymbolProc:
41
41
 
42
42
  Style/FrozenStringLiteralComment:
43
43
  Enabled: false
44
+
45
+ Style/SafeNavigation:
46
+ Enabled: false
@@ -24,12 +24,6 @@ Metrics/BlockLength:
24
24
  # Offense count: 5
25
25
  # Cop supports --auto-correct.
26
26
  # Configuration parameters: AutoCorrect.
27
- Performance/HashEachMethods:
28
- Exclude:
29
- - 'lib/jenkins_pipeline_builder/cli/list.rb'
30
- - 'lib/jenkins_pipeline_builder/compiler.rb'
31
- - 'lib/jenkins_pipeline_builder/extensions.rb'
32
- - 'lib/jenkins_pipeline_builder/utils.rb'
33
27
 
34
28
  # Offense count: 1
35
29
  # Configuration parameters: MinBodyLength.
@@ -1,5 +1,4 @@
1
-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'jenkins_pipeline_builder/version'
5
4
 
@@ -41,7 +41,7 @@ module JenkinsPipelineBuilder
41
41
  attr_reader :client, :credentials, :debug, :file_mode
42
42
  attr_writer :logger
43
43
  def generator
44
- @_generator ||= Generator.new
44
+ @generator ||= Generator.new
45
45
  end
46
46
 
47
47
  def file_mode!
@@ -80,6 +80,7 @@ module JenkinsPipelineBuilder
80
80
  def self.process_creds_file(file)
81
81
  return load File.expand_path(file) if file.end_with? 'rb'
82
82
  return self.jenkins_api_creds = JSON.parse(IO.read(File.expand_path(file))) if file.end_with? 'json'
83
+
83
84
  self.jenkins_api_creds = YAML.load_file(File.expand_path(file))
84
85
  end
85
86
 
@@ -97,14 +98,13 @@ module JenkinsPipelineBuilder
97
98
  end
98
99
  end
99
100
 
100
- private_class_method
101
-
102
101
  def self.find_default_file
103
102
  default_file_name = "#{ENV['HOME']}/.jenkins_api_client/login"
104
103
 
105
104
  found_suffix = nil
106
105
  DEFAULT_FILE_FORMATS.each do |suffix|
107
106
  next unless File.exist?("#{default_file_name}.#{suffix}")
107
+
108
108
  if !found_suffix
109
109
  found_suffix = suffix
110
110
  else
@@ -118,6 +118,7 @@ module JenkinsPipelineBuilder
118
118
  def self.logger
119
119
  JenkinsPipelineBuilder.logger
120
120
  end
121
+ private_class_method :find_default_file, :logger
121
122
  end
122
123
  end
123
124
  end
@@ -39,6 +39,7 @@ module JenkinsPipelineBuilder
39
39
  entries = JenkinsPipelineBuilder.registry.registry[:job]
40
40
  entries.each do |name, set|
41
41
  next unless set.is_a? ExtensionSet
42
+
42
43
  ext = set.extensions.first
43
44
  display_module(name, ext)
44
45
  end
@@ -33,11 +33,14 @@ module JenkinsPipelineBuilder
33
33
  item = item_bag[:value]
34
34
  bag = {}
35
35
  return unless item.is_a?(Hash)
36
+
36
37
  item.keys.each do |k|
37
38
  val = item[k]
38
39
  next unless val.is_a? String
40
+
39
41
  new_value = resolve_value(val, settings_bag)
40
42
  return nil if new_value.nil?
43
+
41
44
  bag[k] = new_value
42
45
  end
43
46
  my_settings_bag = settings_bag.clone
@@ -48,7 +51,7 @@ module JenkinsPipelineBuilder
48
51
  new_item = compile(item, settings)
49
52
  [true, new_item]
50
53
  rescue StandardError => e
51
- return [false, [e.message]]
54
+ [false, [e.message]]
52
55
  end
53
56
 
54
57
  def compile(item, settings = {})
@@ -67,10 +70,12 @@ module JenkinsPipelineBuilder
67
70
 
68
71
  def handle_enable(item, settings)
69
72
  return item unless item.is_a? Hash
73
+
70
74
  if enable_block_present? item
71
75
  enabled_switch = resolve_value(item[:enabled], settings)
72
76
  return {} if enabled_switch == 'false'
73
77
  raise "Invalid value for #{item[:enabled]}: #{enabled_switch}" if enabled_switch != 'true'
78
+
74
79
  if item[:parameters].is_a? Hash
75
80
  item = item.merge item[:parameters]
76
81
  item.delete :parameters
@@ -105,8 +110,10 @@ module JenkinsPipelineBuilder
105
110
 
106
111
  def compile_array_item(item, settings, array)
107
112
  raise "Found a nil value when processing following array:\n #{array.inspect}" if item.nil?
113
+
108
114
  payload = compile(item, settings)
109
115
  raise "Failed to resolve:\n===>item #{item}\n\n===>of list: #{array.inspect}" if payload.nil?
116
+
110
117
  payload
111
118
  end
112
119
 
@@ -114,8 +121,10 @@ module JenkinsPipelineBuilder
114
121
  if value.nil?
115
122
  raise "key: #{key} has a nil value, this is often a yaml syntax error. Skipping children and siblings"
116
123
  end
124
+
117
125
  payload = compile(value, settings)
118
126
  raise "Failed to resolve:\n===>key: #{key}\n\n===>value: #{value} payload" if payload.nil?
127
+
119
128
  payload
120
129
  end
121
130
 
@@ -135,6 +144,7 @@ module JenkinsPipelineBuilder
135
144
  pull_job = value.to_s.match(/{{pull@(.*)}}/)
136
145
  if pull_job
137
146
  return pull_job[1] unless settings[:pull_request_number]
147
+
138
148
  value = pull_job[1]
139
149
  end
140
150
 
@@ -151,16 +161,19 @@ module JenkinsPipelineBuilder
151
161
  vars.select! do |var|
152
162
  var_val = settings[var]
153
163
  raise "Could not find defined substitution variable: #{var}" if var_val.nil?
164
+
154
165
  value_s.gsub!("{{#{var}}}", var_val.to_s)
155
166
  var_val.nil?
156
167
  end
157
168
  return nil if vars.count != 0
169
+
158
170
  value_s
159
171
  end
160
172
 
161
173
  def correct_job_names!(value)
162
174
  vars = value.scan(/{{job@(.*)}}/).flatten
163
175
  return unless vars.count > 0
176
+
164
177
  vars.select! do |var|
165
178
  var_val = job_collection[var.to_s]
166
179
  value.gsub!("{{job@#{var}}}", var_val[:value][:name]) unless var_val.nil?
@@ -12,6 +12,7 @@ module JenkinsPipelineBuilder
12
12
  SET_METHODS.each do |method_name|
13
13
  define_method method_name do |value = nil|
14
14
  return settings[method_name] if value.nil?
15
+
15
16
  settings[method_name] = value
16
17
  end
17
18
  end
@@ -35,7 +36,6 @@ module JenkinsPipelineBuilder
35
36
  end
36
37
 
37
38
  def installed_version=(version)
38
- version = version.match(/\d+\.\d+(\.\d+)?/)
39
39
  @version = Gem::Version.new version
40
40
  end
41
41
 
@@ -53,9 +53,11 @@ module JenkinsPipelineBuilder
53
53
 
54
54
  def installed_version
55
55
  return @version if @version
56
+
56
57
  reg = JenkinsPipelineBuilder.registry
57
58
  version = reg.versions[settings[:plugin_id]]
58
59
  raise "Plugin #{settings[:name]} is not installed (plugin_id: #{settings[:plugin_id]})" if version.nil?
60
+
59
61
  self.installed_version = version
60
62
  @version
61
63
  end
@@ -103,6 +105,7 @@ module JenkinsPipelineBuilder
103
105
  end
104
106
  unless block
105
107
  raise "no block found for version #{version}" unless blocks.key version
108
+
106
109
  return blocks[version][:block]
107
110
  end
108
111
  store_xml version, block, path
@@ -122,6 +125,7 @@ module JenkinsPipelineBuilder
122
125
  end
123
126
 
124
127
  return instance_variable_get(method_name) unless block
128
+
125
129
  blocks[version] = {} unless blocks[version]
126
130
  blocks[version][method_name] = block
127
131
  end
@@ -40,6 +40,7 @@ module JenkinsPipelineBuilder
40
40
  EXT_METHODS.keys.each do |method_name|
41
41
  define_method method_name do |value = nil|
42
42
  return instance_variable_get("@#{method_name}") if value.nil?
43
+
43
44
  instance_variable_set("@#{method_name}", value)
44
45
  end
45
46
  end
@@ -59,6 +60,7 @@ module JenkinsPipelineBuilder
59
60
  def execute(value, n_xml)
60
61
  errors = check_parameters value
61
62
  raise ArgumentError, errors.join("\n") if errors.any?
63
+
62
64
  unless path
63
65
  raise ArgumentError, %(Extension #{name} has no valid path
64
66
  Check ModuleRegistry#entries and the definition of the extension
@@ -76,9 +78,11 @@ module JenkinsPipelineBuilder
76
78
  def check_parameters(value)
77
79
  return [] if parameters && parameters.empty?
78
80
  return [] unless value.is_a? Hash
81
+
79
82
  errors = []
80
83
  value.each_key do |key|
81
84
  next if parameters && parameters.include?(key)
85
+
82
86
  errors << "Extension #{name} does not support parameter #{key}"
83
87
  end
84
88
  errors
@@ -2,6 +2,7 @@ class CoberturaReportHelper < ExtensionHelper
2
2
  def thresholds
3
3
  @thresholds ||= params[:metric_targets]
4
4
  return @thresholds if @thresholds
5
+
5
6
  @thresholds = {
6
7
  failing: [
7
8
  { type: 'type', value: 0 },
@@ -227,6 +227,7 @@ job_attribute do
227
227
  if params[:changelog_to_branch]
228
228
  opts = params[:changelog_to_branch]
229
229
  raise 'remote and branch are required for changelog_to_branch' unless opts[:remote] && opts[:branch]
230
+
230
231
  send('hudson.plugins.git.extensions.impl.ChangelogToBranch') do
231
232
  options do
232
233
  compareRemote opts[:remote]
@@ -26,7 +26,6 @@ wrapper do
26
26
  announced false
27
27
  jenkins_name 'Color ANSI Console Output'
28
28
  description 'This plugin adds support for ANSI escape sequences, including color, to Console Output.'
29
-
30
29
  xml do |_|
31
30
  send('hudson.plugins.ansicolor.AnsiColorBuildWrapper') do
32
31
  colorMapName 'xterm'
@@ -99,6 +98,7 @@ wrapper do
99
98
  passwords = wrapper
100
99
  end
101
100
  break unless passwords
101
+
102
102
  passwordEntries do
103
103
  passwords.each do |password|
104
104
  EnvInjectPasswordEntry do
@@ -148,6 +148,7 @@ wrapper do
148
148
  resolvePattern
149
149
  matrixParams wrapper[:properties]
150
150
  deployBuildInfo wrapper[:'publish-build-info']
151
+ useSpecs false
151
152
  includeEnvVars false
152
153
  envVarsPatterns do
153
154
  includePatterns
@@ -66,6 +66,7 @@ module JenkinsPipelineBuilder
66
66
  errors = []
67
67
  pr_generator.open_prs.each do |pr|
68
68
  next if base_branch_only && defaults[:git_branch] != pr[:base]
69
+
69
70
  pr_generator.convert! job_collection, pr[:number]
70
71
  error = publish(project_name)
71
72
  errors << error unless error.empty?
@@ -105,6 +106,7 @@ module JenkinsPipelineBuilder
105
106
  def resolve_job_by_name(name, settings = {})
106
107
  job = job_collection.get_item(name)
107
108
  raise "Failed to locate job by name '#{name}'" if job.nil?
109
+
108
110
  job_value = job[:value]
109
111
  logger.debug "Compiling job #{name}"
110
112
  compiler = JenkinsPipelineBuilder::Compiler.new self
@@ -214,6 +216,7 @@ module JenkinsPipelineBuilder
214
216
  # A hash of promoted_builds names => associated job names
215
217
  promotion_job_pairs = jobs.each_with_object({}) do |j, acc|
216
218
  next unless j[:result][:promoted_builds]
219
+
217
220
  j[:result][:promoted_builds].each do |promotion_name|
218
221
  acc[promotion_name] = j[:result][:name]
219
222
  end
@@ -238,6 +241,7 @@ module JenkinsPipelineBuilder
238
241
  logger.info "Processing #{i}"
239
242
  job = i[:result]
240
243
  raise "Result is empty for #{i}" if job.nil?
244
+
241
245
  job = Job.new job
242
246
  success, payload = job.create_or_update
243
247
  errors[job.name] = payload unless success
@@ -17,6 +17,7 @@ module JenkinsPipelineBuilder
17
17
  def create_or_update
18
18
  success, payload = to_xml
19
19
  return success, payload unless success
20
+
20
21
  xml = payload
21
22
  return local_output(xml) if JenkinsPipelineBuilder.debug || JenkinsPipelineBuilder.file_mode
22
23
 
@@ -31,6 +32,7 @@ module JenkinsPipelineBuilder
31
32
  job[:job_type] = 'free_style' unless job[:job_type]
32
33
  type = job[:job_type]
33
34
  return false, "Job type: #{type} is not one of #{job_methods.join(', ')}" unless known_type? type
35
+
34
36
  @xml = setup_freestyle_base(job)
35
37
  payload = send("update_#{type}")
36
38
 
@@ -109,6 +111,7 @@ module JenkinsPipelineBuilder
109
111
  if params.key?(:template)
110
112
  template_name = params[:template]
111
113
  raise "Job template '#{template_name}' can't be resolved." unless @job_templates.key?(template_name)
114
+
112
115
  params.delete(:template)
113
116
  template = @job_templates[template_name]
114
117
  params = template.deep_merge(params)
@@ -108,6 +108,7 @@ module JenkinsPipelineBuilder
108
108
  # skip if the existing item is local and the new item is remote
109
109
  return if remote && !existing_remote
110
110
  raise "Duplicate item with name '#{name}' was detected." unless existing_remote && !remote
111
+
111
112
  # override if the existing item is remote and the new is local
112
113
  logger.info "Duplicate item with name '#{name}' was detected from the remote folder."
113
114
  end
@@ -118,6 +119,7 @@ module JenkinsPipelineBuilder
118
119
  path = "#{path}/extensions"
119
120
  path = File.expand_path(path, Dir.getwd)
120
121
  return unless File.directory?(path)
122
+
121
123
  logger.info "Loading extensions from folder #{path}"
122
124
  logger.info Dir.glob("#{path}/*.rb").inspect
123
125
  Dir.glob("#{path}/**/*.rb").each do |file|
@@ -29,6 +29,7 @@ module JenkinsPipelineBuilder
29
29
  def versions
30
30
  # Return a hash with a default of 1000 so that we'll get the newest in debug
31
31
  return Hash.new { |_| '1000.0' } if JenkinsPipelineBuilder.debug
32
+
32
33
  @versions ||= JenkinsPipelineBuilder.client.plugin.list_installed
33
34
  end
34
35
 
@@ -77,6 +78,7 @@ module JenkinsPipelineBuilder
77
78
  def get_by_path_collection(path, registry)
78
79
  item = registry[path.shift.to_sym]
79
80
  return item if path.count == 0
81
+
80
82
  get_by_path_collection(path, item)
81
83
  end
82
84
 
@@ -88,8 +90,10 @@ module JenkinsPipelineBuilder
88
90
  def traverse_registry(registry, params, n_xml, strict = false)
89
91
  params.each do |key, value|
90
92
  next unless registry.is_a? Hash
93
+
91
94
  unless registry.key? key
92
95
  raise TypeError, "!!!! could not find key #{key} !!!!" if strict
96
+
93
97
  next
94
98
  end
95
99
  reg_value = registry[key]
@@ -31,6 +31,7 @@ module JenkinsPipelineBuilder
31
31
  def create(params, job_name)
32
32
  success, payload = prom_to_xml(params)
33
33
  return success, payload unless success
34
+
34
35
  xml = payload
35
36
  return local_output(xml) if JenkinsPipelineBuilder.debug || JenkinsPipelineBuilder.file_mode
36
37
 
@@ -37,6 +37,7 @@ module JenkinsPipelineBuilder
37
37
 
38
38
  def delete_closed_prs
39
39
  return if JenkinsPipelineBuilder.debug
40
+
40
41
  jobs_to_delete = JenkinsPipelineBuilder.client.job.list "^#{application_name}-PR(\\d+)-(.*)$"
41
42
  open_prs.each do |pr|
42
43
  jobs_to_delete.reject! { |j| j.start_with? "#{application_name}-PR#{pr[:number]}" }
@@ -88,8 +88,8 @@ module JenkinsPipelineBuilder
88
88
  def download_yaml(url, file, remote_opts = {})
89
89
  entries[url] = file
90
90
  logger.info "Downloading #{url} to #{file}.tar"
91
- open("#{file}.tar", 'w') do |local_file|
92
- open(url, remote_opts) do |remote_file|
91
+ File.open("#{file}.tar", 'w') do |local_file|
92
+ URI.parse(url).open(remote_opts) do |remote_file|
93
93
  local_file.write(Zlib::GzipReader.new(remote_file).read)
94
94
  end
95
95
  end
@@ -30,13 +30,14 @@ end
30
30
  module JenkinsPipelineBuilder
31
31
  class Utils
32
32
  # Code was duplicated from jeknins_api_client
33
- def self.symbolize_keys_deep!(h)
34
- return unless h.is_a?(Hash)
35
- h.keys.each do |k|
36
- ks = k.respond_to?(:to_sym) ? k.to_sym : k
37
- h[ks] = h.delete k # Preserve order even when k == ks
38
- symbolize_keys_deep! h[ks] if h[ks].is_a? Hash
39
- h[ks].each { |item| symbolize_keys_deep!(item) } if h[ks].is_a?(Array)
33
+ def self.symbolize_keys_deep!(to_symbolize)
34
+ return unless to_symbolize.is_a?(Hash)
35
+
36
+ to_symbolize.keys.each do |k|
37
+ ks = k.respond_to?(:to_sym) ? k.to_sym : k
38
+ to_symbolize[ks] = to_symbolize.delete k # Preserve order even when k == ks
39
+ symbolize_keys_deep! to_symbolize[ks] if to_symbolize[ks].is_a? Hash
40
+ to_symbolize[ks].each { |item| symbolize_keys_deep!(item) } if to_symbolize[ks].is_a?(Array)
40
41
  end
41
42
  end
42
43
 
@@ -21,5 +21,5 @@
21
21
  #
22
22
 
23
23
  module JenkinsPipelineBuilder
24
- VERSION = '1.7.0'.freeze
24
+ VERSION = '1.8.0'.freeze
25
25
  end
@@ -67,6 +67,7 @@ module JenkinsPipelineBuilder
67
67
  def create(params)
68
68
  # Name is a required parameter. Raise an error if not specified
69
69
  raise ArgumentError, 'Name is required for creating view' unless params.is_a?(Hash) && params[:name]
70
+
70
71
  clean_up_views(params) unless JenkinsPipelineBuilder.debug
71
72
  params[:type] ||= 'listview'
72
73
  create_base_view(params[:name], params[:type], params[:parent_view])
@@ -133,7 +134,8 @@ module JenkinsPipelineBuilder
133
134
  'dashboardView' => 'hudson.plugins.view.dashboard.Dashboard',
134
135
  'multijobView' => 'com.tikal.jenkins.plugins.multijob.views.MultiJobView'
135
136
  }
136
- raise "Type #{type} is not supported by Jenkins." unless types.keys.include? type
137
+ raise "Type #{type} is not supported by Jenkins." unless types.key?(type)
138
+
137
139
  types[type]
138
140
  end
139
141
 
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::CLI::Helper do
4
4
  file_suffixes = JenkinsPipelineBuilder::CLI::Helper::DEFAULT_FILE_FORMATS
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
  describe JenkinsPipelineBuilder::Compiler do
3
3
  before :all do
4
4
  JenkinsPipelineBuilder.credentials = {
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe 'extension dsl' do
4
4
  before :all do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::ExtensionSet do
4
4
  subject(:set) { JenkinsPipelineBuilder::ExtensionSet.new('foo') {} }
@@ -108,7 +108,7 @@ describe JenkinsPipelineBuilder::ExtensionSet do
108
108
  it 'works for snapshot/beta stuff' do
109
109
  ext_versions ['1.9', '2.3']
110
110
 
111
- set.installed_version = '2.0-SNAPSHOT (private-06/06/2014 09:51-bgaulin)'
111
+ set.installed_version = '2.0-SNAPSHOT'
112
112
  # Other examples
113
113
  # set.installed_version = '2.0-beta-1'
114
114
  # set.installed_version = '2.0+build.93'
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe 'build_steps' do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe 'builders' do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe 'job_attributes' do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe 'promotion_conditions' do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe 'publishers' do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
  WRAPPERS = {
3
3
  ansicolor: ['0'],
4
4
  artifactory: ['0'],
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe 'triggers' do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require File.expand_path('../spec_helper', __dir__)
2
2
 
3
3
  describe 'wrappers' do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::Extension do
4
4
  subject(:extension) { JenkinsPipelineBuilder::Extension.new }
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::Generator do
4
4
  before :all do
@@ -89,31 +89,52 @@ describe JenkinsPipelineBuilder::Generator do
89
89
  expect(errors).to be_empty
90
90
  end
91
91
 
92
- it 'produces no errors while creating pipeline TemplatePipeline' do
93
- errors = bootstrap(fixture_path('template_pipeline'), 'TemplatePipeline')
94
- expect(errors).to be_empty
95
- end
92
+ context 'when creating pipeline templates' do
93
+ before(:each) do
94
+ tar_path = File.join(__dir__, 'fixtures/generator_tests/template_pipeline/jobs.tar.gz')
95
+ parsed_url = URI.parse('https://www.test.com')
96
+ file_contents = Zlib::GzipReader.new(File.open(tar_path)).read
97
+ file_object = double
98
+ allow(URI).to receive(:parse).and_return(parsed_url)
99
+ allow(parsed_url).to receive(:open).and_yield('A String')
100
+ allow(Zlib::GzipReader).to receive(:new).and_return(file_object)
101
+ allow(file_object).to receive(:read).and_return(file_contents)
102
+ end
96
103
 
97
- it 'produces no errors while creating pipeline TemplatePipeline_nested' do
98
- errors = bootstrap(fixture_path('template_pipeline_nested'), 'TemplatePipeline_nested')
99
- expect(errors).to be_empty
100
- end
104
+ it 'produces no errors while creating pipeline TemplatePipeline' do
105
+ errors = bootstrap(fixture_path('template_pipeline'), 'TemplatePipeline')
106
+ expect(errors).to be_empty
107
+ end
101
108
 
102
- it 'loads extensions in remote dependencies' do
103
- errors = bootstrap(fixture_path('template_pipeline'), 'TemplatePipeline')
104
- expect(errors).to be_empty
105
- expect(@generator.module_registry.registry[:job][:wrappers].keys).to include :test_wrapper
106
- @generator.module_registry.registry[:job][:wrappers].delete(:test_wrapper)
107
- end
109
+ it 'overrides the remote dependencies with local ones' do
110
+ errors = bootstrap(fixture_path('local_override/remote_and_local'), 'TemplatePipeline')
111
+ expect(errors).to be_empty
112
+ expect(@generator.job_collection.collection['{{name}}-10'][:value][:description]).to eq('Overridden stuff')
113
+ end
108
114
 
109
- it 'overrides the remote dependencies with local ones' do
110
- errors = bootstrap(fixture_path('local_override/remote_and_local'), 'TemplatePipeline')
111
- expect(errors).to be_empty
112
- expect(@generator.job_collection.collection['{{name}}-10'][:value][:description]).to eq('Overridden stuff')
113
- end
115
+ it 'loads extensions in remote dependencies' do
116
+ errors = bootstrap(fixture_path('template_pipeline'), 'TemplatePipeline')
117
+ expect(errors).to be_empty
118
+ expect(@generator.module_registry.registry[:job][:wrappers].keys).to include :test_wrapper
119
+ @generator.module_registry.registry[:job][:wrappers].delete(:test_wrapper)
120
+ end
121
+
122
+ it 'fails to override when there are duplicate local items' do
123
+ expect { bootstrap(fixture_path('local_override/all_local'), 'TemplatePipeline') }.to raise_error(StandardError)
124
+ end
114
125
 
115
- it 'fails to override when there are duplicate local items' do
116
- expect { bootstrap(fixture_path('local_override/all_local'), 'TemplatePipeline') }.to raise_error(StandardError)
126
+ it 'produces no errors while creating pipeline TemplatePipeline_nested' do
127
+ tar_path = File.join(__dir__, 'fixtures/generator_tests/template_pipeline_nested/jobs.tar.gz')
128
+ parsed_url = URI.parse('https://www.test.com')
129
+ file_contents = Zlib::GzipReader.new(File.open(tar_path)).read
130
+ file_object = double
131
+ allow(URI).to receive(:parse).and_return(parsed_url)
132
+ allow(parsed_url).to receive(:open).and_yield('A String')
133
+ allow(Zlib::GzipReader).to receive(:new).and_return(file_object)
134
+ allow(file_object).to receive(:read).and_return(file_contents)
135
+ errors = bootstrap(fixture_path('template_pipeline_nested'), 'TemplatePipeline_nested')
136
+ expect(errors).to be_empty
137
+ end
117
138
  end
118
139
 
119
140
  # Things to check for:
@@ -136,7 +157,7 @@ describe JenkinsPipelineBuilder::Generator do
136
157
  let(:pr_master) { { number: 1, base: 'master' } }
137
158
  let(:pr_not_master) { { number: 2, base: 'not-master' } }
138
159
  let(:open_prs) { [pr_master, pr_not_master] }
139
- let(:path) { File.expand_path('../fixtures/generator_tests/pullrequest_pipeline', __FILE__) }
160
+ let(:path) { File.expand_path('fixtures/generator_tests/pullrequest_pipeline', __dir__) }
140
161
  it 'produces no errors while creating pipeline PullRequest' do
141
162
  job_name = 'PullRequest'
142
163
  pr_generator = double('pr_generator')
@@ -195,7 +216,7 @@ describe JenkinsPipelineBuilder::Generator do
195
216
  github_site: 'https://github.com',
196
217
  git_org: 'testorg',
197
218
  git_repo_name: 'generator_tests'
198
- )).and_return(pr_generator)
219
+ )).and_return(pr_generator)
199
220
 
200
221
  expect(pr_generator).to receive(:open_prs).and_return open_prs
201
222
  expect(pr_generator).to receive(:delete_closed_prs)
@@ -227,26 +248,26 @@ describe JenkinsPipelineBuilder::Generator do
227
248
  end
228
249
 
229
250
  it 'loads a yaml collection from a path' do
230
- path = File.expand_path('../fixtures/generator_tests/test_yaml_files', __FILE__)
251
+ path = File.expand_path('fixtures/generator_tests/test_yaml_files', __dir__)
231
252
  @generator.job_collection.load_from_path path
232
253
  end
233
254
  it 'loads a json collection from a path' do
234
- path = File.expand_path('../fixtures/generator_tests/test_json_files', __FILE__)
255
+ path = File.expand_path('fixtures/generator_tests/test_json_files', __dir__)
235
256
  @generator.job_collection.load_from_path path
236
257
  end
237
258
  it 'loads both yaml and json files from a path' do
238
- path = File.expand_path('../fixtures/generator_tests/test_combo_files', __FILE__)
259
+ path = File.expand_path('fixtures/generator_tests/test_combo_files', __dir__)
239
260
  @generator.job_collection.load_from_path path
240
261
  end
241
262
 
242
263
  it 'errors when reading a bad yaml file' do
243
- path = File.expand_path('../fixtures/generator_tests/test_bad_yaml_files', __FILE__)
264
+ path = File.expand_path('fixtures/generator_tests/test_bad_yaml_files', __dir__)
244
265
  expect { @generator.job_collection.load_from_path path }.to raise_error(
245
266
  CustomErrors::ParseError, /There was an error while parsing a file/
246
267
  )
247
268
  end
248
269
  it 'errors when reading a bad json file' do
249
- path = File.expand_path('../fixtures/generator_tests/test_bad_json_files', __FILE__)
270
+ path = File.expand_path('fixtures/generator_tests/test_bad_json_files', __dir__)
250
271
  expect { @generator.job_collection.load_from_path path }.to raise_error(
251
272
  CustomErrors::ParseError, /There was an error while parsing a file/
252
273
  )
@@ -258,7 +279,7 @@ describe JenkinsPipelineBuilder::Generator do
258
279
  allow(JenkinsPipelineBuilder).to receive(:debug).and_return true
259
280
  job_name = 'test_job'
260
281
  body = ''
261
- test_path = File.expand_path('../fixtures/generator_tests', __FILE__)
282
+ test_path = File.expand_path('fixtures/generator_tests', __dir__)
262
283
  File.open("#{test_path}/#{job_name}.xml", 'r') do |f|
263
284
  f.each_line do |line|
264
285
  body << line
@@ -274,7 +295,7 @@ describe JenkinsPipelineBuilder::Generator do
274
295
 
275
296
  describe '#projects' do
276
297
  it 'returns a list of projects' do
277
- path = File.expand_path('../fixtures/generator_tests/multi_project', __FILE__)
298
+ path = File.expand_path('fixtures/generator_tests/multi_project', __dir__)
278
299
  expect(@generator.projects(path)).to eq %w[SamplePipeline1 SamplePipeline2 SamplePipeline3]
279
300
  end
280
301
  end
@@ -292,9 +313,19 @@ describe JenkinsPipelineBuilder::Generator do
292
313
  File.delete(file_path) if File.exist?(file_path)
293
314
  end
294
315
  end
316
+
295
317
  it 'generates xml and saves to disk without sending jobs to the server' do
318
+ tar_path = File.join(__dir__, 'fixtures/generator_tests/template_pipeline_nested/jobs.tar.gz')
319
+ parsed_url = URI.parse('https://www.test.com')
320
+ file_contents = Zlib::GzipReader.new(File.open(tar_path)).read
321
+ file_object = double
322
+ allow(URI).to receive(:parse).and_return(parsed_url)
323
+ allow(parsed_url).to receive(:open).and_yield('A String')
324
+ allow(Zlib::GzipReader).to receive(:new).and_return(file_object)
325
+ allow(file_object).to receive(:read).and_return(file_contents)
326
+
296
327
  job_name = 'TemplatePipeline'
297
- path = File.expand_path('../fixtures/generator_tests/template_pipeline', __FILE__)
328
+ path = File.expand_path('fixtures/generator_tests/template_pipeline', __dir__)
298
329
  errors = @generator.file(path, job_name)
299
330
  expect(errors).to be_empty
300
331
  expect(File.exist?("out/xml/#{job_name}-10.xml")).to be true
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::JobCollection do
4
4
  before :all do
@@ -21,7 +21,7 @@ describe JenkinsPipelineBuilder::JobCollection do
21
21
 
22
22
  context '#load_from_path' do
23
23
  before :all do
24
- path = File.expand_path('../fixtures/job_collection/', __FILE__)
24
+ path = File.expand_path('fixtures/job_collection', __dir__)
25
25
  described_class.new.load_from_path path
26
26
  end
27
27
 
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::Job do
4
4
  before :all do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::ModuleRegistry do
4
4
  after :each do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::Promotion do
4
4
  before :all do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
  require 'json'
3
3
 
4
4
  describe JenkinsPipelineBuilder::PullRequestGenerator do
@@ -6,7 +6,7 @@ require 'simplecov-rcov'
6
6
  require 'webmock/rspec'
7
7
  require 'equivalent-xml'
8
8
 
9
- require File.expand_path('../../../../lib/jenkins_pipeline_builder', __FILE__)
9
+ require File.expand_path('../../../lib/jenkins_pipeline_builder', __dir__)
10
10
 
11
11
  RSpec::Matchers.define :have_min_version do |version|
12
12
  match do |base|
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::Utils do
4
4
  let(:utils) { JenkinsPipelineBuilder::Utils }
@@ -1,4 +1,4 @@
1
- require File.expand_path('../spec_helper', __FILE__)
1
+ require File.expand_path('spec_helper', __dir__)
2
2
 
3
3
  describe JenkinsPipelineBuilder::View do
4
4
  before(:all) do
@@ -12,7 +12,7 @@ describe JenkinsPipelineBuilder::View do
12
12
  generator = JenkinsPipelineBuilder.generator
13
13
  @view = JenkinsPipelineBuilder::View.new(generator)
14
14
  end
15
- let(:path) { File.expand_path('../fixtures/view_test/', __FILE__) }
15
+ let(:path) { File.expand_path('fixtures/view_test', __dir__) }
16
16
  let(:view) { { name: 'view', parent_view: 'ParentView', type: 'categorizedView', description: 'ViewTest', regex: 'ViewTest.*', groupingRules: [{ groupRegex: 'ViewTest-1.*', namingRule: '1. Commit Stage' }] } }
17
17
 
18
18
  describe '#generate' do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../lib/jenkins_pipeline_builder/spec_helper', __FILE__)
1
+ require File.expand_path('../lib/jenkins_pipeline_builder/spec_helper', __dir__)
2
2
 
3
3
  describe 'Pipeline' do
4
4
  before :all 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: 1.7.0
4
+ version: 1.8.0
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: 2018-01-17 00:00:00.000000000 Z
12
+ date: 2018-10-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -394,7 +394,6 @@ files:
394
394
  - lib/jenkins_pipeline_builder/utils.rb
395
395
  - lib/jenkins_pipeline_builder/version.rb
396
396
  - lib/jenkins_pipeline_builder/view.rb
397
- - out/.keep
398
397
  - pipeline/Jenkins-Pipeline-Builder.yaml
399
398
  - pipeline/project.yaml
400
399
  - spec/lib/jenkins_pipeline_builder/cli/helper_spec.rb
@@ -485,7 +484,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
485
484
  version: '0'
486
485
  requirements: []
487
486
  rubyforge_project:
488
- rubygems_version: 2.7.4
487
+ rubygems_version: 2.7.7
489
488
  signing_key:
490
489
  specification_version: 4
491
490
  summary: This gem is will boostrap your Jenkins pipelines