107 lines
3.9 KiB
YAML
107 lines
3.9 KiB
YAML
# .gitea/workflows/ai-solve-issue.yml
|
||
name: AI Issue Solver
|
||
|
||
on:
|
||
# Ручной запуск
|
||
workflow_dispatch:
|
||
inputs:
|
||
issue_number:
|
||
description: 'Issue number to solve'
|
||
required: true
|
||
type: number
|
||
|
||
# Автоматический запуск по метке
|
||
issues:
|
||
types: [labeled]
|
||
|
||
jobs:
|
||
solve:
|
||
# Запускать при ручном триггере ИЛИ при добавлении метки ai-solve
|
||
if: |
|
||
(gitea.event_name == 'workflow_dispatch') ||
|
||
(gitea.event_name == 'issues' && contains(gitea.event.labels.*.name, 'ai-solve'))
|
||
|
||
runs-on: opencode
|
||
|
||
steps:
|
||
- name: Debug environment
|
||
run: |
|
||
echo "=== Debug Info ==="
|
||
echo "Gitea context:"
|
||
echo "event_name: ${{ gitea.event_name }}"
|
||
echo "repository: ${{ gitea.repository }}"
|
||
echo "repository_owner: ${{ gitea.repository_owner }}"
|
||
echo "event.issue: ${{ toJSON(gitea.event.issue) }}"
|
||
echo "event.inputs: ${{ toJSON(gitea.event.inputs) }}"
|
||
echo "event.labels: ${{ toJSON(gitea.event.labels) }}"
|
||
echo "=== End Debug ==="
|
||
|
||
- name: Setup issue data
|
||
id: setup
|
||
run: |
|
||
echo "Determining issue number based on event type..."
|
||
|
||
if [[ "${{ gitea.event_name }}" == "workflow_dispatch" ]]; then
|
||
# Ручной запуск - берем из inputs
|
||
ISSUE_NUMBER="${{ gitea.event.inputs.issue_number }}"
|
||
echo "Manual run - Issue number: $ISSUE_NUMBER"
|
||
elif [[ "${{ gitea.event_name }}" == "issues" ]]; then
|
||
# Автоматический запуск - берем из события issue
|
||
ISSUE_NUMBER="${{ gitea.event.issue.number }}"
|
||
echo "Auto run - Issue number: $ISSUE_NUMBER"
|
||
else
|
||
echo "Unknown event type: ${{ gitea.event_name }}"
|
||
exit 1
|
||
fi
|
||
|
||
echo "issue_number=$ISSUE_NUMBER" >> $GITHUB_OUTPUT
|
||
echo "event_type=${{ gitea.event_name }}" >> $GITHUB_OUTPUT
|
||
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v4
|
||
with:
|
||
token: ${{ secrets.GGITEA_TOKEN }}
|
||
|
||
- name: Solve Issue
|
||
env:
|
||
GGITEA_URL: ${{ secrets.GGITEA_URL }}
|
||
GGITEA_TOKEN: ${{ secrets.GGITEA_TOKEN }}
|
||
REPO_OWNER: ${{ gitea.repository_owner }}
|
||
REPO_NAME: ${{ gitea.repository }}
|
||
ISSUE_NUMBER: ${{ steps.setup.outputs.issue_number }}
|
||
EVENT_TYPE: ${{ steps.setup.outputs.event_type }}
|
||
run: |
|
||
echo "=== Starting AI Issue Solver ==="
|
||
echo "Event type: $EVENT_TYPE"
|
||
echo "Repository: $REPO_OWNER/$REPO_NAME"
|
||
echo "Issue number: $ISSUE_NUMBER"
|
||
|
||
# Проверяем наличие команды solve-issue
|
||
if ! command -v solve-issue >/dev/null 2>&1; then
|
||
echo "❌ ERROR: solve-issue command not found in PATH!"
|
||
echo "Current PATH: $PATH"
|
||
echo "Trying to find solve-issue..."
|
||
find / -name "solve-issue" -type f 2>/dev/null | head -5
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ solve-issue found at: $(which solve-issue)"
|
||
echo "📋 Command info:"
|
||
solve-issue --help || echo "No help available"
|
||
|
||
echo "🚀 Executing solve-issue..."
|
||
# Запускаем с таймаутом на случай зависания
|
||
timeout 600 solve-issue
|
||
|
||
EXIT_CODE=$?
|
||
if [ $EXIT_CODE -eq 0 ]; then
|
||
echo "✅ solve-issue completed successfully"
|
||
elif [ $EXIT_CODE -eq 124 ]; then
|
||
echo "⏰ solve-issue timed out after 10 minutes"
|
||
exit 1
|
||
else
|
||
echo "❌ solve-issue failed with exit code: $EXIT_CODE"
|
||
exit $EXIT_CODE
|
||
fi
|
||
|
||
echo "=== AI Issue Solver finished ===" |