Maîtriser les fonctionnalités avancées de GitHub : Pull Requests, revue de code, GitHub Actions (CI/CD), gestion de projet (Issues, Projects, Milestones), sécurité (Dependabot, CodeQL), et API.
Maîtriser les bases de Git et GitHub (fiches précédentes). Avoir un projet collaboratif (ou un dépôt de test).
Une Pull Request (PR) est une demande de fusion d'une branche vers une autre (généralement vers main). Elle permet la revue de code et les discussions avant l'intégration.
| Étape | Qui | Action |
|---|---|---|
| 1. Créer une branche | Développeur | git checkout -b feature-ajout-contact |
| 2. Committer et pousser | Développeur | git add . ; git commit -m 'message' ; git push -u origin feature-ajout-contact |
| 3. Ouvrir une PR | Développeur | Via l'interface GitHub : Compare & Pull Request |
| 4. Revue de code | Reviewers | Commentaires, demandes de modifications, approbations |
| 5. Mises à jour | Développeur | Ajouter des commits sur la branche (la PR se met à jour automatiquement) |
| 6. Merge | Mainteneur | Fusionner la PR dans main (merge, squash ou rebase) |
| 7. Nettoyage | Tous | Supprimer la branche distante et locale |
| Pratique | Description | Pourquoi c'est important |
|---|---|---|
| Demander des reviewers | Assigner 1-2 personnes pour la revue. | Le code est relu par un pair avant d'être intégré. |
| Utiliser les suggestions | Proposer des modifications en ligne (code suggestion). | Permet de corriger rapidement sans refaire un commit. |
| Status checks | Exiger que les tests CI passent avant le merge. | Garantit que le code ne casse pas la build. |
| Approbations obligatoires | Configurer une protection de branche : X approbations nécessaires. | Évite les merges sans revue. |
| Résoudre les conversations | Tous les commentaires doivent être résolus avant le merge. | Garantit que les retours ont été pris en compte. |
GitHub Actions permet d'automatiser des workflows (tests, build, déploiement) directement depuis votre dépôt.
# Exemple de workflow CI (fichier .github/workflows/ci.yml)
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: pytest
| Élément | Description |
|---|---|
| Workflow | Un fichier YAML dans .github/workflows/ définissant les étapes d'automatisation. |
| Event (déclencheur) | push, pull_request, schedule (cron), workflow_dispatch (manuel). |
| Job | Une unité d'exécution (ex: build, test, deploy). |
| Step | Une action individuelle dans un job (ex: checkout, setup, run). |
| Action | Un bloc réutilisable (ex: actions/checkout, actions/setup-python). |
| Runner | L'environnement d'exécution (ubuntu-latest, windows-latest, macos-latest). |
| Outil | Description | Exemple d'usage |
|---|---|---|
| Issues | Suivi des bugs, fonctionnalités, tâches. | Ouvrir une issue pour signaler un bug. |
| Labels | Catégorisation (bug, enhancement, help wanted, good first issue). | Faciliter le tri et la recherche. |
| Milestones | Groupe d'issues pour une version (ex: v1.0). | Planifier la release 1.0. |
| Projects (Kanban) | Tableau avec colonnes (To Do, In Progress, Review, Done). | Visualiser l'avancement du projet. |
| Assignees | Responsable de l'issue. | Désigner qui travaille sur la tâche. |
| Fonctionnalité | Description | Avantage |
|---|---|---|
| Dependabot | Scanne les dépendances et propose des mises à jour de sécurité. | Corrige automatiquement les vulnérabilités connues. |
| CodeQL (Code Scanning) | Analyse statique du code pour détecter les failles de sécurité. | Détecte les injections, les fuites, etc. |
| Secret Scanning | Détecte les secrets commités accidentellement (API keys, tokens). | Alerte en cas de fuite de secrets. |
| Branch protection rules | Imposer des règles (approbations, status checks, force push interdits). | Empêche les erreurs et les attaques. |
# Exemple de workflow CodeQL (sécurité)
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: github/codeql-action/init@v2
- uses: github/codeql-action/autobuild@v2
- uses: github/codeql-action/analyze@v2
| Outil | Description | Exemple |
|---|---|---|
| API REST | Interaction programmatique avec GitHub. | Lister les PR, créer une issue, commenter. |
| GraphQL API | Version plus flexible de l'API. | Requêtes personnalisées, récupérer des données spécifiques. |
| Webhooks | Envoi d'événements à un serveur externe. | Notifications Slack à chaque push, déclencher un déploiement. |
# Exemple d'appel API GitHub (lister les PR)
curl -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/username/repo/pulls
✅ Réponse : Une proposition de fusion d'une branche vers une autre, avec revue de code
✅ Réponse : GitHub Actions
✅ Réponse : Il propose des mises à jour de dépendances pour corriger les vulnérabilités
✅ Réponse : GitHub Projects
✅ Réponse : Dans un GitHub Secret