Enhance triage: analisi codice, gap analysis, report MD come asset

This commit is contained in:
2026-05-30 23:50:16 +02:00
parent e50b1d8f89
commit 12df1398a2

View File

@@ -1,5 +1,5 @@
name: Triage Issue
description: Analizza una issue con opencode e la classifica come bug o richiesta.
description: Analizza una issue con opencode: classifica, riassume, gap analisi e produce report MD.
inputs:
issue-title:
@@ -87,13 +87,16 @@ runs:
BODY="$(echo "${{ inputs.issue-body }}" | head -c 10000)"
[ "${#BODY}" -ge 10000 ] && BODY+=$'\n... (troncato)'
printf -v PROMPT '%s\n\n%s\n\n%s\n\n%s\n\n%s\n\n%s\n\n%s: %s\n%s:\n%s' \
printf -v PROMPT '%s\n\n%s\n\n%s\n\n%s\n\n%s\n\n%s\n\n%s\n\n%s\n\n%s: %s\n%s:\n%s' \
"Sei un sistema di triage automatico per repository software." \
"Analizza la seguente issue e classificala con UNA delle label disponibili:" \
"Analizza il codice sorgente nel repository ed esamina la seguente issue." \
"Classifica con UNA delle label:" \
'- "bug": malfunzionamento, errore, crash, anomalia, comportamento inaspettato' \
'- "richiesta": nuova funzionalità, miglioramento, refactoring, ottimizzazione, o dubbio' \
'Rispondi ESCLUSIVAMENTE con un JSON valido su una singola riga, senza nessun altro testo:' \
'{"label":"bug","comment":"Breve analisi in italiano..."}' \
"Rispondi ESCLUSIVAMENTE con un JSON valido su una SINGOLA riga, senza nessun altro testo:" \
'{"label":"bug","comment":"**Riassunto**: ...\\n\\n**Gap analisi**: codice mancante...\\n\\n**Domande aperte**:\\n1. ...","md":"# Analisi tecnica\\n\\n## Codice coinvolto\\n..."}' \
"Il campo 'comment' deve contenere: riassunto della issue, gap analisi (cosa manca rispetto al codice), domande aperte. Usa \\n per i newline." \
"Il campo 'md' deve contenere: analisi tecnica completa in formato markdown, file/moduli coinvolti, ipotesi root cause, proposta di fix. Usa \\n per i newline." \
"Titolo" "${{ inputs.issue-title }}" \
"Corpo" "$BODY"
@@ -102,6 +105,7 @@ runs:
# Estrai la riga JSON dalla risposta (salta banner ANSI)
JSON_LINE=$(grep -E '^\{"label":"(bug|richiesta)","comment":' "$OUTFILE" | head -1)
JSON=""
if [ -n "$JSON_LINE" ]; then
JSON=$(echo "$JSON_LINE" | jq -c . 2>/dev/null)
fi
@@ -110,9 +114,11 @@ runs:
echo "WARN: Impossibile estrarre JSON valido, default a richiesta"
LABEL="richiesta"
COMMENT="Classificazione automatica non riuscita. Label impostata a richiesta per default."
MD_CONTENT=""
else
LABEL=$(echo "$JSON" | jq -r '.label // "richiesta"')
COMMENT=$(echo "$JSON" | jq -r '.comment // "Classificazione automatica."')
MD_CONTENT=$(echo "$JSON" | jq -r '.md // ""')
fi
case "$LABEL" in
@@ -145,7 +151,27 @@ runs:
echo "WARN: Label '$LABEL' non trovata nel repo. Creala manualmente o passa un token con permessi."
fi
COMMENT_JSON=$(jq -n --arg body "$COMMENT" '{body: $body}')
# Carica il file MD come asset (prima del commento per poterlo linkare)
LINK_MD=""
if [ -n "$MD_CONTENT" ] && [ "$MD_CONTENT" != "null" ]; then
MD_FILE="/tmp/triage-issue-${ISSUE_NUM}.md"
printf '%s\n' "$MD_CONTENT" > "$MD_FILE"
ASSET_RESP=$(curl -sS -X POST "$HOST/api/v1/repos/$REPO/issues/$ISSUE_NUM/assets" \
-H "Authorization: token $TOKEN" \
-H "Accept: application/json" \
-F "attachment=@${MD_FILE};filename=triage-issue-${ISSUE_NUM}.md" 2>/dev/null)
ASSET_URL=$(echo "$ASSET_RESP" | jq -r '.download_url // empty' 2>/dev/null)
if [ -n "$ASSET_URL" ] && [ "$ASSET_URL" != "null" ]; then
LINK_MD="\n\n---\n📎 **Analisi tecnica completa**: [triage-issue-${ISSUE_NUM}.md](${ASSET_URL})"
echo "Asset MD caricato: $ASSET_URL"
else
echo "WARN: Impossibile caricare il file MD come asset"
fi
fi
COMMENT_BODY="${COMMENT}${LINK_MD}"
COMMENT_JSON=$(jq -n --arg body "$COMMENT_BODY" '{body: $body}')
curl -sS -X POST "$HOST/api/v1/repos/$REPO/issues/$ISSUE_NUM/comments" \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \