release-cherry-pick

Par nvidia · skills

Sélectionne les PRs fusionnées étiquetées pour une branche de release dans cette branche, puis ouvre une PR et applique le label cherry-pick-done. À utiliser quand on te demande de « cherry-picker des PRs pour release/X.Y.Z », « picker des PRs vers la branche de release » ou « cherry-picker des PRs labellisées ».

npx skills add https://github.com/nvidia/skills --skill release-cherry-pick

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

Skills similaires