| sidebar_position |
|---|
3 |
Le workflow de preview permet aux contributeurs et réviseurs de tester les pull requests sans compiler manuellement les images Docker. Quand une PR est étiquetée avec preview, une image Docker est automatiquement compilée et publiée pour faciliter les tests.
Le workflow de preview est opt-in en utilisant les labels GitHub :
- PR créée → Pas d'image de preview (par défaut)
- Ajout du label
preview→ Le workflow se déclenche et compile l'image Docker - Push de nouveaux commits → L'image de preview se met à jour automatiquement
- Suppression du label
preview→ Le workflow arrête la compilation (les anciennes images restent accessibles)
- Économiser les ressources : Compiler les previews uniquement quand c'est nécessaire
- Choix du contributeur : L'auteur décide si une preview est nécessaire
- Commodité pour la review : Les réviseurs peuvent demander des previews pour les changements complexes
- Contrôle des coûts : Éviter de compiler des images Docker pour chaque PR
- Ouvrez votre pull request sur GitHub
- Dans la barre latérale droite, cliquez sur "Labels"
- Ajoutez le label
preview - Attendez ~10-15 minutes que la compilation se termine
- Vérifiez les commentaires de la PR pour les commandes Docker pull
Poussez simplement de nouveaux commits ! L'image de preview se met à jour automatiquement quand vous poussez sur la branche de la PR.
Supprimez simplement le label preview de votre PR.
Si vous voulez tester une PR avant de l'approuver :
- Commentez sur la PR : "Pouvez-vous ajouter le label
previewpour que je puisse tester ?" - Ou ajoutez le label vous-même (si vous avez les permissions)
- Attendez que la compilation se termine
- Utilisez les commandes Docker du commentaire du bot
Pour la PR #123 depuis la branche feature/awesome :
uwucode/ygege:pr-123- Tag simple avec numéro de PR (se met à jour à chaque push)uwucode/ygege:pr-123-feature-awesome- Inclut le nom de la brancheghcr.io/uwudev/ygege:pr-123- Version GHCRghcr.io/uwudev/ygege:pr-123-feature-awesome- GHCR avec la branche
Tests rapides : Utilisez pr-123 (plus court)
docker pull uwucode/ygege:pr-123Plusieurs PRs : Utilisez pr-123-feature-awesome (plus descriptif)
docker pull uwucode/ygege:pr-123-feature-awesome# Récupérer l'image de preview
docker pull uwucode/ygege:pr-123
# Vérifier les infos de version
docker run --rm uwucode/ygege:pr-123 --version
# Exécuter la preview
docker run -p 8080:8080 uwucode/ygege:pr-123Créez docker-compose.preview.yml :
services:
ygege-preview:
image: uwucode/ygege:pr-123
ports:
- "8080:8080"
environment:
- LOG_LEVEL=debug
volumes:
- ./config:/configExécutez-le :
docker compose -f docker-compose.preview.yml up# Récupérer les deux images
docker pull uwucode/ygege:latest
docker pull uwucode/ygege:pr-123
# Comparer les tailles
docker images | grep ygege
# Exécuter côte à côte
docker run -p 8080:8080 uwucode/ygege:latest # Production
docker run -p 8081:8080 uwucode/ygege:pr-123 # PreviewLe workflow poste un commentaire automatisé sur votre PR avec :
## 🐳 Image Docker de Preview Prête !
Votre preview de PR a été compilée et publiée...
### Docker Hub
docker pull uwucode/ygege:pr-123
...Le bot met à jour le même commentaire au lieu de spammer de nouveaux.
## ℹ️ Image Docker de Preview Désactivée
Le label `preview` a été supprimé...- Architectures : linux/amd64, linux/arm64
- Infos de build : SHA du commit, nom de la branche, date de compilation
- Labels : Numéro de PR, nom de la branche, URL de la PR
- Registres : Docker Hub et GitHub Container Registry
BUILD_COMMIT=abc123def456...
BUILD_DATE=2025-11-11T12:34:56Z
BUILD_BRANCH=feature/awesome-feature- Utilise le cache GitHub Actions pour des recompilations plus rapides
- Met aussi en cache depuis l'image PR précédente si disponible
- Temps de compilation typique : 10-15 minutes (première compilation), 5-10 minutes (mises à jour)
Le workflow de preview s'exécute quand :
| Événement | Action | Compile ? |
|---|---|---|
| PR ouverte | opened |
✅ Si a le label preview |
| PR mise à jour | synchronize |
✅ Si a le label preview |
| PR réouverte | reopened |
✅ Si a le label preview |
| Label ajouté | labeled |
✅ Si le label est preview |
| Label supprimé | unlabeled |
❌ Poste un commentaire de nettoyage |
Important : Le workflow compile uniquement si le label preview est présent.
✅ Utilisez la preview pour :
- Les fonctionnalités complexes qui changent le comportement
- Les changements UI/UX nécessitant des tests visuels
- Les améliorations de performance nécessitant des benchmarks
- Les corrections de bugs difficiles à tester localement
- Les changements affectant la configuration Docker
❌ N'utilisez pas la preview pour :
- Les corrections simples de documentation
- Les petites fautes de frappe ou le formatage du code
- Les changements avec des tests unitaires complets
- Les corrections de bugs en une ligne
- Ajoutez tôt : Si vous savez que les réviseurs voudront tester, ajoutez le label immédiatement
- Documentez les changements : Expliquez quoi tester dans la description de la PR
- Nettoyez : Supprimez le label une fois la PR mergée ou fermée
- Testez localement d'abord : Vérifiez que la compilation Docker fonctionne avant de demander une preview
- Soyez spécifique : Dites à l'auteur ce que vous voulez tester
- Partagez les résultats : Commentez sur la PR avec vos résultats de tests
- Supprimez quand c'est fait : Supprimez le label après que les tests soient terminés
- Chaque compilation de preview utilise ~10-15 minutes de temps GitHub Actions
- Les compilations multi-arch (amd64 + arm64) utilisent plus de ressources
- Les mises à jour réutilisent le cache, rendant les compilations suivantes plus rapides
Les images de preview restent sur Docker Hub/GHCR jusqu'à suppression manuelle.
Suggestions de nettoyage :
- Supprimez les images de preview après que la PR soit mergée
- Configurez un nettoyage automatisé pour les anciennes images de PR (optionnel)
Problème : Le workflow affiche un ❌ rouge
Vérifiez :
- Consultez les logs du workflow dans l'onglet "Actions"
- Cherchez les erreurs de compilation dans l'étape "Build and push preview image"
- Problèmes courants :
- Erreurs de syntaxe Dockerfile
- Dépendances manquantes
- Manque de mémoire
Solution : Corrigez le problème dans votre branche et poussez un nouveau commit
Problème : docker pull uwucode/ygege:pr-123 échoue
Causes possibles :
- La compilation n'est pas encore terminée - vérifiez le statut du workflow
- Mauvais nom de tag - vérifiez le commentaire du bot pour le tag exact
- Problème d'authentification au registre - essayez de récupérer depuis GHCR à la place
Problème : L'image récupérée ne reflète pas les derniers commits
Solution :
# Forcer la récupération de la dernière version
docker pull uwucode/ygege:pr-123 --no-cache
# Ou supprimer d'abord l'ancienne image
docker rmi uwucode/ygege:pr-123
docker pull uwucode/ygege:pr-123Problème : Pas de commentaire de preview sur la PR
Vérifiez :
- Le workflow s'est-il terminé avec succès ?
- Vérifiez les logs du workflow pour l'étape "Comment on PR"
- Le bot peut avoir des problèmes de permissions
Contournement : Utilisez les tags manuellement : uwucode/ygege:pr-{numéro}
Les images de preview ne sont PAS signées avec Cosign (contrairement aux images de release).
Pourquoi ?
- Les previews sont pour les tests, pas la production
- La signature ajoute de la complexité et du temps
- Le workflow de release gère la signature de production
Le workflow de preview utilise :
DOCKERHUB_USERNAME- Login Docker HubDOCKERHUB_TOKEN- Token Docker HubGITHUB_TOKEN- Fourni automatiquement par GitHub
- Ne les utilisez pas en production
- Ne faites pas confiance aux previews de contributeurs inconnus
- Revoyez toujours le code de la PR avant d'exécuter les images de preview
| Workflow | Déclencheur | Tags Docker | Signé ? | Cas d'usage |
|---|---|---|---|---|
| CI | Push sur les branches | develop, master |
❌ | Tests de développement |
| Preview | PR avec label | pr-123 |
❌ | Tests de PR |
| Release | Tags de version | v1.2.3, latest, stable |
✅ | Production |
# Le réviseur ajoute le label preview à la PR #456
# Attendre la compilation (~10 min)
# Récupérer et tester
docker pull uwucode/ygege:pr-456
# Exécuter avec config personnalisée
docker run -p 8080:8080 \
-v $(pwd)/test-config:/config \
uwucode/ygege:pr-456
# Tester la fonctionnalité
curl http://localhost:8080/api/endpoint
# Laisser un retour sur la PR
# Supprimer le label preview quand c'est fait# L'auteur ouvre la PR #789 avec une nouvelle optimisation Docker
# L'auteur ajoute le label preview
# Ajoute un commentaire : "Image de preview disponible pour tester les améliorations de performance"
# Le workflow compile et commente avec les tags
# Les réviseurs testent et confirment les gains de performance
# PR mergée, label preview supprimé# Tester plusieurs PRs côte à côte
docker pull uwucode/ygege:pr-111 # Fonctionnalité A
docker pull uwucode/ygege:pr-222 # Fonctionnalité B
# Exécuter Fonctionnalité A sur le port 8081
docker run -d -p 8081:8080 --name preview-a uwucode/ygege:pr-111
# Exécuter Fonctionnalité B sur le port 8082
docker run -d -p 8082:8080 --name preview-b uwucode/ygege:pr-222
# Comparer les fonctionnalités
curl http://localhost:8081/api/test
curl http://localhost:8082/api/test
# Nettoyer
docker stop preview-a preview-b
docker rm preview-a preview-bR : Non ! Seulement les PRs avec le label preview. Cela économise les ressources.
R : 10-15 minutes pour la première compilation, 5-10 minutes pour les mises à jour (grâce au cache).
R : Oui ! Chaque PR obtient son propre tag unique (pr-123, pr-456, etc.).
R : Elles restent sur Docker Hub/GHCR jusqu'à suppression manuelle. Pensez à les nettoyer périodiquement.
R : Oui ! Les images de preview sont multi-arch (amd64 + arm64).
R : Vous pouvez ! Mais les images de preview sont pratiques pour les réviseurs qui ne veulent pas cloner et compiler.
R : Oui ! Elles sont compilées depuis le SHA de commit exact dans la PR.
Créez un alias :
alias ygege-pr='docker run --rm -p 8080:8080 uwucode/ygege:pr-'
# Utilisation
ygege-pr123 # Exécute la preview de la PR #123#!/bin/bash
PR_NUM=$1
while true; do
echo "Récupération de la dernière pr-$PR_NUM..."
docker pull uwucode/ygege:pr-$PR_NUM
echo "Redémarrage du conteneur..."
docker stop ygege-preview 2>/dev/null
docker rm ygege-preview 2>/dev/null
docker run -d --name ygege-preview -p 8080:8080 uwucode/ygege:pr-$PR_NUM
echo "Preview mise à jour ! Attente de 5 minutes..."
sleep 300
doneUtilisez Docker Compose avec variable d'environnement :
export PR_NUMBER=123
docker compose up# docker-compose.yml
services:
ygege:
image: uwucode/ygege:pr-${PR_NUMBER:-develop}
ports:
- "8080:8080"Dernière mise à jour : 11 novembre 2025
Version du workflow : 2.0 (Previews de PR basées sur les labels)