Cherry-pick des PRs vers une branche de release
Cherry-pick tous les PRs fusionnés sur main ayant le label cherry-pick-<version> (mais pas cherry-pick-done) vers la branche release/<version> correspondante, un à un dans l'ordre de fusion.
Step 1 — Identifier la version cible
Demander à l'utilisateur la version de release (ex. 0.44.0) si elle n'est pas déjà fournie.
Définir VERSION=<version> pour utilisation dans les étapes suivantes.
Step 2 — Récupérer les PRs en attente
Utiliser l'API de recherche GitHub pour lister les PRs ayant le label cherry-pick mais pas cherry-pick-done, triés par date de fusion ascendante :
gh api "search/issues?q=repo:NVIDIA/Model-Optimizer+is:pr+is:merged+base:main+label:cherry-pick-<VERSION>+-label:cherry-pick-done&sort=updated&order=asc&per_page=50" \
--jq '.items[] | [.number, .title, .pull_request.merged_at] | @tsv' \
| sort -t$'\t' -k3
Présenter la liste à l'utilisateur avant de continuer.
Step 3 — Configurer la branche de release
Vérifier release/<VERSION>, la créer depuis la remote si elle n'existe pas localement :
git fetch origin release/<VERSION>
git checkout release/<VERSION>
Step 4 — Récupérer les SHAs des commits de fusion
Tous les PRs sont fusionnés en squash, donc chacun a un commit avec un seul parent. Récupérer le SHA pour chaque PR :
gh pr view <NUM> --repo NVIDIA/Model-Optimizer --json mergeCommit --jq '.mergeCommit.oid'
Step 5 — Cherry-pick dans l'ordre de fusion
Cherry-pick chaque commit avec -s (signature DCO). La signature GPG est gérée automatiquement par la configuration git du repository.
git cherry-pick -s <SHA>
En cas de conflit : Indiquer à l'utilisateur quel PR a causé le conflit et lui demander de le corriger, puis continuer :
git cherry-pick --continue
Step 6 — Créer un PR vers la branche de release
Pousser les cherry-picks vers une nouvelle branche et ouvrir un PR ciblant release/<VERSION>. Le titre du PR liste tous les numéros de PR cherry-pickés. Le corps utilise ## Cherry-picked PRs comme seul titre avec un bullet - #<NUM> par PR — pas de titres, pas de liens, pas de texte supplémentaire.
git checkout -B cherry-picks/release-<VERSION>
git push -u origin cherry-picks/release-<VERSION>
gh pr create \
--title "[Cherry-pick] PRs #<NUM1> #<NUM2> ..." \
--base release/<VERSION> \
--head cherry-picks/release-<VERSION> \
--body "$(cat <<'EOF'
## Cherry-picked PRs
- #<NUM1>
- #<NUM2>
...
EOF
)"
Step 7 — Appliquer le label cherry-pick-done
Ajouter le label cherry-pick-done à tous les PRs cherry-pickés avec succès :
for pr in <NUM1> <NUM2> ...; do
gh pr edit $pr --repo NVIDIA/Model-Optimizer --add-label "cherry-pick-done"
done