From c02c66dcd116715e7ea7557a0b539920acc24038 Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Sun, 10 May 2026 18:23:53 -0400 Subject: [PATCH] ci(ai-review): move PR-Agent jobs to ubuntu-latest The qodo-ai/pr-agent Docker action requires the GitHub event payload at /github/workflow/event.json inside the action container. On self-hosted runners that themselves run inside a Docker container (e.g. myoung34/github-runner), the host docker daemon resolves the volume mount /tmp/runner/work/_temp/_github_workflow:/github/workflow against the host filesystem, where the runner's /tmp path does not exist. The action container starts with an empty /github/workflow mount and fails with FileNotFoundError on event.json. AI review jobs do not need self-hosted runner access (no bun cache, no internal infra). Switch both dispatch-review and pr-agent jobs to ubuntu-latest so the volume mount resolves on the same host where the action expects it. --- .github/workflows/ai-review.yml | 4 ++-- tests/unit/scripts/github/ai-review-workflow.test.ts | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 40e84de8..b8125720 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -37,7 +37,7 @@ jobs: dispatch-review: name: Queue /review comment if: github.event_name == 'workflow_dispatch' - runs-on: [self-hosted, cliproxy] + runs-on: ubuntu-latest permissions: issues: write @@ -86,7 +86,7 @@ jobs: ) ) ) - runs-on: [self-hosted, cliproxy] + runs-on: ubuntu-latest timeout-minutes: 20 permissions: issues: write diff --git a/tests/unit/scripts/github/ai-review-workflow.test.ts b/tests/unit/scripts/github/ai-review-workflow.test.ts index 55d3efb3..d6787594 100644 --- a/tests/unit/scripts/github/ai-review-workflow.test.ts +++ b/tests/unit/scripts/github/ai-review-workflow.test.ts @@ -7,7 +7,7 @@ function resolvePath(relativePath: string) { } describe('PR-Agent review lane migration', () => { - test('keeps ai-review.yml as the PR-Agent workflow on the self-hosted cliproxy runner', () => { + test('keeps ai-review.yml as the PR-Agent workflow on a GitHub-hosted runner', () => { const workflowPath = resolvePath('../../../../.github/workflows/ai-review.yml'); const prAgentConfigPath = resolvePath('../../../../.pr_agent.toml'); @@ -19,7 +19,14 @@ describe('PR-Agent review lane migration', () => { const appTokenUsages = workflow.match(/uses: actions\/create-github-app-token@v1/g) ?? []; expect(workflow).toContain('name: AI Code Review'); - expect(workflow).toContain('runs-on: [self-hosted, cliproxy]'); + // AI review jobs run on GitHub-hosted runners. Self-hosted runners that + // run inside a Docker container (myoung34/github-runner) cannot host + // qodo-ai/pr-agent because the action's docker run command uses a volume + // mount path (/tmp/runner/work/_temp/_github_workflow) that resolves on + // the host filesystem, not inside the runner container, leaving + // /github/workflow/event.json missing in the action. + expect(workflow).toContain('runs-on: ubuntu-latest'); + expect(workflow).not.toContain('runs-on: [self-hosted, cliproxy]'); expect(workflow).toContain('uses: qodo-ai/pr-agent'); expect(appTokenUsages).toHaveLength(2); expect(workflow).toContain('OPENAI.API_BASE');