Repository di test per l'integrazione tra Gitea Actions e agenti AI OpenCode. Automazione agentica su eventi di issue, PR, commenti e dispatch manuale.
Gitea Actions · OpenCode · AI Agentsopencode.yml per filo e per segnoIl cuore del repository. Ecco ogni passo del workflow, nell'ordine esatto in cui viene eseguito.
Controlla che l'autore dell'evento sia nella whitelist (maria, nicola). Le esecuzioni manuali (workflow_dispatch) saltano questo controllo. Se l'utente non รจ autorizzato, il job viene interrotto con errore.
Aggiunge una reazione "eyes" all'issue o al commento che ha triggerato il workflow. Le reazioni non generano eventi issue_comment, quindi non c'รจ rischio di auto-trigger o loop infiniti.
Clona il repository con fetch-depth: 0 (storia completa) tramite actions/checkout@v4.
Scarica e installa la CLI di OpenCode via curl -fsSL https://opencode.ai/install | bash. Aggiunge $HOME/.opencode/bin al PATH.
Crea un agente reviewer con permessi di sola lettura: puรฒ solo leggere file ed eseguire comandi (build, lint, test). Non puรฒ mai modificare il codice. Il file viene escluso dal tracker tramite .git/info/exclude.
Analizza il tipo di evento:
opencode-issue-<N> a partire da main.opencode-manual-<run_number>.Genera anche una plan_key univoca per salvare il file di piano.
Se si tratta di una Pull Request, scarica il diff della PR e i commenti recenti per fornire contesto completo all'agente AI.
Rimuove i marcatori /oc e /opencode dal corpo del messaggio, lasciando solo le istruzioni utente da passare all'agente.
Eseguita solo per issue (non PR). L'agente plan analizza il codebase e la richiesta, poi produce un piano di lavoro in Markdown con struttura standard (Obiettivo, Task, Acceptance Criteria, Verifica). Il piano viene salvato in issue_plans/ e committato.
Il cuore dell'automazione: un loop che alterna Build (implementazione) e Review (verifica), fino a $MAX_ITERATIONS (4).
build implementa il piano, modificando i file necessari.reviewer (read-only) verifica se ogni Acceptance Criterion รจ soddisfatto e produce un VERDICT: PASS (loop termina) o FAIL (loop continua col feedback).Se dopo 4 iterazioni il PASS non รจ raggiunto, le modifiche parziali vengono comunque pushate per revisione umana.
Commatta e pusha le modifiche sul branch di lavoro. Se si lavora su un'issue (non PR), apre automaticamente una Pull Request verso main. Se la PR esiste giร , ne recupera il numero.
Se esiste una PR, posta la review finale dell'agente usando l'API di Gitea. Se il verdetto รจ PASS, la review รจ di tipo APPROVE; altrimenti REQUEST_CHANGES. Se Gitea rifiuta (self-review del bot), ripiega su COMMENT.
Se il workflow termina con success(), aggiunge una reazione ๐ all'elemento trigger. In caso di failure(), aggiunge ๐ (confused).
flowchart LR
A[Evento Trigger] --> B{Autorizzato?}
B -- No --> X[โ Interrompi]
B -- Sรฌ --> C[๐ Reazione eyes]
C --> D[๐ฆ Checkout]
D --> E[โฌ๏ธ Installa OpenCode]
E --> F[๐ง Configura reviewer]
F --> G{Contesto?}
G -- PR --> H1[Fetch & checkout PR]
G -- Issue --> H2[Branch opencode-issue-N]
G -- Manuale --> H3[Branch opencode-manual-RUN]
H1 & H2 & H3 --> I[๐ Raccogli contesto]
I --> J[๐งน Pulisci comando]
J --> K{ร issue?}
K -- Sรฌ --> L[๐ Fase Plan]
L --> M
K -- No --> M[๐ Build & Review loop]
M --> N{VERDICT PASS?}
N -- Sรฌ --> O[โ
Push & PR]
N -- No --> P{Iterazioni < MAX?}
P -- Sรฌ --> M
P -- No --> O
O --> Q[๐ฌ Posta review]
Q --> R[๐ Reazione finale]
sequenceDiagram
participant U as Utente
participant G as Gitea
participant R as Gitea Runner
participant O as OpenCode CLI
participant A as Agenti AI
U->>G: Apre issue/commenta con /oc
G->>R: Triggera workflow
R->>R: Verifica autorizzazione
R->>G: ๐ Reazione eyes
R->>R: Checkout & installa CLI
R->>O: opencode run --agent plan
O->>A: Analisi codebase
A-->>O: Piano Markdown
O-->>R: Piano salvato
loop Build & Review (max 4)
R->>O: opencode run --agent build
O->>A: Implementa piano
A-->>O: Modifiche ai file
O-->>R: Codice modificato
R->>O: opencode run --agent reviewer
O->>A: Verifica criteri
A-->>O: VERDICT PASS/FAIL
O-->>R: Risultato review
alt PASS
R->>R: Esce dal loop
else FAIL
R->>R: Continua iterazione
end
end
R->>G: Push modifiche & PR
R->>G: ๐ Reazione finale
flowchart TD
START([๐ Inizio loop]) --> BUILD[๐ท Fase BUILD
Agente implementa il piano]
BUILD --> REVIEW[๐ Fase REVIEW
Agente verifica criteri]
REVIEW --> DECIDE{VERDICT?}
DECIDE -- PASS โ
--> EXIT([๐ Esci dal loop
โ
Successo])
DECIDE -- FAIL โ --> CHECK{Iterazioni < MAX?}
CHECK -- Sรฌ --> FEEDBACK[๐ฌ Feedback: criteri insoddisfatti]
FEEDBACK --> BUILD
CHECK -- No --> MAXOUT([โ ๏ธ Raggiunto tetto MAX
Pusha modifiche parziali])