Déclencher manuellement GitHub Actions
Bonjour, cet article explique comment déclencher manuellement des builds GitHub Actions.
Pourquoi vouloir faire ça ?
Au lieu d'attendre simplement un changement de code ou de workflow GitHub ?
Eh bien, par exemple, la dernière fois que votre build sur master s'est exécuté, certains des serveurs utilisés par votre build étaient peut-être indisponibles (par exemple : le registre npm, une API que vous utilisez pour les tests, etc.).
Pour l'instant, GitHub indique qu'il n'y a aucun moyen de déclencher manuellement un build, alors que la question a été posée sur StackOverflow et que certaines personnes utilisent même CURL pour déclencher des builds manuellement.
Mais j'ai trouvé une meilleure solution ! Avec ma solution, une fois en place, le bouton ⭐️ de votre dépôt GitHub déclenchera un build chaque fois que VOUS (et seulement vous) mettrez une étoile au dépôt. Vous pouvez le faire autant de fois que vous voulez.
Oui, c'est une solution TRÈS bricolée, mais elle fonctionne plutôt bien. ✨
Comment déclencher manuellement
Entrons dans le vif du sujet.
Le bouton ⭐️ sert à lancer le workflow quand c'est possible, comme ceci.
Modifiez votre fichier de workflow pour y inclure :
on: watch: types: [started]
Ainsi, le workflow sera exécuté chaque fois que vous mettrez une étoile au dépôt, ou que vous l'enlèverez puis la remettrez.
Si on combine ça avec un conseil utile de Samira sur Stack Overflow, on peut lancer le workflow uniquement si c'est le ou la propriétaire qui déclenche l'action.
if: github.actor == github.event.repository.owner.login
Ça évite que l'action soit exécutée par d'autres personnes, et la réserve aux mainteneurs par exemple.
Ensuite, vous pouvez ajouter votre ou vos jobs et des services supplémentaires.
Au final, on obtient le workflow suivant...
name: Test on: watch: types: [started] jobs: build: runs-on: ubuntu-latest if: github.actor == github.event.repository.owner.login steps: - name: Checkout repository uses: actions/checkout@v2 # add more ...
C'est une base, vous pouvez donc l'adapter à un workflow existant ou en créer un nouveau à partir de celle-ci.
Quelques remarques
Il est possible de combiner deux événements.
Par exemple, vous pouvez configurer votre workflow avec l'événement watch et à chaque push, pour avoir les deux possibilités.
name: Test on: push: branches: - master watch: types: [started]
Ici, le processus s'exécute à chaque push sur la branche master et à chaque étoile sur le dépôt.
N'oubliez pas que si vous voulez relancer un workflow qui a échoué, vous pouvez relancer toutes les vérifications grâce à un bouton de l'interface prévu pour les workflows en échec, comme ceci...
Capture d'écran de l'onglet Actions sur GitHub
Tout dépend de ce que vous voulez vraiment faire.
De plus, vous pouvez lancer tout le workflow avec l'événement watch, ou seulement certaines étapes en ajoutant une condition if sur une étape, comme ceci :
name: Test on: watch: types: [started] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Step 2 if: github.actor == github.event.repository.owner.login
Dans ce cas, l'étape 2 ne s'exécutera que si le dépôt reçoit une étoile de son propriétaire.
N'oubliez pas que le bouton ⭐️ lance le workflow uniquement depuis la branche par défaut (master).
Notez qu'il existe des permissions dans les paramètres du dépôt pour désactiver les actions ou empêcher l'exécution d'actions tierces.
Capture d'écran des permissions des actions dans les paramètres
Mise à jour : comme l'a suggéré Emilien Escalle dans les commentaires sur dev.to, on peut aussi configurer le workflow uniquement pour les collaborateurs et collaboratrices, en créant un autre job dont dépendra le build : il vérifie si la personne collabore au projet, sinon le workflow échoue.
jobs: authorize: runs-on: ubuntu-latest steps: - uses: octokit/request-action@v2.0.0 with: route: GET /repos/:repository/collaborators/${{ github.actor }} repository: ${{ github.repository }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} build: needs: [authorize] runs-on: ubuntu-latest steps: - ...
Bon à savoir...
GitHub vient tout juste de publier ses API Actions, ce qui devrait bientôt permettre à GitHub ou à des extensions de navigateur d'ajouter des boutons « déclencher le workflow » dans leur interface.
J'espère que cet article vous a plu, et un merci tout particulier à Vincent qui m'a poussée à l'écrire :)