wyattowalsh docs

GitHub Actions Workflows

The Unified Profile Updater workflow runs every generator job on a daily schedule.

Workflow file

.github/workflows/profile-updater.yml

Triggers: push to main/master/dev, daily at 01:00 UTC, workflow_dispatch.

Manual dispatch also exposes metrics_probe_mode, which runs only the probe lane for the full historical lowlighter/metrics surface.

Job graph

probe-full-metrics (manual only)

update-starred-lists

generate-assets

generate-profile-metrics

generate-event-art

update-readme-wakatime

update-skills

Job details

update-starred-lists

Uses the starred CLI to rebuild .github/assets/topics.md and .github/assets/languages.md from your GitHub stars.

uv run starred --username wyattowalsh --sort \
  --filename .github/assets/languages.md
uv run starred --username wyattowalsh --sort --topic --topic_limit 500 \
  --filename .github/assets/topics.md

Commits both files with chore(data): update awesome-stars lists.

generate-assets

Depends on update-starred-lists. Generates:

  • QR code — generate qr
  • Word cloud by topic — generate word-cloud --from-topics-mdwordcloud_typographic_by_topics.svg
  • Word cloud by language — generate word-cloud --from-languages-mdwordcloud_typographic_by_languages.svg

Commits to .github/assets/img/.

update-readme-wakatime

Uses anmol098/waka-readme-stats to inject WakaTime coding stats. Requires WAKATIME_API_KEY secret.

generate-profile-metrics

Uses lowlighter/metrics pinned to the v3.34 release SHA 65836723097537a54cd8eb90f61839426b4266b6 for the stable GitHub-native cards:

  • metrics.svg — personal metrics (header, activity, community, metadata, languages, notable, topics)
  • metrics.additional.svg — stable GitHub-native secondary panels (featured repositories, recently starred repositories, stargazers)

The same job also generates repo-owned supplemental cards that replace the upstream-brittle or deprecated panels:

  • metrics-habits.svg — custom GitHub-backed coding habits card
  • metrics-activity.svg — custom GitHub-backed recent activity card
  • metrics-music.svg — custom Spotify-backed recently played card
  • metrics-posts.svg — custom X-backed latest posts card

The intended steady state for the canonical repo is a stable two-card lowlighter surface plus the validated supplemental cards below it in the README.

The job now hardens metrics updates with scripts.metrics_svg:

  • backs up the previously committed metrics SVGs before regeneration
  • validates each render and rejects known degraded payloads
  • validates supplemental assets against a manifest of required markers
  • restores the previous valid lowlighter asset if a new SVG is malformed, contains a known error payload, or matches the placeholder SVG
  • commits only after both stable cards plus all enabled supplemental cards pass validation

Placeholder metrics SVGs are treated as invalid recovery artifacts, not the desired output, and are never the intended steady state.

probe-full-metrics

Manual diagnostics lane for the legacy fuller lowlighter/metrics surface. It exists to answer questions like:

  • does the current METRICS_TOKEN satisfy the repositories block?
  • is the Spotify refresh token healthy?
  • are the X OAuth1 credentials present?
  • do upstream habits or activity panels still render degraded payloads?

It uploads probe SVG artifacts and fails closed if the probe renders or validation fail.

generate-event-art

Fetches live metrics + history via scripts/fetch_metrics.py and scripts/fetch_history.py, then runs uv run python -m scripts.cli generate living-art to refresh the canonical living-art timelapse surface.

The job stages and commits:

  • .github/assets/img/living-*.gif
  • .github/assets/img/living-art-manifest.json
  • .github/assets/img/living-art-preview.html
  • docs/public/showcase/living-*.gif
  • docs/public/showcase/living-art-manifest.json
  • docs/public/showcase/living-art-preview.html

The uploaded staging bundle also includes the fetched metrics.json and history.json inputs plus the mirrored docs showcase surface for review.

update-skills

Depends on update-readme-wakatime. Runs:

  • generate readme-sections — assembles all dynamic README sections
  • generate skills — re-renders skills badges

Commits:

  • README.md
  • .github/assets/img/readme/featured-card-*.svg
  • .github/assets/img/readme/featured-projects.manifest.json
  • mirrored docs showcase assets under docs/public/showcase/featured-projects/
  • docs/public/showcase/featured-projects.manifest.json

Secrets used by the workflow

SecretUsed byNotes
GITHUB_TOKENAll jobsAuto-provided by Actions
METRICS_TOKENgenerate-profile-metrics, probe-full-metricsCanonical repo: expected classic PAT for repo-aware metrics (read:user, repo, read:org, and optionally gist). Forks can omit it, but repository-aware sections will be reduced and recovery may preserve the last valid asset.
WAKATIME_API_KEYupdate-readme-wakatimeOptional WakaTime API key; README WakaTime update is skipped when absent
SPOTIFY_CLIENT_IDgenerate-profile-metrics, probe-full-metricsOptional for the repo-owned metrics-music.svg supplemental card
SPOTIFY_CLIENT_SECRETgenerate-profile-metrics, probe-full-metricsOptional for the repo-owned metrics-music.svg supplemental card
SPOTIFY_REFRESH_TOKENgenerate-profile-metrics, probe-full-metricsOptional for the repo-owned metrics-music.svg supplemental card; mint it with uv run readme auth spotify-refresh-token and store it as a repo secret
X_API_KEYgenerate-profile-metrics, probe-full-metricsOptional X API key for the repo-owned metrics-posts.svg supplemental card via OAuth 1.0a user-context
X_API_KEY_SECRETgenerate-profile-metrics, probe-full-metricsOptional X API key secret for the repo-owned metrics-posts.svg supplemental card
X_ACCESS_TOKENgenerate-profile-metrics, probe-full-metricsOptional X access token for the repo-owned metrics-posts.svg supplemental card
X_ACCESS_TOKEN_SECRETgenerate-profile-metrics, probe-full-metricsOptional X access token secret for the repo-owned metrics-posts.svg supplemental card