diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 0bd1d75..af1e723 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -7,42 +7,24 @@ on: jobs: review: runs-on: ubuntu-latest - # Using an external Ollama server at 192.168.1.92:11434 - # Do NOT start a local Ollama service in the runner; the workflow will connect to the external host. + container: + image: python:3.11-bookworm steps: - name: Checkout uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.11.x' - check-latest: true - - name: Show Python run: python --version - - name: Ensure Python 3.11 present (fallback) + - name: Install system deps (git + curl) run: | - set -e - echo "Checking python version..." - if command -v python >/dev/null 2>&1; then - python --version || true - fi - if python --version 2>&1 | grep -q "Python 3.11"; then - echo "Python 3.11 already installed" - else - echo "Attempting to install python3.11 via apt" - sudo apt-get update - sudo apt-get install -y python3.11 python3.11-venv python3.11-distutils python3-pip || true - if [ -x "/usr/bin/python3.11" ]; then - sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 || true - fi - python --version || /usr/bin/python3.11 --version || true - fi + apt-get update + apt-get install -y --no-install-recommends git curl ca-certificates + git --version + curl --version - - name: Create venv and install + - name: Create venv and install project run: | python -m venv venv . venv/bin/activate @@ -51,24 +33,25 @@ jobs: - name: Wait for Ollama run: | - for i in $(seq 1 30); do - if curl -sSf http://192.168.1.92:11434/ >/dev/null 2>&1; then - echo "ollama ready" && break + for i in $(seq 1 60); do + if curl -sSf http://192.168.1.92:11434/api/tags >/dev/null 2>&1; then + echo "ollama ready" && exit 0 fi sleep 1 done - - - name: (Optional) Pull model into Ollama - run: | - . venv/bin/activate - ollama pull qwen2.5-coder:7b || true + echo "ollama not reachable" >&2 + exit 1 - name: Run ai-reviewer env: OLLAMA_HOST: http://192.168.1.92:11434 run: | . venv/bin/activate - ai-reviewer review --repo . --base "${{ github.event.pull_request.base.ref }}" --head "${{ github.head_ref }}" --format json > review.json + ai-reviewer review \ + --repo . \ + --base "${{ github.event.pull_request.base.ref }}" \ + --head "${{ github.head_ref }}" \ + --format json > review.json - name: Post PR comment with findings uses: actions/github-script@v6 @@ -76,16 +59,21 @@ jobs: script: | const fs = require('fs'); let body = '{}'; - try { - body = fs.readFileSync('review.json', 'utf8'); - } catch (e) { + try { body = fs.readFileSync('review.json', 'utf8'); } catch (e) { body = JSON.stringify({ error: 'missing-review', message: String(e) }); } let parsed = {}; - try { parsed = JSON.parse(body); } catch (e) { parsed = { error: 'invalid-json', raw: body }; } + try { parsed = JSON.parse(body); } catch (e) { + parsed = { error: 'invalid-json', raw: body }; + } const findings = parsed.findings || []; - const summary = findings.length === 0 ? 'AI Reviewer: no findings.' : `AI Reviewer found ${findings.length} findings.`; - const commentBody = `${summary}\n\n
Full JSON\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n` + '```json\n' + JSON.stringify(parsed, null, 2) + '\n```\n
'; + const summary = findings.length === 0 + ? 'AI Reviewer: no findings.' + : `AI Reviewer found ${findings.length} findings.`; + const commentBody = + `${summary}\n\n
Full JSON\n\n` + + '```json\n' + JSON.stringify(parsed, null, 2) + '\n```\n' + + '
'; await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo,