diff --git a/.rubocop.yml b/.rubocop.yml index 8c23315..818c52d 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -28,18 +28,6 @@ Lint/Eval: Lint/ShadowingOuterLocalVariable: Enabled: false -####### -# We actually want these off - -# Offense count: 2 -Lint/UselessSetterCall: - Enabled: false -####### - -# Offense count: 2 -Style/CaseEquality: - Enabled: false - # Offense count: 2 # Configuration parameters: EnforcedStyle, SupportedStyles. Style/ClassAndModuleChildren: @@ -50,73 +38,19 @@ Style/ClassAndModuleChildren: Style/ClassLength: Max: 506 -# Offense count: 1 -# Cop supports --auto-correct. -Style/CommentIndentation: - Enabled: false - # Offense count: 12 Style/CyclomaticComplexity: Max: 18 -# Offense count: 6 -# Cop supports --auto-correct. -Style/DeprecatedHashMethods: - Enabled: false - # Offense count: 17 Style/Documentation: Enabled: false -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: AllowAdjacentOneLineDefs. -Style/EmptyLineBetweenDefs: - Enabled: false - -# Offense count: 3 -# Cop supports --auto-correct. -Style/EmptyLines: - Enabled: false - -# Offense count: 8 -# Cop supports --auto-correct. -Style/EmptyLinesAroundBody: - Enabled: false - -# Offense count: 8 -# Configuration parameters: MaxLineLength. -Style/IfUnlessModifier: - Enabled: false - -# Offense count: 18 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/IndentHash: - Enabled: false - -# Offense count: 1 -# Cop supports --auto-correct. -Style/IndentationConsistency: - Enabled: false - -# Offense count: 1 -# Cop supports --auto-correct. -Style/IndentationWidth: - Enabled: false - -# Offense count: 4 -Style/Lambda: - Enabled: false - -# Offense count: 11 -# Cop supports --auto-correct. -Style/LeadingCommentSpace: - Enabled: false +####### +# We actually want these off -# Offense count: 1 -# Cop supports --auto-correct. -Style/MethodCallParentheses: +# Offense count: 2 +Lint/UselessSetterCall: Enabled: false # Offense count: 9 @@ -124,105 +58,8 @@ Style/MethodCallParentheses: Style/Next: Enabled: false -# Offense count: 1 -# Cop supports --auto-correct. -Style/NilComparison: - Enabled: false - -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: IncludeSemanticChanges. -Style/NonNilCheck: - Enabled: false - -# Offense count: 7 -# Cop supports --auto-correct. -# Configuration parameters: PreferredDelimiters. -Style/PercentLiteralDelimiters: - Enabled: false - -# Offense count: 10 -# Cop supports --auto-correct. -# Configuration parameters: AllowMultipleReturnValues. -Style/RedundantReturn: - Enabled: false - -# Offense count: 2 -# Cop supports --auto-correct. -Style/RedundantSelf: - Enabled: false - -# Offense count: 3 -# Configuration parameters: MaxSlashes. -Style/RegexpLiteral: - Enabled: false - -# Offense count: 10 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/SignalException: - Enabled: false - -# Offense count: 6 -# Cop supports --auto-correct. -Style/SpaceAfterComma: - Enabled: false - -# Offense count: 5 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/SpaceAroundEqualsInParameterDefault: - Enabled: false - -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/SpaceBeforeBlockBraces: - Enabled: false - -# Offense count: 3 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters. -Style/SpaceInsideBlockBraces: - Enabled: false - -# Offense count: 4 -# Cop supports --auto-correct. -Style/SpaceInsideBrackets: - Enabled: false - -# Offense count: 3 -# Cop supports --auto-correct. -Style/SpaceInsideParens: - Enabled: false - -# Offense count: 1 -# Cop supports --auto-correct. -Style/SpecialGlobalVars: - Enabled: false - -# Offense count: 7 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -Style/TrailingBlankLines: - Enabled: false - -# Offense count: 1 -# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles. -Style/TrailingComma: - Enabled: false - -# Offense count: 11 -# Cop supports --auto-correct. -Style/TrailingWhitespace: - Enabled: false - # Offense count: 7 # Configuration parameters: EnforcedStyle, SupportedStyles. Style/VariableName: Enabled: false - -# Offense count: 1 -# Cop supports --auto-correct. -Style/WordArray: - MinSize: 19 +####### diff --git a/Rakefile b/Rakefile index e7060ae..73228eb 100644 --- a/Rakefile +++ b/Rakefile @@ -20,9 +20,11 @@ # THE SOFTWARE. # -#!/usr/bin/env rake require 'rspec/core/rake_task' require 'yard' +require 'rubocop/rake_task' + +RuboCop::RakeTask.new RSpec::Core::RakeTask.new(:spec, :tag) do |spec| spec.pattern = '.spec/**/*_spec.rb' @@ -67,4 +69,4 @@ namespace :doc do end end -task default: :unit_tests +task default: [:unit_tests, :rubocop] diff --git a/bin/generate b/bin/generate index 182ad7c..a40d2e6 100755 --- a/bin/generate +++ b/bin/generate @@ -21,8 +21,6 @@ # THE SOFTWARE. # - $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib')) require 'jenkins_pipeline_builder' JenkinsPipelineBuilder::CLI::Base.start - diff --git a/jenkins_pipeline_builder.gemspec b/jenkins_pipeline_builder.gemspec index 508f932..66ab815 100644 --- a/jenkins_pipeline_builder.gemspec +++ b/jenkins_pipeline_builder.gemspec @@ -8,15 +8,15 @@ Gem::Specification.new do |spec| spec.version = JenkinsPipelineBuilder::VERSION spec.authors = ['Igor Moochnick'] spec.email = %w(igor.moochnick@gmail.com) - spec.description = %q{This is a simple and easy-to-use Jenkins Pipeline generator with features focused on -automating Job & Pipeline creation from the YAML files checked-in with your application source code} - spec.summary = %q{This gem is will boostrap your Jenkins pipelines} + spec.description = %q(This is a simple and easy-to-use Jenkins Pipeline generator with features focused on +automating Job & Pipeline creation from the YAML files checked-in with your application source code) + spec.summary = %q(This gem is will boostrap your Jenkins pipelines) spec.homepage = 'https://github.com/IgorShare/jenkins_pipeline_builder' spec.license = 'MIT' - spec.files = `git ls-files`.split($/) - spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) + spec.files = `git ls-files`.split($RS) + spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) } + spec.test_files = spec.files.grep(/^(test|spec|features)\//) spec.require_paths = ['lib'] ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = 'true' diff --git a/lib/jenkins_pipeline_builder/builders.rb b/lib/jenkins_pipeline_builder/builders.rb index fda8c73..6a36163 100644 --- a/lib/jenkins_pipeline_builder/builders.rb +++ b/lib/jenkins_pipeline_builder/builders.rb @@ -34,7 +34,7 @@ def self.build_multijob(params, xml) xml.exposedSCM job[:exposed_scm] || false if job[:config] xml.configs do - if job[:config].has_key? :predefined_build_parameters + if job[:config].key? :predefined_build_parameters xml.send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do xml.properties job[:config][:predefined_build_parameters].join "\n" end @@ -73,13 +73,13 @@ def self.build_environment_vars_injector(params, xml) end def self.blocking_downstream(params, xml) - colors = { 'SUCCESS' => { ordinal: 0, color: 'BLUE' },'FAILURE' => { ordinal: 2, color: 'RED' },'UNSTABLE' => { ordinal: 1, color: 'YELLOW' } } + colors = { 'SUCCESS' => { ordinal: 0, color: 'BLUE' }, 'FAILURE' => { ordinal: 2, color: 'RED' }, 'UNSTABLE' => { ordinal: 1, color: 'YELLOW' } } xml.send('hudson.plugins.parameterizedtrigger.TriggerBuilder', 'plugin' => 'parameterized-trigger') do xml.configs do xml.send('hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig') do xml.configs do - params[:data] = [ { params: '' } ] unless params[:data] + params[:data] = [{ params: '' }] unless params[:data] params[:data].each do |config| if config[:params] xml.send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do @@ -170,6 +170,5 @@ def self.start_remote_job(params, xml) end end end - end end diff --git a/lib/jenkins_pipeline_builder/cli/base.rb b/lib/jenkins_pipeline_builder/cli/base.rb index cef6a9b..36e94d2 100644 --- a/lib/jenkins_pipeline_builder/cli/base.rb +++ b/lib/jenkins_pipeline_builder/cli/base.rb @@ -21,12 +21,10 @@ # require 'thor' -#require "#{File.dirname(__FILE__)}/pipeline.rb" module JenkinsPipelineBuilder module CLI class Base < Thor - class_option :username, aliases: '-u', desc: 'Name of Jenkins user' class_option :password, aliases: '-p', desc: 'Password of Jenkins user' class_option :password_base64, aliases: '-b', desc: 'Base 64 encoded password of Jenkins user' @@ -35,7 +33,6 @@ class Base < Thor class_option :creds_file, aliases: '-c', desc: 'Credentials file for communicating with Jenkins server' class_option :debug, type: :boolean, aliases: '-d', desc: 'Run in debug mode (no Jenkins changes)', default: false - map '-v' => :version desc 'version', 'Shows current version' diff --git a/lib/jenkins_pipeline_builder/cli/helper.rb b/lib/jenkins_pipeline_builder/cli/helper.rb index 09ba9b8..ac01035 100644 --- a/lib/jenkins_pipeline_builder/cli/helper.rb +++ b/lib/jenkins_pipeline_builder/cli/helper.rb @@ -44,16 +44,10 @@ def self.setup(options) (options[:password] || options[:password_base64]) creds = options elsif options[:creds_file] - creds = YAML.load_file( - File.expand_path(options[:creds_file]) - #File.expand_path(options[:creds_file], __FILE__) - #options[:creds_file] - ) + creds = YAML.load_file(File.expand_path(options[:creds_file])) elsif File.exist?("#{ENV['HOME']}/.jenkins_api_client/login.yml") creds = YAML.load_file( - File.expand_path( - "#{ENV['HOME']}/.jenkins_api_client/login.yml", __FILE__ - ) + File.expand_path("#{ENV['HOME']}/.jenkins_api_client/login.yml", __FILE__) ) else msg = 'Credentials are not set. Please pass them as parameters or' @@ -62,11 +56,10 @@ def self.setup(options) exit 1 end - #creds[:log_level] = Logger::DEBUG client = JenkinsApi::Client.new(creds) generator = JenkinsPipelineBuilder::Generator.new(client) - generator.debug = options[:debug] #== 'debug' - return generator + generator.debug = options[:debug] + generator end end end diff --git a/lib/jenkins_pipeline_builder/cli/view.rb b/lib/jenkins_pipeline_builder/cli/view.rb index 28ef6ce..bbf673f 100644 --- a/lib/jenkins_pipeline_builder/cli/view.rb +++ b/lib/jenkins_pipeline_builder/cli/view.rb @@ -37,4 +37,4 @@ def create(path) end end end -end \ No newline at end of file +end diff --git a/lib/jenkins_pipeline_builder/compiler.rb b/lib/jenkins_pipeline_builder/compiler.rb index 068b335..45c5519 100644 --- a/lib/jenkins_pipeline_builder/compiler.rb +++ b/lib/jenkins_pipeline_builder/compiler.rb @@ -42,7 +42,7 @@ def self.resolve_value(value, settings, job_collection) var_val.nil? end return nil if vars.count != 0 - return value_s + value_s end def self.get_settings_bag(item_bag, settings_bag = {}) @@ -58,7 +58,7 @@ def self.get_settings_bag(item_bag, settings_bag = {}) end end my_settings_bag = settings_bag.clone - return my_settings_bag.merge(bag) + my_settings_bag.merge(bag) end def self.compile(item, settings = {}, job_collection = {}) @@ -66,12 +66,8 @@ def self.compile(item, settings = {}, job_collection = {}) case item when String new_value = resolve_value(item, settings, job_collection) - if new_value.nil? - errors[item] = "Failed to resolve #{item}" - end - unless errors.empty? - return false, errors - end + errors[item] = "Failed to resolve #{item}" if new_value.nil? + return false, errors unless errors.empty? return true, new_value when Hash result = {} @@ -91,9 +87,7 @@ def self.compile(item, settings = {}, job_collection = {}) end result[key] = payload end - unless errors.empty? - return false, errors - end + return false, errors unless errors.empty? return true, result when Array result = [] @@ -113,12 +107,10 @@ def self.compile(item, settings = {}, job_collection = {}) end result << payload end - unless errors.empty? - return false, errors - end + return false, errors unless errors.empty? return true, result end - return true, item + [true, item] end end end diff --git a/lib/jenkins_pipeline_builder/generator.rb b/lib/jenkins_pipeline_builder/generator.rb index 77bc291..71b3d3b 100644 --- a/lib/jenkins_pipeline_builder/generator.rb +++ b/lib/jenkins_pipeline_builder/generator.rb @@ -38,7 +38,7 @@ class Generator def initialize(client) @client = client @logger = @client.logger - #@logger.level = (@debug) ? Logger::DEBUG : Logger::INFO; + # @logger.level = (@debug) ? Logger::DEBUG : Logger::INFO; @job_templates = {} @job_collection = {} @extensions = {} @@ -65,7 +65,7 @@ def initialize(client) remote_job: Builders.method(:start_remote_job) }, method: - lambda { |registry, params, n_xml| @module_registry.run_registry_on_path('//builders', registry, params, n_xml) } + ->(registry, params, n_xml) { @module_registry.run_registry_on_path('//builders', registry, params, n_xml) } }, publishers: { registry: { @@ -79,7 +79,7 @@ def initialize(client) groovy_postbuild: Publishers.method(:groovy_postbuild) }, method: - lambda { |registry, params, n_xml| @module_registry.run_registry_on_path('//publishers', registry, params, n_xml) } + ->(registry, params, n_xml) { @module_registry.run_registry_on_path('//publishers', registry, params, n_xml) } }, wrappers: { registry: { @@ -93,7 +93,7 @@ def initialize(client) maven3artifactory: Wrappers.method(:artifactory_maven3_configurator) }, method: - lambda { |registry, params, n_xml| @module_registry.run_registry_on_path('//buildWrappers', registry, params, n_xml) } + ->(registry, params, n_xml) { @module_registry.run_registry_on_path('//buildWrappers', registry, params, n_xml) } }, triggers: { registry: { @@ -103,7 +103,7 @@ def initialize(client) upstream: Triggers.method(:enable_upstream_check) }, method: - lambda { |registry, params, n_xml| @module_registry.run_registry_on_path('//triggers', registry, params, n_xml) } + ->(registry, params, n_xml) { @module_registry.run_registry_on_path('//triggers', registry, params, n_xml) } } } ) @@ -123,7 +123,7 @@ def load_extensions(path) name = ext[:name] type = ext[:type] function = ext[:function] - raise "Duplicate extension with name '#{name}' was detected." if @extensions.has_key?(name) + fail "Duplicate extension with name '#{name}' was detected." if @extensions.key?(name) @extensions[name.to_s] = { name: name.to_s, type: type, function: function } end end @@ -159,7 +159,7 @@ def view JenkinsPipelineBuilder::View.new(self) end - def load_collection_from_path(path, recursively = false, remote=false) + def load_collection_from_path(path, recursively = false, remote = false) path = File.expand_path(path, Dir.getwd) if File.directory?(path) @logger.info "Generating from folder #{path}" @@ -182,7 +182,7 @@ def load_collection_from_path(path, recursively = false, remote=false) end end - def load_job_collection(yaml, remote=false) + def load_job_collection(yaml, remote = false) yaml.each do |section| Utils.symbolize_keys_deep!(section) key = section.keys.first @@ -193,11 +193,11 @@ def load_job_collection(yaml, remote=false) end name = value[:name] - if @job_collection.has_key?(name) + if @job_collection.key?(name) if remote @logger.info "Duplicate item with name '#{name}' was detected from the remote folder." else - raise "Duplicate item with name '#{name}' was detected." + fail "Duplicate item with name '#{name}' was detected." end else @job_collection[name.to_s] = { name: name.to_s, type: key, value: value } @@ -318,7 +318,7 @@ def process_job_changes(jobs) end end - def process_views(views, project, errors={}) + def process_views(views, project, errors = {}) views.map! do |view| view.kind_of?(String) ? { view.to_sym => {} } : view end @@ -336,7 +336,7 @@ def process_views(views, project, errors={}) errors end - def process_jobs(jobs, project, errors={}) + def process_jobs(jobs, project, errors = {}) jobs.each do |job| job_id = job.keys.first settings = project[:settings].clone.merge(job[job_id]) @@ -363,7 +363,7 @@ def resolve_project(project) errors = process_jobs(jobs, project) errors = process_view(project_body[:views], project, errors) if project_body[:views] - errors.each do |k,v| + errors.each do |k, v| puts "Encountered errors processing: #{k}:" v.each do |key, error| puts " key: #{key} had the following error:" @@ -372,16 +372,16 @@ def resolve_project(project) end return false, 'Encountered errors exiting' unless errors.empty? - return true, project + [true, project] end def resolve_job_by_name(name, settings = {}) job = get_item(name) - raise "Failed to locate job by name '#{name}'" if job.nil? + fail "Failed to locate job by name '#{name}'" if job.nil? job_value = job[:value] @logger.debug "Compiling job #{name}" success, payload = Compiler.compile(job_value, settings, @job_collection) - return success, payload + [success, payload] end def projects @@ -389,7 +389,7 @@ def projects @job_collection.values.each do |item| result << item if item[:type] == :project end - return result + result end def jobs @@ -397,10 +397,10 @@ def jobs @job_collection.values.each do |item| result << item if item[:type] == :job end - return result + result end - def publish_project(project_name, errors={}) + def publish_project(project_name, errors = {}) projects.each do |project| next if project_name && project[:name] == project_name success, payload = resolve_project(project) @@ -439,6 +439,7 @@ def publish_jobs(jobs, errors = {}) end errors end + def bootstrap(path, project_name) @logger.info "Bootstrapping pipeline from path #{path}" load_collection_from_path(path) @@ -451,7 +452,7 @@ def bootstrap(path, project_name) else errors = publish_project(project_name) end - errors.each do |k,v| + errors.each do |k, v| @logger.error "Encountered errors compiling: #{k}:" @logger.error v end @@ -464,7 +465,7 @@ def pull_request(path, project_name) load_extensions(path) jobs = {} projects.each do |project| - if project[:name] == project_name || project_name == nil + if project[:name] == project_name || project_name.nil? project_body = project[:value] project_jobs = project_body[:jobs] || [] @logger.info "Using Project #{project}" @@ -473,7 +474,7 @@ def pull_request(path, project_name) job = @job_collection[job.to_s] pull_job = job if job[:value][:job_type] == 'pull_request_generator' end - raise 'No Pull Request Found for Project' unless pull_job + fail 'No Pull Request Found for Project' unless pull_job pull_jobs = pull_job[:value][:jobs] || [] pull_jobs.each do |job| if job.is_a? String @@ -512,7 +513,7 @@ def create_or_update(job, xml) end def compile_job_to_xml(job) - raise 'Job name is not specified' unless job[:name] + fail 'Job name is not specified' unless job[:name] @logger.info "Creating Yaml Job #{job}" job[:job_type] = 'free_style' unless job[:job_type] @@ -532,20 +533,20 @@ def compile_job_to_xml(job) return false, "Job type: #{job[:job_type]} is not one of job_dsl, multi_project, build_flow or free_style" end - return true, payload + [true, payload] end def adjust_multi_project(xml) n_xml = Nokogiri::XML(xml) - root = n_xml.root() + root = n_xml.root root.name = 'com.tikal.jenkins.plugins.multijob.MultiJobProject' n_xml.to_xml end def compile_freestyle_job_to_xml(params) - if params.has_key?(:template) + if params.key?(:template) template_name = params[:template] - raise "Job template '#{template_name}' can't be resolved." unless @job_templates.has_key?(template_name) + fail "Job template '#{template_name}' can't be resolved." unless @job_templates.key?(template_name) params.delete(:template) template = @job_templates[template_name] puts "Template found: #{template}" @@ -599,7 +600,7 @@ def generate_job_dsl_body(params) def build_job_dsl(job, xml) xml.send('javaposse.jobdsl.plugin.ExecuteDslScripts') do - if job.has_key?(:job_dsl) + if job.key?(:job_dsl) xml.scriptText job[:job_dsl] xml.usingScriptText true else diff --git a/lib/jenkins_pipeline_builder/job_builder.rb b/lib/jenkins_pipeline_builder/job_builder.rb index a2f57d8..de4c417 100644 --- a/lib/jenkins_pipeline_builder/job_builder.rb +++ b/lib/jenkins_pipeline_builder/job_builder.rb @@ -38,7 +38,7 @@ def self.apply_scm_params(params, n_xml) end def self.hipchat_notifier(params, n_xml) - raise 'No HipChat room specified' unless params[:room] + fail 'No HipChat room specified' unless params[:room] properties = n_xml.xpath('//properties').first Nokogiri::XML::Builder.with(properties) do |xml| @@ -152,6 +152,5 @@ def self.concurrent_build(params, n_xml) concurrentBuild = n_xml.xpath('//concurrentBuild').first concurrentBuild.content = (params == true) ? 'true' : 'false' end - end end diff --git a/lib/jenkins_pipeline_builder/module_registry.rb b/lib/jenkins_pipeline_builder/module_registry.rb index 556ed61..609ae19 100644 --- a/lib/jenkins_pipeline_builder/module_registry.rb +++ b/lib/jenkins_pipeline_builder/module_registry.rb @@ -30,14 +30,12 @@ def initialize(registry) def get(path) parts = path.split('/') - self.get_by_path_collection(parts, @registry) + get_by_path_collection(parts, @registry) end def get_by_path_collection(path, registry) item = registry[path.shift.to_sym] - if path.count == 0 - return item - end + return item if path.count == 0 get_by_path_collection(path, item) end diff --git a/lib/jenkins_pipeline_builder/publishers.rb b/lib/jenkins_pipeline_builder/publishers.rb index 3022e3d..a195014 100644 --- a/lib/jenkins_pipeline_builder/publishers.rb +++ b/lib/jenkins_pipeline_builder/publishers.rb @@ -37,7 +37,7 @@ def self.push_to_projects(params, xml) xml.configs do xml.send('hudson.plugins.parameterizedtrigger.BuildTriggerConfig') do xml.configs do - params[:data] = [ { params: '' } ] unless params[:data] + params[:data] = [{ params: '' }] unless params[:data] params[:data].each do |config| if config[:params] xml.send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do @@ -139,6 +139,5 @@ def self.groovy_postbuild(params, xml) end end end - end end diff --git a/lib/jenkins_pipeline_builder/pull_request.rb b/lib/jenkins_pipeline_builder/pull_request.rb index c95ae28..9ce41d4 100644 --- a/lib/jenkins_pipeline_builder/pull_request.rb +++ b/lib/jenkins_pipeline_builder/pull_request.rb @@ -41,25 +41,25 @@ def initialize(generator) # args[:git_org] The Orig user ex. igorshare # @return = array of pull request numbers def check_for_pull(args) - raise 'Please specify all arguments' unless args[:git_url] && args[:git_org] && args[:git_repo] + fail 'Please specify all arguments' unless args[:git_url] && args[:git_org] && args[:git_repo] # Build the Git URL git_url = "#{args[:git_url]}api/v3/repos/#{args[:git_org]}/#{args[:git_repo]}/pulls" # Download the JSON Data from the API resp = Net::HTTP.get_response(URI.parse(git_url)) pulls = JSON.parse(resp.body) - pulls.map{ |p| p['number']} + pulls.map { |p| p['number'] } end # Purge old builds def purge_old(pull_requests, project) - reqs = pull_requests.clone.map {|req| "#{project[:name]}-PR#{req}" } + reqs = pull_requests.clone.map { |req| "#{project[:name]}-PR#{req}" } @logger.info "Current pull requests: #{reqs}" # Read File old_requests = File.new('pull_requests.csv', 'a+').read.split(',') # Pop off current pull requests - old_requests.delete_if { |req| reqs.include?("#{req}")} + old_requests.delete_if { |req| reqs.include?("#{req}") } # Delete the old requests from jenkins @logger.info "Purging old requests: #{old_requests}" @@ -93,17 +93,13 @@ def run(project, job_collection, generator_job) compiled_project[:value][:jobs].each do |i| job = i[:result] success, payload = @generator.compile_job_to_xml(job) - if success - @generator.create_or_update(job, payload) - end + @generator.create_or_update(job, payload) if success end end end - end - class PullRequest - # Accessors + class PullRequest attr_reader :project # The root project YAML as a hash attr_reader :number # The pull request number attr_reader :jobs # The jobs in the pull request as an array of hashes @@ -111,13 +107,11 @@ class PullRequest # Initialize def initialize(project, number, jobs, generator) - # Set instance vars @project = project.clone @number = number @jobs = jobs.clone @generator = generator.clone - # Run run! end @@ -152,18 +146,11 @@ def update_jobs! changes = nil # Search the generator for changes @generator[:value][:jobs].each do |gen| - if gen.is_a? Hash - if gen.keys[0] == name.to_sym - changes = gen[name.to_sym] - end - end + changes = gen[name.to_sym] if gen.is_a?(Hash) && gen.keys[0] == name.to_sym end # Apply changes - if changes != nil - Utils.hash_merge!(job[:value], changes) - end + Utils.hash_merge!(job[:value], changes) unless changes.nil? end end - - end # class -end # module + end +end diff --git a/lib/jenkins_pipeline_builder/triggers.rb b/lib/jenkins_pipeline_builder/triggers.rb index 36fbe3f..7d01649 100644 --- a/lib/jenkins_pipeline_builder/triggers.rb +++ b/lib/jenkins_pipeline_builder/triggers.rb @@ -67,6 +67,5 @@ def self.enable_upstream_check(params, xml) end end end - end end diff --git a/lib/jenkins_pipeline_builder/utils.rb b/lib/jenkins_pipeline_builder/utils.rb index 50b8d4a..ac55739 100644 --- a/lib/jenkins_pipeline_builder/utils.rb +++ b/lib/jenkins_pipeline_builder/utils.rb @@ -23,8 +23,8 @@ module JenkinsPipelineBuilder class ::Hash def deep_merge(second) - merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 } - self.merge(second, &merger) + merger = proc { |_key, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? v1.merge(v2, &merger) : v2 } + merge(second, &merger) end end @@ -36,10 +36,7 @@ def self.symbolize_keys_deep!(h) ks = k.respond_to?(:to_sym) ? k.to_sym : k h[ks] = h.delete k # Preserve order even when k == ks symbolize_keys_deep! h[ks] if h[ks].kind_of? Hash - if h[ks].kind_of? Array - #puts "Array #{h[ks]}" - h[ks].each { |item| symbolize_keys_deep!(item) } - end + h[ks].each { |item| symbolize_keys_deep!(item) } if h[ks].is_a?(Array) end end def self.hash_merge!(old, new) diff --git a/lib/jenkins_pipeline_builder/view.rb b/lib/jenkins_pipeline_builder/view.rb index b5219e5..5eac208 100644 --- a/lib/jenkins_pipeline_builder/view.rb +++ b/lib/jenkins_pipeline_builder/view.rb @@ -58,7 +58,7 @@ def get_mode(type) when 'multijobView' 'com.tikal.jenkins.plugins.multijob.views.MultiJobView' else - raise "Type #{type} is not supported by Jenkins." + fail "Type #{type} is not supported by Jenkins." end end @@ -110,7 +110,7 @@ def create_base_view(view_name, type = 'listview', parent_view_name = nil) # def create(params) # Name is a required parameter. Raise an error if not specified - raise ArgumentError, 'Name is required for creating view' unless params.is_a?(Hash) && params[:name] + fail ArgumentError, 'Name is required for creating view' unless params.is_a?(Hash) && params[:name] unless @generator.debug # If we have a parent view, we need to do some additional checks if params[:parent_view] @@ -228,7 +228,7 @@ def get_columns(type) column_names.each do |name| result << columns_repository[name] end - return result + result end def path_encode(path) diff --git a/lib/jenkins_pipeline_builder/xml_helper.rb b/lib/jenkins_pipeline_builder/xml_helper.rb index d0d2b5a..f5a480d 100644 --- a/lib/jenkins_pipeline_builder/xml_helper.rb +++ b/lib/jenkins_pipeline_builder/xml_helper.rb @@ -25,7 +25,7 @@ class XmlHelper def self.update_node_text(n_xml, path, value) n_node = n_xml.xpath(path).first if n_node.nil? - left, right = path.match(/^(.*)\/([^\/]*)$/).captures + left, right = path.match(%r{^(.*)/([^/]*)$}).captures parent_node = n_xml.xpath(left).first Nokogiri::XML::Builder.with(parent_node) do |xml| xml.send(right) do diff --git a/spec/func_tests/view_spec.rb b/spec/func_tests/view_spec.rb index cbccd30..c2b7d5a 100644 --- a/spec/func_tests/view_spec.rb +++ b/spec/func_tests/view_spec.rb @@ -76,10 +76,10 @@ def test_and_validate(params) groupingRules: [{ groupRegex: 'Step-1.*', namingRule: '1. Commit' - },{ + }, { groupRegex: 'Step-2.*', namingRule: '2. Acceptance' - },{ + }, { groupRegex: 'Step-3.*', namingRule: '3. Release' }] diff --git a/spec/unit_tests/compiler_spec.rb b/spec/unit_tests/compiler_spec.rb index 2ac709f..8a2b4b8 100644 --- a/spec/unit_tests/compiler_spec.rb +++ b/spec/unit_tests/compiler_spec.rb @@ -3,13 +3,13 @@ describe 'Compiler' do it 'transforms hash into hash' do hash = { - a: 'A sentence', - b: 'B sentence', - hash: { - c: 5, - d: true - }, - z: false + a: 'A sentence', + b: 'B sentence', + hash: { + c: 5, + d: true + }, + z: false } success, result = JenkinsPipelineBuilder::Compiler.compile(hash) diff --git a/spec/unit_tests/generator_spec.rb b/spec/unit_tests/generator_spec.rb index ca71c64..bef3c85 100644 --- a/spec/unit_tests/generator_spec.rb +++ b/spec/unit_tests/generator_spec.rb @@ -27,27 +27,27 @@ def compare_jobs(job, path) doc1.should be_equivalent_to(doc2) end - files = [ - 'Job-Multi-Project', - 'Job-Build-Maven', - 'Job-Build-Flow', - 'Job-Gem-Build', - 'post_build_script', - 'properties_file', - 'downstream', - 'upstream', - 'rvm05', - 'prepare_environment', - 'remote_job', - 'throttle', - 'specific_priority', - 'periodic_build', - 'discard_old', - 'concurrent_build', - 'choice_parameter', - 'downstream_blocking', - 'groovy_postbuild' - ] + files = %w( + Job-Multi-Project + Job-Build-Maven + Job-Build-Flow + Job-Gem-Build + post_build_script + properties_file + downstream + upstream + rvm05 + prepare_environment + remote_job + throttle + specific_priority + periodic_build + discard_old + concurrent_build + choice_parameter + downstream_blocking + groovy_postbuild + ) files.each do |file| it "should create expected XML from YAML '#{file}'" do diff --git a/spec/unit_tests/resolve_dependencies_spec.rb b/spec/unit_tests/resolve_dependencies_spec.rb index 746d41d..e324ca0 100644 --- a/spec/unit_tests/resolve_dependencies_spec.rb +++ b/spec/unit_tests/resolve_dependencies_spec.rb @@ -16,36 +16,36 @@ describe 'resolving settings bags' do it 'gives a bag when all the variables can be resolved' do - str = %{ + str = %( - project: name: project-name db: my_own_db_{{else}} - } + ) project = YAML.load(str) @generator.load_job_collection project - #@generator.resolve_item('project-name') + # @generator.resolve_item('project-name') settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), db: 'blah', else: 'bum') settings.should == { name: 'project-name', db: 'my_own_db_bum', else: 'bum' } end it 'returns nil when all the variables cant be resolved' do - str = %{ + str = %( - project: name: project-name db: my_own_db_{{else}}_{{blah}} - } + ) project = YAML.load(str) @generator.load_job_collection project - #@generator.resolve_item('project-name') + # @generator.resolve_item('project-name') settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), db: 'blah', else: 'bum') settings.should be_nil end end it 'starts with the defaults section for settings bag' do - str = %{ + str = %( - defaults: name: global description: 'Do not edit this job through the web!' @@ -59,7 +59,7 @@ db: my_own_db jobs: - 'foo-bar' - } + ) project = YAML.load(str) @generator.load_job_collection project @@ -91,7 +91,7 @@ end it 'should build project collection from jobs templates' do - str = %{ + str = %( - job-template: name: '{{name}}-unit-tests' builders: @@ -116,7 +116,7 @@ mail-to: developer@nowhere.net - '{{name}}-perf-tests': mail-to: projmanager@nowhere.net -} +) project = YAML.load(str) @generator.load_job_collection project @@ -150,7 +150,7 @@ end it 'should build project collection from jobs and jobs templates' do - str = %{ + str = %( - job-template: name: '{{name}}-unit-tests' builders: @@ -171,13 +171,13 @@ - 'foo-bar' - '{{name}}-unit-tests': mail-to: projmanager@nowhere.net -} +) project = YAML.load(str) @generator.load_job_collection project success, project = @generator.resolve_project(@generator.get_item('project-name')) - expect(success).to be_true + expect(success).to be_true expect(project).to eq( name: 'project-name', type: :project, @@ -203,7 +203,6 @@ ) end - describe 'compilation of templates' do it 'compiles String' do success, string = JenkinsPipelineBuilder::Compiler.compile('blah', item1: 'data1') diff --git a/spec/unit_tests/spec_helper.rb b/spec/unit_tests/spec_helper.rb index 861b8c7..9de5a48 100644 --- a/spec/unit_tests/spec_helper.rb +++ b/spec/unit_tests/spec_helper.rb @@ -19,7 +19,7 @@ def format(result) end end -SimpleCov.start 'spec' #if ENV["COVERAGE"] +SimpleCov.start 'spec' # if ENV["COVERAGE"] require File.expand_path('../../../lib/jenkins_pipeline_builder', __FILE__) require 'rspec/matchers'