diff --git a/.gitea/workflows/claude.yml b/.gitea/workflows/claude.yml index b710b35..9ee9ec6 100644 --- a/.gitea/workflows/claude.yml +++ b/.gitea/workflows/claude.yml @@ -22,20 +22,7 @@ jobs: env: GIT_TOKEN: ${{ secrets.GIT_TOKEN }} run: | - set -x - # Only set ANTHROPIC_API_KEY if the secret is configured - if [ -n "${{ secrets.ANTHROPIC_API_KEY }}" ]; then - export ANTHROPIC_API_KEY="${{ secrets.ANTHROPIC_API_KEY }}" - fi - - # Debug info - echo "Running as: $(whoami)" - echo "Home: $HOME" - echo "Claude version: $(claude --version 2>&1)" - echo "Working dir: $(pwd)" - ls -la - - # Configure git + # Configure git for Claude to use git config user.name "Claude Bot" git config user.email "claude@localhost" git remote set-url origin "http://admin:${GIT_TOKEN}@localhost:3000/${{ github.repository }}.git" @@ -49,9 +36,6 @@ jobs: ISSUE_BODY=$(curl -s "http://localhost:3000/api/v1/repos/${REPO}/issues/${ISSUE_NUMBER}" \ -H "Authorization: token ${GIT_TOKEN}" | python3 -c "import sys,json; print(json.load(sys.stdin).get('body',''))") - echo "Issue: #${ISSUE_NUMBER} - ${ISSUE_TITLE}" - echo "Body: ${ISSUE_BODY}" - # Get comment body if triggered by comment COMMENT_BODY="" if [ "${{ github.event_name }}" = "issue_comment" ]; then @@ -70,69 +54,27 @@ jobs: -H "Content-Type: application/json" \ -d "{\"body\": \"Claude is working on this issue...\"}" - # Run Claude Code - CLAUDE_OUTPUT=$(claude -p "You are working on the repository ${REPO}. + # Run Claude Code - it handles everything: code changes, commits, push, and PR creation + claude -p "You are working on the repository ${REPO} (Gitea instance at http://localhost:3000). A Gitea issue needs your attention: Issue #${ISSUE_NUMBER}: ${ISSUE_TITLE} Description: ${ISSUE_BODY} - - Additional context from comment: ${COMMENT_BODY} + Additional context: ${COMMENT_BODY} Instructions: - 1. Read and understand the codebase structure - 2. Implement the requested changes carefully - 3. Make sure the code is correct and complete - 4. Commit all changes with a descriptive commit message + 1. Read and understand the codebase + 2. Implement the requested changes + 3. Commit your changes with a descriptive message + 4. Push branch ${BRANCH} to origin + 5. Create a pull request targeting main that references issue #${ISSUE_NUMBER} + 6. Comment on issue #${ISSUE_NUMBER} with a link to the PR - You are on branch ${BRANCH}. Work in the current directory." \ + Git is configured. You are on branch ${BRANCH}. Work in the current directory. + Use git commands to push, and curl to the Gitea API for PR creation. + Gitea API token is available as env var GIT_TOKEN." \ --allowedTools "Bash,Read,Edit,Write,Glob,Grep" \ --mcp-config /home/claude-runner/.claude/mcp-gitea.json \ --max-turns 50 \ --permission-mode bypassPermissions \ - --output-format text 2>&1) || true - - echo "=== CLAUDE OUTPUT START ===" - echo "${CLAUDE_OUTPUT}" - echo "=== CLAUDE OUTPUT END ===" - - # Also save to a persistent location for debugging - echo "${CLAUDE_OUTPUT}" > /home/claude-runner/last-claude-output.txt - - # Stage any remaining unstaged changes - git add -A - - echo "=== GIT STATUS ===" - git status - echo "=== GIT DIFF ===" - git diff --cached --stat - - # Check if there are changes - if ! git diff --cached --quiet 2>/dev/null; then - git commit -m "Claude: Address issue #${ISSUE_NUMBER} - ${ISSUE_TITLE}" - git push origin "${BRANCH}" - - # Create PR - PR_RESPONSE=$(curl -s -X POST "http://localhost:3000/api/v1/repos/${REPO}/pulls" \ - -H "Authorization: token ${GIT_TOKEN}" \ - -H "Content-Type: application/json" \ - -d "{ - \"title\": \"Claude: Fix #${ISSUE_NUMBER} - ${ISSUE_TITLE}\", - \"body\": \"Automated PR by Claude Code for issue #${ISSUE_NUMBER}\n\nCloses #${ISSUE_NUMBER}\", - \"head\": \"${BRANCH}\", - \"base\": \"main\" - }") - - PR_URL=$(echo "${PR_RESPONSE}" | python3 -c "import sys,json; print(json.load(sys.stdin).get('html_url',''))" 2>/dev/null || echo "unknown") - - curl -s -X POST "http://localhost:3000/api/v1/repos/${REPO}/issues/${ISSUE_NUMBER}/comments" \ - -H "Authorization: token ${GIT_TOKEN}" \ - -H "Content-Type: application/json" \ - -d "{\"body\": \"Claude has created a pull request: ${PR_URL}\"}" - else - echo "No changes detected by Claude" - curl -s -X POST "http://localhost:3000/api/v1/repos/${REPO}/issues/${ISSUE_NUMBER}/comments" \ - -H "Authorization: token ${GIT_TOKEN}" \ - -H "Content-Type: application/json" \ - -d "{\"body\": \"Claude reviewed the issue but made no code changes.\"}" - fi + --output-format text 2>&1 | tee /home/claude-runner/last-claude-output.txt