diff --git a/triage-issue/action.yml b/triage-issue/action.yml index 06893e2..1c008e1 100644 --- a/triage-issue/action.yml +++ b/triage-issue/action.yml @@ -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" \