Files
chart-app/gitea-autofix-loop.sh
T
2026-07-25 20:37:28 +02:00

61 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
source .env
REPO_DIR="$HOME/codebase/chart-app" # Haupt-Klon
BASE_BRANCH="main"
TEST_CMD="./mvnw test" # z.B. ./gradlew test
MAX_ISSUES=5 # pro Durchlauf, damit du nicht davonläufst
POLL_INTERVAL=120 # Sekunden zwischen Polls (0 = einmal laufen)
cd "$REPO_DIR"
process_next() {
git -C "$REPO_DIR" fetch origin "$BASE_BRANCH" --quiet
git -C "$REPO_DIR" checkout "$BASE_BRANCH" --quiet
git -C "$REPO_DIR" pull --quiet
# 1) Nächstes Issue holen (Sub-Agent, minimaler Output)
local out
out=$(claude -p "Nutze den Sub-Agent 'next-issue'. Gib NUR dessen Rueckgabezeile aus (ISSUE=<nr> oder ISSUE=NONE), keinen weiteren Text." \
--allowedTools "Agent,mcp__gitea__list_issues,mcp__gitea__issue_read" \
--output-format text)
local nr
nr=$(echo "$out" | grep -oE 'ISSUE=[0-9NONE]+' | cut -d= -f2)
if [[ "$nr" == "NONE" || -z "$nr" ]]; then
echo "Keine offenen ai-ready Issues."
return 1
fi
echo ">>> Bearbeite Issue #$nr"
local wt="../wt-issue-$nr"
local branch="ai/issue-$nr"
# 2) Isolierter Worktree + Branch
git worktree add -b "$branch" "$wt" "$BASE_BRANCH" --quiet
# 3) Worker im Worktree ausführen (autonom)
(
cd "$wt"
claude -p "/fix-issue $nr" \
--allowedTools "Bash($TEST_CMD),Bash(git *),Edit,Read,Write,Grep,Glob,mcp__gitea__issue_read,mcp__gitea__issue_write,mcp__gitea__label_read,mcp__gitea__pull_request_write" \
--output-format text
) || echo "!!! Worker für #$nr mit Fehler beendet"
# 4) Aufräumen
git worktree remove "$wt" --force || true
return 0
}
# --- Hauptschleife ---
while true; do
count=0
while (( count < MAX_ISSUES )); do
if process_next; then ((count++)); else break; fi
done
echo "Durchlauf fertig ($count Issues)."
(( POLL_INTERVAL == 0 )) && break
sleep "$POLL_INTERVAL"
done