From 2cfb1a84d4498d676e11ff2116f60f5a5cbc1afd Mon Sep 17 00:00:00 2001 From: Christopher Thorn Date: Fri, 9 Aug 2024 11:38:58 -0700 Subject: [PATCH 1/2] (PA-6886) Add Digicert to Solaris images The DigiCertGlobalRootG2 is now used by Artifactory and the VMs we're using for Solaris don't contain that cert by default. We for sure update our images to include that, but until that is done we need to make sure to use it. Also, in our case the OpenSSL used on our Solaris VMs is ancient and doesn't support openssl-rehash, so we have to create the sim link ourself. Once we update our images this commit can be reverted. --- CHANGELOG.md | 3 ++ .../platform/defaults/solaris-11-i386.rb | 34 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cfeafe5..13efd6c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ This changelog adheres to [Keep a CHANGELOG](https://keepachangelog.com). ## [Unreleased] +### Added +- Add DigiCertGlobalRootG2 cert as part of Solaris default + ## [0.52.0] - 2024-06-03 ### Added - Add Amazon 2 (ARM) platform definition to vanagon diff --git a/lib/vanagon/platform/defaults/solaris-11-i386.rb b/lib/vanagon/platform/defaults/solaris-11-i386.rb index b6f0e6ff..972706e1 100644 --- a/lib/vanagon/platform/defaults/solaris-11-i386.rb +++ b/lib/vanagon/platform/defaults/solaris-11-i386.rb @@ -1,9 +1,43 @@ platform "solaris-11-i386" do |plat| + +# Source: https://www.digicert.com/kb/digicert-root-certificates.htm +# Valid until: 15/Jan/2038 +# Serial #: 03:3A:F1:E6:A7:11:A9:A0:BB:28:64:B1:1D:09:FA:E5 +# SHA256 Fingerprint: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F +# https://perforce.atlassian.net/browse/RE-16540 for long term fix for this +DigiCertGlobalRootG2 = <<-STRING +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- +STRING plat.servicedir "/lib/svc/manifest" plat.defaultdir "/lib/svc/method" plat.servicetype "smf" plat.vmpooler_template "solaris-11-x86_64" + plat.provision_with "echo '#{DigiCertGlobalRootG2}'> /etc/openssl/certs/DigiCertGlobalRootG2.pem" + plat.provision_with 'chmod a+r /etc/openssl/certs/DigiCertGlobalRootG2.pem' + plat.provision_with 'ln -s /etc/openssl/certs/DigiCertGlobalRootG2.pem /etc/openssl/certs/607986c7.0' + plat.provision_with '/usr/sbin/svcadm restart /system/ca-certificates' plat.add_build_repository "http://solaris-11-reposync.delivery.puppetlabs.net:81", "puppetlabs.com" plat.install_build_dependencies_with "pkg install ", " || [[ $? -eq 4 ]]" end From 368dcd789e270a0d6dbc28fc2b08763ca382a712 Mon Sep 17 00:00:00 2001 From: Jeffrey Clark Date: Sun, 4 Aug 2024 15:32:05 +0000 Subject: [PATCH 2/2] enable newcops and remove cops not explicitly installed removed cops are provided by gems not explicitly installed they seem to be installed using the setup ruby action, but not when testing in a ruby docker image either way, they are covered by enabling newcops fix rubocop namespaces bump rubocop target ruby version fix tests that depend on docker command existing discovered when running test suite with ruby:3.2 image on docker (maint) Rubocop 1.65.1 Autocorrect fixes --- .rubocop.yml | 50 +++---------------- CHANGELOG.md | 3 +- lib/vanagon/cli/build.rb | 2 +- lib/vanagon/cli/build_host_info.rb | 2 +- lib/vanagon/cli/build_requirements.rb | 7 ++- lib/vanagon/cli/completion.rb | 2 +- lib/vanagon/cli/dependencies.rb | 12 ++--- lib/vanagon/cli/inspect.rb | 2 +- lib/vanagon/cli/list.rb | 2 +- lib/vanagon/cli/render.rb | 2 +- lib/vanagon/cli/ship.rb | 2 +- lib/vanagon/cli/sign.rb | 2 +- lib/vanagon/common/user.rb | 8 +-- lib/vanagon/component.rb | 40 +++++++-------- lib/vanagon/engine/docker.rb | 10 ++-- lib/vanagon/logger.rb | 2 +- lib/vanagon/platform/deb.rb | 2 +- .../platform/defaults/solaris-11-i386.rb | 3 +- lib/vanagon/platform/dsl.rb | 6 +-- lib/vanagon/platform/osx.rb | 2 +- lib/vanagon/platform/rpm.rb | 2 +- lib/vanagon/platform/rpm/aix.rb | 2 +- lib/vanagon/platform/rpm/eos.rb | 4 +- lib/vanagon/platform/solaris_10.rb | 2 +- lib/vanagon/platform/solaris_11.rb | 2 +- lib/vanagon/platform/windows.rb | 2 +- lib/vanagon/project.rb | 5 +- lib/vanagon/utilities.rb | 12 ++--- spec/lib/vanagon/engine/docker_spec.rb | 8 +-- vanagon.gemspec | 14 +++--- 30 files changed, 85 insertions(+), 129 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 5180d598..998a2a8e 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -5,7 +5,8 @@ require: - rubocop-rspec AllCops: - TargetRubyVersion: 2.3 + TargetRubyVersion: 2.7 + NewCops: enable Exclude: - "**/*.erb" - spec/**/* @@ -13,21 +14,6 @@ AllCops: - examples/**/* - lib/vanagon/platform/defaults/* -Capybara/MatchStyle: - Enabled: true - -Capybara/NegationMatcher: - Enabled: true - -Capybara/SpecificActions: - Enabled: true - -Capybara/SpecificFinders: - Enabled: true - -Capybara/SpecificMatcher: - Enabled: true - Gemspec/DeprecatedAttributeAssignment: Enabled: true @@ -395,15 +381,6 @@ RSpec/DuplicatedMetadata: RSpec/ExcessiveDocstringSpacing: Enabled: true -RSpec/FactoryBot/ConsistentParenthesesStyle: - Enabled: true - -RSpec/FactoryBot/FactoryNameStyle: - Enabled: true - -RSpec/FactoryBot/SyntaxMethods: - Enabled: true - RSpec/IdenticalEqualityAssertion: Enabled: true @@ -416,21 +393,6 @@ RSpec/NoExpectationExample: RSpec/PendingWithoutReason: Enabled: true -RSpec/Rails/AvoidSetupHook: - Enabled: true - -RSpec/Rails/HaveHttpStatus: - Enabled: true - -RSpec/Rails/InferredSpecType: - Enabled: true - -RSpec/Rails/MinitestAssertions: - Enabled: true - -RSpec/Rails/TravelAround: - Enabled: true - RSpec/RedundantAround: Enabled: true @@ -446,16 +408,16 @@ RSpec/SubjectDeclaration: RSpec/VerifiedDoubleReference: Enabled: true -Rspec/BeforeAfterAll: +RSpec/BeforeAfterAll: Enabled: false -Rspec/ExampleLength: +RSpec/ExampleLength: Enabled: false -Rspec/HookArgument: +RSpec/HookArgument: Enabled: false -Rspec/MultipleMemoizedHelpers: +RSpec/MultipleMemoizedHelpers: Enabled: false Security/CompoundHash: diff --git a/CHANGELOG.md b/CHANGELOG.md index 13efd6c0..c0c8c8eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,9 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org). This changelog adheres to [Keep a CHANGELOG](https://keepachangelog.com). - +### Changed ## [Unreleased] +- Bump minimum ruby requirement to 2.7 ### Added - Add DigiCertGlobalRootG2 cert as part of Solaris default diff --git a/lib/vanagon/cli/build.rb b/lib/vanagon/cli/build.rb index 3197dbcf..69c3f1ee 100644 --- a/lib/vanagon/cli/build.rb +++ b/lib/vanagon/cli/build.rb @@ -71,7 +71,7 @@ def options_translate(docopt_options) '' => :platforms, '' => :targets } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end def options_validate(options) diff --git a/lib/vanagon/cli/build_host_info.rb b/lib/vanagon/cli/build_host_info.rb index c49745f1..02eb731f 100644 --- a/lib/vanagon/cli/build_host_info.rb +++ b/lib/vanagon/cli/build_host_info.rb @@ -51,7 +51,7 @@ def options_translate(docopt_options) '' => :platforms, '' => :targets } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end end end diff --git a/lib/vanagon/cli/build_requirements.rb b/lib/vanagon/cli/build_requirements.rb index 9fa4b2e7..419302aa 100644 --- a/lib/vanagon/cli/build_requirements.rb +++ b/lib/vanagon/cli/build_requirements.rb @@ -39,9 +39,8 @@ def run(options) # rubocop:disable Metrics/AbcSize components = driver.project.components component_names = components.map(&:name) - build_requirements = [] - components.each do |component| - build_requirements << component.build_requires.reject do |requirement| + build_requirements = components.map do |component| + component.build_requires.reject do |requirement| # only include external requirements: i.e. those that do not match # other components in the project component_names.include?(requirement) @@ -61,7 +60,7 @@ def options_translate(docopt_options) '' => :project_name, '' => :platform, } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end end end diff --git a/lib/vanagon/cli/completion.rb b/lib/vanagon/cli/completion.rb index 8d291b56..a6fad621 100644 --- a/lib/vanagon/cli/completion.rb +++ b/lib/vanagon/cli/completion.rb @@ -37,7 +37,7 @@ def options_translate(docopt_options) translations = { '--shell' => :shell, } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end end end diff --git a/lib/vanagon/cli/dependencies.rb b/lib/vanagon/cli/dependencies.rb index b0cdb99a..7cf054b7 100644 --- a/lib/vanagon/cli/dependencies.rb +++ b/lib/vanagon/cli/dependencies.rb @@ -35,12 +35,10 @@ def run(options) projects.each do |project| platforms.each do |platform| - begin - artifact = Vanagon::Driver.new(platform, project, options) - artifact.dependencies - rescue RuntimeError => e - failures.push("#{project}, #{platform}: #{e}") - end + artifact = Vanagon::Driver.new(platform, project, options) + artifact.dependencies + rescue RuntimeError => e + failures.push("#{project}, #{platform}: #{e}") end end @@ -92,7 +90,7 @@ def options_translate(docopt_options) '' => :project_name, '' => :platforms } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end end end diff --git a/lib/vanagon/cli/inspect.rb b/lib/vanagon/cli/inspect.rb index 8b5fbb49..fea6539d 100644 --- a/lib/vanagon/cli/inspect.rb +++ b/lib/vanagon/cli/inspect.rb @@ -56,7 +56,7 @@ def options_translate(docopt_options) '' => :project_name, '' => :platforms } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end def options_validate(options) diff --git a/lib/vanagon/cli/list.rb b/lib/vanagon/cli/list.rb index 4c83af1f..5cd938f9 100644 --- a/lib/vanagon/cli/list.rb +++ b/lib/vanagon/cli/list.rb @@ -87,7 +87,7 @@ def options_translate(docopt_options) '--projects' => :projects, '--use-spaces' => :use_spaces, } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end end end diff --git a/lib/vanagon/cli/render.rb b/lib/vanagon/cli/render.rb index d92be204..585f5a59 100644 --- a/lib/vanagon/cli/render.rb +++ b/lib/vanagon/cli/render.rb @@ -53,7 +53,7 @@ def options_translate(docopt_options) '' => :project_name, '' => :platforms, } - return docopt_options.map { |k, v| [translations[k], v] }.to_h + return docopt_options.transform_keys { |k| translations[k] } end end end diff --git a/lib/vanagon/cli/ship.rb b/lib/vanagon/cli/ship.rb index ab3fcefa..04d87371 100644 --- a/lib/vanagon/cli/ship.rb +++ b/lib/vanagon/cli/ship.rb @@ -22,7 +22,7 @@ def parse(argv) def run(_) ENV['PROJECT_ROOT'] = Dir.pwd - if Dir['output/**/*'].select { |entry| File.file?(entry) }.empty? + if Dir['output/**/*'].none? { |entry| File.file?(entry) } VanagonLogger.error 'vanagon: Error: No packages to ship in the "output" directory. Maybe build some first?' exit 1 end diff --git a/lib/vanagon/cli/sign.rb b/lib/vanagon/cli/sign.rb index 72d33796..4f3c4859 100644 --- a/lib/vanagon/cli/sign.rb +++ b/lib/vanagon/cli/sign.rb @@ -21,7 +21,7 @@ def parse(argv) def run(_) ENV['PROJECT_ROOT'] = Dir.pwd - if Dir['output/**/*'].select { |entry| File.file?(entry) }.empty? + if Dir['output/**/*'].none? { |entry| File.file?(entry) } VanagonLogger.error 'sign: Error: No packages to sign in the "output" directory. Maybe build some first?' exit 1 end diff --git a/lib/vanagon/common/user.rb b/lib/vanagon/common/user.rb index eb96c88b..3735e023 100644 --- a/lib/vanagon/common/user.rb +++ b/lib/vanagon/common/user.rb @@ -15,10 +15,10 @@ def initialize(name, group = nil, shell = nil, is_system = false, homedir = nil) # # @return [true, false] true if all attributes have equal values. false otherwise. def ==(other) - other.name == self.name && \ - other.group == self.group && \ - other.shell == self.shell && \ - other.is_system == self.is_system && \ + other.name == self.name && + other.group == self.group && + other.shell == self.shell && + other.is_system == self.is_system && other.homedir == self.homedir end end diff --git a/lib/vanagon/component.rb b/lib/vanagon/component.rb index 7692bbda..08123f91 100644 --- a/lib/vanagon/component.rb +++ b/lib/vanagon/component.rb @@ -260,27 +260,25 @@ def mirrors # rubocop:disable Lint/DuplicateMethods # if #fetch is successful. def fetch_mirrors(options) mirrors.to_a.shuffle.each do |mirror| - begin - VanagonLogger.info %(Attempting to fetch from mirror URL "#{mirror}") - @source = Vanagon::Component::Source.source(mirror, **options) - return true if source.fetch - rescue Vanagon::InvalidSource - # This means that the URL was not a git repo or a valid downloadable file, - # which means either the URL is incorrect, or we don't have access to that - # resource. Return false, so that the pkg.url value can be used instead. - VanagonLogger.error %(Invalid source "#{mirror}") - rescue SocketError - # SocketError means that there was no DNS/name resolution - # for whatever remote protocol the mirror tried to use. - VanagonLogger.error %(Unable to resolve mirror URL "#{mirror}") - rescue StandardError - # Source retrieval does not consistently return a meaningful - # namespaced error message, which means we're brute-force rescuing - # StandardError. Also, we want to handle other unexpected things when - # we try reaching out to the URL, so that we can gracefully return - # false and fall back to fetching the pkg.url value instead. - VanagonLogger.error %(Unable to retrieve mirror URL "#{mirror}") - end + VanagonLogger.info %(Attempting to fetch from mirror URL "#{mirror}") + @source = Vanagon::Component::Source.source(mirror, **options) + return true if source.fetch + rescue Vanagon::InvalidSource + # This means that the URL was not a git repo or a valid downloadable file, + # which means either the URL is incorrect, or we don't have access to that + # resource. Return false, so that the pkg.url value can be used instead. + VanagonLogger.error %(Invalid source "#{mirror}") + rescue SocketError + # SocketError means that there was no DNS/name resolution + # for whatever remote protocol the mirror tried to use. + VanagonLogger.error %(Unable to resolve mirror URL "#{mirror}") + rescue StandardError + # Source retrieval does not consistently return a meaningful + # namespaced error message, which means we're brute-force rescuing + # StandardError. Also, we want to handle other unexpected things when + # we try reaching out to the URL, so that we can gracefully return + # false and fall back to fetching the pkg.url value instead. + VanagonLogger.error %(Unable to retrieve mirror URL "#{mirror}") end false end diff --git a/lib/vanagon/engine/docker.rb b/lib/vanagon/engine/docker.rb index a67251e2..c77d4cde 100644 --- a/lib/vanagon/engine/docker.rb +++ b/lib/vanagon/engine/docker.rb @@ -140,12 +140,10 @@ def docker_cp_globs_from(globs, host_path) # @return [void] def wait_for_ssh Vanagon::Utilities.retry_with_timeout(5, 5) do - begin - Vanagon::Utilities.remote_ssh_command("#{@target_user}@#{@target}", 'exit', @target_port) - rescue StandardError => e - sleep(1) # Give SSHD some time to start. - raise e - end + Vanagon::Utilities.remote_ssh_command("#{@target_user}@#{@target}", 'exit', @target_port) + rescue StandardError => e + sleep(1) # Give SSHD some time to start. + raise e end rescue StandardError => e raise Vanagon::Error.wrap(e, "SSH was not up in the container after 5 seconds.") diff --git a/lib/vanagon/logger.rb b/lib/vanagon/logger.rb index 5f927f82..75434ede 100644 --- a/lib/vanagon/logger.rb +++ b/lib/vanagon/logger.rb @@ -22,7 +22,7 @@ def self.error(msg) end def initialize(output = $stdout) - super(output) + super self.level = ::Logger::INFO self.formatter = proc do |severity, datetime, progname, msg| "#{msg}\n" diff --git a/lib/vanagon/platform/deb.rb b/lib/vanagon/platform/deb.rb index 8061a157..e8215804 100644 --- a/lib/vanagon/platform/deb.rb +++ b/lib/vanagon/platform/deb.rb @@ -144,7 +144,7 @@ def initialize(name) @num_cores = "/usr/bin/nproc" @curl = "curl --silent --show-error --fail --location" @valid_operators = ['<', '>', '<=', '>=', '=', '<<', '>>'] - super(name) + super end end end diff --git a/lib/vanagon/platform/defaults/solaris-11-i386.rb b/lib/vanagon/platform/defaults/solaris-11-i386.rb index 972706e1..288ca8c2 100644 --- a/lib/vanagon/platform/defaults/solaris-11-i386.rb +++ b/lib/vanagon/platform/defaults/solaris-11-i386.rb @@ -5,6 +5,7 @@ # Serial #: 03:3A:F1:E6:A7:11:A9:A0:BB:28:64:B1:1D:09:FA:E5 # SHA256 Fingerprint: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F # https://perforce.atlassian.net/browse/RE-16540 for long term fix for this +# Required by Vanagon while on Solaris 11.1 (solaris-11-x86_64 in our local vmpooler) DigiCertGlobalRootG2 = <<-STRING -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh @@ -32,7 +33,7 @@ plat.servicedir "/lib/svc/manifest" plat.defaultdir "/lib/svc/method" plat.servicetype "smf" - + plat.vmpooler_template "solaris-11-x86_64" plat.provision_with "echo '#{DigiCertGlobalRootG2}'> /etc/openssl/certs/DigiCertGlobalRootG2.pem" plat.provision_with 'chmod a+r /etc/openssl/certs/DigiCertGlobalRootG2.pem' diff --git a/lib/vanagon/platform/dsl.rb b/lib/vanagon/platform/dsl.rb index b580fd62..fc2b5b86 100644 --- a/lib/vanagon/platform/dsl.rb +++ b/lib/vanagon/platform/dsl.rb @@ -247,7 +247,7 @@ def servicedir(dir) @platform.servicedir = dir # Add to the servicetypes array if we haven't already - if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty? + if @platform.servicetype && @platform.servicedir && @platform.servicetypes.none? { |s| s.servicetype == @platform.servicetype } @platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir) end end @@ -263,7 +263,7 @@ def defaultdir(dir) # # @param type [String] service type for the platform ('sysv' for example) # @param servicedir [String] service dir for this platform and service type ('/etc/init.d' for example). Optional. - def servicetype(type, servicedir: nil) # rubocop:disable Metrics/AbcSize + def servicetype(type, servicedir: nil) if servicedir @platform.servicetypes << OpenStruct.new(:servicetype => type, :servicedir => servicedir) else @@ -271,7 +271,7 @@ def servicetype(type, servicedir: nil) # rubocop:disable Metrics/AbcSize end # Add to the servicetypes array if we haven't already - if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty? + if @platform.servicetype && @platform.servicedir && @platform.servicetypes.none? { |s| s.servicetype == @platform.servicetype } @platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir) end end diff --git a/lib/vanagon/platform/osx.rb b/lib/vanagon/platform/osx.rb index 6efbb2fd..c4916302 100644 --- a/lib/vanagon/platform/osx.rb +++ b/lib/vanagon/platform/osx.rb @@ -136,7 +136,7 @@ def initialize(name) @num_cores = "/usr/sbin/sysctl -n hw.physicalcpu" @mktemp = "mktemp -d -t 'tmp'" @brew = '/usr/local/bin/brew' - super(name) + super end end end diff --git a/lib/vanagon/platform/rpm.rb b/lib/vanagon/platform/rpm.rb index 850090b5..9255c352 100644 --- a/lib/vanagon/platform/rpm.rb +++ b/lib/vanagon/platform/rpm.rb @@ -104,7 +104,7 @@ def initialize(name) @num_cores ||= "/bin/grep -c 'processor' /proc/cpuinfo" @rpmbuild ||= "/usr/bin/rpmbuild" @curl = "curl --silent --show-error --fail --location" - super(name) + super end end end diff --git a/lib/vanagon/platform/rpm/aix.rb b/lib/vanagon/platform/rpm/aix.rb index 61a620e3..5140ea7e 100644 --- a/lib/vanagon/platform/rpm/aix.rb +++ b/lib/vanagon/platform/rpm/aix.rb @@ -22,7 +22,7 @@ def initialize(name) @num_cores = "lsdev -Cc processor |wc -l" @install = "/opt/freeware/bin/install" @rpmbuild = "/usr/bin/rpm" - super(name) + super end end end diff --git a/lib/vanagon/platform/rpm/eos.rb b/lib/vanagon/platform/rpm/eos.rb index fcbfa5ae..e7a76b1b 100644 --- a/lib/vanagon/platform/rpm/eos.rb +++ b/lib/vanagon/platform/rpm/eos.rb @@ -14,7 +14,7 @@ def generate_package(project) else case project.platform.package_type when "rpm" - return super(project) + return super when "swix" return generate_swix_package(project) else @@ -34,7 +34,7 @@ def package_name(project) else case project.platform.package_type when "rpm" - return super(project) + return super when "swix" return swix_package_name(project) else diff --git a/lib/vanagon/platform/solaris_10.rb b/lib/vanagon/platform/solaris_10.rb index 73c60b99..17bc5b62 100644 --- a/lib/vanagon/platform/solaris_10.rb +++ b/lib/vanagon/platform/solaris_10.rb @@ -189,7 +189,7 @@ def initialize(name) @shasum = "/opt/csw/bin/shasum" # solaris 10 @num_cores = "/usr/bin/kstat cpu_info | awk '{print $$1}' | grep '^core_id$$' | wc -l" - super(name) + super if @architecture == "sparc" @platform_triple = "sparc-sun-solaris2.#{@os_version}" elsif @architecture == "i386" diff --git a/lib/vanagon/platform/solaris_11.rb b/lib/vanagon/platform/solaris_11.rb index ce979496..52fd433d 100644 --- a/lib/vanagon/platform/solaris_11.rb +++ b/lib/vanagon/platform/solaris_11.rb @@ -118,7 +118,7 @@ def initialize(name) @patch = "/usr/bin/gpatch" @sed = "/usr/gnu/bin/sed" @num_cores = "/usr/bin/kstat cpu_info | /usr/bin/ggrep -E '[[:space:]]+core_id[[:space:]]' | wc -l" - super(name) + super if @architecture == "sparc" @platform_triple = "sparc-sun-solaris2.#{@os_version}" elsif @architecture == "i386" diff --git a/lib/vanagon/platform/windows.rb b/lib/vanagon/platform/windows.rb index 66699c94..66a44e51 100644 --- a/lib/vanagon/platform/windows.rb +++ b/lib/vanagon/platform/windows.rb @@ -457,7 +457,7 @@ def initialize(name) @install = "/usr/bin/install" @copy = "/usr/bin/cp" @package_type = "msi" - super(name) + super end end end diff --git a/lib/vanagon/project.rb b/lib/vanagon/project.rb index 03cebc0e..91953109 100644 --- a/lib/vanagon/project.rb +++ b/lib/vanagon/project.rb @@ -462,11 +462,10 @@ def get_all_trigger_pkgs() # @return [Array] of OpenStructs of all interest triggers for the pkg_state # Use array of openstructs because we need both interest_name and the scripts def get_interest_triggers(pkg_state) - interest_triggers = [] check_pkg_state_string(pkg_state) interests = components.flat_map(&:interest_triggers).compact.select { |s| s.pkg_state.include? pkg_state } - interests.each do |interest| - interest_triggers.push(interest) + interest_triggers = interests.map do |interest| + interest end interest_triggers.flatten.compact end diff --git a/lib/vanagon/utilities.rb b/lib/vanagon/utilities.rb index 48a34986..9fb8cb75 100644 --- a/lib/vanagon/utilities.rb +++ b/lib/vanagon/utilities.rb @@ -162,13 +162,11 @@ def retry_with_timeout(tries = 5, timeout = 1, &blk) error = nil tries.to_i.times do Timeout::timeout(timeout.to_i) do - begin - yield - return true - rescue StandardError => e - VanagonLogger.error 'An error was encountered evaluating block. Retrying..' - error = e - end + yield + return true + rescue StandardError => e + VanagonLogger.error 'An error was encountered evaluating block. Retrying..' + error = e end end diff --git a/spec/lib/vanagon/engine/docker_spec.rb b/spec/lib/vanagon/engine/docker_spec.rb index f4df24d3..94c0186b 100644 --- a/spec/lib/vanagon/engine/docker_spec.rb +++ b/spec/lib/vanagon/engine/docker_spec.rb @@ -2,6 +2,10 @@ require 'vanagon/platform' describe Vanagon::Engine::Docker do + before(:each) do + allow(Vanagon::Utilities).to receive(:find_program_on_path).with('docker').and_return('/usr/bin/docker') + end + let (:platform_with_docker_image) do plat = Vanagon::Platform::DSL.new('debian-10-amd64') plat.instance_eval(<<~EOF) @@ -34,6 +38,7 @@ describe '#initialize' do it 'fails without docker installed' do + allow(Vanagon::Utilities).to receive(:find_program_on_path).with('docker').and_call_original ENV['PATH'].split(File::PATH_SEPARATOR).each do |path_elem| expect(FileTest).to receive(:executable?).with(File.join(path_elem, 'docker')).and_return(false) end @@ -44,18 +49,15 @@ describe "#validate_platform" do it 'raises an error if the platform is missing a required attribute' do - expect(Vanagon::Utilities).to receive(:find_program_on_path).with('docker').and_return('/usr/bin/docker') expect { described_class.new(platform_without_docker_image).validate_platform }.to raise_error(Vanagon::Error) end it 'returns true if the platform has the required attributes' do - expect(Vanagon::Utilities).to receive(:find_program_on_path).with('docker').and_return('/usr/bin/docker') expect(described_class.new(platform_with_docker_image).validate_platform).to be(true) end end it 'returns "docker" name' do - expect(Vanagon::Utilities).to receive(:find_program_on_path).with('docker').and_return('/usr/bin/docker') expect(described_class.new(platform_with_docker_image).name).to eq('docker') end diff --git a/vanagon.gemspec b/vanagon.gemspec index 3587b5dd..96629136 100644 --- a/vanagon.gemspec +++ b/vanagon.gemspec @@ -16,22 +16,22 @@ Gem::Specification.new do |gem| gem.authors = ['Puppet By Perforce'] gem.email = 'release@puppet.com' gem.homepage = 'http://github.com/puppetlabs/vanagon' - gem.required_ruby_version = '>=2.3', '<4' + gem.required_ruby_version = '>=2.7', '<4' - gem.add_runtime_dependency('docopt') + gem.add_dependency('docopt') # Handle git repos responsibly # - MIT licensed: https://rubygems.org/gems/git - gem.add_runtime_dependency('git', '~> 1.13.0') + gem.add_dependency('git', '~> 1.13.0') # Parse scp-style triplets like URIs; used for Git source handling. # - MIT licensed: https://rubygems.org/gems/build-uri - gem.add_runtime_dependency('build-uri', '~> 1.0') + gem.add_dependency('build-uri', '~> 1.0') # Handle locking hardware resources # - ASL v2 licensed: https://rubygems.org/gems/lock_manager - gem.add_runtime_dependency('lock_manager', '>= 0') + gem.add_dependency('lock_manager', '>= 0') # Utilities for `ship` and `repo` commands # - ASL v2 licensed: https://rubygems.org/gems/packaging - gem.add_runtime_dependency('packaging') - gem.add_runtime_dependency('psych', '>= 4.0') + gem.add_dependency('packaging') + gem.add_dependency('psych', '>= 4.0') gem.require_path = 'lib' gem.bindir = 'bin'