still_active 0.1.1 → 0.4.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/codeql-analysis.yml +70 -0
- data/.github/workflows/rspec.yml +26 -0
- data/.github/workflows/rubocop-analysis.yml +47 -0
- data/.rspec +0 -1
- data/.rubocop.yml +11 -0
- data/CHANGELOG.md +34 -1
- data/Gemfile +4 -3
- data/Gemfile.lock +57 -31
- data/README.md +26 -14
- data/bin/console +0 -2
- data/fixtures/vcr_cassettes/gems.yml +2697 -0
- data/lib/helpers/emoji_helper.rb +3 -2
- data/lib/helpers/markdown_helper.rb +1 -1
- data/lib/helpers/version_helper.rb +2 -0
- data/lib/still_active/cli.rb +3 -4
- data/lib/still_active/config.rb +4 -2
- data/lib/still_active/options.rb +11 -4
- data/lib/still_active/repository.rb +4 -1
- data/lib/still_active/version.rb +1 -1
- data/lib/still_active/workflow.rb +19 -27
- data/still_active.gemspec +5 -2
- metadata +54 -9
- data/.github/workflows/main.yml +0 -16
data/lib/helpers/emoji_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/isolated_execution_state"
|
3
4
|
require "active_support/core_ext/integer/time"
|
4
5
|
|
5
6
|
module StillActive
|
@@ -11,9 +12,9 @@ module StillActive
|
|
11
12
|
return StillActive.config.unsure_emoji if most_recent_activity.nil?
|
12
13
|
|
13
14
|
case most_recent_activity
|
14
|
-
when (StillActive.config.
|
15
|
+
when (StillActive.config.no_warning_range_end.years.ago)..(Time.now)
|
15
16
|
""
|
16
|
-
when (StillActive.config.warning_range_end.years.ago)..(StillActive.config.
|
17
|
+
when (StillActive.config.warning_range_end.years.ago)..(StillActive.config.no_warning_range_end.years.ago)
|
17
18
|
StillActive.config.warning_emoji
|
18
19
|
else
|
19
20
|
StillActive.config.critical_warning_emoji
|
@@ -36,7 +36,7 @@ module StillActive
|
|
36
36
|
last_commit_date = data.dig(:last_commit_date)
|
37
37
|
last_commit_url = repository_url
|
38
38
|
|
39
|
-
inactive_repository_emoji = data.dig(:
|
39
|
+
inactive_repository_emoji = data.dig(:last_activity_warning_emoj)
|
40
40
|
using_latest_version_emoji = data.dig(:up_to_date_emoji)
|
41
41
|
|
42
42
|
formatted_name = markdown_url(text: gem_name, url: repository_url)
|
data/lib/still_active/cli.rb
CHANGED
@@ -6,7 +6,6 @@ require_relative "../helpers/emoji_helper"
|
|
6
6
|
require_relative "../helpers/markdown_helper"
|
7
7
|
require_relative "../helpers/version_helper"
|
8
8
|
require_relative "workflow"
|
9
|
-
require "debug"
|
10
9
|
# require "cli/ui"
|
11
10
|
|
12
11
|
module StillActive
|
@@ -28,12 +27,12 @@ module StillActive
|
|
28
27
|
puts MarkdownHelper.markdown_table_header_line
|
29
28
|
result.keys.sort.each do |name|
|
30
29
|
result[name].merge!({
|
31
|
-
|
30
|
+
last_activity_warning_emoj: EmojiHelper.inactive_gem_emoji(result[name]),
|
32
31
|
up_to_date_emoji: EmojiHelper.using_latest_emoji(
|
33
|
-
using_last_release: up_to_date?(
|
32
|
+
using_last_release: VersionHelper.up_to_date?(
|
34
33
|
version_used: result[name].dig(:version_used), latest_version: result[name].dig(:latest_version)
|
35
34
|
),
|
36
|
-
using_last_pre_release: up_to_date?(
|
35
|
+
using_last_pre_release: VersionHelper.up_to_date?(
|
37
36
|
version_used: result[name].dig(:version_used), latest_version: result[name].dig(:latest_pre_release_version)
|
38
37
|
),
|
39
38
|
),
|
data/lib/still_active/config.rb
CHANGED
@@ -5,12 +5,14 @@ require "bundler"
|
|
5
5
|
module StillActive
|
6
6
|
class Config
|
7
7
|
attr_accessor :critical_warning_emoji, :futurist_emoji, :gemfile_path, :gems, :github_oauth_token, :output_format,
|
8
|
-
:
|
8
|
+
:parallelism, :no_warning_range_end, :success_emoji, :unsure_emoji, :warning_emoji, :warning_range_end
|
9
9
|
|
10
10
|
def initialize
|
11
11
|
@gemfile_path = Bundler.default_gemfile.to_s
|
12
12
|
@gems = []
|
13
13
|
|
14
|
+
@parallelism = 10
|
15
|
+
|
14
16
|
@output_format = :markdown
|
15
17
|
|
16
18
|
@critical_warning_emoji = "🚩"
|
@@ -19,7 +21,7 @@ module StillActive
|
|
19
21
|
@unsure_emoji = "❓"
|
20
22
|
@warning_emoji = "⚠️"
|
21
23
|
|
22
|
-
@
|
24
|
+
@no_warning_range_end = 1
|
23
25
|
@warning_range_end = 3
|
24
26
|
end
|
25
27
|
|
data/lib/still_active/options.rb
CHANGED
@@ -15,6 +15,7 @@ module StillActive
|
|
15
15
|
add_gems_option(opts)
|
16
16
|
add_output_options(opts)
|
17
17
|
add_token_options(opts)
|
18
|
+
add_parallelism_options(opts)
|
18
19
|
add_range_options(opts)
|
19
20
|
add_emoji_options(opts)
|
20
21
|
end
|
@@ -57,13 +58,19 @@ module StillActive
|
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
61
|
+
def add_parallelism_options(opts)
|
62
|
+
opts.on("--simultaneous-requests=QTY", Integer, "Number of simultaneous requests made") do |value|
|
63
|
+
StillActive.config { |config| config.parallelism = value }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
60
67
|
def add_range_options(opts)
|
61
|
-
opts.on("--
|
62
|
-
"maximum number of years since last activity to be
|
63
|
-
StillActive.config { |config| config.
|
68
|
+
opts.on("--no-warning-range-end=YEARS", Integer,
|
69
|
+
"maximum number of years since last activity until which you do not want to be warned about ") do |value|
|
70
|
+
StillActive.config { |config| config.no_warning_range_end = value }
|
64
71
|
end
|
65
72
|
opts.on("--warning-range-end=YEARS", Integer,
|
66
|
-
"maximum number of years since last activity to be
|
73
|
+
"maximum number of years since last activity that you want to be warned about") do |value|
|
67
74
|
StillActive.config { |config| config.warning_range_end = value }
|
68
75
|
end
|
69
76
|
end
|
@@ -5,6 +5,9 @@ module StillActive
|
|
5
5
|
GITHUB_REGEX = %r{(http(?:s)?://(?:www\.)?(github)\.com/((?:\w|_|-)+)/((?:\w|_|-)+))}i
|
6
6
|
GITLAB_REGEX = %r{(http(?:s)?://(?:www\.)?(gitlab)\.com/((?:\w|_|-)+)/((?:\w|_|-)+))}i
|
7
7
|
|
8
|
+
HASH_KEYS = [:url, :source, :owner, :name]
|
9
|
+
private_constant :HASH_KEYS
|
10
|
+
|
8
11
|
extend self
|
9
12
|
|
10
13
|
def valid?(url:)
|
@@ -18,7 +21,7 @@ module StillActive
|
|
18
21
|
values = url&.scan(regex)&.first
|
19
22
|
next if values.nil? || values.empty?
|
20
23
|
|
21
|
-
return
|
24
|
+
return HASH_KEYS.zip(values).to_h
|
22
25
|
end
|
23
26
|
{ source: :unhandled, owner: nil, name: nil }
|
24
27
|
end
|
data/lib/still_active/version.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative "repository"
|
|
4
4
|
require_relative "../helpers/version_helper"
|
5
5
|
require "async"
|
6
6
|
require "async/barrier"
|
7
|
+
require "async/semaphore"
|
7
8
|
require "gems"
|
8
9
|
require "github_api"
|
9
10
|
|
@@ -15,9 +16,10 @@ module StillActive
|
|
15
16
|
def call
|
16
17
|
task = Async do
|
17
18
|
barrier = Async::Barrier.new
|
19
|
+
semaphore = Async::Semaphore.new(StillActive.config.parallelism, parent: barrier)
|
18
20
|
result_object = {}
|
19
21
|
StillActive.config.gems.each_with_object(result_object) do |gem, hash|
|
20
|
-
|
22
|
+
semaphore.async do
|
21
23
|
gem_info(gem_name: gem[:name], result_object: hash, gem_version: gem.dig(:version))
|
22
24
|
end
|
23
25
|
end
|
@@ -31,43 +33,40 @@ module StillActive
|
|
31
33
|
|
32
34
|
def gem_info(gem_name:, result_object:, gem_version: nil)
|
33
35
|
result_object[gem_name] = {}
|
34
|
-
result_object[gem_name]
|
35
|
-
version_used: gem_version,
|
36
|
-
}) if gem_version
|
36
|
+
result_object[gem_name][:version_used] = gem_version if gem_version
|
37
37
|
|
38
38
|
vs = versions(gem_name: gem_name)
|
39
39
|
repo_info = repository_info(gem_name: gem_name, versions: vs)
|
40
40
|
last_commit_date = last_commit_date(source: repo_info[:source], repository_owner: repo_info[:owner],
|
41
41
|
repository_name: repo_info[:name])
|
42
|
-
last_release = find_version(versions: vs, pre_release: false)
|
43
|
-
last_pre_release = find_version(versions: vs, pre_release: true)
|
42
|
+
last_release = VersionHelper.find_version(versions: vs, pre_release: false)
|
43
|
+
last_pre_release = VersionHelper.find_version(versions: vs, pre_release: true)
|
44
44
|
result_object[gem_name].merge!({
|
45
|
-
latest_version: gem_version(version_hash: last_release),
|
46
|
-
latest_version_release_date: release_date(version_hash: last_release),
|
45
|
+
latest_version: VersionHelper.gem_version(version_hash: last_release),
|
46
|
+
latest_version_release_date: VersionHelper.release_date(version_hash: last_release),
|
47
47
|
|
48
|
-
latest_pre_release_version: gem_version(version_hash: last_pre_release),
|
49
|
-
latest_pre_release_version_release_date: release_date(version_hash: last_pre_release),
|
48
|
+
latest_pre_release_version: VersionHelper.gem_version(version_hash: last_pre_release),
|
49
|
+
latest_pre_release_version_release_date: VersionHelper.release_date(version_hash: last_pre_release),
|
50
50
|
|
51
51
|
repository_url: repo_info[:url],
|
52
52
|
last_commit_date: last_commit_date,
|
53
53
|
})
|
54
54
|
|
55
55
|
unless vs.empty?
|
56
|
-
result_object[gem_name]
|
56
|
+
result_object[gem_name][:ruby_gems_url] = "https://rubygems.org/gems/#{gem_name}"
|
57
57
|
end
|
58
58
|
|
59
59
|
if gem_version
|
60
|
-
version_used = find_version(versions: vs, version_string: gem_version)
|
60
|
+
version_used = VersionHelper.find_version(versions: vs, version_string: gem_version)
|
61
61
|
result_object[gem_name].merge!({
|
62
|
-
# global_warning: global_warning,
|
63
62
|
up_to_date:
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
63
|
+
VersionHelper.up_to_date?(
|
64
|
+
version_used: version_used,
|
65
|
+
latest_version: last_release,
|
66
|
+
latest_pre_release_version: last_pre_release
|
67
|
+
),
|
69
68
|
|
70
|
-
version_used_release_date: release_date(version_hash: version_used),
|
69
|
+
version_used_release_date: VersionHelper.release_date(version_hash: version_used),
|
71
70
|
})
|
72
71
|
end
|
73
72
|
rescue StandardError => e
|
@@ -82,7 +81,6 @@ module StillActive
|
|
82
81
|
end
|
83
82
|
|
84
83
|
def repository_info(gem_name:, versions:)
|
85
|
-
# binding.break # if gem_name == "still_active"
|
86
84
|
valid_repository_url =
|
87
85
|
installed_gem_urls(gem_name: gem_name).find { |url| Repository.valid?(url: url) } ||
|
88
86
|
rubygems_versions_repository_url(versions: versions).find { |url| Repository.valid?(url: url) } ||
|
@@ -90,7 +88,6 @@ module StillActive
|
|
90
88
|
Repository.url_with_owner_and_name(url: valid_repository_url)
|
91
89
|
end
|
92
90
|
|
93
|
-
# does not make network requests
|
94
91
|
def installed_gem_urls(gem_name:)
|
95
92
|
info = Gem::Dependency.new(gem_name).matching_specs.first
|
96
93
|
return [] if info.nil?
|
@@ -101,15 +98,12 @@ module StillActive
|
|
101
98
|
].compact.uniq
|
102
99
|
end
|
103
100
|
|
104
|
-
# does not make network requests
|
105
101
|
def rubygems_versions_repository_url(versions:)
|
106
102
|
versions
|
107
|
-
.
|
108
|
-
.compact
|
103
|
+
.filter_map { |version| version.dig("metadata", "source_code_uri") }
|
109
104
|
.uniq
|
110
105
|
end
|
111
106
|
|
112
|
-
# makes network request
|
113
107
|
def rubygems_gem_repository_url(gem_name:)
|
114
108
|
info = Gems.info(gem_name)
|
115
109
|
return [] if info.nil?
|
@@ -122,7 +116,6 @@ module StillActive
|
|
122
116
|
[]
|
123
117
|
end
|
124
118
|
|
125
|
-
# makes network request
|
126
119
|
def last_commit(source:, repository_owner:, repository_name:)
|
127
120
|
case source.to_sym
|
128
121
|
when :github
|
@@ -132,7 +125,6 @@ module StillActive
|
|
132
125
|
end
|
133
126
|
end
|
134
127
|
|
135
|
-
# makes network request
|
136
128
|
def last_commit_date(source:, repository_owner:, repository_name:)
|
137
129
|
commit = last_commit(source: source, repository_owner: repository_owner, repository_name: repository_name)
|
138
130
|
case source.to_sym
|
data/still_active.gemspec
CHANGED
@@ -10,9 +10,9 @@ Gem::Specification.new do |spec|
|
|
10
10
|
|
11
11
|
spec.summary = "Check if gems are under active development."
|
12
12
|
spec.description = "Obtain last release, pre-release, and last commit date to determine if a gem is still under active development."
|
13
|
-
spec.homepage = "https://github.com/SeanLF/still_active
|
13
|
+
spec.homepage = "https://github.com/SeanLF/still_active"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = ">= 2.
|
15
|
+
spec.required_ruby_version = ">= 2.7.0"
|
16
16
|
|
17
17
|
# spec.metadata["allowed_push_host"] = "TODO: Set to 'https://mygemserver.com'"
|
18
18
|
|
@@ -35,12 +35,15 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_development_dependency("debug")
|
36
36
|
spec.add_development_dependency("faker")
|
37
37
|
spec.add_development_dependency("rubocop")
|
38
|
+
spec.add_development_dependency("rubocop-performance")
|
39
|
+
spec.add_development_dependency("rubocop-rspec")
|
38
40
|
spec.add_development_dependency("rubocop-shopify")
|
39
41
|
|
40
42
|
spec.add_runtime_dependency("activesupport")
|
41
43
|
spec.add_runtime_dependency("async")
|
42
44
|
# spec.add_runtime_dependency("cli-ui")
|
43
45
|
spec.add_runtime_dependency("async-http")
|
46
|
+
spec.add_runtime_dependency("bundler", ">= 2.0")
|
44
47
|
spec.add_runtime_dependency("gems")
|
45
48
|
spec.add_runtime_dependency("github_api")
|
46
49
|
# spec.add_runtime_dependency("gitlab")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: still_active
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Floyd
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dead_end
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-performance
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: rubocop-shopify
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +150,20 @@ dependencies:
|
|
122
150
|
- - ">="
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: bundler
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '2.0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '2.0'
|
125
167
|
- !ruby/object:Gem::Dependency
|
126
168
|
name: gems
|
127
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,7 +201,9 @@ executables:
|
|
159
201
|
extensions: []
|
160
202
|
extra_rdoc_files: []
|
161
203
|
files:
|
162
|
-
- ".github/workflows/
|
204
|
+
- ".github/workflows/codeql-analysis.yml"
|
205
|
+
- ".github/workflows/rspec.yml"
|
206
|
+
- ".github/workflows/rubocop-analysis.yml"
|
163
207
|
- ".gitignore"
|
164
208
|
- ".rspec"
|
165
209
|
- ".rubocop.yml"
|
@@ -172,6 +216,7 @@ files:
|
|
172
216
|
- bin/console
|
173
217
|
- bin/setup
|
174
218
|
- bin/still_active
|
219
|
+
- fixtures/vcr_cassettes/gems.yml
|
175
220
|
- lib/helpers/bundler_helper.rb
|
176
221
|
- lib/helpers/emoji_helper.rb
|
177
222
|
- lib/helpers/markdown_helper.rb
|
@@ -185,13 +230,13 @@ files:
|
|
185
230
|
- lib/still_active/version.rb
|
186
231
|
- lib/still_active/workflow.rb
|
187
232
|
- still_active.gemspec
|
188
|
-
homepage: https://github.com/SeanLF/still_active
|
233
|
+
homepage: https://github.com/SeanLF/still_active
|
189
234
|
licenses:
|
190
235
|
- MIT
|
191
236
|
metadata:
|
192
|
-
homepage_uri: https://github.com/SeanLF/still_active
|
193
|
-
source_code_uri: https://github.com/SeanLF/still_active
|
194
|
-
changelog_uri: https://github.com/SeanLF/still_active
|
237
|
+
homepage_uri: https://github.com/SeanLF/still_active
|
238
|
+
source_code_uri: https://github.com/SeanLF/still_active
|
239
|
+
changelog_uri: https://github.com/SeanLF/still_active/blob/main/CHANGELOG.md
|
195
240
|
post_install_message:
|
196
241
|
rdoc_options: []
|
197
242
|
require_paths:
|
@@ -200,14 +245,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
200
245
|
requirements:
|
201
246
|
- - ">="
|
202
247
|
- !ruby/object:Gem::Version
|
203
|
-
version: 2.
|
248
|
+
version: 2.7.0
|
204
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
205
250
|
requirements:
|
206
251
|
- - ">="
|
207
252
|
- !ruby/object:Gem::Version
|
208
253
|
version: '0'
|
209
254
|
requirements: []
|
210
|
-
rubygems_version: 3.
|
255
|
+
rubygems_version: 3.3.5
|
211
256
|
signing_key:
|
212
257
|
specification_version: 4
|
213
258
|
summary: Check if gems are under active development.
|
data/.github/workflows/main.yml
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
name: Ruby
|
2
|
-
|
3
|
-
on: [push,pull_request]
|
4
|
-
|
5
|
-
jobs:
|
6
|
-
build:
|
7
|
-
runs-on: ubuntu-latest
|
8
|
-
steps:
|
9
|
-
- uses: actions/checkout@v2
|
10
|
-
- name: Set up Ruby
|
11
|
-
uses: ruby/setup-ruby@v1
|
12
|
-
with:
|
13
|
-
ruby-version: 3.0.2
|
14
|
-
bundler-cache: true
|
15
|
-
- name: Run the default task
|
16
|
-
run: bundle exec rake
|