mirror of
https://github.com/tiennm99/ghstats.git
synced 2026-08-31 22:23:52 +00:00
feat(card): add S-tier cards — heatmap, streak, by-year, weekday, top-starred (#3)
Five new cards, all derived from data FetchProductive / FetchProfile already pull, so zero additional API calls: - contributions-heatmap: 7×53 calendar grid with a 5-bucket intensity ramp mixed from each theme's Background→Accent so palettes with no dedicated heat ramp still render sensibly. - streak: current streak, longest streak with date ranges, active/total days. - contributions-by-year: one bar per active year, peak year highlighted. - productive-weekday + -all-time: 7-bar day-of-week mirror of the hour-of-day cards; FetchProductive now also fills Weekday / WeekdayAllTime histograms during the same commit-history pass. - top-starred-repos: top 5 owned non-fork repos by stargazer count; threads Stars through RepoInfo. Card count: 9 → 14. Registered in allCards grouped by recency (last-year block, then all-time block). Render test extended to cover all new files and realistic daily-series inputs.
This commit is contained in:
@@ -29,7 +29,12 @@ ghstats/
|
||||
│ │ ├── most_commit_language_all_time.go # most-commit-language-all-time
|
||||
│ │ ├── stats.go # stats
|
||||
│ │ ├── productive.go # productive-time (+ all-time)
|
||||
│ │ ├── productive_weekday.go # productive-weekday (+ all-time)
|
||||
│ │ ├── contributions.go # contributions (+ all-time)
|
||||
│ │ ├── contributions_heatmap.go # contributions-heatmap (7×53 calendar grid)
|
||||
│ │ ├── contributions_by_year.go # contributions-by-year bar chart
|
||||
│ │ ├── streak.go # streak (current/longest/active days)
|
||||
│ │ ├── top_starred_repos.go # top-starred-repos bar list
|
||||
│ │ ├── donut_chart.go # renderDonutCard — shared by language cards
|
||||
│ │ └── card_test.go # Rendering + escape + format tests
|
||||
│ └── theme/
|
||||
@@ -94,12 +99,12 @@ contributionYearQuery ─┬──► SeedRepos + DailyContributionsAllTime + To
|
||||
commitHistoryQuery ──► Productive + CommitsByLanguage (+ AllTime variants)
|
||||
│
|
||||
▼
|
||||
9 SVG files per theme
|
||||
14 SVG files per theme
|
||||
```
|
||||
|
||||
## Test coverage
|
||||
|
||||
- `internal/card/card_test.go` — `RenderAll` produces 9 valid SVGs; XML escape through real render pipeline; `formatInt` cases; `TestDonutSingleSlice` (guards the empty-arc regression); `TestDonutEmpty` (no-data fallback).
|
||||
- `internal/card/card_test.go` — `RenderAll` produces 14 valid SVGs; XML escape through real render pipeline; `formatInt` cases; `TestDonutSingleSlice` (guards the empty-arc regression); `TestDonutEmpty` (no-data fallback).
|
||||
- `internal/github/profile_test.go` — `sortLangStats` ordering and tiebreak.
|
||||
- `main_test.go` — `TestUTCOffsetLabel` covers UTC, Asia/Saigon, half-hour (Kolkata), quarter-hour (Kathmandu) zones.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user