Enhance triage: analisi codice, gap analysis, report MD come asset
This commit is contained in:
@@ -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" \
|
||||
|
||||
Reference in New Issue
Block a user