- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Adds a complete workflow consisting of audit, migrate, and diff phases to transfer Gitea instances to Forgejo via the v1 REST API. The toolchain includes a dedicated HTTP client with automatic pagination, retry logic that dynamically disables failing features, and strict ownership enforcement. The audit phase catalogs instance components and flags items requiring manual review. The migrate phase handles repository transfers with configurable scope filtering and dry-run support. The diff phase verifies post-migration parity by comparing aggregate counts across organizations and repositories. All scripts enforce non-zero exit codes on failures and accept configuration via environment variables or CLI flags. |
||
| gitea_api.py | ||
| gitea_forgejo_diff.py | ||
| gitea_forgejo_migrate.py | ||
| gitea_migration_audit.py | ||
| README.md | ||
Migration Gitea -> Forgejo
Scripts pour auditer, migrer et vérifier le passage d'une instance Gitea vers une nouvelle instance Forgejo, via l'API v1 (commune aux deux, Forgejo étant un fork de Gitea).
gitea_api.py est un client HTTP minimal partagé par les trois scripts,
sans dépendance autre que certifi (optionnel, pour la validation SSL).
1. Audit (avant migration)
Dresse l'inventaire de l'instance Gitea source et distingue ce qui se transporte automatiquement lors d'une bascule Gitea -> Forgejo de ce qui nécessite une action manuelle (secrets de webhooks, jetons runners, OAuth2 upstream, etc.).
GITEA_URL=https://ancien-gitea.fr GITEA_TOKEN=xxxx python3 gitea_migration_audit.py
# ou explicitement :
python3 gitea_migration_audit.py \
--source-url https://ancien-gitea.fr --source-token xxxx \
[--json audit.json]
2. Migration
Migre dépôts, issues/PRs/labels/milestones/releases/wiki/LFS, organisations
et utilisateurs de Gitea vers Forgejo, via /repos/migrate. Réessaie
automatiquement en désactivant une fonctionnalité (issues, wiki, ...) si sa
migration échoue plutôt que d'abandonner le dépôt entier.
python3 gitea_forgejo_migrate.py \
--source-url https://ancien-gitea.fr --source-token XXX \
--target-url https://nouveau-forgejo.fr --target-token YYY \
[--dry-run] [--exclude-user testuser] [--only-owner image]
--dry-run: n'écrit rien côté Forgejo, affiche seulement ce qui serait fait.--only-owner: limite à un seul propriétaire (user ou org), utile pour tester.- Les organisations sont créées automatiquement côté Forgejo si absentes ; les comptes utilisateurs, eux, doivent déjà exister (le script s'arrête en erreur claire sinon, plutôt que de réassigner les dépôts ailleurs).
3. Diff (après migration)
Compare, dépôt par dépôt, la présence côté Forgejo et le nombre total
d'issues/PRs/releases/labels entre source et cible. Un écart signale une
migration partielle (à corriger en relançant gitea_forgejo_migrate.py
sur ce propriétaire) ou un dépôt jamais migré.
python3 gitea_forgejo_diff.py \
--source-url https://ancien-gitea.fr --source-token XXX \
--target-url https://nouveau-forgejo.fr --target-token YYY \
[--only-owner image] [--json diff.json]
Paramètres communs
Les trois scripts acceptent leurs identifiants soit en variables
d'environnement (GITEA_URL, GITEA_TOKEN, FORGEJO_URL, FORGEJO_TOKEN),
soit en options --source-url/--source-token/--target-url/--target-token
(l'audit n'a que la source, les deux autres ont source et cible). Le code de
sortie est non nul en cas d'échec (gitea_forgejo_migrate.py) ou d'écarts
détectés (gitea_forgejo_diff.py).