pulumi-upgrade-provider

Par pulumi · agent-skills

Automatisez les mises à niveau des dépôts de providers Pulumi avec l'outil `upgrade-provider`. À utiliser lors de la mise à niveau d'un dépôt de provider Pulumi vers une nouvelle version upstream, lors de l'exécution d'`upgrade-provider`, et pour traiter ses modes d'échec courants tels que les conflits de patch ou les correspondances de modules manquantes.

npx skills add https://github.com/pulumi/agent-skills --skill pulumi-upgrade-provider

Fournisseur de mise à jour Pulumi

Aperçu

Exécutez upgrade-provider, corrigez les défaillances connues, et relancez jusqu'au succès. Gardez les opérations git en lecture seule dans le dépôt ; l'outil est propriétaire de l'état des branches/commits/PR.

Boucle d'exécution

  1. Créez le répertoire de sortie :
mkdir -p .pulumi
  1. Exécutez depuis la racine du dépôt :
upgrade-provider $ORG/$REPO --repo-path . > .pulumi/upgrade-provider-stdout.txt 2> /dev/null
  1. Attendez la fin (peut prendre jusqu'à 10 minutes).
  2. Vérifiez les erreurs en parcourant les lignes de .pulumi/upgrade-provider-stdout.txt commençant par error:.
  3. En cas d'échec, corrigez en utilisant references/upgrade-provider-errors.md de cette compétence (du dossier de la compétence, pas du dépôt), puis relancez. Pour les défaillances go get en amont impliquant des directives replace ignorées ou unknown revision v0.0.0, relancez avec --target-version après avoir appliqué les remplacements documentés dans provider/go.mod ; préservez l'intention majeure/non-majeure d'origine et n'ajoutez --major que pour les vraies mises à jour de version majeure.
  4. Si une correction requiert de créer/amender/supprimer/rebaser des patches, utilisez la compétence upstream-patches pour le workflow des patches.
  5. Si vous avez corrigé un conflit, signalez les modifications exactes (chemins de fichiers + changements concrets ou intention préservée).
  6. Si la mise à jour a modifié des patches, exécutez ./scripts/upstream.sh checkout et vérifiez les commits upstream appliqués :
    • Listez les SHAs/titres des commits depuis upstream.
    • Résumez l'intention de chaque commit en langage clair.
    • Signalez les changements de comportement ou les risques.
  7. En cas de succès, passez aux tâches post-exécution.

Quand arrêter et signaler un échec

Arrêtez l'itération et signalez l'échec si l'une de ces conditions est remplie :

  1. Commande non trouvée (code de sortie 127) : L'outil upgrade-provider n'est pas dans PATH.
  2. Même erreur 3 fois : Vous avez tenté de corriger la même erreur 3 fois sans succès.
  3. Modèle d'erreur inconnu : L'erreur n'est pas couverte dans references/upgrade-provider-errors.md et vous ne pouvez pas déterminer une correction sûre.
  4. Nécessite un jugement humain : La correction a besoin d'une entrée utilisateur, comme :
    • Choisir entre plusieurs approches valides
    • Changements cassants qui affectent l'API publique
    • Stratégies de dépréciation
    • Décisions architecturales sur l'organisation des modules

Lors de l'arrêt, signalez :

  1. Les erreurs rencontrées.
  2. Les corrections tentées (avec chemins de fichiers et changements).
  3. Pourquoi une intervention humaine est nécessaire.
  4. Tout progrès partiel.

Tâches post-exécution

L'outil crée une PR en cas de succès de la mise à jour.

  1. DOIT récupérer l'URL de la PR pour la branche actuelle en utilisant des commandes en lecture seule :
gh pr view --json url --jq .url || gh pr list --head "$(git branch --show-current)" --json url --jq '.[0].url'
  1. DOIT ajouter une section « Corrections appliquées pour débloquer la mise à jour » au corps existant de la PR si des corrections ont été appliquées (ne pas écraser) :
repo=$(gh repo view --json nameWithOwner --jq .nameWithOwner)
pr_number=$(gh pr view --json number --jq .number)
gh pr view --json body --jq .body > /tmp/pr_body.txt

cat <<'EOF' >> /tmp/pr_body.txt

---

### Corrections appliquées pour débloquer la mise à jour

- <listez les modifications concrètes de déblocage ici, avec chemins de fichiers et intention>
EOF

gh api -X PATCH "repos/$repo/pulls/$pr_number" --raw-field body="$(cat /tmp/pr_body.txt)"

Utilisez REST (gh api) au lieu de gh pr edit pour éviter les erreurs de cartes de projet GraphQL. Gardez le contenu du corps existant ; ajouter seulement.

Notes

  • git rebase --continue --no-edit n'est pas supporté dans les anciennes versions de git. Utilisez git rebase --continue et acceptez le message de commit existant.
  • Pour éviter l'invite de l'éditeur lors de git rebase --continue, exécutez-le avec GIT_EDITOR=true (ou GIT_EDITOR=:).

Garde-fous

  • Ne commitez, ne poussez, ne créez jamais de branches manuellement ; exécutez seulement des commandes git en lecture seule.
  • ./scripts/upstream.sh checkout|rebase|check_in sont autorisés car l'outil gère l'état git.
  • Ne stashiez pas les changements ; l'outil gère l'état git.

Références

  • Utilisez references/upgrade-provider-errors.md de cette compétence (du dossier de la compétence, pas du dépôt) pour les corrections de conflit de patch, remplacement en amont ignoré, dépendance en amont vendorisée, fichier .NET dupliqué, et nouvelles corrections de mapping de module.

Skills similaires