diff --git a/.forgejo/workflows/agent-pr-ready-automerge.yml b/.forgejo/workflows/agent-pr-ready-automerge.yml index 42f739f..eb28312 100644 --- a/.forgejo/workflows/agent-pr-ready-automerge.yml +++ b/.forgejo/workflows/agent-pr-ready-automerge.yml @@ -1,7 +1,12 @@ -# Safety net: PRs de entrega (feature → main) devem ser Ready + auto-merge. -# Cobre o caso de um agente esquecer de armar o merge. Roda -# scripts/forgejo-pr-automerge.mjs (plain Node): marca draft → ready, espera o -# status check `checks` (branch protection em main) e mergea por rebase. +# Safety net (espelha o teqo): PRs de branch `agent/*` → main devem ser Ready + +# auto-merge. PRs humanos não passam por aqui — o merge deles é feito pelo +# agente local via `bun run pr -- --automerge` (com o PAT do usuário, que tem +# permissão de merge; o usuário sintético `forgejo-actions` do GITHUB_TOKEN não +# consegue mergear em repos de org). +# +# Roda scripts/forgejo-pr-automerge.mjs (plain Node): marca draft → ready, espera +# o contexto `checks` ficar green (ignorando o próprio status do job) e mergea +# por rebase. name: Agent PR Ready + auto-merge @@ -12,7 +17,9 @@ on: jobs: ready-automerge: - if: github.event.pull_request.state == 'open' + if: >- + github.event.pull_request.state == 'open' && + startsWith(github.event.pull_request.head.ref, 'agent/') runs-on: host timeout-minutes: 40 steps: diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index db42d7b..a4337e8 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -1,8 +1,10 @@ name: CI # PR gate + post-merge verifier + deploy: -# - PRs (feature → main) rodam `checks` (lint + build + e2e) — o branch -# protection em `main` exige o status `checks` para merge. +# - PRs (feature → main) rodam `checks` (lint + build + e2e). O merge é +# gated pelo script de auto-merge (`pr.mjs --automerge` / +# `forgejo-pr-automerge.mjs`), que espera `checks` green — sem branch +# protection server-side (espelha o teqo). # - Push em `main` (merge dos PRs) roda `checks` de novo e depois `deploy` # (rsync do dist/ para o homeserver). Deploy é gated em `checks`. # diff --git a/AGENTS.md b/AGENTS.md index 155008c..cfd6747 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -75,6 +75,11 @@ Ciclo completo (detalhes nas skills `plan-issue` / `work-issue`): - `plan-issue-ready-on-main-merge.yml` — PRs com `Related #N` promovem `blocked` → `ready` (`scripts/agent-promote-related-on-merge.mjs`). - `agent-pr-ready-automerge.yml` — marca Ready e mergea quando `checks` ficar green (safety net do auto-merge). +**Sem branch protection server-side em `main`** (espelha o teqo): o gate de merge é o +próprio script de auto-merge (`pr.mjs --automerge` / `forgejo-pr-automerge.mjs`), +que espera os status checks ficarem green antes de mergear; o deploy é gated pelo +`needs: checks` do `ci.yml`. + **e2e só no CI** — nunca rode `bun run test:e2e` local como parte do fluxo normal. ## Regras de entrega