Compétence Création de Problèmes GitHub
Objectif
Aider à créer des problèmes GitHub bien structurés qui suivent la hiérarchie du projet,
les conventions et les modèles existants de .github/ISSUE_TEMPLATE/.
Hiérarchie des Problèmes
Epic (grande initiative, plusieurs fonctionnalités)
└── Feature (capacité visible pour l'utilisateur, plusieurs tâches)
└── Task (unité unique de travail)
└── Bug (défaut à corriger)
Quand utiliser chaque type
| Type | Préfixe du titre | Utiliser quand |
|---|---|---|
| Epic | epic: |
Grande initiative s'étendant sur des semaines/mois |
| Feature | feat: |
Nouvelle capacité visible pour l'utilisateur |
| Task | task: |
Unité unique de travail d'implémentation |
| Bug | fix: |
Quelque chose ne fonctionne pas / ne fonctionne pas comme prévu |
Modèles de Problèmes
Modèle Bug (correspond à .github/ISSUE_TEMPLATE/bug_report.yaml)
Format du titre: fix: <description>
## Résumé
[Une phrase sur ce qui ne fonctionne pas]
## Environnement
- Version de l'app : [ex. 1.2.3]
- Appareil : [ex. iPhone 14 Pro, iOS 17.1]
- Réseau : [WiFi / Cellulaire]
## Étapes pour reproduire
1. Aller à '...'
2. Cliquer sur '...'
3. Voir l'erreur
## Résultat réel
[Ce qui s'est réellement passé]
## Résultat attendu
[Ce que vous vous attendiez à voir]
## Régression ?
[Oui / Non / Inconnu - Cela fonctionnait-il dans une version précédente ?]
## Preuves
[Captures d'écran, enregistrements d'écran, logs, rapports de crash]
Modèle Feature (correspond à .github/ISSUE_TEMPLATE/feature_request.yaml)
Format du titre: feat: <description>
## Que souhaiteriez-vous ?
[Décrivez la fonctionnalité ou l'amélioration]
## Comment cela vous serait-il utile ?
[Quel problème cela résout-il ou qu'est-ce que cela rend plus facile ?]
## Quand utiliseriez-vous cela ?
[Décrivez une situation où vous auriez besoin de cette fonctionnalité]
## Autre chose ?
[Captures d'écran, maquettes, exemples d'autres apps]
Modèle Task
Format du titre: task: <description>
## Description
[Description claire de ce qui doit être fait]
## Contexte
[Pourquoi cette tâche est nécessaire]
## Notes d'implémentation
[Approche technique, fichiers à modifier, considérations]
## Critères d'acceptation
- [ ] Critère 1
- [ ] Critère 2
## Test
[Comment vérifier que cette tâche est complète]
Modèle Epic
Format du titre: epic: <description>
## Aperçu
[Description haut niveau de l'initiative]
## Objectifs
- [ ] Objectif 1
- [ ] Objectif 2
## Fonctionnalités
- [ ] #XXX Nom de la fonctionnalité
- [ ] #YYY Nom de la fonctionnalité
## Critères de succès
[Comment nous savons que cet epic est complet]
## Notes
[Contexte additionnel, contraintes ou considérations]
Relations
Utilisez l'API sub-issue de GitHub (PAS de texte comme "Part of #123" dans le corps) :
| Relation | Comment |
|---|---|
| Parent/Enfant | Mutation GraphQL addSubIssue |
| Associé | Related to #789 dans le corps du texte |
| Bloque | Blocks #101 dans le corps du texte |
| Bloqué par | Blocked by #102 dans le corps du texte |
Flux de travail
- Rassembler les informations : Poser des questions clarificatrices pour comprendre le problème
- Déterminer le type : Basé sur l'envergure, choisir Epic/Feature/Task/Bug
- Rechercher un parent : Chercher des Features/Epics associés et demander à l'utilisateur lequel lier
- Rédiger le problème : Utiliser le modèle approprié correspondant à
.github/ISSUE_TEMPLATE/ - Examiner avec l'utilisateur : Montrer le brouillon avant de créer
- Créer le problème : Processus à 3 étapes ci-dessous
Créer des Problèmes (processus à 3 étapes)
Étape 1 : Créer le problème
gh issue create \
--title "fix:|feat:|task:|epic: Description" \
--body "..." \
--assignee NotThatKindOfDrLiz
Étape 2 : Définir le type de problème via GraphQL
Types disponibles et leurs IDs (repo: divinevideo/divine-mobile) :
- Task:
IT_kwDODpf9Q84ByDOD - Bug:
IT_kwDODpf9Q84ByDOE - Feature:
IT_kwDODpf9Q84ByDOF
# Obtenir l'ID du nœud du problème
gh api graphql -f query='{ repository(owner: "divinevideo", name: "divine-mobile") {
issue(number: ISSUE_NUMBER) { id }
} }'
# Définir le type
gh api graphql -f query='mutation { updateIssueIssueType(input: {
issueId: "ISSUE_NODE_ID",
issueTypeId: "TYPE_ID"
}) { issue { id } } }'
Étape 3 : Définir la relation parent via GraphQL
# Obtenir l'ID du nœud du problème parent
gh api graphql -f query='{ repository(owner: "divinevideo", name: "divine-mobile") {
issue(number: PARENT_NUMBER) { id }
} }'
# Ajouter comme sub-issue
gh api graphql -f query='mutation { addSubIssue(input: {
issueId: "PARENT_NODE_ID",
subIssueId: "CHILD_NODE_ID"
}) { issue { id } subIssue { id } } }'
Rechercher des Problèmes Parents
Avant de créer une Task ou un Bug, rechercher des Features/Epics associés :
gh issue list --search "mots-clés associés" --limit 10
Bonnes pratiques
-
Utiliser le bon préfixe du titre :
fix:,feat:,task:,epic: -
Un problème, une préoccupation : Ne pas combiner plusieurs bugs ou fonctionnalités
-
Utiliser l'API sub-issue pour la hiérarchie : Ne jamais utiliser de texte "Part of #XXX", utiliser la mutation GraphQL
addSubIssue -
Inclure le contexte : Expliquer pourquoi, pas seulement quoi
-
Être spécifique : Inclure les chemins de fichiers, les messages d'erreur, les étapes pour reproduire
-
Correspondre aux modèles existants : Suivre la structure de
.github/ISSUE_TEMPLATE/
Exemple : Créer un Bug
gh issue create \
--title "fix: Les étiquettes des stats de profil se retournent incorrectement sur petit écran" \
--body "$(cat <<'EOF'
## Résumé
Les étiquettes des stats de profil ("Followers", "Following") se retournent sur plusieurs lignes, en coupant les mots en plein milieu.
## Environnement
- Version de l'app : Dernière
- Appareil : Appareils petit écran
- Réseau : N/A
## Étapes pour reproduire
1. Ouvrir l'écran de profil sur un petit appareil ou largeur étroite
2. Regarder la ligne des stats (Videos, Followers, Following)
3. Voir les étiquettes se retourner incorrectement
## Résultat réel
Les étiquettes se retournent en plein mot :
- "Followers" devient "Follower" + "s"
- "Following" devient "Followin" + "g"
## Résultat attendu
Les étiquettes devraient rester sur une seule ligne, ou être tronquées avec ellipsis si nécessaire.
## Régression ?
Inconnu
## Preuves
<!-- Capture d'écran à ajouter après la création -->
EOF
)"