Skip to content

Publish Alpha CLI tarball and public Node test CI #25

Publish Alpha CLI tarball and public Node test CI

Publish Alpha CLI tarball and public Node test CI #25

Workflow file for this run

# OpenCodeReview PR auto-review — self-contained workflow for PUBLIC repos.
# GitHub only lets public caller repos invoke PUBLIC reusable workflows, so
# simulator-broker / agent-skills cannot call the private
# fiveonecode/workflows reusable. This file inlines the proven job body from
# that reusable (mirroring fiveonecode/ChattyFit) so these public repos still
# get OCR. LLM endpoint/key/model come from this repo's own OCR_LLM_*
# secrets/variables (repo-level, set on 2026-08-14).
name: OpenCodeReview PR Review
concurrency:
group: >-
${{
(
github.event_name == 'pull_request_target'
|| (
github.event_name == 'issue_comment'
&& github.event.issue.pull_request
&& github.event.comment.user.type != 'Bot'
&& (
github.event.comment.author_association == 'MEMBER'
|| github.event.comment.author_association == 'OWNER'
|| github.event.comment.author_association == 'COLLABORATOR'
)
&& (
startsWith(github.event.comment.body, '/open-code-review')
|| startsWith(github.event.comment.body, '@open-code-review')
)
)
)
&& format('ocr-{0}', github.event.pull_request.number || github.event.issue.number)
|| format('noop-{0}', github.run_id)
}}
cancel-in-progress: true
on:
pull_request_target:
types: [opened, synchronize, reopened]
issue_comment:
types: [created]
permissions:
contents: read
pull-requests: write
jobs:
code-review:
if: |
github.event_name == 'pull_request_target'
|| (
github.event_name == 'issue_comment'
&& github.event.issue.pull_request
&& github.event.comment.user.type != 'Bot'
&& (
github.event.comment.author_association == 'MEMBER'
|| github.event.comment.author_association == 'OWNER'
|| github.event.comment.author_association == 'COLLABORATOR'
)
&& (
startsWith(github.event.comment.body, '/open-code-review')
|| startsWith(github.event.comment.body, '@open-code-review')
)
)
# Self-hosted; the org runner group is granted access to this public repo and
# forking is restricted so untrusted forks cannot schedule workflow runs here.
runs-on: self-hosted
timeout-minutes: 240
steps:
- name: Get PR context
id: pr-context
uses: actions/github-script@v7
with:
script: |
let baseRef, headSha, title, prNumber;
if (context.eventName === 'issue_comment') {
prNumber = context.issue.number;
const { data: pr } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
baseRef = pr.base.ref;
headSha = pr.head.sha;
title = pr.title;
} else {
prNumber = context.payload.pull_request.number;
baseRef = context.payload.pull_request.base.ref;
headSha = context.payload.pull_request.head.sha;
title = context.payload.pull_request.title;
}
core.setOutput('pr_number', String(prNumber));
core.setOutput('base_ref', baseRef);
core.setOutput('head_sha', headSha);
core.setOutput('title', title);
- name: Checkout base (trusted)
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch PR head
env:
PR_NUM: ${{ steps.pr-context.outputs.pr_number }}
HEAD_SHA: ${{ steps.pr-context.outputs.head_sha }}
run: |
git fetch origin "pull/${PR_NUM}/head"
echo "HEAD_SHA=$HEAD_SHA" >> "$GITHUB_ENV"
- name: Compute merge-base
env:
HEAD_SHA: ${{ steps.pr-context.outputs.head_sha }}
run: |
git fetch origin "${{ steps.pr-context.outputs.base_ref }}" 2>/dev/null || true
MERGE_BASE=$(git merge-base "origin/${{ steps.pr-context.outputs.base_ref }}" "$HEAD_SHA" 2>/dev/null || echo "$HEAD_SHA")
echo "MERGE_BASE=$MERGE_BASE" >> "$GITHUB_ENV"
echo "Reviewing $HEAD_SHA from merge-base $MERGE_BASE"
- name: Checkout OpenCodeReview helpers
uses: actions/checkout@v4
with:
repository: alibaba/open-code-review
ref: v1.9.2
path: .ocr-upstream
sparse-checkout: |
scripts/github-actions
sparse-checkout-cone-mode: false
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install OpenCodeReview
run: |
npm install --prefix "$RUNNER_TEMP/ocr" "@alibaba-group/open-code-review@1.9.2"
echo "$RUNNER_TEMP/ocr/node_modules/.bin" >> "$GITHUB_PATH"
"$RUNNER_TEMP/ocr/node_modules/.bin/ocr" version
- name: Configure OCR
run: |
ocr config set llm.extra_body '{"enable_thinking": false}'
ocr config set language English
- name: Run OpenCodeReview
env:
OCR_LLM_URL: ${{ secrets.OCR_LLM_URL }}
OCR_LLM_TOKEN: ${{ secrets.OCR_LLM_AUTH_TOKEN }}
OCR_LLM_MODEL: ${{ vars.OCR_LLM_MODEL }}
OCR_USE_ANTHROPIC: ${{ vars.OCR_LLM_USE_ANTHROPIC }}
OCR_LLM_TIMEOUT: '1200'
OCR_BACKGROUND: ${{ steps.pr-context.outputs.title }}
run: |
set +e
ocr review \
--from "${MERGE_BASE}" \
--to "${HEAD_SHA}" \
--format json \
--concurrency 4 \
--timeout 45 \
--background "${OCR_BACKGROUND}" \
> "$RUNNER_TEMP/ocr-result.json" 2>"$RUNNER_TEMP/ocr-stderr.log"
OCR_EXIT_CODE=$?
set -e
echo "OCR_EXIT_CODE=$OCR_EXIT_CODE" >> "$GITHUB_ENV"
echo "=== OCR result (first 200 lines) ==="
head -n 200 "$RUNNER_TEMP/ocr-result.json" || true
echo "=== OCR stderr (last 200 lines) ==="
tail -n 200 "$RUNNER_TEMP/ocr-stderr.log" || true
if [ "$OCR_EXIT_CODE" != "0" ]; then
echo "ocr review exited with code ${OCR_EXIT_CODE}"
exit "$OCR_EXIT_CODE"
fi
- name: Post review comments
uses: actions/github-script@v7
env:
OCR_INCREMENTAL_OVERLAP_THRESHOLD: '0.6'
with:
script: |
const path = require('path');
const fs = require('fs');
const helper = path.resolve('.ocr-upstream/scripts/github-actions/post-review-comments.js');
if (!fs.existsSync(helper)) {
throw new Error(`Missing helper at ${helper}`);
}
const { runPostReviewComments } = require(helper);
const runnerTemp = process.env.RUNNER_TEMP || '/tmp';
await runPostReviewComments({
github,
context,
core,
fs,
resultPath: path.join(runnerTemp, 'ocr-result.json'),
stderrPath: path.join(runnerTemp, 'ocr-stderr.log'),
stickySummary: true,
incremental: true,
incrementalOverlapThreshold: parseFloat(process.env.OCR_INCREMENTAL_OVERLAP_THRESHOLD),
});