Update Board.md on a weekly basis #17

Closed
opened 2026-08-15 07:51:09 +00:00 by marvin8 · 3 comments
Owner

To make Yilan more useful Board.md should be updated on a weekly basis.
Maybe we can use a forgejo action to run it on a Sunday morning using a suanni runner that is available 24/7.

To make Yilan more useful Board.md should be updated on a weekly basis. Maybe we can use a forgejo action to run it on a Sunday morning using a suanni runner that is available 24/7.
Collaborator

Documenting the design discussion for this issue.

Decisions

  • The bot commits BOARD.md directly to main on a weekly schedule.
  • Scrape target: all public repos on forge.marvin8.zone. In practice this is the same as the current fixed-owner discovery — the instance only hosts Marvin8's own repos (marvin8, marvinsmastodontools, pyyttools, MinimalNVR) — so no new instance-wide discovery mechanism is needed.

Open items / findings

  1. Push feasibility (gate). Verify before any code: (a) branch protection on main — the CI token has only ever pushed to pages (docs job), so pushing main is untested; (b) signed-commit policy — main history is signed, decide whether bot commits must be signed too.
  2. Token. Prefer the ephemeral forge.token for the push (docs job already proves it can push). Fall back to a long-lived write PAT only if branch protection blocks it. The built-in token is repo-scoped to yilan and cannot read other repos — scraping needs a separate read token.
  3. Identity. Commit as a distinct bot identity (yilan-bot), not ci@forgejo, so ~52 commits/year stay legible in blame.
  4. Non-fast-forward. Job flow: fetch → regenerate → commit → git pull --rebase → push. The bot is the sole owner of BOARD.md; hand edits are clobbered.
  5. Skip date-only noise. BOARD.md embeds the generation date, so the raw diff is never empty. Use yilan diff to detect substantive change and skip the commit when only the header date rolled over.
  6. Config drift (resolved). Local ~/.config/yilan/config.toml still points at codeberg.org with a Codeberg token; spec/README say forge.marvin8.zone. The bot scrapes forge.marvin8.zone — CI config + token host must match.
  7. Cron timezone. Forgejo Actions cron is UTC (verify 5-field format). "Sunday morning" needs the UTC equivalent. Existing weekly-checks.yml runs Fri 16:57 UTC on suanni — decide whether to share that slot.
  8. Failure visibility. A silently failing cron leaves the board stale. Add a fail-loud step and a "generated at"/staleness marker (or badge) so staleness is observable.
  9. Cold cache. The commit-SHA cache (~/.cache/yilan/cache.json) is the main speed lever. Ephemeral runner = cold cache = full scrape weekly. Persist via actions/cache, or confirm suanni keeps home state.
  10. uv install. Use pip install uv (not curl | sh as in the existing workflows).
Documenting the design discussion for this issue. ## Decisions - The bot commits `BOARD.md` directly to `main` on a weekly schedule. - Scrape target: **all public repos on forge.marvin8.zone**. In practice this is the same as the current fixed-owner discovery — the instance only hosts Marvin8's own repos (`marvin8`, `marvinsmastodontools`, `pyyttools`, `MinimalNVR`) — so no new instance-wide discovery mechanism is needed. ## Open items / findings 1. **Push feasibility (gate).** Verify before any code: (a) branch protection on `main` — the CI token has only ever pushed to `pages` (docs job), so pushing `main` is untested; (b) signed-commit policy — `main` history is signed, decide whether bot commits must be signed too. 2. **Token.** Prefer the ephemeral `forge.token` for the push (docs job already proves it can push). Fall back to a long-lived write PAT only if branch protection blocks it. The built-in token is repo-scoped to `yilan` and cannot read other repos — scraping needs a separate read token. 3. **Identity.** Commit as a distinct bot identity (`yilan-bot`), not `ci@forgejo`, so ~52 commits/year stay legible in blame. 4. **Non-fast-forward.** Job flow: fetch → regenerate → commit → `git pull --rebase` → push. The bot is the sole owner of `BOARD.md`; hand edits are clobbered. 5. **Skip date-only noise.** `BOARD.md` embeds the generation date, so the raw diff is never empty. Use `yilan diff` to detect substantive change and skip the commit when only the header date rolled over. 6. **Config drift (resolved).** Local `~/.config/yilan/config.toml` still points at `codeberg.org` with a Codeberg token; spec/README say `forge.marvin8.zone`. The bot scrapes `forge.marvin8.zone` — CI config + token host must match. 7. **Cron timezone.** Forgejo Actions cron is UTC (verify 5-field format). "Sunday morning" needs the UTC equivalent. Existing `weekly-checks.yml` runs Fri 16:57 UTC on `suanni` — decide whether to share that slot. 8. **Failure visibility.** A silently failing cron leaves the board stale. Add a fail-loud step and a "generated at"/staleness marker (or badge) so staleness is observable. 9. **Cold cache.** The commit-SHA cache (`~/.cache/yilan/cache.json`) is the main speed lever. Ephemeral runner = cold cache = full scrape weekly. Persist via `actions/cache`, or confirm `suanni` keeps home state. 10. **uv install.** Use `pip install uv` (not `curl | sh` as in the existing workflows).
Collaborator

Finalized plan (board-automation design):

  • Commit board-config.toml (owners=["marvin8"], api.base_url = forge.marvin8.zone).
  • Add .forgejo/workflows/board-update.yml: cron 41 17 * * 6 (Sun 03:41 Australia/Brisbane), pip install uv, actions/cache for ~/.cache/yilan, yilan-bot SSH-signed commits, yilan diff gate, push via yilan-bot PAT (whitelisted on main).
  • Branch: feat/issue-17-weekly-board-update
Finalized plan (board-automation design): - Commit board-config.toml (owners=["marvin8"], api.base_url = forge.marvin8.zone). - Add .forgejo/workflows/board-update.yml: cron 41 17 * * 6 (Sun 03:41 Australia/Brisbane), pip install uv, actions/cache for ~/.cache/yilan, yilan-bot SSH-signed commits, yilan diff gate, push via yilan-bot PAT (whitelisted on main). - Branch: feat/issue-17-weekly-board-update
Collaborator

Closed via commit 3b7de4e: .forgejo/workflows/board-update.yml now runs on a weekly schedule (Saturdays 17:41 UTC) and commits BOARD.md updates as the yilan-bot user when changes are detected.

Closed via commit 3b7de4e: `.forgejo/workflows/board-update.yml` now runs on a weekly schedule (Saturdays 17:41 UTC) and commits BOARD.md updates as the `yilan-bot` user when changes are detected.
Sign in to join this conversation.
No labels
No milestone
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
marvin8/yilan#17
No description provided.