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
|