Skip to content

groupemary/scw-registry-prune

Repository files navigation

🧼 Scaleway Registry Prune

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.


✨ Fonctionnalités

  • ✅ 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

🔄 Fonctionnement du groupage par digest

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é.


⚙️ Prérequis

  • Python 3.7+
  • requests :
pip install -r requirements.txt

🚀 Utilisation

1. Récupérer une clé API Scaleway

Vous pouvez obtenir une clé API ici Scaleway Console > Identifiants.


2. Exécuter le script

python scw_registry_prune.py --token <SCW_SECRET_KEY> --keep <N> --dry-run

Paramètres :

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

3. Variables d'environnement (optionnel)

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-run

4. Exemples d'utilisation

Test sans suppression (dry-run) :

python scw_registry_prune.py --dry-run --verbose

Nettoyage avec confirmation :

python scw_registry_prune.py --keep 3 --min-age-days 14

Nettoyage automatisé (sans confirmation) :

python scw_registry_prune.py --keep 5 --force

Nettoyage sur une autre région :

python scw_registry_prune.py --region nl-ams --keep 5 --dry-run

🧪 Exemple de sortie

2026-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)

🔒 Sécurité

  • 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 --keep doit ê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)

🐳 Utilisation avec Docker

docker run --rm \
  -e SCW_SECRET_KEY=your_token \
  ghcr.io/your-org/scw-registry-prune:latest \
  --keep 5 --dry-run

🧑‍💻 Auteurs


🪪 Licence

Initialement développé pour un usage interne chez MARY, ce projet est désormais sous license GPL V3.

About

Purge old tags on Scaleway Registry

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors