From 86fd045dc3d55905e29983d9c06d5f98dd6dd187 Mon Sep 17 00:00:00 2001 From: maria Date: Sun, 5 Jul 2026 15:59:06 +0000 Subject: [PATCH] Update .gitea/workflows/opencode.yml --- .gitea/workflows/opencode.yml | 56 ++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/.gitea/workflows/opencode.yml b/.gitea/workflows/opencode.yml index 1573cf8..bc5e25a 100644 --- a/.gitea/workflows/opencode.yml +++ b/.gitea/workflows/opencode.yml @@ -18,32 +18,60 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: - fetch-depth: 1 + fetch-depth: 0 # Cambiato a 0 per permettere all'AI di vedere la cronologia dei branch se serve - name: Install OpenCode CLI run: | - curl -fsSL https://opencode.ai/install | bash + curl -fsSL https://opencode.ai | bash echo "$HOME/.opencode/bin" >> $GITHUB_PATH - name: Execute OpenCode (Big Pickle) env: - # Configurazione OpenCode Zen & Modello + # OpenCode Zen Configuration OPENCODE_ZEN_API_KEY: ${{ secrets.OPENCODE_ZEN_API_KEY }} - OPENCODE_API_BASE: https://opencode.ai/zen/v1 + OPENCODE_API_BASE: https://opencode.ai OPENCODE_MODEL: opencode/big-pickle - # Autenticazione e deviazione su Gitea (Nota il percorso /api/v1 finale obbligatorio) - GITHUB_API_URL: "https://maribit.it" - GITHUB_TOKEN: ${{ secrets.BOT_GITEA_TOKEN }} + # Parametri Gitea passati in modo esplicito + GITEA_TOKEN: ${{ secrets.BOT_GITEA_TOKEN }} + GITEA_API_URL: "https://maribit.it" - # Variabili di contesto necessarie all'istanza di esecuzione - GITHUB_EVENT_PATH: ${{ github.event_path }} - GITHUB_REPOSITORY: ${{ github.repository }} + # Contesto dell'evento estratti da Gitea + ISSUE_TITLE: ${{ github.event.issue.title }} + ISSUE_BODY: ${{ github.event.issue.body }} + COMMENT_BODY: ${{ github.event.comment.body }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + REPO_FULL_NAME: ${{ github.repository }} run: | - # Configurazione Git locale per permettere all'agente di effettuare modifiche + # 1. Configurazione Git locale per permettere l'operatività sui branch git config --global user.name "OpenCode Bot" git config --global user.email "opencode-bot@maribit.it" - # Eseguiamo il comando passando il file dell'evento tramite il parametro --event - # Le altre configurazioni (token, api, modello) vengono lette da OpenCode direttamente dall'ambiente (env) - opencode github run --event "$GITHUB_EVENT_PATH" + # 2. Creiamo un branch dedicato per la risoluzione della issue + BRANCH_NAME="opencode-fix-issue-$ISSUE_NUMBER" + git checkout -b "$BRANCH_NAME" + + # 3. Puliamo il comando dal token di attivazione (/oc) per dare all'AI solo le istruzioni pulite + CLEAN_PROMPT=$(echo "$COMMENT_BODY" | sed 's|/oc||g' | sed 's|/opencode||g') + + # 4. Eseguiamo l'agente OpenCode in modalità workspace locale sul codice scaricato + # L'AI analizzerà i file locali e applicherà i fix in base alla richiesta + opencode run \ + --model "$OPENCODE_MODEL" \ + --prompt "Risolvi il seguente problema nel codice. Contesto della Issue: $ISSUE_TITLE - $ISSUE_BODY. Richiesta specifica dell'utente: $CLEAN_PROMPT" + + # 5. Se l'agente ha modificato dei file, facciamo il push e apriamo la PR su Gitea via API + if [ -n "$(git status --porcelain)" ]; then + git add . + git commit -m "Fix automatico OpenCode (Big Pickle) per issue #$ISSUE_NUMBER" + git push origin "$BRANCH_NAME" + + # Chiamata API nativa a Gitea per creare la Pull Request + curl -X 'POST' \ + "$GITEA_API_URL/repos/$REPO_FULL_NAME/pulls" \ + -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"base\":\"main\",\"head\":\"$BRANCH_NAME\",\"title\":\"PR Automatica OpenCode: Issue #$ISSUE_NUMBER\",\"body\":\"Risoluzione automatica generata dal modello big-pickle a fronte del commento: $CLEAN_PROMPT\"}" + else + echo "Nessuna modifica rilevata dall'agente OpenCode." + fi