Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .github/workflows/opencode-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,8 @@ jobs:
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
PR_DRAFT: ${{ github.event.pull_request.draft }}
BASE_BRANCH: ${{ github.event.pull_request.base.ref }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_REF: ${{ github.event.pull_request.head.ref }}
WORKFLOW_SHA: ${{ github.workflow_sha }}
run: |
set -euo pipefail
Expand Down Expand Up @@ -411,8 +413,12 @@ jobs:
jq -cn \
--arg target_repository "$TARGET_REPOSITORY" \
--arg pr_number "$PR_NUMBER" \
--arg base_branch "$BASE_BRANCH" \
'{event_type:"merge-scheduler",client_payload:{target_repository:$target_repository,pr_number:$pr_number,base_branch:$base_branch,max_prs:"1",review_dispatch_limit:"1",trigger_reviews:true,enable_auto_merge:false,update_branches:false,dry_run:false}}' |
--arg pr_base_ref "$BASE_BRANCH" \
--arg pr_base_sha "$BASE_SHA" \
--arg pr_head_ref "$HEAD_REF" \
--arg pr_head_sha "$HEAD_SHA" \
--arg required_run_id "$GITHUB_RUN_ID" \
'{event_type:"opencode-review",client_payload:{target_repository:$target_repository,pr_number:$pr_number,pr_base_ref:$pr_base_ref,pr_base_sha:$pr_base_sha,pr_head_ref:$pr_head_ref,pr_head_sha:$pr_head_sha,required_run_id:$required_run_id}}' |
GH_TOKEN="$app_token" gh api -X POST repos/ContextualWisdomLab/.github/dispatches --input -

- name: Fail closed without a current-head OpenCode verdict
Expand Down
19 changes: 19 additions & 0 deletions tests/test_required_workflow_queue_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,25 @@ def test_privileged_review_retries_use_default_branch_repository_dispatch() -> N
assert '"gh",\n "workflow",\n "run"' not in autofix_scheduler


def test_required_opencode_dispatch_does_not_wait_on_merge_scheduler() -> None:
"""Dispatch review execution directly so polling cannot starve its producer."""
workflow = workflow_text("opencode-review.yml")
dispatch = workflow_step(workflow, "Request current-head OpenCode review execution")

assert 'event_type:"opencode-review"' in dispatch
assert 'event_type:"merge-scheduler"' not in dispatch
assert 'required_run_id:$required_run_id' in dispatch
for field in (
"target_repository",
"pr_number",
"pr_base_ref",
"pr_base_sha",
"pr_head_ref",
"pr_head_sha",
):
assert f"{field}:${field}" in dispatch


def test_no_central_workflow_exposes_branch_selected_manual_dispatch() -> None:
"""Every central manual entrypoint must load code from the default branch."""
workflow_files = sorted((REPO_ROOT / ".github" / "workflows").glob("*.yml"))
Expand Down
Loading