Passa al contenuto principale

Git e pull request

Obiettivo: aprire e fondere una pull request da un flow, con il controllo umano che un merge vuole.

Prerequisiti​

  • Un token GitHub con permesso di aprire e fondere pull request sul repository di destinazione.
  • Il token in una variabile d'ambiente che il worker può leggere.

Passi​

  1. Scegli la forge del progetto con Workspace.forge. L'adapter GitHub (afe-github, forges/github) usa la REST API. none tiene tutto in locale.

  2. Nomina il token GitHub con Workspace.tokenEnv. L'adapter lo manda solo nell'header Authorization, mai in un URL, in un log, in un evento o in un errore. Punta forgeUrl all'API di GitHub Enterprise per usarne una.

  3. Aggiungi builtin:open_pr. Spinge il branch di integrazione e apre una pull request verso defaultBranch. Il titolo è afe <ticket>: <flow>, e il corpo contiene l'input del ticket e il diff stat.

  4. Metti un nodo human su ogni percorso da builtin:open_pr a builtin:merge_pr, lane comprese. La configurazione non valida altrimenti.

  5. Aggiungi builtin:merge_pr. Fonde con un merge commit. A runtime rifiuta senza una risposta umana registrata dopo open_pr: il ticket va in needs_human.

Note​

  • Con forge: none non si spinge nulla. La "PR" è un riepilogo con il diff, e merge_pr avanza in fast-forward il branch principale locale.
  • builtin:open_pr e builtin:merge_pr sono idempotenti. Un crash che riesegue il nodo riusa la stessa PR e non fonde due volte.
  • Una GitHub App è nel backlog.

Risoluzione dei problemi​

'merge_node' is reachable from 'open_node' without a human node: a merge needs a human approval in between afe validate rifiuta un flow in cui un percorso salta il nodo human, anche attraverso una lane. Aggiungi un nodo human tra builtin:open_pr e builtin:merge_pr su quel percorso.

Il ticket resta in needs_human dopo open_pr builtin:merge_pr è girato senza una risposta umana registrata dopo l'open_pr corrispondente. Rispondi alla richiesta in sospeso con Rispondere alle approvazioni: il merge procede solo dopo.

merge_pr riparte dopo un crash e non fonde due volte È atteso, non un guasto: entrambi gli Script built-in sono idempotenti. Una nuova esecuzione trova la PR o il merge già fatti, e riporta lo stesso esito.

Vedi anche​