Version fidèle au support fourni : formulations, exemples, commandes et exercices conservés. La présentation et la numérotation sont adaptées au wiki.
6.1 5. Événements et actions Github étape par étape

Dans cette section, nous allons créer une action qui exécute des tests avec pytest et contrôle la qualité de votre code avec Flake8 lorsque vous chargez sur votre dépôt.
Le framework pytest permet de créer facilement des tests simples et lisibles, et peut s'adapter à des tests fonctionnels complexes pour des applications et des bibliothèques.
Flake8 est une bibliothèque Python qui englobe PyFlakes, pycodestyle et le script McCabe de Ned Batchelder. Il s'agit d'une excellente boîte à outils pour vérifier votre base de code par rapport au style de codage (PEP8), aux erreurs de programmation (comme "library imported but unused - bibliothèque importée mais inutilisée" et "Undefined name - nom non défini").
6.2 Première étape
Tout d'abord, vous devez créer un script python qui contient des fonctions avec des assertions à tester. Pytest analysera toutes les fonctions de vos scripts mais il y a une condition : le nom de vos fonctions doit commencer par test_.
Créons donc ce script nommé file_test.py
import pytest
def test_calc_addition():
output = 2+4
assert output == 6
def test_calc_substraction():
# Fonction test du résultat de 2-4
output = 2-4
assert output == -2
def test_calc_multiply():
# Fonction test du résultat de 2*4
output = 2*4
assert output == 8
def test_coucou():
# Fonction test si le résultat renvoie 'hello'
output='hello'
assert output == 'hello'
6.3 Construire notre action
Maintenant que nous avons notre fichier de tests, faisons notre workflow. Allez dans votre dossier contenant votre dépôt, créez un dossier secret nommé .github et un sous-dossier nommé workflows et créez votre fichier.
Créez control_tests.yaml et attribuez un nom à notre flux de travail, définissez l'action sur "push"
name: Pytest & flake8 control Push
on: push
Définissez un id de tâche, nommez-le et définissons sur quelle instance nous voulons l'exécuter.
jobs:
qa:
name: Check tests
runs-on: ubuntu-24.04
Maintenant, configurons nos étapes. Nous avons 5 étapes :
- Un contrôle du dépôt
- Configuration de Python sur la VM
- L'installation des paquets
- L'exécution de nos tests
- Le contrôle de la convention PEP8
steps:
- name: Checkout on master
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@master
with:
python-version: "3.x"
Dans la première étape, nous avons le mot-clé uses qui fait appel à un workflow réutilisable déjà existant sur GitHub.
Ensuite, nous installons Python sur l'instance avec un autre workflow qui existe déjà, et nous spécifions la version de Python avec le mot-clé with.
Dans les étapes suivantes, nous allons installer deux paquets et exécuter pytest et flake8
- name: Install pytest and flake8
run: |
pip install pytest
pip install flake8
- name: Run tests
run: |
pytest
- name: Run flake8
uses: py-actions/flake8@v2
Avec le mot clé run, il suffit de lancer cette commande dans le shell Ubuntu sur l'instance. Pour utiliser flake8, vous devez utiliser un workflow déjà existant sur le marketplace github.
Voici votre workflow final :
name: Control Push
on: push
jobs:
qa:
name: Check tests
runs-on: ubuntu-24.04
steps:
- name: Checkout on master
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@master
with:
python-version: "3.x"
- name: Install pytest and flake8
run: |
pip install pytest
pip install flake8
- name: Run tests
run: |
pytest
- name: Run flake8
uses: py-actions/flake8@v2
Maintenant, vous n'avez plus qu'à faire un commit et charger votre code dans votre dépôt.
Allez sur votre dépôt sur www.github.com, cliquez sur Actions et vous pourrez voir votre workflow s'exécuter.

Vous constatez que notre workflow renvoie une erreur. Cliquez sur votre action.

Maintenant, cliquez sur check tests (vérifier les tests) et vous verrez alors pourquoi notre action a échoué.

Nous observons que les tests sont passés mais que l'étape flake8 a échoué. En examinant notre script, on constate que nous n'avons pas la convention de code PEP 8. Vous pouvez corriger cela en effectuant un réusinage de votre code et en faisant attention aux messages d'erreur.
Dans cet exemple, à l'intérieur du script de workflow, vous pouvez remarquer que nous avons une ligne uses contenant actions/checkout@v3. Github Marketplace contient des outils qui ajoutent des fonctionnalités.
Dans notre exemple, nous avons utilisé une action appelée checkout qui nous permet de recopier notre repository sur le serveur distant sur lequel tourne le workflow pour que le job puisse avoir accès à nos fichiers. Vous pouvez construire votre propre action et la publier sur le marketplace.
6.4 Variable d'environnement
Présentons un concept très utile dans l'action github appelé variable d'environnement. Une variable d'environnement est une variable dont la valeur est définie en dehors du programme et peut être utilisée pour déterminer des informations spécifiques à votre ordinateur. Vous pouvez définir une variable d'environnement pour l'ensemble du workflow en utilisant le niveau supérieur du fichier de workflow, seulement pour une tâche spécifique ou seulement pour une étape à l'intérieur d'une tâche.
Voici un bon exemple pour l'illustrer:
name: salutation sur un jour quelconque
on: workflow_dispatch
env:
DAY_OF_WEEK: Lundi ## Variable d'environnement pour l'ensemble du flux de travail
jobs:
greeting_job:
runs-on: ubuntu-latest
env:
Greeting: Salut ## Variable d'environnement pour la tâche
steps:
- name: "Dites Salut Mona nous sommes lundi"
run: echo "$Greeting $First_Name. Nous sommes $DAY_OF_WEEK!"
env:
First_Name: Mona ## Variable d'environnement uniquement pour l'étape "Dites Salut Mona nous sommes lundi" de la tâche "greeting_job"
L'exemple ci-dessus montre trois variables d'environnement personnalisées utilisées dans une commande echo : $DAY_OF_WEEK, $Greeting, et $First_Name.
Il existe un autre moyen de définir les variables d'environnement de manière plus sûre. Si vous ne voulez pas afficher certaines informations confidentielles, vous pouvez utiliser github secret pour ne pas afficher le code. Cela peut être très utile pour les identifiants de base de données ou les identifiants d'API par exemple. Pour créer des secrets, vous devez être le propriétaire du dépôt.
1- Sur GitHub.com, accédez à la page principale du dépôt.
2- Sous le nom de votre dépôt, cliquez sur Settings.
3- Bouton Repository settings (paramètres du dépôt).
4- Dans la barre latérale gauche, cliquez sur Environnements.
5- Cliquez sur l'environnement auquel vous voulez ajouter un secret.
6- Sous Secrets d'environnement, cliquez sur Ajouter un secret.
7- Tapez un nom pour votre secret dans la zone de saisie Name.
8- Saisissez la valeur de votre secret.
9- Cliquez sur Add secret.
Voici un autre exemple :
create_commit:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Push a file to our repository
run: |
pwd
ls -a
git init
git remote add origin "https://$GITHUB_ACTOR:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY.git"
git config --global user.email "my-bot@bot.com"
git config --global user.name "my-bot"
git fetch
git checkout main
git branch --set-upstream-to=origin/main
git pull
pytest >> log_pytest.txt
ls -a
git add .
git commit -m "random file from action"
git push
Dans ce code, nous voulons charger un fichier dans notre dépôt distant github. Certaines opérations comme push ou pull requièrent des informations d'identification comme votre nom d'utilisateur ou votre mot de passe.
Github a supprimé le mot de passe pour le remplacer par un jeton d'accès personnel pour une durée limitée ou pas.
Le jeton peut être appelé et utilisé comme une variable d'environnement appelée dans notre script : GITHUB_TOKEN.
Dans cette action nous avons aussi 2 variables d'environnement nommées GITHUB_ACTOR et GITHUB_REPOSITORY.
Cette action initialise un dépôt git à l'intérieur de la VM, définit les informations d'identification du compte, se connecte à votre dépôt distant, extrait le contenu puis exécute pytest et stocke les logs dans un fichier nommé log_pytest.txt.
Ensuite, nous validons ce fichier et nous le chargeons dans le dépôt.