bundler-alive 0.1.6 → 0.1.7
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/.bundler-alive.default.yml +15 -1
- data/.rspec +0 -1
- data/README.md +16 -13
- data/gemspec.yml +2 -2
- data/lib/bundler/alive/cli.rb +5 -1
- data/lib/bundler/alive/client/gems_api_client.rb +8 -3
- data/lib/bundler/alive/client/github_api.rb +27 -54
- data/lib/bundler/alive/client/github_graphql.rb +82 -0
- data/lib/bundler/alive/client/gitlab_api.rb +1 -1
- data/lib/bundler/alive/doctor.rb +6 -6
- data/lib/bundler/alive/version.rb +1 -1
- data/lib/bundler/alive.rb +7 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fb0738fac56612f49d0fcc2dadf41f00caa5c34b8e49923185326f3cc6ab744
|
4
|
+
data.tar.gz: e89352dbbdec31b5e82e4f42135113d1c464441bcc0d4443709e24437fffb87f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6692e5114833643c5038b41a8bbff0282837b4e70c05449f76cc810e499751a3f7f8585f5360f31b503376662e6a91f6617a335e59686a9841af65a2917b0d2f
|
7
|
+
data.tar.gz: 393f54894aabd833bd0249a54cfab165bbcacb6a9d10cae9ab446b6e81a92c9de83f5e0fc25d38327999b7c2e06fa902a730bbec5eb04b37a476af0067b882c4
|
data/.bundler-alive.default.yml
CHANGED
@@ -53,4 +53,18 @@ gems:
|
|
53
53
|
thrift:
|
54
54
|
url: https://github.com/szechyjs/thrift-gem
|
55
55
|
vmstat:
|
56
|
-
url: https://github.com/threez/ruby-vmstat
|
56
|
+
url: https://github.com/threez/ruby-vmstat
|
57
|
+
mongoid-rspec:
|
58
|
+
url: https://github.com/mongoid/mongoid-rspec
|
59
|
+
rack-test:
|
60
|
+
url: https://github.com/rack/rack-test
|
61
|
+
jmespath:
|
62
|
+
url: https://github.com/jmespath/jmespath.rb
|
63
|
+
slack-notifier:
|
64
|
+
url: https://github.com/slack-notifier/slack-notifier
|
65
|
+
ipaddress:
|
66
|
+
url: https://github.com/ipaddress-gem/ipaddress
|
67
|
+
fog-powerdns:
|
68
|
+
url: https://github.com/fog/fog-powerdns
|
69
|
+
html_tokenizer:
|
70
|
+
url: https://github.com/EiNSTeiN-/html_tokenizer
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
[](https://codeclimate.com/github/kyoshidajp/bundler-alive/maintainability)
|
6
6
|
[](https://codeclimate.com/github/kyoshidajp/bundler-alive/test_coverage)
|
7
7
|
|
8
|
-
`
|
8
|
+
`bundler-alive` checks if gems in a RubyGem's `Gemfile.lock` are active.
|
9
9
|
|
10
|
-
Currently GitHub.com and GitLab.com are supported as a source code repository. If the source code repository is archived, then reports as not alive.
|
10
|
+
Currently, GitHub.com and GitLab.com are supported as a source code repository. If the source code repository is archived, then reports as not alive.
|
11
11
|
|
12
12
|
## Installation
|
13
13
|
|
14
14
|
```
|
15
|
-
$ gem install
|
15
|
+
$ gem install bundler-alive
|
16
16
|
```
|
17
17
|
|
18
18
|
## Usage
|
@@ -41,26 +41,29 @@ Default `Gemfile.lock` location is in your current directory. You can specify it
|
|
41
41
|
$ bundle-alive -G /path/to/Gemfile.lock
|
42
42
|
```
|
43
43
|
|
44
|
-
##
|
44
|
+
## Access Token
|
45
45
|
|
46
|
-
|
46
|
+
You MUST set environment variables to access source code repository services.
|
47
47
|
|
48
|
-
|
48
|
+
| Repository service | ENV variable |
|
49
|
+
| ------- |---- |
|
50
|
+
| GitHub | [`BUNDLER_ALIVE_GITHUB_TOKEN`](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) |
|
51
|
+
| GitLab | [`BUNDLER_ALIVE_GITLAB_TOKEN`](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) |
|
49
52
|
|
50
|
-
|
53
|
+
## Ignore gems
|
54
|
+
|
55
|
+
You can ignore certain gems.
|
51
56
|
|
52
57
|
```
|
53
|
-
|
58
|
+
$ bundle-alive -i journey rubocop-junit-formatter
|
54
59
|
```
|
55
60
|
|
56
|
-
|
61
|
+
## Following redirect on RubyGems.org
|
57
62
|
|
58
|
-
|
59
|
-
|
60
|
-
You can ignore certain gems.
|
63
|
+
The URL for some gems in RubyGems.org may have changed. You can follow the URL (default: doesn't follow).
|
61
64
|
|
62
65
|
```
|
63
|
-
$ bundle-alive
|
66
|
+
$ bundle-alive --follow_redirect
|
64
67
|
```
|
65
68
|
|
66
69
|
## Specifying repository URL
|
data/gemspec.yml
CHANGED
@@ -8,7 +8,7 @@ homepage: https://github.com/kyoshidajp/bundler-alive
|
|
8
8
|
metadata:
|
9
9
|
homepage_uri: https://github.com/kyoshidajp/bundler-alive
|
10
10
|
source_code_uri: https://github.com/kyoshidajp/bundler-alive
|
11
|
-
changelog_uri: https://github.com/kyoshidajp/bundler-alive
|
11
|
+
changelog_uri: https://github.com/kyoshidajp/bundler-alive/commits/main
|
12
12
|
|
13
13
|
required_ruby_version: ">= 2.6.0"
|
14
14
|
bindir: bin
|
@@ -16,7 +16,7 @@ require_paths: lib
|
|
16
16
|
|
17
17
|
dependencies:
|
18
18
|
faraday:
|
19
|
-
|
19
|
+
graphql-client:
|
20
20
|
rake:
|
21
21
|
thor:
|
22
22
|
gitlab:
|
data/lib/bundler/alive/cli.rb
CHANGED
@@ -17,6 +17,7 @@ module Bundler
|
|
17
17
|
|
18
18
|
desc "check [DIR]", "Checks the Gemfile.lock"
|
19
19
|
method_option :ignore, type: :array, aliases: "-i", default: []
|
20
|
+
method_option :follow_redirect, type: :boolean, aliases: "-r"
|
20
21
|
method_option :gemfile_lock, type: :string, aliases: "-G",
|
21
22
|
default: "Gemfile.lock"
|
22
23
|
method_option :config, type: :string, aliases: "-c", default: ".bundler-alive.yml"
|
@@ -49,7 +50,10 @@ module Bundler
|
|
49
50
|
end
|
50
51
|
|
51
52
|
def initialize_doctor
|
52
|
-
Doctor.new(
|
53
|
+
Doctor.new(lock_file: options[:gemfile_lock],
|
54
|
+
config_file: options[:config],
|
55
|
+
ignore_gems: options[:ignore],
|
56
|
+
follow_redirect: options[:follow_redirect])
|
53
57
|
rescue Bundler::GemfileLockNotFound
|
54
58
|
exit 1
|
55
59
|
end
|
@@ -21,13 +21,16 @@ module Bundler
|
|
21
21
|
#
|
22
22
|
# A new instance of `GemApiClient`
|
23
23
|
#
|
24
|
-
# @param [String] config_path
|
24
|
+
# @param [String] :config_path
|
25
|
+
# @param [Boolean] :follow_redirect
|
26
|
+
# Follow redirect URL in gems
|
25
27
|
#
|
26
28
|
# @return [GemApiClient]
|
27
29
|
#
|
28
|
-
def initialize(config_path
|
30
|
+
def initialize(config_path: nil, follow_redirect: false)
|
29
31
|
@error_messages = []
|
30
32
|
@config_gems = get_config_gems(config_path)
|
33
|
+
@follow_redirect = follow_redirect
|
31
34
|
|
32
35
|
freeze
|
33
36
|
end
|
@@ -53,7 +56,7 @@ module Bundler
|
|
53
56
|
|
54
57
|
private
|
55
58
|
|
56
|
-
attr_accessor :error_messages, :config_gems
|
59
|
+
attr_accessor :error_messages, :config_gems, :follow_redirect
|
57
60
|
|
58
61
|
def api_url(gem_name)
|
59
62
|
"https://rubygems.org/api/v1/gems/#{gem_name}.json"
|
@@ -122,6 +125,8 @@ module Bundler
|
|
122
125
|
end
|
123
126
|
|
124
127
|
def url_via_redirect(url)
|
128
|
+
return url unless follow_redirect
|
129
|
+
|
125
130
|
response = connection.head(url)
|
126
131
|
return response.headers["location"] if response.status == 301
|
127
132
|
|
@@ -1,15 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "octokit"
|
4
3
|
require "json"
|
5
4
|
|
6
5
|
module Bundler
|
7
6
|
module Alive
|
8
7
|
module Client
|
9
8
|
#
|
10
|
-
# API Client for GitHub API
|
9
|
+
# API Client for GitHub GraphQL API
|
11
10
|
#
|
12
|
-
# @see https://docs.github.com/en/
|
11
|
+
# @see https://docs.github.com/en/graphql
|
13
12
|
#
|
14
13
|
module GithubApi
|
15
14
|
# Environment variable name of GitHub Access Token
|
@@ -17,27 +16,10 @@ module Bundler
|
|
17
16
|
|
18
17
|
# Separator of query condition
|
19
18
|
QUERY_CONDITION_SEPARATOR = " "
|
19
|
+
private_constant :QUERY_CONDITION_SEPARATOR
|
20
20
|
|
21
|
-
# Number of attempts to request after too many requests
|
22
|
-
RETRIES_ON_TOO_MANY_REQUESTS = 3
|
23
|
-
|
24
|
-
#
|
25
|
-
# Interval second when retrying request
|
26
|
-
#
|
27
|
-
# @note
|
28
|
-
# This is an empirical value and should
|
29
|
-
# refer to response of Rate Limit API
|
30
|
-
#
|
31
|
-
# @see
|
32
|
-
# https://docs.github.com/en/rest/overview/resources-in-the-rest-api#checking-your-rate-limit-status
|
33
|
-
RETRY_INTERVAL_SEC_ON_TOO_MANY_REQUESTS = 120
|
34
|
-
|
35
|
-
#
|
36
21
|
# Max number of conditional operator at once
|
37
|
-
|
38
|
-
# @see https://docs.github.com/en/rest/search#limitations-on-query-length
|
39
|
-
QUERY_MAX_OPERATORS_AT_ONCE = 6
|
40
|
-
|
22
|
+
QUERY_MAX_OPERATORS_AT_ONCE = 50
|
41
23
|
private_constant :QUERY_MAX_OPERATORS_AT_ONCE
|
42
24
|
|
43
25
|
def self.extended(base)
|
@@ -49,12 +31,15 @@ module Bundler
|
|
49
31
|
end
|
50
32
|
|
51
33
|
#
|
52
|
-
# Creates a
|
34
|
+
# Creates a GraphQL client
|
53
35
|
#
|
54
|
-
# @return [
|
36
|
+
# @return [GraphQL::Client]
|
55
37
|
#
|
56
38
|
def create_client
|
57
|
-
|
39
|
+
require_relative "github_graphql"
|
40
|
+
extend GithubGraphql
|
41
|
+
|
42
|
+
GithubGraphql::CLIENT
|
58
43
|
end
|
59
44
|
|
60
45
|
#
|
@@ -111,7 +96,7 @@ module Bundler
|
|
111
96
|
alive_status = if repository.nil?
|
112
97
|
Status::ALIVE_UNKNOWN
|
113
98
|
else
|
114
|
-
repository["
|
99
|
+
repository["isArchived"]
|
115
100
|
end
|
116
101
|
name_with_status[url.gem_name] = alive_status
|
117
102
|
end
|
@@ -126,21 +111,24 @@ module Bundler
|
|
126
111
|
# @return [Sawyer::Resource|nil]
|
127
112
|
def find_repository_from_repositories(url:, repositories:)
|
128
113
|
repositories.find do |repository|
|
129
|
-
|
114
|
+
# e.g.) tod's URL is https://github.com/JackC/tod
|
115
|
+
# but, the `nameWithOwner` is `jacks/tod`
|
116
|
+
slug(url.url).downcase == repository["nameWithOwner"].downcase
|
130
117
|
end
|
131
118
|
end
|
132
119
|
|
133
120
|
#
|
134
|
-
# Search query of repositories
|
121
|
+
# Search query of repositories (includes forked)
|
135
122
|
#
|
136
123
|
# @param [Array<RepositoryUrl>] urls
|
137
124
|
#
|
138
125
|
# @return [String]
|
139
126
|
#
|
140
127
|
def search_query(urls)
|
141
|
-
urls.map do |url|
|
128
|
+
repository_query = urls.map do |url|
|
142
129
|
"repo:#{slug(url.url)}"
|
143
130
|
end.join(QUERY_CONDITION_SEPARATOR)
|
131
|
+
"#{repository_query} fork:true"
|
144
132
|
end
|
145
133
|
|
146
134
|
#
|
@@ -148,18 +136,12 @@ module Bundler
|
|
148
136
|
#
|
149
137
|
# @param [String] query
|
150
138
|
#
|
151
|
-
# @raise [Octokit::TooManyRequests]
|
152
|
-
# when too many requested to GitHub.com
|
153
|
-
# @raise [SourceCodeClient::SearchRepositoryError]
|
154
|
-
# when Error without `Octokit::TooManyRequests`
|
155
|
-
#
|
156
139
|
# @return [Array<Sawyer::Resource>|nil]
|
157
140
|
#
|
158
141
|
def search_repositories(query)
|
159
|
-
result = @client.
|
160
|
-
|
161
|
-
|
162
|
-
raise e
|
142
|
+
result = @client.query(GithubGraphql::Query,
|
143
|
+
variables: { var_query: query, var_first: QUERY_MAX_OPERATORS_AT_ONCE })
|
144
|
+
result.data.search.nodes.map(&:to_h)
|
163
145
|
rescue StandardError => e
|
164
146
|
@error_messages << e.message
|
165
147
|
[]
|
@@ -167,21 +149,6 @@ module Bundler
|
|
167
149
|
|
168
150
|
def search_repositories_with_retry(query)
|
169
151
|
search_repositories(query)
|
170
|
-
rescue Octokit::TooManyRequests
|
171
|
-
if @retries_on_too_many_requests < RETRIES_ON_TOO_MANY_REQUESTS
|
172
|
-
@retries_on_too_many_requests += 1
|
173
|
-
sleep_with_message
|
174
|
-
retry
|
175
|
-
end
|
176
|
-
|
177
|
-
@rate_limit_exceeded = true
|
178
|
-
[]
|
179
|
-
end
|
180
|
-
|
181
|
-
def sleep_with_message
|
182
|
-
puts "Too many requested to GitHub. Sleep #{RETRY_INTERVAL_SEC_ON_TOO_MANY_REQUESTS} sec."
|
183
|
-
sleep RETRY_INTERVAL_SEC_ON_TOO_MANY_REQUESTS
|
184
|
-
puts "Retry request (#{@retries_on_too_many_requests}/#{RETRIES_ON_TOO_MANY_REQUESTS})"
|
185
152
|
end
|
186
153
|
|
187
154
|
#
|
@@ -192,7 +159,13 @@ module Bundler
|
|
192
159
|
# @return [String]
|
193
160
|
#
|
194
161
|
def slug(repository_url)
|
195
|
-
|
162
|
+
# from https://github.com/octokit/octokit.rb/blob/v4.22.0/lib/octokit/repository.rb#L12-L17
|
163
|
+
github_slug = URI.parse(repository_url).path[1..]
|
164
|
+
.gsub(%r{^repos/}, "")
|
165
|
+
.split("/", 3)[0..1]
|
166
|
+
.join("/")
|
167
|
+
|
168
|
+
github_slug.gsub(/\.git/, "")
|
196
169
|
end
|
197
170
|
end
|
198
171
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "graphql/client"
|
4
|
+
require "graphql/client/http"
|
5
|
+
|
6
|
+
module Bundler
|
7
|
+
module Alive
|
8
|
+
module Client
|
9
|
+
# GitHub GraphQL Module
|
10
|
+
module GithubGraphql
|
11
|
+
#
|
12
|
+
# Access token isn't set error
|
13
|
+
#
|
14
|
+
# @see https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
|
15
|
+
#
|
16
|
+
class AccessTokenNotFoundError < StandardError
|
17
|
+
def initialize(_message = nil)
|
18
|
+
message = "Environment variable #{ACCESS_TOKEN_ENV_NAME} is not set."\
|
19
|
+
" Need to set GitHub Personal Access Token to be authenticated at GitHub GraphQL API."\
|
20
|
+
" See: https://docs.github.com/en/graphql/guides/forming-calls-with-graphql#the-graphql-endpoint"
|
21
|
+
super(message)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Environment variable name of GitHub Access Token
|
26
|
+
ACCESS_TOKEN_ENV_NAME = "BUNDLER_ALIVE_GITHUB_TOKEN"
|
27
|
+
|
28
|
+
# GraphQL API endpoint
|
29
|
+
# @see https://docs.github.com/en/graphql/guides/forming-calls-with-graphql#the-graphql-endpoint
|
30
|
+
ENDPOINT = "https://api.github.com/graphql"
|
31
|
+
private_constant :ENDPOINT
|
32
|
+
|
33
|
+
QUERY = <<~QUERY
|
34
|
+
query($var_query: String!, $var_first: Int!) {
|
35
|
+
search(
|
36
|
+
query: $var_query
|
37
|
+
type: REPOSITORY
|
38
|
+
first: $var_first
|
39
|
+
) {
|
40
|
+
repositoryCount
|
41
|
+
nodes {
|
42
|
+
... on Repository {
|
43
|
+
isArchived
|
44
|
+
nameWithOwner
|
45
|
+
isMirror
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
QUERY
|
51
|
+
private_constant :QUERY
|
52
|
+
|
53
|
+
HTTP = GraphQL::Client::HTTP.new(ENDPOINT) do
|
54
|
+
def headers(_context)
|
55
|
+
token = ENV.fetch(ACCESS_TOKEN_ENV_NAME, nil)
|
56
|
+
raise AccessTokenNotFoundError if token.nil?
|
57
|
+
|
58
|
+
{
|
59
|
+
"Authorization" => "Bearer #{token}"
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
private_constant :HTTP
|
64
|
+
|
65
|
+
if File.exist?(SCHEMA_PATH)
|
66
|
+
SCHEMA = GraphQL::Client.load_schema(SCHEMA_PATH)
|
67
|
+
else
|
68
|
+
SCHEMA = GraphQL::Client.load_schema(HTTP)
|
69
|
+
Dir.mkdir(USER_PATH) unless Dir.exist?(USER_PATH)
|
70
|
+
GraphQL::Client.dump_schema(SCHEMA, SCHEMA_PATH)
|
71
|
+
end
|
72
|
+
private_constant :SCHEMA
|
73
|
+
|
74
|
+
# GraphQL client
|
75
|
+
CLIENT = GraphQL::Client.new(schema: SCHEMA, execute: HTTP)
|
76
|
+
|
77
|
+
# query
|
78
|
+
Query = CLIENT.parse(QUERY)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/lib/bundler/alive/doctor.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "bundler"
|
4
|
-
require "octokit"
|
5
4
|
|
6
5
|
module Bundler
|
7
6
|
module Alive
|
@@ -12,13 +11,14 @@ module Bundler
|
|
12
11
|
#
|
13
12
|
# A new instance of Doctor
|
14
13
|
#
|
15
|
-
# @param [String] lock_file lock file of gem
|
16
|
-
# @param [String] config_file config file
|
17
|
-
# @param [Array<String>] ignore_gems ignore gems
|
14
|
+
# @param [String] :lock_file # lock file of gem
|
15
|
+
# @param [String] :config_file # config file
|
16
|
+
# @param [Array<String>] :ignore_gems ignore gems
|
17
|
+
# @param [Boolean] :follow_redirect Follow redirect URL in gems
|
18
18
|
#
|
19
|
-
def initialize(lock_file
|
19
|
+
def initialize(lock_file:, config_file:, ignore_gems:, follow_redirect: false)
|
20
20
|
@lock_file = lock_file
|
21
|
-
@gem_client = Client::GemsApiClient.new(config_file)
|
21
|
+
@gem_client = Client::GemsApiClient.new(config_path: config_file, follow_redirect: follow_redirect)
|
22
22
|
@ignore_gems = ignore_gems
|
23
23
|
@result = nil
|
24
24
|
@rate_limit_exceeded = false
|
data/lib/bundler/alive.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
module Bundler
|
4
|
+
module Alive
|
5
|
+
USER_PATH = File.expand_path(File.join(Gem.user_home, ".local", "share", "bundler-alive"))
|
6
|
+
SCHEMA_PATH = File.join(USER_PATH, "schema.json")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
3
10
|
require_relative "alive/version"
|
4
11
|
require_relative "alive/doctor"
|
5
12
|
require_relative "alive/source_code_repository"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bundler-alive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katsuhiko YOSHIDA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: graphql-client
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -209,6 +209,7 @@ files:
|
|
209
209
|
- lib/bundler/alive/client/gems_api_client.rb
|
210
210
|
- lib/bundler/alive/client/gems_api_response.rb
|
211
211
|
- lib/bundler/alive/client/github_api.rb
|
212
|
+
- lib/bundler/alive/client/github_graphql.rb
|
212
213
|
- lib/bundler/alive/client/gitlab_api.rb
|
213
214
|
- lib/bundler/alive/client/source_code_client.rb
|
214
215
|
- lib/bundler/alive/doctor.rb
|
@@ -225,7 +226,7 @@ licenses: []
|
|
225
226
|
metadata:
|
226
227
|
homepage_uri: https://github.com/kyoshidajp/bundler-alive
|
227
228
|
source_code_uri: https://github.com/kyoshidajp/bundler-alive
|
228
|
-
changelog_uri: https://github.com/kyoshidajp/bundler-alive
|
229
|
+
changelog_uri: https://github.com/kyoshidajp/bundler-alive/commits/main
|
229
230
|
rubygems_mfa_required: 'true'
|
230
231
|
post_install_message:
|
231
232
|
rdoc_options: []
|