multi_repo 0.2.3 → 0.3.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/.github/workflows/ci.yaml +3 -3
- data/CHANGELOG.md +14 -0
- data/lib/multi_repo/helpers/pull_request_blaster_outer.rb +55 -47
- data/lib/multi_repo/version.rb +1 -1
- data/multi_repo.gemspec +1 -4
- data/scripts/pull_request_blaster_outer +9 -4
- data/scripts/pull_request_merger +3 -3
- data/scripts/show_commit_history +18 -2
- metadata +4 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 313d72f8febb801872f9f65ade31381a3104b32a21d1628e8c56ee3186b78164
|
4
|
+
data.tar.gz: 1850ed479241b145ba84295dcfe0a0cde15bce8d28f81c2fb11df90e69349d40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e5ce408edfeab47540e55241c6508cc6d0d84be9e31cc9531ecf7136d44c2b8be3797c7a909128fa22a0ba67f864e485eac32f121c68bd5afba674d983845be
|
7
|
+
data.tar.gz: c178885fe71a1f399d25f661081cb7560bdaba988d9b4a4ac1ec0c4b207858c798f18b751da988c7aa864a6a1854af96d6de361b55530b37ac8069699e9241e8
|
data/.github/workflows/ci.yaml
CHANGED
@@ -12,12 +12,12 @@ jobs:
|
|
12
12
|
strategy:
|
13
13
|
matrix:
|
14
14
|
ruby-version:
|
15
|
-
- '2.7'
|
16
15
|
- '3.0'
|
16
|
+
- '3.1'
|
17
17
|
env:
|
18
18
|
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
19
19
|
steps:
|
20
|
-
- uses: actions/checkout@
|
20
|
+
- uses: actions/checkout@v4
|
21
21
|
- name: Set up Ruby
|
22
22
|
uses: ruby/setup-ruby@v1
|
23
23
|
with:
|
@@ -27,6 +27,6 @@ jobs:
|
|
27
27
|
- name: Run tests
|
28
28
|
run: bundle exec rake
|
29
29
|
- name: Report code coverage
|
30
|
-
if: ${{ github.ref == 'refs/heads/master' && matrix.ruby-version == '3.
|
30
|
+
if: ${{ github.ref == 'refs/heads/master' && matrix.ruby-version == '3.1' }}
|
31
31
|
continue-on-error: true
|
32
32
|
uses: paambaati/codeclimate-action@v5
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,14 @@
|
|
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
|
+
## [0.3.1] - 2024-01-31
|
8
|
+
### Fixed
|
9
|
+
- [pull_request_blaster_outer] Various fixes and cleanup output [[#21](https://github.com/ManageIQ/multi_repo/pull/21)]
|
10
|
+
- [show_commit_history] Prevent missing ranges from failing the entire run [[#22](https://github.com/ManageIQ/multi_repo/pull/22)]
|
11
|
+
- [pull_request_merger] Fixing issue passing kwargs on Ruby 3 [[#23](https://github.com/ManageIQ/multi_repo/pull/23)]
|
12
|
+
|
13
|
+
[Unreleased]: https://github.com/ManageIQ/more_core_extensions/compare/v0.3.1...HEAD
|
14
|
+
[0.3.1]: https://github.com/ManageIQ/more_core_extensions/compare/v0.3.0...v0.3.1
|
@@ -9,8 +9,7 @@ module MultiRepo::Helpers
|
|
9
9
|
@base = base
|
10
10
|
@head = head
|
11
11
|
@script = begin
|
12
|
-
s = Pathname.new(script)
|
13
|
-
s = Pathname.new(Dir.pwd).join(script) if s.relative?
|
12
|
+
s = Pathname.new(script).expand_path
|
14
13
|
raise "File not found #{s}" unless s.exist?
|
15
14
|
s.to_s
|
16
15
|
end
|
@@ -20,12 +19,10 @@ module MultiRepo::Helpers
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def blast
|
23
|
-
puts "+++ blasting #{repo.name}..."
|
24
|
-
|
25
22
|
repo.git.fetch
|
26
23
|
|
27
24
|
unless repo.git.remote_branch?("origin", base)
|
28
|
-
puts "
|
25
|
+
puts "!! Skipping #{repo.name}: 'origin/#{base}' not found".light_yellow
|
29
26
|
return
|
30
27
|
end
|
31
28
|
|
@@ -33,20 +30,31 @@ module MultiRepo::Helpers
|
|
33
30
|
run_script
|
34
31
|
|
35
32
|
result = false
|
36
|
-
if !
|
37
|
-
puts
|
38
|
-
|
39
|
-
result = "
|
33
|
+
if !changes_found?
|
34
|
+
puts
|
35
|
+
puts "!! Skipping #{repo.name}: No changes found".light_yellow
|
36
|
+
result = "no changes".light_yellow
|
40
37
|
else
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
commit_changes
|
39
|
+
show_commit
|
40
|
+
puts
|
41
|
+
|
42
|
+
if dry_run
|
43
|
+
puts "** dry-run: Skipping opening pull request".light_black
|
44
|
+
result = "dry run".light_black
|
45
|
+
else
|
46
|
+
print "Do you want to open a pull request on #{repo.name} with the above changes? (y/N): "
|
47
|
+
answer = $stdin.gets.chomp
|
48
|
+
if answer.upcase.start_with?("Y")
|
49
|
+
fork_repo unless forked?
|
50
|
+
push_branch
|
51
|
+
result = open_pull_request
|
52
|
+
else
|
53
|
+
puts "!! Skipping #{repo.name}: User ignored".light_yellow
|
54
|
+
result = "ignored".light_yellow
|
55
|
+
end
|
47
56
|
end
|
48
57
|
end
|
49
|
-
puts "--- blasting #{repo.name} complete"
|
50
58
|
result
|
51
59
|
end
|
52
60
|
|
@@ -57,7 +65,9 @@ module MultiRepo::Helpers
|
|
57
65
|
end
|
58
66
|
|
59
67
|
def forked?
|
60
|
-
|
68
|
+
# NOTE: There is an assumption here that the fork's name will match the source's name.
|
69
|
+
# Ideally there would be a "forked from" field in the repo metadata, but there isn't.
|
70
|
+
github.client.repos(github.client.login, :type => "forks").any? { |m| m.name == repo.short_name }
|
61
71
|
end
|
62
72
|
|
63
73
|
def fork_repo
|
@@ -70,41 +80,41 @@ module MultiRepo::Helpers
|
|
70
80
|
|
71
81
|
def run_script
|
72
82
|
repo.chdir do
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
83
|
+
Bundler.with_unbundled_env do
|
84
|
+
parts = []
|
85
|
+
parts << "GITHUB_REPO=#{repo.name}"
|
86
|
+
parts << "DRY_RUN=true" if dry_run
|
87
|
+
parts << script
|
88
|
+
cmd = parts.join(" ")
|
89
|
+
|
90
|
+
unless system(cmd)
|
91
|
+
puts "!! Script execution failed.".light_red
|
92
|
+
exit $?.exitstatus
|
93
|
+
end
|
82
94
|
end
|
83
95
|
end
|
84
96
|
end
|
85
97
|
|
98
|
+
def changes_found?
|
99
|
+
repo.git.client.capturing.status("--porcelain").chomp.present?
|
100
|
+
end
|
101
|
+
|
86
102
|
def commit_changes
|
87
|
-
repo.
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
puts "!!! --dry-run enabled: If the above commit in #{repo.path} looks good, run again without dry run to fork the repo, push the branch and open a pull request."
|
94
|
-
end
|
95
|
-
true
|
96
|
-
rescue MiniGit::GitError => e
|
97
|
-
e.status.exitstatus == 0
|
98
|
-
end
|
99
|
-
end
|
103
|
+
repo.git.client.add("-v", ".")
|
104
|
+
repo.git.client.commit("-m", message)
|
105
|
+
end
|
106
|
+
|
107
|
+
def show_commit
|
108
|
+
repo.git.client.show
|
100
109
|
end
|
101
110
|
|
102
|
-
def
|
111
|
+
def blast_remote
|
103
112
|
"pr_blaster_outer"
|
104
113
|
end
|
105
114
|
|
106
|
-
def
|
107
|
-
|
115
|
+
def blast_remote_url
|
116
|
+
# NOTE: Similar to `forked?`, there is an assumption here that the fork's name will match the source's name.
|
117
|
+
"git@github.com:#{github.client.login}/#{repo.short_name}.git"
|
108
118
|
end
|
109
119
|
|
110
120
|
def pr_head
|
@@ -112,10 +122,8 @@ module MultiRepo::Helpers
|
|
112
122
|
end
|
113
123
|
|
114
124
|
def push_branch
|
115
|
-
repo.
|
116
|
-
|
117
|
-
repo.git.client.push("-f", origin_remote, "#{head}:#{head}")
|
118
|
-
end
|
125
|
+
repo.git.client.remote("add", blast_remote, blast_remote_url) unless repo.git.remote?(blast_remote)
|
126
|
+
repo.git.client.push("-f", blast_remote, "#{head}:#{head}")
|
119
127
|
end
|
120
128
|
|
121
129
|
def open_pull_request
|
@@ -123,7 +131,7 @@ module MultiRepo::Helpers
|
|
123
131
|
pr.html_url
|
124
132
|
rescue => err
|
125
133
|
raise unless err.message.include?("A pull request already exists")
|
126
|
-
puts "
|
134
|
+
puts "!! Skipping #{repo.name}: #{err.message}".light_yellow
|
127
135
|
end
|
128
136
|
end
|
129
137
|
end
|
data/lib/multi_repo/version.rb
CHANGED
data/multi_repo.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
-
spec.required_ruby_version = ">=
|
23
|
+
spec.required_ruby_version = ">= 3.0.0"
|
24
24
|
|
25
25
|
spec.add_runtime_dependency "activesupport"
|
26
26
|
spec.add_runtime_dependency "colorize"
|
@@ -36,9 +36,6 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_runtime_dependency "rest-client"
|
37
37
|
spec.add_runtime_dependency "travis"
|
38
38
|
|
39
|
-
# config gem brings in newer versions of dry-configurable that are not compatible with Ruby 2.7
|
40
|
-
spec.add_runtime_dependency "dry-configurable", "= 1.0.1"
|
41
|
-
|
42
39
|
spec.add_development_dependency "bundler"
|
43
40
|
spec.add_development_dependency "manageiq-style"
|
44
41
|
spec.add_development_dependency "rake"
|
@@ -4,7 +4,9 @@ require "bundler/inline"
|
|
4
4
|
gemfile do
|
5
5
|
source "https://rubygems.org"
|
6
6
|
gem "multi_repo", require: "multi_repo/cli", path: File.expand_path("..", __dir__)
|
7
|
+
gem "more_core_extensions"
|
7
8
|
end
|
9
|
+
require "more_core_extensions/core_ext/array/tableize"
|
8
10
|
|
9
11
|
opts = Optimist.options do
|
10
12
|
synopsis "Create a pull request on all repos."
|
@@ -19,8 +21,11 @@ opts = Optimist.options do
|
|
19
21
|
end
|
20
22
|
|
21
23
|
results = {}
|
22
|
-
|
23
|
-
|
24
|
+
begin
|
25
|
+
MultiRepo::CLI.each_repo(**opts) do |repo|
|
26
|
+
results[repo.name] = MultiRepo::Helpers::PullRequestBlasterOuter.new(repo, **opts).blast
|
27
|
+
end
|
28
|
+
ensure
|
29
|
+
puts "Summary:"
|
30
|
+
puts results.to_a.tableize(:header => false) unless results.empty?
|
24
31
|
end
|
25
|
-
|
26
|
-
pp results
|
data/scripts/pull_request_merger
CHANGED
@@ -57,9 +57,9 @@ opts[:prs].each do |pr|
|
|
57
57
|
|
58
58
|
repo_name, pr_number = PR_REGEX.match(pr).captures
|
59
59
|
|
60
|
-
merge_pull_request(repo_name, pr_number, opts)
|
61
|
-
add_labels(repo_name, pr_number, opts) if opts[:labels].present?
|
62
|
-
assign_user(repo_name, pr_number, opts)
|
60
|
+
merge_pull_request(repo_name, pr_number, **opts)
|
61
|
+
add_labels(repo_name, pr_number, **opts) if opts[:labels].present?
|
62
|
+
assign_user(repo_name, pr_number, **opts)
|
63
63
|
|
64
64
|
puts
|
65
65
|
end
|
data/scripts/show_commit_history
CHANGED
@@ -48,7 +48,15 @@ MultiRepo::CLI.repos_for(**opts).each do |repo|
|
|
48
48
|
end
|
49
49
|
results["other"] = []
|
50
50
|
|
51
|
-
log =
|
51
|
+
log =
|
52
|
+
begin
|
53
|
+
repo.git.client.capturing.log({:oneline => true}, range)
|
54
|
+
rescue MiniGit::GitError
|
55
|
+
puts "ERROR: commit range not found.".light_red
|
56
|
+
puts
|
57
|
+
next
|
58
|
+
end
|
59
|
+
|
52
60
|
log.lines.each do |line|
|
53
61
|
next unless (match = line.match(/Merge pull request #(\d+)\b/))
|
54
62
|
|
@@ -71,7 +79,15 @@ MultiRepo::CLI.repos_for(**opts).each do |repo|
|
|
71
79
|
|
72
80
|
repos_with_changes << repo if changes_found
|
73
81
|
when "commit"
|
74
|
-
output =
|
82
|
+
output =
|
83
|
+
begin
|
84
|
+
repo.git.client.capturing.log({:oneline => true, :decorate => true, :graph => true}, range)
|
85
|
+
rescue MiniGit::GitError
|
86
|
+
puts "ERROR: commit range not found.".light_red
|
87
|
+
puts
|
88
|
+
next
|
89
|
+
end
|
90
|
+
|
75
91
|
puts output
|
76
92
|
repos_with_changes << repo if output.present?
|
77
93
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi_repo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.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: 2024-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -192,20 +192,6 @@ dependencies:
|
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: dry-configurable
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - '='
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: 1.0.1
|
202
|
-
type: :runtime
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - '='
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: 1.0.1
|
209
195
|
- !ruby/object:Gem::Dependency
|
210
196
|
name: bundler
|
211
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -293,6 +279,7 @@ files:
|
|
293
279
|
- ".rubocop_cc.yml"
|
294
280
|
- ".rubocop_local.yml"
|
295
281
|
- ".whitesource"
|
282
|
+
- CHANGELOG.md
|
296
283
|
- Gemfile
|
297
284
|
- LICENSE.txt
|
298
285
|
- README.md
|
@@ -365,7 +352,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
365
352
|
requirements:
|
366
353
|
- - ">="
|
367
354
|
- !ruby/object:Gem::Version
|
368
|
-
version:
|
355
|
+
version: 3.0.0
|
369
356
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
370
357
|
requirements:
|
371
358
|
- - ">="
|