Guider

Git og GitHub i sandkassen

Hva agenten kan gjøre med git og gh i cplt, og hva du må gjøre selv.

brew update
brew upgrade navikt/tap/nav-pilot navikt/tap/cplt
copilot update    # Copilot CLI
opencode upgrade  # hvis du bruker opencode

Før første økt

SSH-nøklene dine er stengt i sandkassen, så git må bruke HTTPS med tokenet fra gh. Kjør dette i terminalen, utenfor cplt:

gh auth login
gh auth setup-git
git remote -v          # skal vise https://github.com/...

Viser git remote -v git@github.com:, se Permission denied (publickey).

Push og pull request

Agenten kan committe, lage brancher, hente, rebase og pushe egne brancher. Push som vanlig:

git push -u origin min-branch
gh pr create --head min-branch

Uten terminal pusher ikke gh pr create for deg, så push først.

På Linux virker -u med en gang. På macOS er .git/config skrivebeskyttet i sandkassen, så cplt pusher uten -u og setter upstream for branchen når økta er ferdig. Til da oppgir du branchen når du pusher: git push origin HEAD:min-branch.

Har agenten klonet et repo inne i prosjektmappa, legg det til med cplt link før økta starter. Ellers setter ikke cplt upstream der.

Når virker det ikke? Kan ikke cplt sette upstream, skriver den kommandoen du kjører selv utenfor cplt: git branch -u origin/min-branch min-branch. Den står i meldingen når økta slutter, eller når du pusher i en stille økt. Det skjer når

  • du kjørte cplt exec, som er stille som standard, eller startet med --quiet
  • du startet med --no-audit eller --no-scratch-dir
  • en prosess fra økta fortsatt kjørte da den sluttet
  • du pushet med andre flagg eller en refspec som HEAD:min-branch, ikke bare git push -u <remote> <branch> eller git push -u <remote> HEAD
  • branchen eller remoten ikke finnes lenger
  • git-vakta ville stoppet pushen, for eksempel til default branch (se Det cplt stopper)

Med sikkerhetsnivået permissive eller full-trust er git-vakta av, og cplt rører ikke pushen. Da pusher git, melder feil på .git/config og sier likevel at upstream er satt. Det stemmer ikke. Kjør git branch -u selv utenfor cplt.

git branch -u og --set-upstream-to inne i økta blir heller ikke lagret på macOS.

Det cplt stopper

To vakter står på som standard:

  • Git-vakta stopper push til default branch og force push. main og master er alltid beskyttet. Med sikkerhetsnivået strict stopper den all push.
  • gh-vakta lar agenten jobbe mot repoet den startet i, og stopper gh pr merge.

Du merger selv. Hvilke nivåer som finnes, står i Sandkassen.

Andre repoer

Skal agenten jobbe i et repo til, legg det til. cplt finner utsjekkingen på maskinen og sjekker at origin er det repoet du ba om:

cplt link navikt/annet-repo

Repoet får samme tilgang som prosjektmappa: lese, skrive og kjøre.

Kjør dette utenfor cplt

På macOS er .git/config og .git/hooks skrivebeskyttet, fordi de kan få git til å kjøre kode utenfor sandkassen. Det samme gjelder .git/remotes og .git/branches, som kan peke git mot en annen remote. Disse må du kjøre selv, i en vanlig terminal:

  • git config og git config --global
  • git remote add og git remote set-url
  • git branch -u, når cplt ikke satte upstream selv (se Push og pull request)
  • git clone, git init og git submodule add
  • å lage eller endre git-hooks

Feilmeldingene står under Git og GitHub i Feil i sandkassen.

Push fra OpenCode

Gjelder macOS. gh auth login legger tokenet i nøkkelringen. Copilot når den, OpenCode gjør ikke, så git push fra OpenCode får ikke noe token. cplt fjerner også GH_TOKEN fra miljøet til OpenCode. Send det inn:

cplt config set sandbox.pass_env GH_TOKEN
export GH_TOKEN=$(gh auth token)   # i skallet du starter nav-pilot fra

Da ligger tokenet ditt i miljøet til agenten, og den kan bruke det mot GitHub uten å gå via gh-vakta.

Signerte commits

~/.gnupg og ~/.ssh er stengt, så cplt slår av signering i sandkassen. Commitene til agenten blir usignerte. Krever branchbeskyttelsen signerte commits, kan du slippe agenten til GPG-agenten din:

cplt config set sandbox.allow_gpg_signing true --force

Den private nøkkelen er fortsatt stengt, men agenten kan be GPG-agenten signere hva som helst mens økten varer. Signering med SSH-nøkkel (gpg.format=ssh) virker ikke.

Start GPG-agenten før økten. Sandkassen stenger skriving til ~/.gnupg, så gpg får trolig ikke startet agenten selv. Kjør dette utenfor cplt:

gpgconf --launch gpg-agent

GPG-signering stilles inn i cplt, ikke i nav-pilot. nav-pilot sender ikke flagg som --allow-gpg-signing videre til cplt. Sett dem i cplt-konfigurasjonen som vist over. Git over SSH er stengt som standard, så bruk HTTPS.