Script Python pour nettoyer automatiquement les anciennes images dans un registre Scaleway Container Registry, en conservant uniquement les images les plus récentes selon vos besoins.
- ✅ Liste tous les namespaces et repositories dans votre registre Scaleway
- ✅ Conserve uniquement les N images uniques les plus récentes par repository (groupées par digest/checksum)
- ✅ Supprime les tags plus anciens avec confirmation interactive
- ✅ Support multi-régions (fr-par, nl-ams, pl-waw)
- ✅ Gestion automatique des erreurs avec retry
- ✅ Rate limiting configurable pour éviter les blocages API
- ✅ Affichage clair des actions :
[KEEP],[SKIP],[REMOVE],[DRY-RUN] - ✅ Image Docker, possibilité de l'ajouter à une Jobs Scaleway qui tourne chaque jour par exemple
Le script groupe les tags qui partagent le même digest (checksum SHA256) et les compte comme une seule image.
Exemple :
Groupe 1 (digest: abc123...) → tags: [v1.0, latest, main] → compte comme 1 image
Groupe 2 (digest: def456...) → tags: [v0.9] → compte comme 1 image
Avec --keep 2, les deux groupes sont conservés (y compris tous leurs tags).
Cela évite de supprimer accidentellement des tags importants (comme latest) qui pointent vers la même image qu'un tag versionné.
- Python 3.7+
requests:
pip install -r requirements.txtVous pouvez obtenir une clé API ici Scaleway Console > Identifiants.
python scw_registry_prune.py --token <SCW_SECRET_KEY> --keep <N> --dry-run| Argument | Description | Valeur par défaut |
|---|---|---|
--token |
Token Scaleway. Peut aussi être passé via SCW_SECRET_KEY |
- |
--keep |
Nombre d'images uniques (par digest) à conserver par repository | 6 |
--dry-run |
Simule les suppressions sans rien supprimer | false |
--min-age-days |
Age minimum (en jours) pour qu'une image puisse être supprimée | 30 |
--region |
Région Scaleway (fr-par, nl-ams, pl-waw) |
fr-par |
--rate-limit-delay |
Délai en secondes entre chaque appel API | 0.1 |
--force, -f |
Supprime sans demander de confirmation | false |
--verbose, -v |
Active les logs détaillés (niveau DEBUG) | false |
Il est possible de définir la clé API via une variable d'environnement :
export SCW_SECRET_KEY=abcd1234
python scw_registry_prune.py --keep 5 --dry-runTest sans suppression (dry-run) :
python scw_registry_prune.py --dry-run --verboseNettoyage avec confirmation :
python scw_registry_prune.py --keep 3 --min-age-days 14Nettoyage automatisé (sans confirmation) :
python scw_registry_prune.py --keep 5 --forceNettoyage sur une autre région :
python scw_registry_prune.py --region nl-ams --keep 5 --dry-run2026-01-26 14:30:45 [INFO] 🚀 Démarrage du nettoyage pour la région: fr-par
2026-01-26 14:30:45 [INFO] ⚙️ Configuration: keep=5, min_age_days=30, dry_run=True
2026-01-26 14:30:45 [INFO] 🧭 Namespace ID: abc123 | Name: monapp | Region: fr-par
2026-01-26 14:30:46 [INFO] 📦 Namespace: monapp
2026-01-26 14:30:46 [INFO] 📁 Repo: backend-api
2026-01-26 14:30:47 [INFO]
🔍 Images à supprimer: 2
2026-01-26 14:30:47 [INFO] 🧪 [DRY-RUN] Would delete: monapp/backend-api:2.2.9 (digest:def456789012...) - 10/05/2025 18h45
2026-01-26 14:30:47 [INFO] 🧪 [DRY-RUN] Would delete: monapp/backend-api:2.2.8 (digest:ghi789012345...) - 28/04/2025 16h00
2026-01-26 14:30:47 [INFO] 🧪 Mode dry-run: aucune suppression effectuée.
Avec --verbose (niveau DEBUG) :
2026-01-26 14:30:46 [DEBUG] 📊 12 tags, 8 images uniques (par digest)
2026-01-26 14:30:46 [DEBUG] ✅ [KEEP] digest:abc123456789... tags:[2.3.4, latest] - 28/06/2025 14h02
2026-01-26 14:30:46 [DEBUG] ✅ [KEEP] digest:bcd234567890... tags:[2.3.3] - 20/06/2025 10h12
2026-01-26 14:30:46 [DEBUG] ⏭️ [SKIP] digest:cde345678901... tags:[2.3.0] (Too recent)
- Avec l'option
--dry-run, ce script ne supprime rien - Sans l'option
--force, une confirmation interactive est demandée avant toute suppression - Par défaut, les images de moins de 30 jours ne sont pas supprimées (
--min-age-days) - Le paramètre
--keepdoit être au minimum 1 pour éviter de supprimer toutes les images - Le script utilise un système de retry automatique en cas d'erreur réseau (429, 500, 502, 503, 504)
docker run --rm \
-e SCW_SECRET_KEY=your_token \
ghcr.io/your-org/scw-registry-prune:latest \
--keep 5 --dry-run- 🛠️ Script développé par @valentin.deville
- 🏢 MARY
Initialement développé pour un usage interne chez MARY, ce projet est désormais sous license GPL V3.