Risikonivåer
Når personer og kodeagentene deres åpner hundrevis av pull requests i måneden, går ingen gjennom hver linje. Risikonivåer legger gjennomgangen der den betyr noe. Repositoryet ditt angir hvilke stier som har lav, middels eller høy risiko. fremforge legger inn resultatet på hver pull request som commit-statusen fremforge/risk-tier:
| Nivå | Hva fremforge krever |
|---|---|
low | Ingenting mer. Med automatisk merge for lav risiko slått på klargjør fremforge pull requesten til å merges når sjekkene består. |
medium | Ingenting mer. Branchreglene dine gjelder som de er. |
high | En godkjenning fra en navngitt person, og en beskrivelse av atferden i beskrivelsen av pull requesten. |
Risikonivåer er av som standard. En eier av organisasjonen slår dem på, først i shadow.
Policyfilen
Legg til .fremforge/risk.yaml i repositoryet:
version: 1
default: medium # the tier of a file no rule matches
rules:
- tier: high
paths: ["/infra/**", "**/migrations/**", "/.forgejo/workflows/**", "/CODEOWNERS"]
- tier: low
paths: ["/docs/**", "*.md"]Slik leser fremforge den:
- Fra målbranchen. Filen leses fra branchen pull requesten merges inn i, aldri fra selve pull requesten, så en pull request kan ikke senke sitt eget nivå.
- Det høyeste nivået vinner. En fil får det høyeste nivået blant alle reglene som matcher den, så
db/migrations/README.mdover har høy risiko. En pull request får det høyeste nivået blant alle filene sine. - Omdøpinger teller med begge navnene. Å flytte
infra/main.tftildocs/main.tfhar høy risiko. - Å endre policyen har høy risiko. En endring i selve
.fremforge/risk.yamlhar alltid høy risiko.
Stiene er glob-mønstre. * matcher innenfor én katalog, ** på tvers av kataloger, ? ett tegn. Et mønster som starter med /, er forankret i roten av repositoryet. Uten det matcher mønsteret på alle katalognivåer, som i .gitignore.
Én policy for hele organisasjonen
For å bruke én policy for hvert repository som ikke har en egen fil, legger du den som .fremforge/risk.yaml i ett repository i organisasjonen og oppgir det repositoryet i innstillingene (policy_repo, nedenfor). fremforge leser den fra standardbranchen i det repositoryet.
Sjekk en policy før du merger den
curl -X POST https://frem.sh/_app/api/v1/orgs/<org>/risk-tier/validate \
-H "Authorization: Bearer $FREMFORGE_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --rawfile s .fremforge/risk.yaml '{source: $s, paths: ["infra/main.tf", "README.md"]}')"Svaret lister hver feil, eller med paths nivået hver sti får og regelen som satte det. Tokenet trenger policy:read.
Hva høy risiko krever
En pull request med høy risiko viser warning på fremforge/risk-tier til den har begge deler:
- En godkjenning fra en navngitt person. En godkjennende gjennomgang av den gjeldende commiten fra en annen enn forfatteren, som kan godkjenne på branchen. Den teller etter kontoen den ble gitt som: en godkjenning kodeagenten din gir på din forespørsel, er din godkjenning. En godkjenning fra en systembot teller ikke. En senere «request changes» fra samme person trekker den tilbake.
- En beskrivelse av atferden. En seksjon i beskrivelsen av pull requesten med overskriften
## Behaviour(ellerBehavior,Behaviour change,Behaviour summary), med minst én setning om hva som endres for brukere eller systemer. Det er dette en godkjenner, eller hvem som helst som leser historikken senere, ser når ingen leser differen linje for linje.
Hvis organisasjonen din bruker AI-gjennomgang med sin egen leverandørnøkkel, kan du la en fullført AI-gjennomgang av commiten telle som beskrivelsen: slå på Godta AI-gjennomgang som beskrivelse av atferden i innstillingene (ai_review_summary). Den er av som standard. Risikonivåene sender aldri kode noe sted selv.
Fritaket for eiere av organisasjonen. Der en branchregel ikke håndhever beskyttelse for eiere av organisasjonen, trenger en eiers egen pull request ingen godkjenning, og det gjelder også pull requests kodeagenten deres åpner for dem. Risikonivåene følger samme regel og sier det: statusen viser «approval waived (org owner …)». På en branch uten noen beskyttelsesregel i det hele tatt krever Forgejo ingen godkjenning av noen, så en eiers egen pull request er fritatt der også, og statusen viser «approval waived (no branch rule)»; et medlems pull request trenger fortsatt en godkjenning. Beskrivelsen av atferden trengs alltid. For å få eiernes endringer med høy risiko godkjent av en annen person krysser du av for Enforce protection on org owners i branchregelen.
Statusen venter aldri
fremforge/risk-tier er aldri pending. Den er success eller warning, og hvert utfall er endelig når det legges inn:
- Ingen policyfil:
success, «No risk policy». - En policy som ikke kan tolkes:
success, med beskjed om at policyen er ugyldig. Ingenting merges automatisk. - Alt fremforge ikke kan lese i tide (20 sekunder):
success, med beskjed om at nivået ikke er tilgjengelig og åpner ved feil. Ingenting merges automatisk.
fremforge legger inn statusen innen sekunder etter at en pull request åpnes, pushes til, redigeres, får en etikett eller blir gjennomgått. En jobb hvert 5. minutt legger inn statuser som mangler, og ser på nytt på pull requests med høy risiko som fortsatt venter.
For grupper i merge-køen legger fremforge inn nivået for hele gruppens endring som success, til informasjon. Godkjenninger kontrolleres for hver pull request.
fremforge legger ikke fremforge/risk-tier til i branchreglene dine. I dag vises den, men er ikke påkrevd.
Automatisk merge for lav risiko
Med modusen on og auto_merge_low: true klargjør fremforge automatisk merge for en pull request som med sikkerhet har lav risiko. Forgejo merger den da når hver påkrevd sjekk består og godkjenningene i branchregelen er oppfylt. Klargjøringen hopper aldri over en sjekk eller en godkjenning.
fremforge klargjør ikke:
- noe som ikke har lav risiko, eller en pull request den ikke kunne gi et nivå;
- et utkast, eller en tittel som starter med
WIP; - en pull request med etiketten
risk-tier/no-auto-mergeellerdo-not-merge; - en pull request en person har tatt ut av klargjøringen, før den pushes til igjen;
- pull requests fra Renovate, som følger innstillingene for automatisk merge i avhengighetsoppdateringer.
Hvis en push hever nivået til en pull request fremforge har klargjort, avbryter fremforge sin klargjøring. Den avbryter aldri en klargjøring en person har gjort.
I konsollen
Eiere av organisasjonen finner risikonivåer under Bygg og utrulling → Active work (https://frem.sh/<org>/_admin/active-work):
- Kortet Risikonivåer setter modusen, automatisk merge for lav risiko og om AI-gjennomgang teller som beskrivelsen. Policyrepositoryet for organisasjonen settes gjennom API-et.
- Hver pull request på siden viser nivået sitt som et merke. Åpne det for å se hvorfor: filen og regelen som satte nivået, hvor mange filer som ble endret, og ved høy risiko hvem som godkjente eller hvilket fritak som gjelder, og hvor beskrivelsen av atferden kom fra. Siden viser det fremforge sist la inn for pull requesten, så en pull request dukker opp her når nivået er lagt inn.
Shadow, på og av
| Modus | Hva som skjer |
|---|---|
off | Ingenting. Standard. |
shadow | Statusen legges inn. fremforge registrerer hvilke pull requests den ville merget automatisk, i revisjonsloggen som risk_tier.would_arm, og klargjør ingenting. |
on | Statusen legges inn, og med auto_merge_low klargjøres pull requests med lav risiko. |
Start i shadow i en uke, og les statusene og would_arm-hendelsene før du slår på automatisk merge.
curl -X PUT https://frem.sh/_app/api/v1/orgs/<org>/risk-tier/settings \
-H "Authorization: Bearer $FREMFORGE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "shadow", "policy_repo": null}'| Felt | Merknader |
|---|---|
mode | off, shadow eller on. Påkrevd. |
auto_merge_low | true for å klargjøre pull requests med lav risiko. Leses bare i modusen on. Uendret hvis det utelates. |
ai_review_summary | true for å la en fullført AI-gjennomgang telle som beskrivelsen av atferden for en pull request med høy risiko. Av som standard. Uendret hvis det utelates. |
policy_repo | Et repository i organisasjonen der .fremforge/risk.yaml gjelder for repositoryer som ikke har en egen. null fjerner det. Uendret hvis det utelates. |
Tokenet trenger policy:write; GET på samme sti trenger policy:read. Hver endring revideres som risk_tier.settings_updated.
Hvorfor en pull request har sitt nivå
curl https://frem.sh/_app/api/v1/orgs/<org>/repos/<repo>/pulls/<number>/risk-tier \
-H "Authorization: Bearer $FREMFORGE_TOKEN"Svaret gir tier, filen og regelen som satte det (decided_by), hva en pull request med høy risiko fortsatt needs, hvem som godkjente den eller hvilket waiver som gjelder, hvor beskrivelsen av atferden kom fra, og om den ville blitt merget automatisk. Det virker også mens modusen er off, så du kan teste en policy på ekte pull requests før du slår den på. Tokenet trenger findings:read, eller lesetilgang til repositoryet. Kodeagenter får det samme svaret fra MCP-verktøyet get_pull_request_risk_tier.