2.4 KiB
quine-manifest
Declares where every Quine repo lives (this repo: forge.quinefoundation.com/quine-global/quine-manifest) on GitHub and on Forgejo (forge.quinefoundation.com), and a script that makes both match.
| Bucket | GitHub org | Forgejo org | Notes |
|---|---|---|---|
| main | quine-global |
quine-global |
|
| labs | quine-global-labs |
quine-global-labs |
|
| boneyard | quine-global-boneyard |
quine-global-boneyard |
retired repos (not archived) |
By default Forgejo is primary and push-mirrors to GitHub (primary = "forgejo").
With primary = "github", Forgejo holds a pull mirror instead.
Use
Needs Python 3.11+ and a logged-in gh.
python3.14 quine-repos.py # plan: show drift, change nothing
python3.14 quine-repos.py --apply # make it so
python3.14 quine-repos.py --apply ncdu # only some repos
To move a repo, change its bucket and apply: it's transferred on both sides,
and its push mirror is repointed.
Credentials
- Forgejo admin token:
$FORGEJO_TOKENor~/.config/forgejo/token. - GitHub admin actions (transfer, archive) and imports: your
ghlogin. - Push mirrors: each bucket's
mirror_token_file, a GitHub fine-grained token whose resource owner is that bucket's GitHub org (Contents + Workflows read/write). Fine-grained tokens cover one org, so each bucket needs its own. Themaintoken expires 2027-10-12.
Every repo in a bucket org (on either host) must be listed in manifest.toml;
the script exits with an error before doing anything if it finds one that isn't.
Upstream mirrors (upstream = …) have Forgejo Actions off unless they say
actions = true: they carry upstream's own CI, which would sit "waiting"
forever for runners we don't have.
What it won't do
- Delete repositories. A repo that's the wrong kind (a regular repo that should be a pull mirror) is reported for you to fix by hand.
- Create GitHub orgs (GitHub has no API for that).
- Full imports that outlast nginx's 60 s proxy timeout leave the repo stuck
"migrating" — use
import = "code"for repos with big release assets. Don't click "Cancel migration" on a stuck repo: it deletes the repo.