Dépôt d'entraînement à la création de workflow Github Action.
Cette procédure peut être suivie avec l'utilisation d'un projet tel que :
Warning
Attention de bien réupérer le code complet du projet disponible sur la branche solution.
La procédure suivante permet de créer un premier workflow :
- créer projet local avec un dossier
.github/workflows - créer un fichier
ci.ymldans ce dossier, avec le contenu suivant :
name : Github Action learning
# Permissions minimales pour le workflow
permissions:
contents: read
# Il est possible d'utiliser des variables d'environnement en utilisant ${{ <nom-variable> }}
# https://docs.github.com/en/actions/reference/workflows-and-actions/contexts
run-name : ${{ github.actor }} apprentissage de Github Action
on : [push, workflow_dispatch] # se délenche sur un "push" et peut être démarrer manuellemen ("workflow_action")
jobs:
Github-action-learning:
runs-on: ubuntu-24.04
steps:
- name: Etape 1 - Là où tout commence
run: echo "It's alive! ALIIIIIVE!"- créer un dépôt sur Github et le lier au dépôt local contenant le projet
- pousser le code sur le dépôt Github
Si tout est bien configurer il devrait être possible d'observer le bon fonctionnement du workflow :
Cycle de vie d'un Workflow :
- événement
- recherche du workflow correspondant à l'événement
- mise en file d'attente
- attribution d'un "runner"
- exécution des jobs
- nettoyage des machines virtuelles
Il est possible d'ajouter à une étape des commandes qui s'exécuteront sur le "runner".
Au sein de ces commandes, des variables de contexte sont fournies par Github Action.
Essayer d'ajouter cette étapes à votre workflow :
- name: Informations diverses
- run: echo "Le job a été déclenché par ${{ github.event_name }}"Tip
Sous VS Code, il est possible d'utiliser des extensions telles que GitHub Actions for VS Code pour bénéficier de la coloration syntaxique des variables.
Une fois le workflow poussé l'action se déclenche automatiquement. Il est également possible de déclenche l'action manuellement :
Il est possible de chaîner les commandes pour les exécuter en 1 seul "run" en utilisant |:
- name: Informations diverses
run: | # Le | permet de chaîner les commandes
echo "Le job a été déclenché par ${{ github.event_name }}"
echo "Ce job tourne sur ${{ runner.os }}"
echo "La branche est ${{ github.ref }} sur le dépôt ${{ github.repository }}"Parmi les actions disponibles dans le Marketplace il est possible d'utiliser Checkout afin de récupérer un dépôt sur le runner.
Le "checkout" peut s'effectuer avec le code de workflow suivant :
- name: Récupération du code
uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83ddRecommandation de sécurité : utiliser le SHA du commit stable de l'action Github pour cibler l'opération de checkout.
La suite de cette procédure permet de développer le workflow pour automatiser les tests unitaires d'une application web.
Voici les projets que vous pourrez utiliser (à choisir en fonction du langage de votre choix) :
- application en Python;
- application en PHP ;
- application en Java ;
- application en Javascript.
Tip
Il vous sera possible d'implémenter le workflow sur un "fork" du dépôt de votre choix.
Il est possible d'utilisation l'action "checkout", voici un extrait de configuration YML exploitable :
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83ddNote
"de0fac2e4500dabe0009e67214ff5f5447ce83dd" est utilisé pour préciser la version de l'action à utiliser. Ceci est le hash du commit de la v6 de l'action en question.
Le runner sur lequel le code est récupéré ne bénéficie pas, par défaut, d'environnement de développement.
Des actions spécifiques peuvent le mettre en place, ceci pour plusieurs technologies :
Par exemple, pour Python :
- name: Configuration de Python # https://github.com/marketplace/actions/setup-python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c
# Paramétrage spécifiques :
# - numéro de version Python
# - activation du cache pour "pip"
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
cache-dependency-path: |
requirements.txtTip
La variable d'environnement env.PYTHON_VERSION doit être définie au préalable (avant la balise jobs). Se référer à l'article disponible ici pour plus d'informations.
Une fois l'environnement de développement installé, il est possible de déclencher l'installation des dépendances en utilisant les outils propres à la technologie utilisée, par exemple pour un projet Python :
- name: Installation des dépendances
# Màj de pip & installation des dépendances listées dans "requirements.txt"
run: |
python -m pip install --upgrade pip
pip install -r requirements.txtUn des intérêts de Github Action est de pouvoir automatiser le lancement des tests unitaires afin de :
- cibler les éventuelles régressions
- interrompre le workflow et empêcher le déploiement
- bloquer une "pull request"
Voici un exemple d'étape utilisable dans le cas d'un projet Python :
- name: Lancement des tests unitaires
run: |
echo "Lancement des tests unitaires"
if ! python -m unittest tests/test_taxi_fare_calculator.py -v; then
echo "::error:: Les tests unitaires ont échoué. Interruption du pipeline."
exit 1
fi::error:: est une "commande de workflow". Les commandes de Workflow permettent de faire un pont entre le workflow et le runner, par exemple :
- elle permettent de définir des variables d'environnement
- de générer des valeurs utilisées par d'autres actions
- d'ajouter des messages de débogage
::error:: permet de générer une annotation en erreur pour le runner (qui sera visible dans l'apperçu Github Action).

