manageiq-cross_repo 1.1.1 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.gitignore +1 -0
 - data/CHANGELOG.md +58 -0
 - data/README.md +5 -1
 - data/exe/manageiq-cross_repo +2 -2
 - data/lib/manageiq/cross_repo/repository.rb +15 -1
 - data/lib/manageiq/cross_repo/runner/base.rb +102 -0
 - data/lib/manageiq/cross_repo/runner/github.rb +30 -0
 - data/lib/manageiq/cross_repo/runner/travis.rb +20 -0
 - data/lib/manageiq/cross_repo/runner.rb +8 -72
 - data/lib/manageiq/cross_repo/version.rb +1 -1
 - data/lib/manageiq/cross_repo.rb +2 -2
 - data/manageiq-cross_repo.gemspec +1 -1
 - data/repos/.gitkeep +0 -0
 - metadata +12 -7
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8b41a33500bc19d1787fc628f2b36526425dafe94b8176376205b3d77e6b8c56
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: fcb915b5746293c0f0969cda70116337a5b27795ec94673fe123dfb3357460d4
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f99033869bee7e81ccf5a3fa68ad5c0cbe4d775e50372cccdb79474a92385c9ea258be6754015ef1ca3deb2c4db2dfcd400115e3b571db1dfb956d0f61a84f66
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: '082df5577e2c09309900e1782f621c05764b8de1d25b22b63a41eecfe4d71d040cc1290d5abe241d6093547419be14f09d762587dda8d3b6ac759ed6a43ef05e'
         
     | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/CHANGELOG.md
    ADDED
    
    | 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Change Log
         
     | 
| 
      
 2 
     | 
    
         
            +
            All notable changes to this project will be documented in this file.
         
     | 
| 
      
 3 
     | 
    
         
            +
            This project adheres to [Semantic Versioning](http://semver.org/).
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## [Unreleased]
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ## [1.2.1] - 2022-01-11
         
     | 
| 
      
 8 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 9 
     | 
    
         
            +
            - Fix unpacking the hash for ruby 3 support
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            ## [1.2.0] - 2021-12-15
         
     | 
| 
      
 12 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Add support for test repos using Github Actions
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 16 
     | 
    
         
            +
            - If the list of repos is empty default to the core repo
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            ## [1.1.3] - 2021-08-27
         
     | 
| 
      
 19 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 20 
     | 
    
         
            +
            - Add retry to ensure_clone (#74)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            ## [1.1.2] - 2021-05-13
         
     | 
| 
      
 23 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 24 
     | 
    
         
            +
            - Fix newer activesupport pulling in newer tzinfo and causing automate engine specs to fail
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            ## [1.1.1] - 2021-02-22
         
     | 
| 
      
 27 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 28 
     | 
    
         
            +
            - [#71] Pass BUNDLE_PATH env var to test script
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            ## [1.1.0] - 2021-02-05
         
     | 
| 
      
 31 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 32 
     | 
    
         
            +
            - Fix a warning from Kernel#open
         
     | 
| 
      
 33 
     | 
    
         
            +
            - Add a --script-cmd and SCRIPT_CMD option
         
     | 
| 
      
 34 
     | 
    
         
            +
            - Parse .travis.yml and run before_*/install/script sections
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            ## [1.0.4] - 2020-04-14
         
     | 
| 
      
 37 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 38 
     | 
    
         
            +
            - Run tools/ci/before_install.sh for all plugins
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            ## [1.0.3] - 2020-03-05
         
     | 
| 
      
 41 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 42 
     | 
    
         
            +
            - Prefer testing using the merge commit if it exists rather than the PR head
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            ## [1.0.2] - 2020-02-04
         
     | 
| 
      
 45 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 46 
     | 
    
         
            +
            - Fix an issue extracting tgz files smaller than 10Kb
         
     | 
| 
      
 47 
     | 
    
         
            +
            - Fix an issue overriding gems whose repo name doesn't match
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            [Unreleased]: https://github.com/ManageIQ/more_core_extensions/compare/v1.2.1...HEAD
         
     | 
| 
      
 50 
     | 
    
         
            +
            [1.2.1]: https://github.com/ManageIQ/more_core_extensions/compare/v1.2.0...v1.2.1
         
     | 
| 
      
 51 
     | 
    
         
            +
            [1.2.0]: https://github.com/ManageIQ/more_core_extensions/compare/v1.1.3...v1.2.0
         
     | 
| 
      
 52 
     | 
    
         
            +
            [1.1.3]: https://github.com/ManageIQ/more_core_extensions/compare/v1.1.2...v1.1.3
         
     | 
| 
      
 53 
     | 
    
         
            +
            [1.1.2]: https://github.com/ManageIQ/more_core_extensions/compare/v1.1.1...v1.1.2
         
     | 
| 
      
 54 
     | 
    
         
            +
            [1.1.1]: https://github.com/ManageIQ/more_core_extensions/compare/v1.1.0...v1.1.1
         
     | 
| 
      
 55 
     | 
    
         
            +
            [1.1.0]: https://github.com/ManageIQ/more_core_extensions/compare/v1.0.4...v1.1.0
         
     | 
| 
      
 56 
     | 
    
         
            +
            [1.0.4]: https://github.com/ManageIQ/more_core_extensions/compare/v1.0.3...v1.0.4
         
     | 
| 
      
 57 
     | 
    
         
            +
            [1.0.3]: https://github.com/ManageIQ/more_core_extensions/compare/v1.0.2...v1.0.3
         
     | 
| 
      
 58 
     | 
    
         
            +
            [1.0.2]: https://github.com/ManageIQ/more_core_extensions/compare/v1.0.1...v1.0.2
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -16,8 +16,12 @@ Options: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                                      If any of the repositories in the list are a core repository that will
         
     | 
| 
       17 
17 
     | 
    
         
             
                                      be used as the root repository, otherwise ManageIQ/manageiq@master will be the default.
         
     | 
| 
       18 
18 
     | 
    
         
             
                                      Can also be passed as a REPOS environment variable.
         
     | 
| 
       19 
     | 
    
         
            -
              -s, --script-cmd=<s>    Optional, a command string for running the specs.  Defaults to `bundle exec rake`.
         
     | 
| 
       20 
19 
     | 
    
         
             
                                       (default: )
         
     | 
| 
      
 20 
     | 
    
         
            +
              -e, --test-suite=<s>    Optional, the name of a rake test suite to pass as an environment variable to the test being run.
         
     | 
| 
      
 21 
     | 
    
         
            +
                                      This is commonly used by the CI config to conditionally perform different setup tasks
         
     | 
| 
      
 22 
     | 
    
         
            +
                                      and also to run different test suites, e.g. spec:javascript.
         
     | 
| 
      
 23 
     | 
    
         
            +
              -s, --script-cmd=<s>    Optional, a command string for running the specs.
         
     | 
| 
      
 24 
     | 
    
         
            +
                                      If present this will override the the script section of the test_repo's CI config
         
     | 
| 
       21 
25 
     | 
    
         | 
| 
       22 
26 
     | 
    
         
             
              -v, --version           Print version and exit
         
     | 
| 
       23 
27 
     | 
    
         
             
              -h, --help              Show this message
         
     | 
    
        data/exe/manageiq-cross_repo
    CHANGED
    
    | 
         @@ -33,13 +33,13 @@ opts = Optimist.options do 
     | 
|
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
              opt :test_suite, <<~EOS, :type => :string, :default => ENV["TEST_SUITE"].presence
         
     | 
| 
       35 
35 
     | 
    
         
             
                Optional, the name of a rake test suite to pass as an environment variable to the test being run.
         
     | 
| 
       36 
     | 
    
         
            -
                This is commonly used by the  
     | 
| 
      
 36 
     | 
    
         
            +
                This is commonly used by the CI config to conditionally perform different setup tasks
         
     | 
| 
       37 
37 
     | 
    
         
             
                and also to run different test suites, e.g. spec:javascript.
         
     | 
| 
       38 
38 
     | 
    
         
             
              EOS
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
              opt :script_cmd, <<~EOS, :type => :string, :default => ENV["SCRIPT_CMD"].presence
         
     | 
| 
       41 
41 
     | 
    
         
             
                Optional, a command string for running the specs.
         
     | 
| 
       42 
     | 
    
         
            -
                If present this will override the the script section of the test_repo's  
     | 
| 
      
 42 
     | 
    
         
            +
                If present this will override the the script section of the test_repo's CI config
         
     | 
| 
       43 
43 
     | 
    
         
             
              EOS
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         | 
| 
         @@ -31,7 +31,9 @@ module ManageIQ::CrossRepo 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  require "tmpdir"
         
     | 
| 
       32 
32 
     | 
    
         
             
                  require "zlib"
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                   
     | 
| 
      
 34 
     | 
    
         
            +
                  retries ||= 0
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  puts "Fetching #{tarball_url}#{retry_count(retries)}"
         
     | 
| 
       35 
37 
     | 
    
         | 
| 
       36 
38 
     | 
    
         
             
                  Dir.mktmpdir do |dir|
         
     | 
| 
       37 
39 
     | 
    
         
             
                    Mixlib::Archive.new(open_tarball_url(tarball_url)).extract(dir)
         
     | 
| 
         @@ -40,6 +42,12 @@ module ManageIQ::CrossRepo 
     | 
|
| 
       40 
42 
     | 
    
         
             
                    FileUtils.mkdir_p(path.dirname)
         
     | 
| 
       41 
43 
     | 
    
         
             
                    FileUtils.mv(content_dir, path)
         
     | 
| 
       42 
44 
     | 
    
         
             
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                rescue => e
         
     | 
| 
      
 46 
     | 
    
         
            +
                  retries += 1
         
     | 
| 
      
 47 
     | 
    
         
            +
                  raise if retries > 3
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  sleep 1
         
     | 
| 
      
 50 
     | 
    
         
            +
                  retry
         
     | 
| 
       43 
51 
     | 
    
         
             
                end
         
     | 
| 
       44 
52 
     | 
    
         | 
| 
       45 
53 
     | 
    
         
             
                private
         
     | 
| 
         @@ -167,5 +175,11 @@ module ManageIQ::CrossRepo 
     | 
|
| 
       167 
175 
     | 
    
         
             
                def git_pr_to_sha(url, pr)
         
     | 
| 
       168 
176 
     | 
    
         
             
                  git_branch_to_sha(url, "refs/pull/#{pr}/merge") || git_branch_to_sha(url, "refs/pull/#{pr}/head")
         
     | 
| 
       169 
177 
     | 
    
         
             
                end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                def retry_count(num)
         
     | 
| 
      
 180 
     | 
    
         
            +
                  return if num == 0
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                  "  (retry #{num}/3)"
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
       170 
184 
     | 
    
         
             
              end
         
     | 
| 
       171 
185 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,102 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "active_support/core_ext/object/blank"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "yaml"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module ManageIQ::CrossRepo
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Runner
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Base
         
     | 
| 
      
 7 
     | 
    
         
            +
                  attr_accessor :script_cmd
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def initialize(script_cmd = nil)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @script_cmd = script_cmd.presence
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def build_test_script
         
     | 
| 
      
 14 
     | 
    
         
            +
                    load_config!
         
     | 
| 
      
 15 
     | 
    
         
            +
                    build_script
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  private
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def environment_setup_commands
         
     | 
| 
      
 21 
     | 
    
         
            +
                    commands = []
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                    if config["node_js"]
         
     | 
| 
      
 24 
     | 
    
         
            +
                      commands << "source ~/.nvm/nvm.sh"
         
     | 
| 
      
 25 
     | 
    
         
            +
                      commands += Array(config["node_js"]).map do |node_version|
         
     | 
| 
      
 26 
     | 
    
         
            +
                        "nvm install #{node_version}"
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    commands.any? ? build_section("environment", *commands) : commands
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def section_commands
         
     | 
| 
      
 34 
     | 
    
         
            +
                    sections = %w[before_install install before_script script]
         
     | 
| 
      
 35 
     | 
    
         
            +
                    sections.flat_map do |section|
         
     | 
| 
      
 36 
     | 
    
         
            +
                      commands = build_section_commands(section)
         
     | 
| 
      
 37 
     | 
    
         
            +
                      build_section(section, *commands) if commands.present?
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end.compact
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  def build_commands
         
     | 
| 
      
 42 
     | 
    
         
            +
                    environment_setup_commands + section_commands
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  def build_section_commands(section)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    # Travis sections can have a single command or an array of commands
         
     | 
| 
      
 47 
     | 
    
         
            +
                    Array(config[section]).map { |cmd| "#{cmd} || exit $?" }
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  def build_section(section, *commands)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    [
         
     | 
| 
      
 52 
     | 
    
         
            +
                      "echo 'travis_fold:start:#{section}'",
         
     | 
| 
      
 53 
     | 
    
         
            +
                      *commands,
         
     | 
| 
      
 54 
     | 
    
         
            +
                      "echo 'travis_fold:end:#{section}'"
         
     | 
| 
      
 55 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  def build_script
         
     | 
| 
      
 59 
     | 
    
         
            +
                    <<~BASH_SCRIPT
         
     | 
| 
      
 60 
     | 
    
         
            +
                      #!/bin/bash
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                      #{build_commands.join("\n")}
         
     | 
| 
      
 63 
     | 
    
         
            +
                    BASH_SCRIPT
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  def load_config!
         
     | 
| 
      
 67 
     | 
    
         
            +
                    config
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  def config
         
     | 
| 
      
 71 
     | 
    
         
            +
                    @config ||= travis_config.tap do |config|
         
     | 
| 
      
 72 
     | 
    
         
            +
                      # Set missing sections to the proper defaults
         
     | 
| 
      
 73 
     | 
    
         
            +
                      config["install"] ||= defaults[config["language"]]["install"]
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                      config["script"] = script_cmd if script_cmd.present?
         
     | 
| 
      
 76 
     | 
    
         
            +
                      config["script"] ||= defaults[config["language"]]["script"]
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
                  end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                  def travis_config
         
     | 
| 
      
 81 
     | 
    
         
            +
                    raise NotImplementedError, "must be implemented in a subclass"
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  def defaults
         
     | 
| 
      
 85 
     | 
    
         
            +
                    @defaults ||= {
         
     | 
| 
      
 86 
     | 
    
         
            +
                      "node_js" => {
         
     | 
| 
      
 87 
     | 
    
         
            +
                        "language" => "node_js",
         
     | 
| 
      
 88 
     | 
    
         
            +
                        "node_js"  => ["12"],
         
     | 
| 
      
 89 
     | 
    
         
            +
                        "install"  => "npm install",
         
     | 
| 
      
 90 
     | 
    
         
            +
                        "script"   => "npm test"
         
     | 
| 
      
 91 
     | 
    
         
            +
                      },
         
     | 
| 
      
 92 
     | 
    
         
            +
                      "ruby"    => {
         
     | 
| 
      
 93 
     | 
    
         
            +
                        "language" => "ruby",
         
     | 
| 
      
 94 
     | 
    
         
            +
                        "rvm"      => ["2.7"],
         
     | 
| 
      
 95 
     | 
    
         
            +
                        "install"  => "bundle install --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}",
         
     | 
| 
      
 96 
     | 
    
         
            +
                        "script"   => "bundle exec rake"
         
     | 
| 
      
 97 
     | 
    
         
            +
                      }
         
     | 
| 
      
 98 
     | 
    
         
            +
                    }.freeze
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
              end
         
     | 
| 
      
 102 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative "./base"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "yaml"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module ManageIQ::CrossRepo
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Runner
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Github < Base
         
     | 
| 
      
 7 
     | 
    
         
            +
                  CONFIG_FILE = ".github/workflows/ci.yaml".freeze
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def self.available?
         
     | 
| 
      
 10 
     | 
    
         
            +
                    File.exist?(CONFIG_FILE)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  private
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def travis_config
         
     | 
| 
      
 16 
     | 
    
         
            +
                    steps = github_config["jobs"]["ci"]["steps"]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    language = steps.any? { |s| s["uses"] == "ruby/setup-ruby@v1" } ? "ruby" : "node_js"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    defaults[language].clone.tap do |config|
         
     | 
| 
      
 20 
     | 
    
         
            +
                      script_step = steps.detect { |s| s["name"] == "Run tests" }
         
     | 
| 
      
 21 
     | 
    
         
            +
                      config["script"] = script_step["run"] if script_step
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  def github_config
         
     | 
| 
      
 26 
     | 
    
         
            +
                    YAML.load_file(CONFIG_FILE)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative "./base"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "yaml"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module ManageIQ::CrossRepo
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Runner
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Travis < Base
         
     | 
| 
      
 7 
     | 
    
         
            +
                  CONFIG_FILE = ".travis.yml".freeze
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def self.available?
         
     | 
| 
      
 10 
     | 
    
         
            +
                    File.exist?(CONFIG_FILE)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  private
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def travis_config
         
     | 
| 
      
 16 
     | 
    
         
            +
                    YAML.load_file(CONFIG_FILE)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,5 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require "manageiq/cross_repo/repository"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "active_support/core_ext/class/subclasses"
         
     | 
| 
       2 
3 
     | 
    
         
             
            require "active_support/core_ext/object/blank"
         
     | 
| 
      
 4 
     | 
    
         
            +
            Dir.glob(File.join(__dir__, "runner", "*")).sort.each { |f| require f }
         
     | 
| 
       3 
5 
     | 
    
         | 
| 
       4 
6 
     | 
    
         
             
            module ManageIQ::CrossRepo
         
     | 
| 
       5 
7 
     | 
    
         
             
              class Runner
         
     | 
| 
         @@ -16,8 +18,6 @@ module ManageIQ::CrossRepo 
     | 
|
| 
       16 
18 
     | 
    
         | 
| 
       17 
19 
     | 
    
         
             
                    @core_repo = @test_repo
         
     | 
| 
       18 
20 
     | 
    
         
             
                  else
         
     | 
| 
       19 
     | 
    
         
            -
                    raise ArgumentError, "You must pass at least one repo when running a plugin test." if repos.blank?
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
21 
     | 
    
         
             
                    @core_repo ||= Repository.new("ManageIQ/manageiq@master")
         
     | 
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
         @@ -41,7 +41,8 @@ module ManageIQ::CrossRepo 
     | 
|
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                def run_tests
         
     | 
| 
       43 
43 
     | 
    
         
             
                  with_test_env do
         
     | 
| 
       44 
     | 
    
         
            -
                     
     | 
| 
      
 44 
     | 
    
         
            +
                    test_script = script_source.new(script_cmd).build_test_script
         
     | 
| 
      
 45 
     | 
    
         
            +
                    run_test_script(test_script)
         
     | 
| 
       45 
46 
     | 
    
         
             
                  end
         
     | 
| 
       46 
47 
     | 
    
         
             
                end
         
     | 
| 
       47 
48 
     | 
    
         | 
| 
         @@ -67,6 +68,10 @@ module ManageIQ::CrossRepo 
     | 
|
| 
       67 
68 
     | 
    
         
             
                  exit($?.exitstatus) unless $?.success?
         
     | 
| 
       68 
69 
     | 
    
         
             
                end
         
     | 
| 
       69 
70 
     | 
    
         | 
| 
      
 71 
     | 
    
         
            +
                def script_source
         
     | 
| 
      
 72 
     | 
    
         
            +
                  Base.descendants.detect(&:available?)
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
       70 
75 
     | 
    
         
             
                def generate_bundler_d
         
     | 
| 
       71 
76 
     | 
    
         
             
                  bundler_d_path = core_repo.path.join("bundler.d")
         
     | 
| 
       72 
77 
     | 
    
         
             
                  override_path  = bundler_d_path.join("overrides.rb")
         
     | 
| 
         @@ -100,74 +105,5 @@ module ManageIQ::CrossRepo 
     | 
|
| 
       100 
105 
     | 
    
         | 
| 
       101 
106 
     | 
    
         
             
                  system!(env_vars, "/bin/bash -s", :in => r, :out => $stdout, :err => $stderr)
         
     | 
| 
       102 
107 
     | 
    
         
             
                end
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                def build_test_script
         
     | 
| 
       105 
     | 
    
         
            -
                  load_travis_yml!
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                  commands = environment_setup_commands
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                  sections = %w[before_install install before_script script]
         
     | 
| 
       110 
     | 
    
         
            -
                  commands += sections.flat_map do |section|
         
     | 
| 
       111 
     | 
    
         
            -
                    # Travis sections can have a single command or an array of commands
         
     | 
| 
       112 
     | 
    
         
            -
                    section_commands = Array(travis_yml[section]).map { |cmd| "#{cmd} || exit $?" }
         
     | 
| 
       113 
     | 
    
         
            -
                    next if section_commands.blank?
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                    [
         
     | 
| 
       116 
     | 
    
         
            -
                      "echo 'travis_fold:start:#{section}'",
         
     | 
| 
       117 
     | 
    
         
            -
                      *section_commands,
         
     | 
| 
       118 
     | 
    
         
            -
                      "echo 'travis_fold:end:#{section}'"
         
     | 
| 
       119 
     | 
    
         
            -
                    ]
         
     | 
| 
       120 
     | 
    
         
            -
                  end.compact
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                  <<~BASH_SCRIPT
         
     | 
| 
       123 
     | 
    
         
            -
                    #!/bin/bash
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
                    #{commands.join("\n")}
         
     | 
| 
       126 
     | 
    
         
            -
                  BASH_SCRIPT
         
     | 
| 
       127 
     | 
    
         
            -
                end
         
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
                def environment_setup_commands
         
     | 
| 
       130 
     | 
    
         
            -
                  setup_commands = []
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
                  if travis_yml["node_js"]
         
     | 
| 
       133 
     | 
    
         
            -
                    setup_commands << "source ~/.nvm/nvm.sh"
         
     | 
| 
       134 
     | 
    
         
            -
                    setup_commands += Array(travis_yml["node_js"]).map do |node_version|
         
     | 
| 
       135 
     | 
    
         
            -
                      "nvm install #{node_version}"
         
     | 
| 
       136 
     | 
    
         
            -
                    end
         
     | 
| 
       137 
     | 
    
         
            -
                  end
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
                  setup_commands
         
     | 
| 
       140 
     | 
    
         
            -
                end
         
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                def load_travis_yml!
         
     | 
| 
       143 
     | 
    
         
            -
                  # Load the test_repo's .travis.yml file
         
     | 
| 
       144 
     | 
    
         
            -
                  travis_yml
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
                  # Set missing travis sections to the proper defaults
         
     | 
| 
       147 
     | 
    
         
            -
                  travis_yml["install"] ||= travis_defaults[travis_yml["language"]]["install"]
         
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
                  travis_yml["script"] = script_cmd if script_cmd.present?
         
     | 
| 
       150 
     | 
    
         
            -
                  travis_yml["script"] ||= travis_defaults[travis_yml["language"]]["script"]
         
     | 
| 
       151 
     | 
    
         
            -
                end
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
                def travis_yml
         
     | 
| 
       154 
     | 
    
         
            -
                  @travis_yml ||= begin
         
     | 
| 
       155 
     | 
    
         
            -
                    require "yaml"
         
     | 
| 
       156 
     | 
    
         
            -
                    YAML.load_file(".travis.yml")
         
     | 
| 
       157 
     | 
    
         
            -
                  end
         
     | 
| 
       158 
     | 
    
         
            -
                end
         
     | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
                def travis_defaults
         
     | 
| 
       161 
     | 
    
         
            -
                  @travis_defaults ||= {
         
     | 
| 
       162 
     | 
    
         
            -
                    "node_js" => {
         
     | 
| 
       163 
     | 
    
         
            -
                      "install" => "npm install",
         
     | 
| 
       164 
     | 
    
         
            -
                      "script"  => "npm test"
         
     | 
| 
       165 
     | 
    
         
            -
                    },
         
     | 
| 
       166 
     | 
    
         
            -
                    "ruby"    => {
         
     | 
| 
       167 
     | 
    
         
            -
                      "install" => "bundle install --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}",
         
     | 
| 
       168 
     | 
    
         
            -
                      "script"  => "bundle exec rake"
         
     | 
| 
       169 
     | 
    
         
            -
                    }
         
     | 
| 
       170 
     | 
    
         
            -
                  }.freeze
         
     | 
| 
       171 
     | 
    
         
            -
                end
         
     | 
| 
       172 
108 
     | 
    
         
             
              end
         
     | 
| 
       173 
109 
     | 
    
         
             
            end
         
     | 
    
        data/lib/manageiq/cross_repo.rb
    CHANGED
    
    
    
        data/manageiq-cross_repo.gemspec
    CHANGED
    
    | 
         @@ -27,7 +27,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       27 
27 
     | 
    
         
             
              spec.add_development_dependency "rspec"
         
     | 
| 
       28 
28 
     | 
    
         
             
              spec.add_development_dependency "simplecov"
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
              spec.add_dependency "activesupport"
         
     | 
| 
      
 30 
     | 
    
         
            +
              spec.add_dependency "activesupport", "~> 6.0.3"
         
     | 
| 
       31 
31 
     | 
    
         
             
              spec.add_dependency "ffi-libarchive"
         
     | 
| 
       32 
32 
     | 
    
         
             
              spec.add_dependency "mixlib-archive"
         
     | 
| 
       33 
33 
     | 
    
         
             
              spec.add_dependency "optimist"
         
     | 
    
        data/repos/.gitkeep
    ADDED
    
    | 
         
            File without changes
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: manageiq-cross_repo
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.2.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - ManageIQ Authors
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2022-01-11 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: manageiq-style
         
     | 
| 
         @@ -70,16 +70,16 @@ dependencies: 
     | 
|
| 
       70 
70 
     | 
    
         
             
              name: activesupport
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
     | 
    
         
            -
                - - " 
     | 
| 
      
 73 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       74 
74 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
     | 
    
         
            -
                    version:  
     | 
| 
      
 75 
     | 
    
         
            +
                    version: 6.0.3
         
     | 
| 
       76 
76 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       77 
77 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
78 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
79 
     | 
    
         
             
                requirements:
         
     | 
| 
       80 
     | 
    
         
            -
                - - " 
     | 
| 
      
 80 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
     | 
    
         
            -
                    version:  
     | 
| 
      
 82 
     | 
    
         
            +
                    version: 6.0.3
         
     | 
| 
       83 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
84 
     | 
    
         
             
              name: ffi-libarchive
         
     | 
| 
       85 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -136,6 +136,7 @@ files: 
     | 
|
| 
       136 
136 
     | 
    
         
             
            - ".rubocop_cc.yml"
         
     | 
| 
       137 
137 
     | 
    
         
             
            - ".rubocop_local.yml"
         
     | 
| 
       138 
138 
     | 
    
         
             
            - ".travis.yml"
         
     | 
| 
      
 139 
     | 
    
         
            +
            - CHANGELOG.md
         
     | 
| 
       139 
140 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       140 
141 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       141 
142 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -147,8 +148,12 @@ files: 
     | 
|
| 
       147 
148 
     | 
    
         
             
            - lib/manageiq/cross_repo.rb
         
     | 
| 
       148 
149 
     | 
    
         
             
            - lib/manageiq/cross_repo/repository.rb
         
     | 
| 
       149 
150 
     | 
    
         
             
            - lib/manageiq/cross_repo/runner.rb
         
     | 
| 
      
 151 
     | 
    
         
            +
            - lib/manageiq/cross_repo/runner/base.rb
         
     | 
| 
      
 152 
     | 
    
         
            +
            - lib/manageiq/cross_repo/runner/github.rb
         
     | 
| 
      
 153 
     | 
    
         
            +
            - lib/manageiq/cross_repo/runner/travis.rb
         
     | 
| 
       150 
154 
     | 
    
         
             
            - lib/manageiq/cross_repo/version.rb
         
     | 
| 
       151 
155 
     | 
    
         
             
            - manageiq-cross_repo.gemspec
         
     | 
| 
      
 156 
     | 
    
         
            +
            - repos/.gitkeep
         
     | 
| 
       152 
157 
     | 
    
         
             
            homepage: https://github.com/ManageIQ/manageiq-cross_repo
         
     | 
| 
       153 
158 
     | 
    
         
             
            licenses:
         
     | 
| 
       154 
159 
     | 
    
         
             
            - MIT
         
     | 
| 
         @@ -170,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       170 
175 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       171 
176 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       172 
177 
     | 
    
         
             
            requirements: []
         
     | 
| 
       173 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 178 
     | 
    
         
            +
            rubygems_version: 3.1.6
         
     | 
| 
       174 
179 
     | 
    
         
             
            signing_key:
         
     | 
| 
       175 
180 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       176 
181 
     | 
    
         
             
            summary: ManageIQ CrossRepo testing library
         
     |