Risikoniveauer
Når mennesker og deres kodeagenter åbner hundredvis af pull requests om måneden, er der ingen, der gennemgår hver linje. Risikoniveauer lægger gennemgangen der, hvor den betyder noget. Dit repository angiver, hvilke stier der har lav, middel eller høj risiko. fremforge sætter resultatet på hver pull request som commit-statussen fremforge/risk-tier:
| Niveau | Hvad fremforge beder om |
|---|---|
low | Ikke mere. Med auto-merge ved lav risiko slået til sætter fremforge pull requesten til at blive merget, når dens checks består. |
medium | Ikke mere. Dine branch-regler gælder, som de er. |
high | En godkendelse fra en navngiven person og et adfærdsresumé i pull requestens beskrivelse. |
Risikoniveauer er slået fra som standard. En organisationsejer slår dem til, først i skyggetilstand.
Politikfilen
Tilføj .fremforge/risk.yaml til repositoriet:
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"]Sådan læser fremforge den:
- Fra base-branchen. Filen læses fra den branch, pull requesten merges ind i, aldrig fra selve pull requesten, så en pull request ikke kan sænke sit eget niveau.
- Det højeste niveau vinder. En fil får det højeste niveau blandt alle de regler, der matcher den, så
db/migrations/README.mdovenfor er high. En pull request får det højeste niveau blandt alle sine filer. - Omdøbninger tæller under begge navne. At flytte
infra/main.tftildocs/main.tfer high. - Ændringer i politikken er high. En ændring af selve
.fremforge/risk.yamler altid høj risiko.
Stier er globs. * matcher inden for én mappe, ** på tværs af mapper, ? ét tegn. En glob, der begynder med /, er forankret i roden af repositoriet. Uden det matcher globben på et hvilket som helst mappeniveau, som i .gitignore.
Én politik for hele organisationen
For at bruge én politik til alle repositories, der ikke har deres egen fil, så læg den som .fremforge/risk.yaml i ét af organisationens repositories, og angiv det repository i indstillingerne (policy_repo, nedenfor). fremforge læser den fra det repositorys default branch.
Kontrollér en politik, 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 viser alle fejl, eller med paths det niveau, hver sti får, og den regel, der satte det. Tokenet skal have policy:read.
Hvad høj risiko kræver
En pull request med høj risiko viser warning på fremforge/risk-tier, indtil den har begge dele:
- En godkendelse fra en navngiven person. En godkendende review på den aktuelle commit fra en anden end forfatteren, som kan godkende på branchen. Den tæller efter den konto, den blev givet som: en godkendelse, som din kodeagent giver på din anmodning, er din godkendelse. En systembots godkendelse tæller ikke. Et senere “request changes” fra samme person trækker den tilbage.
- Et adfærdsresumé. Et afsnit i pull requestens beskrivelse med overskriften
## Behaviour(ellerBehavior,Behaviour change,Behaviour summary) med mindst én sætning om, hvad der ændrer sig for brugere eller systemer. Det er det, en reviewer, eller enhver, der senere læser historikken, ser, når ingen læser diffen linje for linje.
Bruger din organisation AI-gennemgang med sin egen udbydernøgle, kan du lade en afsluttet AI-gennemgang af commit’en tælle som resuméet: slå Lad AI-gennemgang tælle som adfærdsresumé til i indstillingerne (ai_review_summary). Den er slået fra som standard. Risikoniveauer sender aldrig selv kode nogen steder hen.
Fritagelsen for organisationsejere. Hvor en branch-regel ikke håndhæver beskyttelse over for organisationsejere, kræver en organisationsejers egen pull request ingen godkendelse, og det gælder også de pull requests, deres kodeagent åbner for dem. Risikoniveauer følger samme regel og siger det: statussen lyder “approval waived (org owner …)”. På en branch helt uden beskyttelsesregel kræver Forgejo ingen godkendelse af nogen, så en ejers egen pull request er også fritaget der, og statussen lyder “approval waived (no branch rule)”; et medlems pull request kræver stadig en godkendelse. Adfærdsresuméet er altid påkrævet. Vil du have ejernes ændringer med høj risiko godkendt af en anden person, så sæt flueben ved Enforce protection on org owners på branch-reglen.
Statussen venter aldrig
fremforge/risk-tier er aldrig pending. Den er success eller warning, og hvert udfald er endeligt, når det sættes:
- Ingen politikfil:
success, “No risk policy”. - En politik, der ikke kan fortolkes:
success, med besked om, at politikken er ugyldig. Intet bliver auto-merget. - Alt, som fremforge ikke kan læse i tide (20 sekunder):
success, med besked om, at niveauet ikke er tilgængeligt og fejler åbent. Intet bliver auto-merget.
fremforge sætter statussen inden for få sekunder, efter at en pull request er åbnet, har fået et push, er redigeret, har fået en label eller er blevet gennemgået. Et job hvert 5. minut sætter enhver status, der mangler, og ser igen på pull requests med høj risiko, der stadig venter.
På merge-køens grupper sætter fremforge niveauet for gruppens samlede ændring som success, til orientering. Godkendelser kontrolleres på hver pull request.
fremforge tilføjer ikke fremforge/risk-tier til dine branch-regler. I dag vises den, men er ikke påkrævet.
Auto-merge ved lav risiko
Med tilstanden on og auto_merge_low: true sætter fremforge auto-merge på en pull request, der positivt er lav risiko. Forgejo merger den derefter, når alle påkrævede checks består, og branch-reglens godkendelser er opfyldt. At sætte auto-merge springer aldrig et check eller en godkendelse over.
fremforge sætter ikke auto-merge på:
- noget, der ikke er low, eller en pull request, den ikke kunne bestemme niveauet for;
- en kladde eller en titel, der begynder med
WIP; - en pull request med labelen
risk-tier/no-auto-mergeellerdo-not-merge; - en pull request, hvor en person har slået auto-merge fra, indtil den får et nyt push;
- Renovate-pull requests, som følger dine indstillinger for auto-merge af afhængighedsopdateringer.
Hæver et push niveauet for en pull request, som fremforge har sat til auto-merge, annullerer fremforge det. Den annullerer aldrig en auto-merge, som en person har sat.
I konsollen
Organisationens ejere finder risikoniveauer under Byg og udrul → Active work (https://frem.sh/<org>/_admin/active-work):
- Kortet Risikoniveauer sætter tilstanden, auto-merge ved lav risiko, og om AI-gennemgang tæller som resuméet. Organisationens politik-repository sættes via API’et.
- Hver pull request på siden viser sit niveau som et mærke. Åbn det for at se hvorfor: den fil og regel, der satte niveauet, hvor mange filer der er ændret, og ved høj risiko hvem der godkendte, eller hvilken fritagelse der gælder, og hvor adfærdsresuméet kom fra. Siden viser, hvad fremforge sidst satte for pull requesten, så en pull request vises her, når dens niveau er blevet sat.
Skygge, til og fra
| Tilstand | Hvad der sker |
|---|---|
off | Intet. Standarden. |
shadow | Statussen sættes. fremforge registrerer, hvilke pull requests den ville auto-merge, i revisionsloggen som risk_tier.would_arm, og sætter intet til auto-merge. |
on | Statussen sættes, og med auto_merge_low sættes pull requests med lav risiko til auto-merge. |
Begynd i skyggetilstand i en uge, og læs statusserne og would_arm-hændelserne, før du slår auto-merge til.
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 | Bemærkninger |
|---|---|
mode | off, shadow eller on. Påkrævet. |
auto_merge_low | true for at sætte pull requests med lav risiko til auto-merge. Læses kun i tilstanden on. Uændret, hvis det udelades. |
ai_review_summary | true for at lade en afsluttet AI-gennemgang tælle som adfærdsresumé for en pull request med høj risiko. Slået fra som standard. Uændret, hvis det udelades. |
policy_repo | Et af organisationens repositories, hvis .fremforge/risk.yaml gælder, hvor et repository ikke har sin egen. null rydder det. Uændret, hvis det udelades. |
Tokenet skal have policy:write; GET på samme sti kræver policy:read. Hver ændring revideres som risk_tier.settings_updated.
Hvorfor en pull request har sit niveau
curl https://frem.sh/_app/api/v1/orgs/<org>/repos/<repo>/pulls/<number>/risk-tier \
-H "Authorization: Bearer $FREMFORGE_TOKEN"Svaret giver tier, den fil og regel, der satte det (decided_by), hvad en pull request med høj risiko stadig needs, hvem der godkendte den, eller hvilken waiver der gælder, hvor adfærdsresuméet kom fra, og om den ville blive auto-merget. Det virker også, mens tilstanden er off, så du kan teste en politik på rigtige pull requests, før du slår den til. Tokenet skal have findings:read eller læseadgang til repositoriet. Kodeagenter får det samme svar fra MCP-værktøjet get_pull_request_risk_tier.