# 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 status` → `s8n-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//.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.