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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 336b101db0d44c21bc01fa71954c4aea16c4187e051cfb07c2dae674b03efe87
4
- data.tar.gz: 5f4cf5bf46f0394f1cea692704c569713eaf37590d3fe34b576d4172cdaf2cbc
3
+ metadata.gz: f4f584514824888d1b457c3b3662c449d5aa5ef8244cb31760ed005afc2204d3
4
+ data.tar.gz: 9e2c109064b073de04025c36730a171760beae79866e97bff44d4008d7cf1187
5
5
  SHA512:
6
- metadata.gz: 0744ecad97a50140981afa1ad7d0083caa20b33949e973cc79bc52f0ef525d9043d70d9cabbae9954ab0841cf6790e269ba95ea7df9918f4d473d54806f3f0d5
7
- data.tar.gz: 01b02c7b86fae1895880845d17be49f9d692aa1c2090fc3642fc37c2280f176b2a07dc258b9c6dd785dceb9d261f5bdfa56247399ad827907ec1c5c8b6b5f74a
6
+ metadata.gz: 00a1c67f51fc48961185bfcab6f6ec1a30cfa15f417a8feec70606d673f2ac7278d7dd267376af27e6670d88316ba31ae7d8d63ad3f470f94b5c483e03cbbd1e
7
+ data.tar.gz: bb4bc6f91c96a3f24381179cc295ea21f3f9545ef9a148f95fc53525195e6cda4111887c8d247c1bf50e59f2edd9e94ac5987609ab588300f3a612aae5228e5c
data/.gitignore CHANGED
@@ -15,3 +15,4 @@
15
15
 
16
16
  # claude
17
17
  .claude/tasks/
18
+ /docs/plans
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.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.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
- Analyses your Gemfile dependencies for staleness: latest releases, last commit dates (GitHub and GitLab), OpenSSF Scorecard scores, and known vulnerabilities via deps.dev. Outputs coloured terminal tables, markdown, or JSON with CI gating support.
3
+ **How do you know if your Ruby dependencies are still maintained?**
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/still_active.svg)](https://badge.fury.io/rb/still_active)
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
+ [![Gem Version](https://badge.fury.io/rb/still_active.svg)](https://badge.fury.io/rb/still_active)
7
8
  ![Code Quality analysis](https://github.com/SeanLF/still_active/actions/workflows/codeql-analysis.yml/badge.svg)
8
9
  ![RSpec](https://github.com/SeanLF/still_active/actions/workflows/rspec.yml/badge.svg)
9
10
  ![Rubocop analysis](https://github.com/SeanLF/still_active/actions/workflows/rubocop-analysis.yml/badge.svg)
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
- ### Examples
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
- Outputs:
88
-
89
- | activity | up to date? | OpenSSF | vulns | name | version used | latest version | latest pre-release | last commit |
90
- | -------- | ----------- | ------- | ----- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------ |
91
- | ⚠️ | ✅ | 3.1/10 | ✅ | [code-scanning-rubocop](https://github.com/arthurnn/code-scanning-rubocop) | [0.6.1](https://rubygems.org/gems/code-scanning-rubocop/versions/0.6.1) (2022/02) | [0.6.1](https://rubygems.org/gems/code-scanning-rubocop/versions/0.6.1) (2022/02) | ❓ | [2024/06](https://github.com/arthurnn/code-scanning-rubocop) |
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 options
118
-
119
- - `gemfile_path` uses bundler to detect the Gemfile in your working directory
120
- - `output_format` auto-detects: coloured terminal on TTY, JSON when piped. Override with `--terminal`, `--markdown`, or `--json`
121
- - `critical_warning_emoji` 🚩
122
- - `futurist_emoji` 🔮
123
- - `success_emoji`
124
- - `unsure_emoji`
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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StillActive
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.1"
5
5
  end
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 = "Check if your Ruby dependencies are still actively maintained."
12
- spec.description = "Analyses your Gemfile dependencies for staleness: latest releases, " \
13
- "last commit dates (GitHub and GitLab), OpenSSF Scorecard scores, " \
14
- "and known vulnerabilities via deps.dev. " \
15
- "Outputs coloured terminal tables, markdown, or JSON with CI gating support."
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.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 dependencies for staleness: latest releases, last
167
- commit dates (GitHub and GitLab), OpenSSF Scorecard scores, and known vulnerabilities
168
- via deps.dev. Outputs coloured terminal tables, markdown, or JSON with CI gating
169
- support.'
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: Check if your Ruby dependencies are still actively maintained.
245
+ summary: Audit your Ruby dependencies for maintenance health, outdated versions, vulnerabilities,
246
+ and abandoned gems.
244
247
  test_files: []