stackharbinger 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: 1d46315e9aab151406a3993d75a034eaf28f16d1ce92f44b6344438ba8b9c482
4
- data.tar.gz: b4d3c35c6578600ed85d1a387b1cfe13ce5873c256dce6d20267c0366e329052
3
+ metadata.gz: 4cb642687a0db32edfc5aa0934dae836060094123841cbebaa747581d5cd8ee7
4
+ data.tar.gz: c225b4a834ce6dbfa3d4a8621fec45341d3badee7f60b6c7cb5a6488c974631f
5
5
  SHA512:
6
- metadata.gz: a6d586f4ccc611050bff15516e5ce10601b21b530c51a899742dd8fb8a167cb2d297d0d182fb3a4536b78d85db09b084c25c646fbf3249fd1120125a614aa50b
7
- data.tar.gz: a1a0aa1900b07a3be28862e6ad4e3196e05735dc338c22ed592f6ad6d3af6d925764b0c2d957a96fa3d48b9f995e500edcfbb932897237a1a4c44e8bd1d16228
6
+ metadata.gz: 7b973897b72471dfbd967a19d09d4f3b060e05fd48016838851406ff8b69494c8bcb4817332d302982dd7d962bd74492228f36b7f7f2f3f1b2c79e7c1300a5e3
7
+ data.tar.gz: b607a20bbdf91520ef4a8bb08514773b2c9d640d5a001dc7e034a7d04c4f14477664c05237aa8e60b2d4a0a4e392a21e886653ddf24fc601f852d53423f28e99
data/README.md CHANGED
@@ -134,22 +134,22 @@ Ruby Ecosystem (7)
134
134
 
135
135
  Python Ecosystem (3)
136
136
  ================================================================================
137
- ┌──────────────┬────────┬────────────┬─────────┐
138
- │ Project │ Python │ PostgreSQL │ Status
139
- ├──────────────┼────────┼────────────┼─────────┤
137
+ ┌──────────────┬────────┬────────────┬───────────┐
138
+ │ Project │ Python │ PostgreSQL │ Status
139
+ ├──────────────┼────────┼────────────┼───────────┤
140
140
  │ ml-pipeline │ 3.11 │ 16.0 │ ✓ Current │
141
141
  │ data-scraper │ 3.12 │ - │ ✓ Current │
142
142
  │ ai-worker │ 3.13 │ 15.0 │ ✓ Current │
143
- └──────────────┴────────┴────────────┴─────────┘
143
+ └──────────────┴────────┴────────────┴───────────┘
144
144
 
145
145
  Node.js Ecosystem (2)
146
146
  ================================================================================
147
- ┌───────────────┬─────────┬────────────┬──────────────────────┐
148
- │ Project │ Node.js │ PostgreSQL │ Status
149
- ├───────────────┼─────────┼────────────┼──────────────────────┤
150
- │ frontend-app │ 18.0 │ - │ ⚠ Node.js ending soon │
151
- │ realtime-api │ 22.0 │ 16.0 │ ✓ Current
152
- └───────────────┴─────────┴────────────┴──────────────────────┘
147
+ ┌──────────────┬─────────┬────────────┬───────────────────────┐
148
+ │ Project │ Node.js │ PostgreSQL │ Status
149
+ ├──────────────┼─────────┼────────────┼───────────────────────┤
150
+ │ frontend-app │ 18.0 │ - │ ⚠ Node.js ending soon │
151
+ │ realtime-api │ 22.0 │ 16.0 │ ✓ Current
152
+ └──────────────┴─────────┴────────────┴───────────────────────┘
153
153
  ```
154
154
 
155
155
  Projects are grouped by their primary programming language ecosystem. Each ecosystem only displays relevant components (e.g., Python projects don't show Ruby/Rails columns).
data/docs/index.html CHANGED
@@ -112,43 +112,37 @@
112
112
  <h3 class="text-2xl font-semibold mb-4">Dashboard with Ecosystem Grouping</h3>
113
113
  <p class="text-gray-600 mb-4">Projects are organized by their primary programming language ecosystem, showing only relevant components:</p>
114
114
 
115
- <div class="bg-gray-900 rounded-lg p-6 font-mono text-xs overflow-x-auto mb-8">
116
- <div class="text-gray-400 mb-1">$ harbinger show</div>
117
- <div class="text-white mb-2">Tracked Projects (12)</div>
115
+ <div class="bg-gray-900 rounded-lg p-6 overflow-x-auto mb-8">
116
+ <pre class="font-mono text-xs text-white"><span class="text-gray-400">$ harbinger show</span>
117
+ Tracked Projects (12)
118
118
 
119
- <div class="text-cyan-400 mt-3 mb-1">Ruby Ecosystem (7)</div>
120
- <div class="text-gray-400">================================================================================</div>
121
- <div class="text-white">
122
- <div>┌─────────────────┬───────┬──────────┬────────────┬───────┬─────────────────┐</div>
123
- <div>│ Project │ Ruby │ Rails │ PostgreSQL │ Redis │ Status │</div>
124
- <div>├─────────────────┼───────┼──────────┼────────────┼───────┼─────────────────┤</div>
125
- <div>│ shop-api │ 3.2.0 │ 6.1.715.0 │ - │ <span class="text-red-400">✗ Rails EOL</span> │</div>
126
- <div>│ blog-engine │ 3.3.0 │ 7.0.8 │ 16.0 │ 7.0 │ <span class="text-red-400">✗ Rails EOL</span> │</div>
127
- <div>│ admin-portal │ 3.3.0 │ 8.0.4 │ 16.11 │ 7.2 │ <span class="text-green-400">✓ Current</span> │</div>
128
- <div>└─────────────────┴───────┴──────────┴────────────┴───────┴─────────────────┘</div>
129
- </div>
119
+ <span class="text-cyan-400">Ruby Ecosystem (7)</span>
120
+ <span class="text-gray-400">================================================================================</span>
121
+ ┌─────────────────┬───────┬──────────┬────────────┬───────┬─────────────────┐
122
+ │ Project │ Ruby │ Rails │ PostgreSQL │ Redis │ Status │
123
+ ├─────────────────┼───────┼──────────┼────────────┼───────┼─────────────────┤
124
+ │ shop-api │ 3.2.0 │ 6.1.7 │ 15.0 │ - │ <span class="text-red-400">✗ Rails EOL</span>
125
+ blog-engine │ 3.3.0 │ 7.0.816.0 │ 7.0 │ <span class="text-red-400">✗ Rails EOL</span>
126
+ admin-portal │ 3.3.0 │ 8.0.4 │ 16.11 │ 7.2 │ <span class="text-green-400">✓ Current</span>
127
+ └─────────────────┴───────┴──────────┴────────────┴───────┴─────────────────┘
130
128
 
131
- <div class="text-cyan-400 mt-3 mb-1">Python Ecosystem (3)</div>
132
- <div class="text-gray-400">================================================================================</div>
133
- <div class="text-white">
134
- <div>┌──────────────┬────────┬────────────┬─────────┐</div>
135
- <div>│ Project │ Python │ PostgreSQL │ Status │</div>
136
- <div>├──────────────┼────────┼────────────┼─────────┤</div>
137
- <div>│ ml-pipeline │ 3.1116.0 │ <span class="text-green-400">✓ Current</span> │</div>
138
- <div>│ data-scraper │ 3.12 │ - │ <span class="text-green-400">✓ Current</span> │</div>
139
- <div>└──────────────┴────────┴────────────┴─────────┘</div>
140
- </div>
129
+ <span class="text-cyan-400">Python Ecosystem (3)</span>
130
+ <span class="text-gray-400">================================================================================</span>
131
+ ┌──────────────┬────────┬────────────┬───────────┐
132
+ │ Project │ Python │ PostgreSQL │ Status │
133
+ ├──────────────┼────────┼────────────┼───────────┤
134
+ │ ml-pipeline │ 3.11 │ 16.0 │ <span class="text-green-400">✓ Current</span>
135
+ data-scraper │ 3.12- │ <span class="text-green-400">✓ Current</span>
136
+ └──────────────┴────────┴────────────┴───────────┘
141
137
 
142
- <div class="text-cyan-400 mt-3 mb-1">Node.js Ecosystem (2)</div>
143
- <div class="text-gray-400">================================================================================</div>
144
- <div class="text-white">
145
- <div>┌──────────────┬─────────┬────────────┬─────────┐</div>
146
- <div>│ Project │ Node.js │ PostgreSQL │ Status │</div>
147
- <div>├──────────────┼─────────┼────────────┼─────────┤</div>
148
- <div>│ frontend-app18.0 │ - │ <span class="text-yellow-400">⚠ Node.js ending soon</span> │</div>
149
- <div>│ realtime-api │ 22.0 │ 16.0 │ <span class="text-green-400">✓ Current</span> │</div>
150
- <div>└──────────────┴─────────┴────────────┴─────────┘</div>
151
- </div>
138
+ <span class="text-cyan-400">Node.js Ecosystem (2)</span>
139
+ <span class="text-gray-400">================================================================================</span>
140
+ ┌──────────────┬─────────┬────────────┬───────────────────────┐
141
+ │ Project │ Node.js │ PostgreSQL │ Status │
142
+ ├──────────────┼─────────┼────────────┼───────────────────────┤
143
+ │ frontend-app │ 18.0 │ - │ <span class="text-yellow-400">⚠ Node.js ending soon</span>
144
+ realtime-api22.0 │ 16.0 │ <span class="text-green-400">✓ Current</span>
145
+ └──────────────┴─────────┴────────────┴───────────────────────┘</pre>
152
146
  </div>
153
147
 
154
148
  <h3 class="text-2xl font-semibold mb-4 mt-8">Commands</h3>
data/lib/harbinger/cli.rb CHANGED
@@ -82,7 +82,8 @@ module Harbinger
82
82
  "mongo" => "mongodb",
83
83
  "python" => "python",
84
84
  "nodejs" => "nodejs",
85
- "rust" => "rust"
85
+ "rust" => "rust",
86
+ "go" => "go"
86
87
  }.freeze
87
88
 
88
89
  desc "scan", "Scan a project directory and detect versions"
@@ -303,7 +304,13 @@ module Harbinger
303
304
 
304
305
  product_name = PRODUCT_NAME_MAP[component]
305
306
  eol_date = fetcher.eol_date_for(product_name, version)
306
- return nil unless eol_date
307
+ return nil if eol_date.nil?
308
+
309
+ # Handle actively supported versions (eol = false)
310
+ if eol_date == false
311
+ component_display = COMPONENT_DISPLAY_NAMES[component] || component.capitalize
312
+ return { status: :green, text: "✓ Current", days: Float::INFINITY }
313
+ end
307
314
 
308
315
  days = days_until(eol_date)
309
316
  status = eol_color(days)
@@ -660,16 +667,20 @@ module Harbinger
660
667
 
661
668
  eol_date = fetcher.eol_date_for(product_key, version)
662
669
 
663
- if eol_date
670
+ if eol_date.nil?
671
+ say "\n#{product} #{version}:", :white
672
+ say " EOL Date: Unknown (version not found in database)", :yellow
673
+ elsif eol_date == false
674
+ say "\n#{product} #{version}:", :white
675
+ say " EOL Date: N/A (currently supported)", :green
676
+ say " Status: Active support", :green
677
+ else
664
678
  days_until_eol = days_until(eol_date)
665
679
  color = eol_color(days_until_eol)
666
680
 
667
681
  say "\n#{product} #{version}:", :white
668
682
  say " EOL Date: #{eol_date}", color
669
683
  say " Status: #{eol_status(days_until_eol)}", color
670
- else
671
- say "\n#{product} #{version}:", :white
672
- say " EOL Date: Unknown (version not found in database)", :yellow
673
684
  end
674
685
  end
675
686
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Harbinger
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackharbinger
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
  - Rich Dabrowski
@@ -79,8 +79,10 @@ dependencies:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0.21'
82
- description: Harbinger monitors EOL dates for Ruby and Rails. Auto-detects versions
83
- from your projects and alerts you before support ends.
82
+ description: Harbinger tracks EOL dates for Ruby, Rails, Python, Node.js, Rust, Go,
83
+ PostgreSQL, MySQL, Redis, and MongoDB. Auto-detects versions from your projects
84
+ and alerts you before support ends. Features ecosystem-grouped dashboard, JSON/CSV
85
+ export, and bulk scanning.
84
86
  email:
85
87
  - engineering@richd.net
86
88
  executables: