ci: republish each Forgejo release on the GitHub mirror #487

Merged
natsukium merged 2 commits from ci/github-release-mirror into main 2026-09-26 15:10:32 +09:00
Owner

Pre-v0.1.0 staleness sweep, plus the release mirror the sweep turned up as missing.

  • docs: README linked benchmarks.md#summary, which does not exist (lychee offline does not check fragments); terminal-identity.md cited REQ-211 (NRCS) for the SCS no-op instead of REQ-213.
  • ci: the GitHub push mirror carries refs but not release pages, so install.md had to send readers to Forgejo. .github/workflows/release-mirror.yml fires on the mirrored v* tag, waits for the Forgejo release to publish, and copies its body and assets to a GitHub release (draft first, published once every asset is attached). It uses only the workflow's own GITHUB_TOKEN and reads Forgejo anonymously. tools/release/mirror.py carries the logic; just release-mirror-test (now part of just selftest) runs it against a fake Forgejo and GitHub.

Before tagging v0.1.0: GitHub Actions must be enabled on felis-terminal/felis, and an rc.8 should exercise both this and the release-workflow changes merged since rc.7 (#477, #479).

Pre-v0.1.0 staleness sweep, plus the release mirror the sweep turned up as missing. - `docs:` README linked `benchmarks.md#summary`, which does not exist (lychee offline does not check fragments); `terminal-identity.md` cited REQ-211 (NRCS) for the SCS no-op instead of REQ-213. - `ci:` the GitHub push mirror carries refs but not release pages, so `install.md` had to send readers to Forgejo. `.github/workflows/release-mirror.yml` fires on the mirrored `v*` tag, waits for the Forgejo release to publish, and copies its body and assets to a GitHub release (draft first, published once every asset is attached). It uses only the workflow's own `GITHUB_TOKEN` and reads Forgejo anonymously. `tools/release/mirror.py` carries the logic; `just release-mirror-test` (now part of `just selftest`) runs it against a fake Forgejo and GitHub. Before tagging v0.1.0: GitHub Actions must be enabled on `felis-terminal/felis`, and an rc.8 should exercise both this and the release-workflow changes merged since rc.7 (#477, #479).
The README linked benchmarks.md#summary, but that page has no Summary
heading; lychee's offline mode does not check fragments, so the doc-links
gate let it through. terminal-identity.md cited REQ-211 (NRCS) for the SCS
no-op, which spec.md records as REQ-213.

Assisted-by: Claude Code
ci: republish each Forgejo release on the GitHub mirror
All checks were successful
bench / Criterion full-suite snapshot (pull_request) Has been skipped
fuzz / cargo fuzz nightly long-run (pull_request) Has been skipped
windows / detect relevant changes (pull_request) Successful in 12s
windows / windows docs-only no-op (pull_request) Has been skipped
darwin / detect relevant changes (pull_request) Successful in 15s
darwin / darwin docs-only no-op (pull_request) Has been skipped
darwin / build felis (aarch64-darwin) (pull_request) Successful in 54s
bench / Criterion regression gate (pull_request) Successful in 1m51s
fuzz / cargo fuzz smoke (per target) (pull_request) Successful in 1m14s
pr / nix flake check (pull_request) Successful in 27s
windows / cargo nextest (Windows) (pull_request) Successful in 3m35s
windows / frontend smoke (Windows) (pull_request) Successful in 46s
windows / package felis (x86_64-pc-windows-msvc) (pull_request) Has been skipped
pr / cargo build / clippy / test / deny (pull_request) Successful in 2m10s
pr / wire schema is compatible with the base (pull_request) Successful in 6s
pr / frontend smoke (x86_64-linux) (pull_request) Successful in 25s
windows / cargo clippy (Windows cross) (pull_request) Successful in 13s
c1a852227b
GitHub is the public face (issues, pull requests, the flake reference),
but the push mirror carries refs only, so a tag reached GitHub with no
release page and no assets, and install.md had to send readers to
Forgejo to download anything.

A GitHub workflow triggered by the mirrored tag waits for the Forgejo
release to publish, then copies its body and assets. It needs only the
workflow's own GITHUB_TOKEN and reads Forgejo anonymously, so neither
forge holds a credential for the other. Pushing to GitHub from
publish.py was the alternative; it would put a long-lived GitHub token
in Forgejo's secrets and fail the Forgejo release job on a GitHub
outage.

Assisted-by: Claude Code
natsukium deleted branch ci/github-release-mirror 2026-09-26 15:10:33 +09:00
Commenting is not possible because the repository is archived.
No description provided.