Web^ID
💬 Contact 💬 Contact

20 06 2023

retour à la liste des articles

Automatisez la création et la suppression de Review Apps avec Laravel Forge et les Github Actions

• écrit par [Web^ID]

GitHub Actions Laravel Forge

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 :

 

  1. Création du site et de la base de données si ce n'est pas déjà fait.
  2. Configuration du dépôt.
  3. Obtention du certificat Let's Encrypt.
  4. Configuration du fichier .env à l'aide d'un fichier modèle (stub).
  5. Configuration du script de déploiement à l'aide d'un fichier modèle (stub).
  6. Lancement du déploiement.
  7. 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 :

 

  1. Suppression du site.
  2. 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é ici
  • FORGE_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.

Rédigé par :

Vous souhaitez démarrer rapidement ?
Besoin d'accompagnement ?

Vous voulez en savoir plus ou vous souhaitez nous parler de votre projet ?
Nous sommes à votre disposition !