# Gadfly with named ENDPOINT ALIASES — review with several backends at once, # each posting its own comment. Copy to .gitea/workflows/adversarial-review.yml. # # GADFLY_ENDPOINT_="|[|]" registers a provider you # can then reference as "/" (NAME lowercases: BIGBOX -> bigbox). # The base URL is used verbatim, so plaintext http LAN endpoints work. # # provider is ollama / foreman / openai / anthropic / google. "foreman" targets a # foreman queue daemon (https://gitea.stevedudenhoeffer.com/steve/foreman) — native # Ollama on the wire, so just give it the daemon's URL (and optional bearer token). # # Gitea note: vars/secrets aren't auto-exposed as env, so map each alias here. # Suggested repo vars (and a secret when the value carries a token): # GADFLY_ENDPOINT_BIGBOX = ollama|http://192.168.1.50:11434 # GADFLY_ENDPOINT_GPU = openai|http://gpu.lan:8000/v1 # GADFLY_ENDPOINT_M1 = foreman|http://foreman-m1:8080| (use a secret) name: Adversarial Review (Gadfly) on: pull_request: types: [opened, reopened, ready_for_review] issue_comment: types: [created] workflow_dispatch: inputs: pr_number: { description: "PR number to review", required: true } permissions: contents: read issues: write pull-requests: write concurrency: group: gadfly-${{ github.event.issue.number || github.event.pull_request.number || github.event.inputs.pr_number }} cancel-in-progress: true jobs: review: # Security: only trusted users may trigger a secret-bearing run via a PR # comment (pull_request + workflow_dispatch are already trusted). Replace the # username(s) below with your maintainers — keep them in sync with # GADFLY_ALLOWED_USERS (the in-container belt-and-suspenders check). if: >- github.event_name != 'issue_comment' || github.actor == 'your-username' runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: docker://gitea.stevedudenhoeffer.com/steve/gadfly:latest env: GITEA_API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} # --- named endpoints (mapped from repo vars) --- GADFLY_ENDPOINT_BIGBOX: ${{ vars.GADFLY_ENDPOINT_BIGBOX }} # "ollama|http://192.168.1.50:11434" GADFLY_ENDPOINT_GPU: ${{ vars.GADFLY_ENDPOINT_GPU }} # "openai|http://gpu.lan:8000/v1" GADFLY_ENDPOINT_M1: ${{ secrets.GADFLY_ENDPOINT_M1 }} # "foreman|http://foreman-m1:8080|" # one reviewer (one comment) per model, across the aliased endpoints: GADFLY_MODELS: "bigbox/qwen2.5-coder:7b,gpu/llama3.1,m1/qwen3:14b" # --- event context (leave as-is) --- EVENT_NAME: ${{ github.event_name }} PR: ${{ github.event.pull_request.number || github.event.issue.number || github.event.inputs.pr_number }} PR_BRANCH: ${{ github.head_ref }} IS_DRAFT: ${{ github.event.pull_request.draft }} COMMENT_BODY: ${{ github.event.comment.body }} COMMENT_ID: ${{ github.event.comment.id }} ACTOR: ${{ github.actor }}