Skip to content
This repository has been archived by the owner on May 10, 2021. It is now read-only.

Commit

Permalink
Started clearer messages and updated rubocop
Browse files Browse the repository at this point in the history
  • Loading branch information
McAfee, Patrick committed Feb 1, 2016
1 parent 923e2b9 commit 8e8b055
Show file tree
Hide file tree
Showing 24 changed files with 179 additions and 153 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ out
Gemfile.lock
*.gem
.DS_Store
.idea
.idea
.byebug_history
4 changes: 2 additions & 2 deletions .simplecov
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ SimpleCov.profiles.define 'spec' do
add_group 'jenkins_pipeline_builder', '/lib/'
add_filter 'spec'
coverage_dir 'out/coverage'
formatter SimpleCov::Formatter::MultiFormatter[
formatter SimpleCov::Formatter::MultiFormatter.new([
SimpleCov::Formatter::Console,
SimpleCov::Formatter::RcovFormatter,
]
])
end

class SimpleCov::Formatter::Console
Expand Down
2 changes: 1 addition & 1 deletion jenkins_pipeline_builder.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ automating Job & Pipeline creation from the YAML files checked-in with your appl
spec.add_development_dependency 'bump'
spec.add_development_dependency 'json'
spec.add_development_dependency 'gem-release'
spec.add_development_dependency 'pry'
spec.add_development_dependency 'byebug'
spec.add_development_dependency 'simplecov'
spec.add_development_dependency 'simplecov-rcov'
spec.add_development_dependency 'kwalify'
Expand Down
10 changes: 5 additions & 5 deletions lib/jenkins_pipeline_builder/cli/describe.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ module CLI
klass_name = entry.to_s.classify
# rubocop:disable Style/AccessModifierIndentation
klass = Class.new(Thor) do
if entry == :job_attributes
extensions = JenkinsPipelineBuilder.registry.registry[:job].select { |_, x| x.is_a? ExtensionSet }
else
extensions = JenkinsPipelineBuilder.registry.registry[:job][entry]
end
extensions = if entry == :job_attributes
JenkinsPipelineBuilder.registry.registry[:job].select { |_, x| x.is_a? ExtensionSet }
else
JenkinsPipelineBuilder.registry.registry[:job][entry]
end

extensions.each do |key, extset|
# TODO: don't just take the first
Expand Down
7 changes: 2 additions & 5 deletions lib/jenkins_pipeline_builder/cli/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,8 @@ def self.valid_cli_creds?(options)
end

def self.process_creds_file(file)
if file.end_with? 'json'
return JSON.parse(IO.read(File.expand_path(file)))
else
return YAML.load_file(File.expand_path(file))
end
return JSON.parse(IO.read(File.expand_path(file))) if file.end_with? 'json'
YAML.load_file(File.expand_path(file))
end

def self.process_cli_creds(options)
Expand Down
78 changes: 33 additions & 45 deletions lib/jenkins_pipeline_builder/compiler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,15 @@ def get_settings_bag(item_bag, settings_bag = {})
my_settings_bag.merge(bag)
end

def compile_job(item, settings = {})
new_item = compile(item, settings)
[true, new_item]
rescue => e
return [false, [e.message]]
end

def compile(item, settings = {})
success, item = handle_enable(item, settings)
return false, item unless success
item = handle_enable(item, settings)

case item
when String
Expand All @@ -56,16 +62,16 @@ def compile(item, settings = {})
when Array
return compile_array item, settings
end
[true, item]
item
end

def handle_enable(item, settings)
return true, item unless item.is_a? Hash
return item unless item.is_a? Hash
if enable_block_present? item
enabled_switch = resolve_value(item[:enabled], settings)
return [true, {}] if enabled_switch == 'false'
return {} if enabled_switch == 'false'
if enabled_switch != 'true'
return [false, { 'value error' => "Invalid value for #{item[:enabled]}: #{enabled_switch}" }]
fail "Invalid value for #{item[:enabled]}: #{enabled_switch}"
end
if item[:parameters].is_a? Hash
item = item.merge item[:parameters]
Expand All @@ -75,7 +81,7 @@ def handle_enable(item, settings)
item = item[:parameters]
end
end
[true, item]
item
end

private
Expand All @@ -85,64 +91,44 @@ def enable_block_present?(item)
end

def compile_string(item, settings)
errors = {}
new_value = resolve_value(item, settings)
errors[item] = "Failed to resolve #{item}" if new_value.nil?
return false, errors unless errors.empty?
[true, new_value]
resolve_value(item, settings)
rescue => e
raise "Failed to resolve #{item} because: #{e.message}"
end

def compile_array(array, settings)
errors = {}
result = []
array.each do |value|
success, payload = compile_array_item value, settings, array
errors[value] = payload unless success
payload = compile_array_item value, settings, array
result << payload
end
return false, errors unless errors.empty?
[true, result]
result
end

def compile_array_item(item, settings, array)
success, payload = compile(item, settings)
return false, "found a nil value when processing following array:\n #{array.inspect}" if item.nil?
return false, payload unless success
return false, "Failed to resolve:\n===>item #{item}\n\n===>of list: #{array.inspect}" if payload.nil?
[true, payload]
fail "Found a nil value when processing following array:\n #{array.inspect}" if item.nil?
payload = compile(item, settings)
fail "Failed to resolve:\n===>item #{item}\n\n===>of list: #{array.inspect}" if payload.nil?
payload
end

def compile_item(key, value, errors, settings)
def compile_item(key, value, settings)
if value.nil?
errors[key] = "key: #{key} has a nil value, this is often a yaml syntax error. Skipping children and siblings"
return false, errors[key]
end
success, payload = compile(value, settings)
unless success
errors.merge!(payload)
return false, payload
fail "key: #{key} has a nil value, this is often a yaml syntax error. Skipping children and siblings"
end
if payload.nil?
errors[key] = "Failed to resolve:\n===>key: #{key}\n\n===>value: #{value}\n\n===>of: #{item}"
return false, errors[key]
end
[true, payload]
payload = compile(value, settings)
fail "Failed to resolve:\n===>key: #{key}\n\n===>value: #{value} payload" if payload.nil?
payload
end

def compile_hash(item, settings)
success, item = handle_enable(item, settings)
return false, item unless success

errors = {}
item = handle_enable(item, settings)
result = {}

item.each do |key, value|
success, payload = compile_item(key, value, errors, settings)
next unless success
payload = compile_item(key, value, settings)
result[key] = payload unless payload == {}
end
return false, errors unless errors.empty?
[true, result]
result
end

def resolve_value(value, settings)
Expand All @@ -155,6 +141,7 @@ def resolve_value(value, settings)
end

settings = settings.with_indifferent_access
# TODO: this is actually a shallow copy and should be fixed
value_s = value.to_s.clone
correct_job_names! value_s
# Then we look for normal values to replace
Expand All @@ -165,7 +152,8 @@ def resolve_value(value, settings)
vars = value_s.scan(/{{([^{}@]+)}}/).flatten
vars.select! do |var|
var_val = settings[var]
value_s.gsub!("{{#{var}}}", var_val.to_s) unless var_val.nil?
fail "Could not find defined substitution variable: #{var}" if var_val.nil?
value_s.gsub!("{{#{var}}}", var_val.to_s)
var_val.nil?
end
return nil if vars.count != 0
Expand Down
2 changes: 1 addition & 1 deletion lib/jenkins_pipeline_builder/extension_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class ExtensionSet
:description,
:announced,
:type
]
].freeze
SET_METHODS.each do |method_name|
define_method method_name do |value = nil|
return settings[method_name] if value.nil?
Expand Down
2 changes: 1 addition & 1 deletion lib/jenkins_pipeline_builder/extensions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class Extension
after: false,
xml: false,
parameters: []
}
}.freeze
EXT_METHODS.keys.each do |method_name|
define_method method_name do |value = nil|
return instance_variable_get("@#{method_name}") if value.nil?
Expand Down
8 changes: 2 additions & 6 deletions lib/jenkins_pipeline_builder/extensions/builders.rb
Original file line number Diff line number Diff line change
Expand Up @@ -282,14 +282,10 @@
else
send('selector', 'class' => 'hudson.plugins.copyartifact.StatusBuildSelector')
end
if params[:fingerprint].nil?
if params[:fingerprint].nil? || params[:fingerprint].to_s == 'true'
doNotFingerprintArtifacts false
else
if params[:fingerprint].to_s == 'true'
doNotFingerprintArtifacts false
else
doNotFingerprintArtifacts true
end
doNotFingerprintArtifacts true
end
flatten true if params[:flatten]
optional true if params[:optional]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ def initialize(params, builder, defaults = {})
# That will allow for defaults to be pulled out of the extension and it
# will also let better enable overriding of those values that do not have
# an option to do so currently.
if params.is_a? Hash
@params = defaults.merge params
else
@params = params
end
@params = if params.is_a? Hash
defaults.merge params
else
params
end
@builder = builder
super @params
end
Expand Down
8 changes: 4 additions & 4 deletions lib/jenkins_pipeline_builder/extensions/job_attributes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
end

xml path: '//project' do |description|
description "#{description}"
description description.to_s
end
end

Expand All @@ -44,7 +44,7 @@
announced false

xml path: '//project' do |jdk|
jdk "#{jdk}"
jdk jdk.to_s
end
end

Expand All @@ -60,7 +60,7 @@
end

xml path: '//project' do |disabled|
disabled "#{disabled}"
disabled disabled.to_s
end
end

Expand Down Expand Up @@ -257,7 +257,7 @@
send('hudson.model.ParametersDefinitionProperty') do
parameterDefinitions do
params.each do |param|
send(params.param_type param) do
send(params.param_type(param)) do
name param[:name]
description param[:description]
defaultValue param[:default]
Expand Down
31 changes: 13 additions & 18 deletions lib/jenkins_pipeline_builder/generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def resolve_job_by_name(name, settings = {})
job_value = job[:value]
logger.debug "Compiling job #{name}"
compiler = JenkinsPipelineBuilder::Compiler.new self
success, payload = compiler.compile(job_value, settings)
success, payload = compiler.compile_job(job_value, settings)
[success, payload]
end

Expand All @@ -115,11 +115,11 @@ def load_job_collection(path)
end

def publish(project_name)
if job_collection.projects.any?
errors = publish_project(project_name)
else
errors = publish_jobs(job_collection.standalone_jobs)
end
errors = if job_collection.projects.any?
publish_project(project_name)
else
publish_jobs(job_collection.standalone_jobs)
end
print_compile_errors errors
errors
end
Expand All @@ -142,12 +142,9 @@ def print_compile_errors(errors)
end

def print_project_errors(errors)
errors.each do |k, v|
puts "Encountered errors processing: #{k}:"
v.each do |key, error|
puts " key: #{key} had the following error:"
puts " #{error.inspect}"
end
errors.each do |error|
puts 'Encountered errors processing:'
puts error.inspect
end
end

Expand Down Expand Up @@ -210,12 +207,10 @@ def create_views(views)

def create_jobs_and_views(project)
success, payload = resolve_project(project)
if success
logger.info 'successfully resolved project'
compiled_project = payload
else
return { project_name: 'Failed to resolve' }
end
return { project_name: 'Failed to resolve' } unless success

logger.info 'successfully resolved project'
compiled_project = payload

errors = publish_jobs(compiled_project[:value][:jobs]) if compiled_project[:value][:jobs]
return errors unless compiled_project[:value][:views]
Expand Down
2 changes: 1 addition & 1 deletion lib/jenkins_pipeline_builder/job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def job_methods

def local_output(xml)
logger.info "Will create job #{job}"
logger.info "#{xml}" if @debug
logger.info xml.to_s if @debug
FileUtils.mkdir_p(out_dir) unless File.exist?(out_dir)
File.open("#{out_dir}/#{name}.xml", 'w') { |f| f.write xml }
[true, nil]
Expand Down
Loading

0 comments on commit 8e8b055

Please sign in to comment.