Les Review Apps sont des sites temporaires associés à la création et à la suppression des pull requests. Elles permettent aux développeurs de visualiser et de tester les changements de code avant de les fusionner dans la branche principale. Dans cet article, nous vous présenterons une solution pour automatiser la création et la suppression de Review Apps en utilisant les actions GitHub et l'API de Laravel Forge.
Qu'est-ce que Laravel Forge ?
Laravel Forge est une plateforme de gestion de serveurs pour les applications Laravel. Elle permet de provisionner et de déployer facilement des serveurs et des sites web, ainsi que de gérer les bases de données, les certificats SSL, etc. Forge fournit également une API qui permet d'interagir avec la plateforme et d'automatiser certaines tâches.
Présentation de l'action Forge Review App
Nous avons développé une action GitHub appelée "Forge Review-app Action" qui permet de créer et de déployer automatiquement une Review App sur un serveur géré par Laravel Forge lorsque vous ouvrez une pull request ou poussez vers une branche spécifique.
Cette action utilise l'API de Laravel Forge pour effectuer les étapes suivantes :
- Création du site et de la base de données si ce n'est pas déjà fait.
- Configuration du dépôt.
- Obtention du certificat Let's Encrypt.
- Configuration du fichier .env à l'aide d'un fichier modèle (stub).
- Configuration du script de déploiement à l'aide d'un fichier modèle (stub).
- Lancement du déploiement.
- Vérification du déploiement et affichage du résultat.
L'action Forge Review App est entièrement configurable à l'aide de variables d'entrée, ce qui vous permet de personnaliser les paramètres du site, tels que le domaine racine, le type de projet, la version de PHP, etc. Les variables d'entrée peuvent être stockées en tant que secrets GitHub pour assurer une gestion sécurisée des informations sensibles.
Présentation de l'action Forge Review App Clean
En complément de l'action Forge Review App, nous avons également développé une autre action GitHub appelée "Forge Review App Clean". Cette action permet de supprimer automatiquement une Review App sur Laravel Forge lorsque vous fermez une pull request.
Elle utilise également l'API de Laravel Forge pour effectuer les étapes suivantes :
- Suppression du site.
- Suppression de la base de données.
L'action Forge Review App Clean utilise les mêmes variables d'entrée que l'action Forge Review App, ce qui facilite l'intégration des deux actions dans votre flux de travail GitHub.
Configuration pré requise
Forge
Vous devrez disposez d'un serveur "App" ou "Web" configuré dans Forge et d'un token API créé depuis un utilisateur disposant des droits nécessaires à la création de site, déploiement, etc. Vous devrez avoir configuré correctement le "source control" pour permettre l'installation des dépôts Git de votre organization Github.
DNS
Vous aurez également mis en place un enregistrement DNS wildcard permettant de faire pointer sur votre serveur l'ensemble des sous domaines du root_domain
de vos Review Apps.
Github
Vous devrez créer les secrets suivants dans votre depot Github
FORGE_API_TOKEN
: votre token d'API généré iciFORGE_SERVER_ID
: L'identifiant numérique de votre serveur Forge
Vous pouvez également en créer d'autres en fonctions des variables d'entrées optionnelles que vous souhaitez utiliser, comme FORGE_DB_PASSWORD
si vous voulez créer une base de données pour votre Review App.
Workflows GitHub
Maintenant que nous avons expliqué les deux actions, voyons comment les intégrer dans vos workflows GitHub pour automatiser la création et la suppression des Review Apps.
Exemple de workflow pour la création de la Review App
name: Création de la Review App
on:
pull_request:
types: [ 'opened', 'reopened', 'synchronize', 'ready_for_review' ]
jobs:
review-app:
runs-on: ubuntu-latest
name: "Création de la Review App"
steps:
- name: Récupération des fichiers stubs
uses: actions/checkout@v3
with:
sparse-checkout: |
.github/workflows/.env.stub
.github/workflows/deploy-script.stub
sparse-checkout-cone-mode: false
- name: Créer la Review App sur Forge
id: forge-review-app
uses: web-id-fr/forge-review-app-action@v1.0.0
with:
forge_api_token: ${{ secrets.FORGE_API_TOKEN }}
forge_server_id: ${{ secrets.FORGE_SERVER_ID }}
root_domain: example.com
create_database: 'true'
database_password: ${{ secrets.FORGE_DB_PASSWORD }}
- name: Notification Slack en cas de succès
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_CHANNEL: '#my-app-events'
SLACK_COLOR: '#55FF55'
SLACK_USERNAME: 'github'
SLACK_ICON_EMOJI: '🚀'
SLACK_TITLE: Review App
SLACK_FOOTER: "“C'est oui.”"
SLACK_MESSAGE: "Review App disponible : - https://${{ steps.forge-review-app.outputs.host }}"
- name: Ajout du lien vers la Review App dans les commentaires de la pull request
uses: unsplash/comment-on-pr@v1.3.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
msg: "🚀 Une Review App pour cette PR est disponible : https://${{ steps.forge-review-app.outputs.host }}"
- name: Notification Slack en cas d'erreur
uses: rtCamp/action-slack-notify@v2
if: ${{ failure() }}
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_CHANNEL: '#my-app-events'
SLACK_COLOR: '#FF5555'
SLACK_USERNAME: 'github'
SLACK_ICON_EMOJI: '😱'
SLACK_TITLE: Review App
SLACK_FOOTER: "“C'est non.”"
SLACK_MESSAGE: 'La création de la Review App a plantée.'
Ce workflow est déclenché lors de l'ouverture d'une pull request ou lors de sa mise à jour. L'action "Forge Review App" est utilisée pour créer la Review App sur Laravel Forge en fonction des paramètres spécifiés. La première étape permet de récupérer les fichiers modèles (stubs) qui serviront à la mise en place du fichier .env
et du script de déploiement. On utilise ensuite la variable de sortie host
de la tâche de création de la Review App pour générer une notification de succès dans Slack et commenter la pull request avec le lien associé. La dernière tâche permet d'être également notifier sur Slack en cas d'échec.
Exemple de workflow pour la suppression de la Review App
name: Suppression de la Review App
on:
pull_request:
types: [ 'closed' ]
jobs:
review-app:
runs-on: ubuntu-latest
name: "Suppression de la Review App"
steps:
- name: Supprimer la Review App sur Forge
uses: web-id-fr/forge-review-app-clean-action@v1.0.0
with:
forge_api_token: ${{ secrets.FORGE_API_TOKEN }}
forge_server_id: ${{ secrets.FORGE_SERVER_ID }}
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
env:
MSG_MINIMAL: true
SLACK_CHANNEL: '#my-app-events'
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_COLOR: '#55FF55'
SLACK_USERNAME: 'github'
SLACK_ICON_EMOJI: '💥'
SLACK_TITLE: Suppression Review App
SLACK_MESSAGE: "Review App ${{ steps.forge-review-app-clean.outputs.host }} supprimée pour la branche ${{github.head_ref}}"
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
if: ${{ failure() }}
env:
MSG_MINIMAL: true
SLACK_CHANNEL: '#my-app-events'
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_COLOR: '#FF5555'
SLACK_USERNAME: 'github'
SLACK_ICON_EMOJI: '🤯'
SLACK_TITLE: Suppression Review App
SLACK_MESSAGE: "Erreur pendant la suppression de la Review App pour la branche ${{github.head_ref}}"
Ce workflow est déclenché uniquement lors de la fermeture d'une pull request. L'action "Forge Review App Clean" est utilisée pour supprimer la Review App correspondante sur Laravel Forge. On utilise la variable de sortie host
et le nom de la branche concernée (avec ${{github.head_ref}}
) de la tâche de suppression de la Review App pour générer une notification de succès dans Slack. La dernière tâche permet d'être également notifier sur Slack en cas d'échec.
Avec ces deux workflows configurés, vous pouvez automatiser la création et la suppression des Review Apps pour chaque pull request de votre projet. Cela permet à votre équipe de bénéficier d'un environnement isolé pour tester les changements de code, d'améliorer la collaboration et d'accélérer le processus de développement.
Conclusion
Dans cet article, nous avons présenté l'action "Forge Review App" qui permet de créer automatiquement des Review Apps sur Laravel Forge, ainsi que l'action "Forge Review App Clean" pour les supprimer lors de la fermeture des pull requests. En utilisant ces deux actions dans vos workflows GitHub, vous pouvez automatiser la gestion des Review Apps et faciliter le processus de développement collaboratif. N'hésitez pas à les essayer et à les adapter selon vos besoins spécifiques.
Des ameliorations sont à suivre, comme la possibilité de spécifier un template Nginx à utiliser pour les applications avec des besoins spécifiques ou encore une gestion plus poussé du fichier .env
et du script de déploiement avec l'utilisation d'un système de template.