still_active 1.0.0 → 1.0.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 +9 -0
- data/Gemfile.lock +2 -2
- data/README.md +81 -32
- data/lib/still_active/version.rb +1 -1
- data/still_active.gemspec +7 -5
- metadata +9 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f4f584514824888d1b457c3b3662c449d5aa5ef8244cb31760ed005afc2204d3
|
|
4
|
+
data.tar.gz: 9e2c109064b073de04025c36730a171760beae79866e97bff44d4008d7cf1187
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 00a1c67f51fc48961185bfcab6f6ec1a30cfa15f417a8feec70606d673f2ac7278d7dd267376af27e6670d88316ba31ae7d8d63ad3f470f94b5c483e03cbbd1e
|
|
7
|
+
data.tar.gz: bb4bc6f91c96a3f24381179cc295ea21f3f9545ef9a148f95fc53525195e6cda4111887c8d247c1bf50e59f2edd9e94ac5987609ab588300f3a612aae5228e5c
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.0.1] - 2026-02-19
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Rewrite gemspec summary and description for discoverability (mentions dependency health, outdated, vulnerabilities, abandoned gems)
|
|
8
|
+
- Restructure README: problem-first opening, terminal output example, comparison table vs bundle outdated/bundler-audit/libyear-bundler, quick start guide
|
|
9
|
+
- Add 13 GitHub topics for search visibility
|
|
10
|
+
- Update GitHub repo description
|
|
11
|
+
|
|
3
12
|
## [1.0.0] - 2026-02-19
|
|
4
13
|
|
|
5
14
|
### Added
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
still_active (1.0.
|
|
4
|
+
still_active (1.0.1)
|
|
5
5
|
async
|
|
6
6
|
bundler (>= 2.0)
|
|
7
7
|
faraday-retry
|
|
@@ -225,7 +225,7 @@ CHECKSUMS
|
|
|
225
225
|
rubocop-shopify (2.18.0) sha256=dafa25e5617ce4600ff86b1de3d5b78e43ab3d58cc5729df38e492b8e10294eb
|
|
226
226
|
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
|
|
227
227
|
sawyer (0.9.3) sha256=0d0f19298408047037638639fe62f4794483fb04320269169bd41af2bdcf5e41
|
|
228
|
-
still_active (1.0.
|
|
228
|
+
still_active (1.0.1)
|
|
229
229
|
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
|
|
230
230
|
traces (0.18.2) sha256=80f1649cb4daace1d7174b81f3b3b7427af0b93047759ba349960cb8f315e214
|
|
231
231
|
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
|
data/README.md
CHANGED
|
@@ -1,23 +1,74 @@
|
|
|
1
1
|
# `still_active`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**How do you know if your Ruby dependencies are still maintained?**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`bundle outdated` tells you version drift. `bundler-audit` catches known CVEs. Neither tells you whether anyone is still working on the thing. `still_active` checks maintenance activity, version freshness, security scores, and vulnerabilities for every gem in your Gemfile -- in one pass.
|
|
6
6
|
|
|
7
|
+
[](https://badge.fury.io/rb/still_active)
|
|
7
8
|

|
|
8
9
|

|
|
9
10
|

|
|
10
11
|
|
|
12
|
+
```
|
|
13
|
+
Name Version Activity OpenSSF Vulns
|
|
14
|
+
──────────────────────────────────────────────────────────────────
|
|
15
|
+
code-scanning-rubocop 0.6.1 (latest) stale 3.1/10 0
|
|
16
|
+
debug 1.11.1 (latest) ok 5.2/10 0
|
|
17
|
+
faker 3.6.0 (latest) ok 7.4/10 0
|
|
18
|
+
rake 13.3.1 (latest) ok 5.3/10 0
|
|
19
|
+
rspec 3.13.2 (latest) ok 6.9/10 0
|
|
20
|
+
rubocop 1.84.2 (latest) ok 5.9/10 0
|
|
21
|
+
|
|
22
|
+
12 gems: 12 up to date, 0 outdated · 11 active, 1 stale · 0 vulnerabilities
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Why `still_active`?
|
|
26
|
+
|
|
27
|
+
Most dependency tools answer one question. `still_active` answers all of them at once:
|
|
28
|
+
|
|
29
|
+
| | `bundle outdated` | `bundler-audit` | `libyear-bundler` | **`still_active`** |
|
|
30
|
+
| ---------------------------- | ----------------- | --------------- | ----------------- | ---------------------------- |
|
|
31
|
+
| Outdated versions | Yes | - | Yes | **Yes** |
|
|
32
|
+
| Known vulnerabilities (CVEs) | - | Yes | - | **Yes** |
|
|
33
|
+
| OpenSSF Scorecard | - | - | - | **Yes** |
|
|
34
|
+
| Last commit activity | - | - | - | **Yes** |
|
|
35
|
+
| GitLab support | - | - | - | **Yes** |
|
|
36
|
+
| CI quality gates | - | Exit code | - | **Yes** |
|
|
37
|
+
| Multiple output formats | - | - | - | **Terminal, JSON, Markdown** |
|
|
38
|
+
| Single command | Yes | Yes | Yes | **Yes** |
|
|
39
|
+
|
|
40
|
+
`still_active` tells you whether a dependency is outdated, insecure, _and_ abandoned -- not just one of the three.
|
|
41
|
+
|
|
11
42
|
## Installation
|
|
12
43
|
|
|
13
44
|
```bash
|
|
14
45
|
gem install still_active
|
|
15
46
|
```
|
|
16
47
|
|
|
48
|
+
## Quick Start
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# audit your Gemfile (auto-detects output format)
|
|
52
|
+
still_active
|
|
53
|
+
|
|
54
|
+
# check specific gems
|
|
55
|
+
still_active --gems=rails,nokogiri,sidekiq
|
|
56
|
+
|
|
57
|
+
# CI pipeline: fail if any gem is critically stale
|
|
58
|
+
still_active --fail-if-critical
|
|
59
|
+
|
|
60
|
+
# markdown table for pull requests or documentation
|
|
61
|
+
still_active --markdown
|
|
62
|
+
```
|
|
63
|
+
|
|
17
64
|
## Usage
|
|
18
65
|
|
|
66
|
+
### Authentication
|
|
67
|
+
|
|
19
68
|
Tokens are read from `GITHUB_TOKEN` and `GITLAB_TOKEN` environment variables by default. Without a GitHub token you will most certainly get rate limited. The GitLab token is optional for public repos but required for private ones. CLI flags override the env vars.
|
|
20
69
|
|
|
70
|
+
### CLI options
|
|
71
|
+
|
|
21
72
|
```text
|
|
22
73
|
Usage: still_active [options]
|
|
23
74
|
|
|
@@ -44,14 +95,16 @@ Usage: still_active [options]
|
|
|
44
95
|
-v, --version Show version
|
|
45
96
|
```
|
|
46
97
|
|
|
47
|
-
###
|
|
98
|
+
### Output formats
|
|
99
|
+
|
|
100
|
+
**Terminal** (default on TTY) -- coloured table with summary line. Shown above.
|
|
101
|
+
|
|
102
|
+
**JSON** (default when piped) -- structured data for automation:
|
|
48
103
|
|
|
49
104
|
```bash
|
|
50
105
|
still_active --json --gems=rails,nokogiri
|
|
51
106
|
```
|
|
52
107
|
|
|
53
|
-
Will output:
|
|
54
|
-
|
|
55
108
|
```json
|
|
56
109
|
{
|
|
57
110
|
"rails": {
|
|
@@ -79,26 +132,17 @@ Will output:
|
|
|
79
132
|
}
|
|
80
133
|
```
|
|
81
134
|
|
|
135
|
+
**Markdown** -- table for pull requests, documentation, or wikis:
|
|
136
|
+
|
|
82
137
|
```bash
|
|
83
|
-
# run against this gem's own Gemfile
|
|
84
138
|
still_active --markdown
|
|
85
139
|
```
|
|
86
140
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
| | ✅ | 5.2/10 | ✅ | [debug](https://github.com/ruby/debug) | [1.11.1](https://rubygems.org/gems/debug/versions/1.11.1) (2025/12) | [1.11.1](https://rubygems.org/gems/debug/versions/1.11.1) (2025/12) | [1.0.0.rc2](https://rubygems.org/gems/debug/versions/1.0.0.rc2) (2021/09) | [2025/12](https://github.com/ruby/debug) |
|
|
93
|
-
| | ✅ | 7.4/10 | ✅ | [faker](https://github.com/faker-ruby/faker) | [3.6.0](https://rubygems.org/gems/faker/versions/3.6.0) (2026/01) | [3.6.0](https://rubygems.org/gems/faker/versions/3.6.0) (2026/01) | ❓ | [2026/02](https://github.com/faker-ruby/faker) |
|
|
94
|
-
| | ✅ | 5.3/10 | ✅ | [rake](https://github.com/ruby/rake) | [13.3.1](https://rubygems.org/gems/rake/versions/13.3.1) (2025/10) | [13.3.1](https://rubygems.org/gems/rake/versions/13.3.1) (2025/10) | [13.0.0.pre.1](https://rubygems.org/gems/rake/versions/13.0.0.pre.1) (2019/09) | [2026/02](https://github.com/ruby/rake) |
|
|
95
|
-
| | ✅ | 6.9/10 | ✅ | [rspec](https://github.com/rspec/rspec) | [3.13.2](https://rubygems.org/gems/rspec/versions/3.13.2) (2025/10) | [3.13.2](https://rubygems.org/gems/rspec/versions/3.13.2) (2025/10) | [4.0.0.beta1](https://rubygems.org/gems/rspec/versions/4.0.0.beta1) (2026/02) | [2026/02](https://github.com/rspec/rspec) |
|
|
96
|
-
| | ✅ | 5.9/10 | ✅ | [rubocop](https://github.com/rubocop/rubocop) | [1.84.2](https://rubygems.org/gems/rubocop/versions/1.84.2) (2026/02) | [1.84.2](https://rubygems.org/gems/rubocop/versions/1.84.2) (2026/02) | ❓ | [2026/02](https://github.com/rubocop/rubocop) |
|
|
97
|
-
| | ✅ | ❓ | ✅ | [rubocop-performance](https://github.com/rubocop/rubocop-performance) | [1.26.1](https://rubygems.org/gems/rubocop-performance/versions/1.26.1) (2025/10) | [1.26.1](https://rubygems.org/gems/rubocop-performance/versions/1.26.1) (2025/10) | ❓ | [2026/01](https://github.com/rubocop/rubocop-performance) |
|
|
98
|
-
| | ✅ | ❓ | ✅ | [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) | [3.9.0](https://rubygems.org/gems/rubocop-rspec/versions/3.9.0) (2026/01) | [3.9.0](https://rubygems.org/gems/rubocop-rspec/versions/3.9.0) (2026/01) | [3.0.0.pre](https://rubygems.org/gems/rubocop-rspec/versions/3.0.0.pre) (2024/06) | [2026/02](https://github.com/rubocop/rubocop-rspec) |
|
|
99
|
-
| | ✅ | ❓ | ✅ | [rubocop-shopify](https://github.com/Shopify/ruby-style-guide) | [2.18.0](https://rubygems.org/gems/rubocop-shopify/versions/2.18.0) (2025/10) | [2.18.0](https://rubygems.org/gems/rubocop-shopify/versions/2.18.0) (2025/10) | ❓ | [2026/01](https://github.com/Shopify/ruby-style-guide) |
|
|
100
|
-
| | ✅ | ❓ | ✅ | [vcr](https://github.com/vcr/vcr) | [6.4.0](https://rubygems.org/gems/vcr/versions/6.4.0) (2025/12) | [6.4.0](https://rubygems.org/gems/vcr/versions/6.4.0) (2025/12) | [2.0.0.rc2](https://rubygems.org/gems/vcr/versions/2.0.0.rc2) (2012/02) | [2026/01](https://github.com/vcr/vcr) |
|
|
101
|
-
| | ✅ | 4.2/10 | ✅ | [webmock](https://github.com/bblimke/webmock) | [3.26.1](https://rubygems.org/gems/webmock/versions/3.26.1) (2025/10) | [3.26.1](https://rubygems.org/gems/webmock/versions/3.26.1) (2025/10) | [2.0.0.beta2](https://rubygems.org/gems/webmock/versions/2.0.0.beta2) (2016/04) | [2026/01](https://github.com/bblimke/webmock) |
|
|
141
|
+
| activity | up to date? | OpenSSF | vulns | name | version used | latest version | latest pre-release | last commit |
|
|
142
|
+
| -------- | ----------- | ------- | ----- | --------------------- | ---------------- | ---------------- | ------------------- | ----------- |
|
|
143
|
+
| ⚠️ | ✅ | 3.1/10 | ✅ | code-scanning-rubocop | 0.6.1 (2022/02) | 0.6.1 (2022/02) | ❓ | 2024/06 |
|
|
144
|
+
| | ✅ | 5.2/10 | ✅ | debug | 1.11.1 (2025/12) | 1.11.1 (2025/12) | 1.0.0.rc2 (2021/09) | 2025/12 |
|
|
145
|
+
| | ✅ | 7.4/10 | ✅ | faker | 3.6.0 (2026/01) | 3.6.0 (2026/01) | ❓ | 2026/02 |
|
|
102
146
|
|
|
103
147
|
### CI quality gating
|
|
104
148
|
|
|
@@ -108,23 +152,28 @@ Use `--fail-if-critical` or `--fail-if-warning` to fail CI pipelines when depend
|
|
|
108
152
|
still_active --gemfile=Gemfile --fail-if-warning --json
|
|
109
153
|
```
|
|
110
154
|
|
|
155
|
+
### Activity thresholds
|
|
156
|
+
|
|
157
|
+
Activity is determined by the most recent signal across last commit date, latest release date, and latest pre-release date:
|
|
158
|
+
|
|
159
|
+
- **ok**: last activity within 1 year (configurable with `--safe-range-end`)
|
|
160
|
+
- **stale**: last activity between 1 and 3 years ago (configurable with `--warning-range-end`)
|
|
161
|
+
- **critical**: last activity over 3 years ago
|
|
162
|
+
|
|
111
163
|
### Data sources
|
|
112
164
|
|
|
113
165
|
- **Versions and release dates** from [RubyGems.org](https://rubygems.org)
|
|
114
166
|
- **Last commit date** from the [GitHub](https://docs.github.com/en/rest) or [GitLab](https://docs.gitlab.com/ee/api/) API
|
|
115
167
|
- **OpenSSF Scorecard** and **vulnerability counts** from Google's [deps.dev](https://deps.dev) API
|
|
116
168
|
|
|
117
|
-
### Configuration
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
- `warning_emoji` ⚠️
|
|
126
|
-
- `safe_range_end` 1 (considered safe if last activity is at most 1 year ago)
|
|
127
|
-
- `warning_range_end` 3 (warns if last activity is between 1 and 3 years ago; beyond 3 is critical)
|
|
169
|
+
### Configuration defaults
|
|
170
|
+
|
|
171
|
+
| Option | Default | Description |
|
|
172
|
+
| ----------------------- | ----------- | ---------------------------------------------------------------- |
|
|
173
|
+
| `output_format` | auto-detect | Coloured terminal on TTY, JSON when piped |
|
|
174
|
+
| `safe_range_end` | 1 year | Last activity within this range is "ok" |
|
|
175
|
+
| `warning_range_end` | 3 years | Last activity within this range is "stale"; beyond is "critical" |
|
|
176
|
+
| `simultaneous_requests` | 10 | Concurrent API requests |
|
|
128
177
|
|
|
129
178
|
## Development
|
|
130
179
|
|
data/lib/still_active/version.rb
CHANGED
data/still_active.gemspec
CHANGED
|
@@ -8,11 +8,13 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.authors = ["Sean Floyd"]
|
|
9
9
|
spec.email = ["contact@seanfloyd.dev"]
|
|
10
10
|
|
|
11
|
-
spec.summary = "
|
|
12
|
-
spec.description = "Analyses your Gemfile
|
|
13
|
-
"last commit dates
|
|
14
|
-
"and known vulnerabilities via deps.dev. " \
|
|
15
|
-
"Outputs coloured terminal tables, markdown, or JSON
|
|
11
|
+
spec.summary = "Audit your Ruby dependencies for maintenance health, outdated versions, vulnerabilities, and abandoned gems."
|
|
12
|
+
spec.description = "Analyses your Gemfile for dependency health: checks if gems are actively maintained " \
|
|
13
|
+
"(last commit dates via GitHub and GitLab, release dates), outdated versions, " \
|
|
14
|
+
"OpenSSF Scorecard security scores, and known vulnerabilities via deps.dev. " \
|
|
15
|
+
"Outputs coloured terminal tables, markdown, or JSON. " \
|
|
16
|
+
"CI quality gates with --fail-if-critical. " \
|
|
17
|
+
"A comprehensive alternative to running bundle outdated, bundler-audit, and libyear-bundler separately."
|
|
16
18
|
spec.homepage = "https://github.com/SeanLF/still_active"
|
|
17
19
|
spec.license = "MIT"
|
|
18
20
|
spec.required_ruby_version = ">= 3.2.0"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: still_active
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sean Floyd
|
|
@@ -163,10 +163,12 @@ dependencies:
|
|
|
163
163
|
- - ">="
|
|
164
164
|
- !ruby/object:Gem::Version
|
|
165
165
|
version: '0'
|
|
166
|
-
description: 'Analyses your Gemfile
|
|
167
|
-
commit dates
|
|
168
|
-
|
|
169
|
-
|
|
166
|
+
description: 'Analyses your Gemfile for dependency health: checks if gems are actively
|
|
167
|
+
maintained (last commit dates via GitHub and GitLab, release dates), outdated versions,
|
|
168
|
+
OpenSSF Scorecard security scores, and known vulnerabilities via deps.dev. Outputs
|
|
169
|
+
coloured terminal tables, markdown, or JSON. CI quality gates with --fail-if-critical.
|
|
170
|
+
A comprehensive alternative to running bundle outdated, bundler-audit, and libyear-bundler
|
|
171
|
+
separately.'
|
|
170
172
|
email:
|
|
171
173
|
- contact@seanfloyd.dev
|
|
172
174
|
executables:
|
|
@@ -240,5 +242,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
240
242
|
requirements: []
|
|
241
243
|
rubygems_version: 4.0.3
|
|
242
244
|
specification_version: 4
|
|
243
|
-
summary:
|
|
245
|
+
summary: Audit your Ruby dependencies for maintenance health, outdated versions, vulnerabilities,
|
|
246
|
+
and abandoned gems.
|
|
244
247
|
test_files: []
|