summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-07-08 22:52:51 +0300
committerPaul Buetow <paul@buetow.org>2025-07-08 22:52:51 +0300
commit81b6357a96e684d7588e499c8a7f3ab892c8c02a (patch)
tree7890b445befcf4b12af9d328a9aa2dd7a070431e
parent5004ae7bf93e59e0e4992fa6c9640c427393f4a1 (diff)
feat: add obsolete project notice for inactive projects
- Add warning notice for projects with avg commit age > 2 years AND last commit > 1 year - Display "⚠️ Notice: This project appears to be finished, obsolete, or no longer maintained" - Also update abandoned branch threshold from 1 to 3 years in branch analyzer - Helps users identify potentially outdated or unmaintained projects 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
-rw-r--r--internal/showcase/showcase.go15
-rw-r--r--internal/sync/branch_analyzer.go5
2 files changed, 17 insertions, 3 deletions
diff --git a/internal/showcase/showcase.go b/internal/showcase/showcase.go
index 60b0fb2..aa3e959 100644
--- a/internal/showcase/showcase.go
+++ b/internal/showcase/showcase.go
@@ -401,7 +401,20 @@ func (g *Generator) formatGemtext(summaries []ProjectSummary) string {
}
builder.WriteString(fmt.Sprintf("* Development Period: %s to %s\n", summary.Metadata.FirstCommitDate, summary.Metadata.LastCommitDate))
builder.WriteString(fmt.Sprintf("* Recent Activity: %.1f days (avg. age of last 42 commits)\n", summary.Metadata.AvgCommitAge))
- builder.WriteString(fmt.Sprintf("* License: %s\n\n", summary.Metadata.License))
+ builder.WriteString(fmt.Sprintf("* License: %s\n", summary.Metadata.License))
+
+ // Check if project might be obsolete (avg age > 2 years AND last commit > 1 year)
+ if summary.Metadata.AvgCommitAge > 730 && summary.Metadata.LastCommitDate != "" {
+ // Parse the last commit date
+ lastCommit, err := time.Parse("2006-01-02", summary.Metadata.LastCommitDate)
+ if err == nil {
+ daysSinceLastCommit := time.Since(lastCommit).Hours() / 24
+ if daysSinceLastCommit > 365 {
+ builder.WriteString("\n⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.")
+ }
+ }
+ }
+ builder.WriteString("\n\n")
}
// Handle images and paragraphs
diff --git a/internal/sync/branch_analyzer.go b/internal/sync/branch_analyzer.go
index c3b2204..f684f60 100644
--- a/internal/sync/branch_analyzer.go
+++ b/internal/sync/branch_analyzer.go
@@ -46,12 +46,13 @@ func (s *Syncer) analyzeAbandonedBranches() (*AbandonedBranchReport, error) {
if mainBranch != "" {
mainInfo, err := s.getBranchInfo(mainBranch)
if err == nil {
- report.MainBranchUpdated = mainInfo.LastCommit.After(time.Now().AddDate(-1, 0, 0))
+ // Consider project active if main branch has commits within last 3 years
+ report.MainBranchUpdated = mainInfo.LastCommit.After(time.Now().AddDate(-3, 0, 0))
report.MainBranchLastCommit = mainInfo.LastCommit
}
}
- // Only analyze if main branch is active
+ // Only analyze if main branch is active (has commits within last 3 years)
if !report.MainBranchUpdated {
return report, nil
}