Aller au contenu principal

Événements et déclencheurs


Table des matières

  1. Types d'événements
  2. Événements Git
  3. Événements GitHub
  4. Événements planifiés
  5. Déclenchement manuel
  6. Exercices pratiques


1 - Types d'événements

Catégories

Vue d'ensemble

CatégorieÉvénementsUsage
Gitpush, pull_requestCI/CD standard
GitHubissues, release, forkAutomation
SchedulecronTâches récurrentes
Manualworkflow_dispatchTests, déploiements
Externalrepository_dispatchIntégrations externes

🔝 Retour à la table des matières



2 - Événements Git

push

on:
push:
# Branches spécifiques
branches:
- main
- develop
- 'release/**' # Pattern glob
- '!release/beta' # Exclusion

# Tags
tags:
- 'v*' # v1.0.0, v2.0.0
- '!v*-beta' # Exclure beta

# Chemins (fichiers modifiés)
paths:
- 'src/**'
- 'package.json'
- '!**/*.md' # Exclure markdown

paths-ignore:
- 'docs/**'
- '*.md'

pull_request

on:
pull_request:
branches:
- main
- develop

types:
- opened # PR ouverte
- synchronize # Nouveaux commits
- reopened # PR réouverte
- closed # PR fermée
- ready_for_review # PR prête pour review

paths:
- 'src/**'

pull_request_target

# Pour les forks (attention : risque de sécurité)
on:
pull_request_target:
types: [opened, synchronize]

jobs:
build:
runs-on: ubuntu-latest
steps:
# Checkout du repo cible (pas du fork)
- uses: actions/checkout@v4
Sécurité

pull_request_target a accès aux secrets du repo. Ne jamais exécuter de code non vérifié du fork !

Différence PR events

EventContexteSecretsUsage
pull_requestFork❌ NonCI standard
pull_request_targetBase✅ OuiLabeling, comments

🔝 Retour à la table des matières



3 - Événements GitHub

issues

on:
issues:
types:
- opened
- edited
- deleted
- labeled
- unlabeled
- assigned
- closed

jobs:
auto-label:
if: github.event.action == 'opened'
runs-on: ubuntu-latest
steps:
- run: echo "New issue: ${{ github.event.issue.title }}"

release

on:
release:
types:
- published # Release publiée
- created # Release créée
- edited # Release modifiée
- prereleased # Pre-release

jobs:
publish:
if: github.event.action == 'published'
runs-on: ubuntu-latest
steps:
- run: echo "Publishing ${{ github.event.release.tag_name }}"

workflow_run

# Déclenché après un autre workflow
on:
workflow_run:
workflows: ["CI"] # Nom du workflow source
types:
- completed # Terminé (succès ou échec)
branches: [main]

jobs:
deploy:
# Seulement si CI réussi
if: github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
steps:
- run: echo "Deploying after successful CI"

Autres événements utiles

# Fork du repo
on: fork

# Star ajoutée
on:
watch:
types: [started]

# Discussion créée
on:
discussion:
types: [created]

# Package publié
on:
package:
types: [published]

🔝 Retour à la table des matières



4 - Événements planifiés

Syntaxe cron

on:
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6)
# │ │ │ │ │
# * * * * *
- cron: '0 0 * * *' # Tous les jours à minuit
- cron: '30 8 * * 1-5' # Lun-Ven à 8h30
- cron: '0 */6 * * *' # Toutes les 6 heures

Exemples courants

ExpressionDescription
0 0 * * *Tous les jours à minuit UTC
0 8 * * 1Tous les lundis à 8h
0 0 1 * *Premier jour du mois
*/15 * * * *Toutes les 15 minutes
0 0 * * 0Tous les dimanches

Exemple complet

name: Nightly Build

on:
schedule:
- cron: '0 2 * * *' # 2h du matin UTC

jobs:
nightly:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Run nightly tests
run: npm run test:e2e

- name: Send report
run: ./send-report.sh
Note
  • Les schedules utilisent le fuseau UTC
  • Délai possible jusqu'à 15 minutes en période de charge
  • Ne se déclenche que sur la branche par défaut

🔝 Retour à la table des matières



5 - Déclenchement manuel

workflow_dispatch

on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to deploy'
required: true
type: choice
options:
- staging
- production
default: 'staging'

version:
description: 'Version to deploy'
required: true
type: string

dry_run:
description: 'Dry run mode'
required: false
type: boolean
default: false

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy
run: |
echo "Environment: ${{ inputs.environment }}"
echo "Version: ${{ inputs.version }}"
echo "Dry run: ${{ inputs.dry_run }}"

Types d'inputs

TypeDescription
stringTexte libre
booleanCheckbox
choiceListe déroulante
environmentSélecteur d'environnement

repository_dispatch

# Déclenché par API externe
on:
repository_dispatch:
types: [deploy, build]

jobs:
handle:
runs-on: ubuntu-latest
steps:
- run: |
echo "Event: ${{ github.event.action }}"
echo "Payload: ${{ toJSON(github.event.client_payload) }}"
# Déclencher via API
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/OWNER/REPO/dispatches \
-d '{"event_type":"deploy","client_payload":{"env":"prod"}}'

🔝 Retour à la table des matières



6 - Exercices pratiques

Exercice 1 : CI sur PR

Créez un workflow qui s'exécute sur les PR vers main :

Solution
name: PR Check

on:
pull_request:
branches: [main]
types: [opened, synchronize, reopened]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm test

Exercice 2 : Déploiement manuel

Créez un workflow avec choix d'environnement :

Solution
name: Manual Deploy

on:
workflow_dispatch:
inputs:
environment:
type: choice
options: [staging, production]
required: true

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- run: echo "Deploying to ${{ inputs.environment }}"

Quiz

Q1. Quel événement permet le déclenchement par API ?

Réponse

repository_dispatch

Q2. Quel fuseau horaire utilise le schedule ?

Réponse

UTC

🔝 Retour à la table des matières



Points clés à retenir

  • push et pull_request pour CI standard
  • Filtrer par branches, tags, paths
  • schedule avec syntaxe cron (UTC)
  • workflow_dispatch pour déclenchement manuel
  • repository_dispatch pour API externe
  • workflow_run pour chaîner les workflows
  • pull_request_target : attention à la sécurité !

🔝 Retour à la table des matières


← Chapitre précédent | Chapitre suivant : Jobs et steps →