name: Demo on: push: branches: [main] paths-ignore: - "demo/**" - "**.md" - "LICENSE" workflow_dispatch: permissions: contents: write concurrency: group: demo cancel-in-progress: true jobs: generate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version: "1.26" cache: true - name: Build ghstats run: go build -trimpath -ldflags="-s -w" -o ghstats . - name: Render every card for every theme env: GITHUB_TOKEN: ${{ secrets.GHSTATS_TOKEN }} run: | rm -rf demo mkdir -p demo ./ghstats \ -user "${{ github.repository_owner }}" \ -themes all \ -tz Asia/Saigon \ -out demo - name: Write demo READMEs (index + per-theme) env: OWNER: ${{ github.repository_owner }} REPO: ${{ github.repository }} run: | themes=$(./ghstats -list-themes) # Lightweight index so readers don't have to load ~975 images at once. { echo "# ghstats demo gallery" echo echo "Every card rendered for [\`$OWNER\`](https://github.com/$OWNER) in every supported theme. Click a theme to open its gallery page — each page embeds 15 SVGs, so only the theme you're reviewing is fetched." echo echo "Auto-generated by [\`.github/workflows/demo.yml\`](../.github/workflows/demo.yml) on each push to \`main\`. Do not edit by hand." echo echo "## Themes" echo for theme in $themes; do dir="demo/$theme" [ -d "$dir" ] || continue echo "- [\`$theme\`](./$theme/README.md)" done } > demo/README.md # Per-theme page groups singletons at top, then compares last-year # vs all-time variants side-by-side so the reader can eyeball the # evolution of each metric without scrolling. for theme in $themes; do dir="demo/$theme" [ -d "$dir" ] || continue out="$dir/README.md" pair() { local heading="$1" left="$2" right="$3" [ -f "$dir/$left.svg" ] && [ -f "$dir/$right.svg" ] || return printf '### %s\n\n' "$heading" printf '\n' printf '\n' "$left" "$left" printf '\n' "$right" "$right" printf '
Last yearAll time
%s%s
\n\n' } single() { local heading="$1" name="$2" [ -f "$dir/$name.svg" ] || return printf '### %s\n\n![%s](./%s.svg)\n\n' "$heading" "$name" "$name" } { printf '# ghstats — %s\n\n' "$theme" printf '[← back to index](../README.md)\n\n' printf 'Rendered for [`%s`](https://github.com/%s). 15 SVGs below, ' "$OWNER" "$OWNER" printf 'grouped so the last-year / all-time pairs sit next to each other.\n\n' printf '## At-a-glance\n\n' single "Profile" profile-details single "Stats" stats single "Streak" streak printf '## Repos\n\n' single "Top starred" top-starred-repos single "Repos per language" repos-per-language printf '## Contributions — time series\n\n' single "Calendar heatmap (last year)" contributions-heatmap single "By year (all time)" contributions-by-year pair "Monthly shape" contributions contributions-all-time printf '## When you commit\n\n' pair "By hour of day" productive-time productive-time-all-time pair "By day of week" productive-weekday productive-weekday-all-time printf '## What you commit in\n\n' pair "Byte-weighted language share" most-commit-language most-commit-language-all-time } > "$out" done - name: Commit demo back to main run: | git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add demo if git diff --cached --quiet; then echo "No demo changes to commit." exit 0 fi git commit -m "chore(demo): regenerate gallery" git push origin HEAD:${{ github.ref_name }}