infra/forgejo/migration-report-2026-05-05.md
s8n 09d80a63f6 init: nullstone deploys + runbooks + audits
Sourced from previous audits + agent-wave outputs (2026-05-05):
  AUDIT-2026-05-05.md           — 5-agent stack synthesis
  forgejo/DEPLOY.md             — git.s8n.ru deploy runbook
  forgejo/forgejo-compose.yml   — production compose
  forgejo/runner-compose.yml    — forgejo-runner
  forgejo/migration-report-...  — GH→Forgejo migration audit (6/6 green)
  runbooks/MIGRATION-...        — nullstone→cobblestone runbook
  runbooks/DE-DECISION-...      — keep-vs-strip DE on cobblestone
  repos/REPO-AUDIT-2026-05-05.md — repo trees + ownership
2026-05-06 10:02:28 +01:00

4.1 KiB

Forgejo Migration Report — 2026-05-05

Summary: All 6 GitHub repos owned/admined by s8n-ru are mirrored to git.s8n.ru with healthy push-mirrors GH→Forgejo→GH; only fix this run was correcting the default branch on s8n-ru/x from KisaragiEffective-patch-1 back to master.

Scope

  • GitHub auth verified: gh auth statuss8n-ru (token scopes incl. repo, admin:org, delete_repo).
  • Forgejo auth verified: ~/.config/veilor-forgejo-pat.txt → API user s8n-ru (id=1, is_admin=true).
  • Inventory taken via gh repo list for user s8n-ru and org veilor-org (only org user belongs to). No archived repos and no forks were returned.
  • All API calls to Forgejo went via the internal-via-alpine route (docker run --rm --network proxy alpine:3 ... http://forgejo:3000) since https://git.s8n.ru/ is locked by the no-guest@file ACL.

State file

/tmp/migrate-state.tsv was used as the resume-tracker so a re-run wouldn't redo work. Final contents:

owner name status notes
s8n-ru x done default-branch-fixed-this-run
s8n-ru minecraft-launcher done already-mirrored
s8n-ru auth-limbo done already-mirrored
s8n-ru minecraft-server done already-mirrored
s8n-ru 8bit-icons done already-mirrored
veilor-org veilor-os skipped already-migrated (per spec)

Audit

GH HEAD (default branch) compared against Forgejo HEAD on the same branch name; branch and tag counts compared with full pagination; push-mirror existence verified with last_error == "".

Owner Name Default GH HEAD FJ HEAD Branches GH/FJ Tags GH/FJ Push-mirror Last sync (UTC+1)
s8n-ru x master a2c1ed23 a2c1ed23 84 / 84 1310 / 1310 yes 2026-05-06 02:17:27
s8n-ru minecraft-launcher main ae760edd ae760edd 1 / 1 1 / 1 yes 2026-05-06 02:14:24
s8n-ru auth-limbo main b6863806 b6863806 1 / 1 0 / 0 yes 2026-05-06 02:14:26
s8n-ru minecraft-server main ede60294 ede60294 1 / 1 0 / 0 yes 2026-05-06 02:14:26
s8n-ru 8bit-icons main 42a3252d 42a3252d 1 / 1 0 / 0 yes 2026-05-06 02:14:26
veilor-org veilor-os main b40e89a3 b40e89a3 22 / 22 2 / 2 yes (pre-existing)

All push-mirrors target https://github.com/<owner>/<name>.git with sync_on_commit: true.

Findings on this run

  • Previous attempt's API timeout left every repo intact and content-correct, but on s8n-ru/x the default-branch metadata had been set to KisaragiEffective-patch-1 (an in-flight feature branch from upstream KisaragiEffective, presumably the last branch processed when the timeout hit). Fixed via PATCH /api/v1/repos/s8n-ru/x { "default_branch": "master" }. All 84 branches and 1310 tags were already present, so no re-mirror was needed.
  • All five s8n-ru push-mirrors and the veilor-org/veilor-os mirror reported last_error: "" and recent successful syncs, confirming the GH→Forgejo→GH bidirectional path was healthy before this run started.

Failures

None.

Skipped

Owner Name Reason
veilor-org veilor-os Already migrated before this task began

No archived repos and no forks (where user is not source author) were encountered. No repo exceeded 1 GB (largest is s8n-ru/x at ~268 MB).

Cleanup

/tmp/migrate/ removed. /tmp/migrate-state.tsv retained for the next re-run.