Repository navigation
fix(ci): route package gate to isolated self-hosted runners - #2608
seonghobae merged 3 commits into
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Drop the session GOAL.md and restore .github/actionlint.yaml to main's bytes; main already declares cwlab-ci-isolated and cwlab-control. Full suite under GITHUB_ACTIONS=true: 5351 passed, 4 skipped, 40 subtests.
Exact-head self-hosted migration triage: inherited schema NONPASSFresh observed head: Exact-head actionlint 1.7.12 returned exit 1 for four expressions in Existing #2608/#2573 source owner: repair that identity/checkout boundary without an expression-ignore, mutable-main checkout, or confusing caller identity with the central supplier; preserve producer/inspector separation and validate the actual cross-repository route. Re-run focused boundary/audit/sandbox contracts normally and with Historical failures are separate recovery nodes: CodeQL job115132781543 was billing-locked before execution; Strix115134289514 reported Retained evidence: |
Reuse protected-main CodeQL workflow bytes to eliminate hosted fallback on the package PR stack. Preserve exact trusted-main control admission and route PR revisions only to CWL CI isolated. Align all three runner contract tests. CI-mode full suite: 5351 passed, 4 skipped, 40 subtests; focused both modes: 46 passed. Independent source and test delta reviews approved, not formal App approvals.
There was a problem hiding this comment.
Noema LLM review
Approve the source-level changes: the CodeQL selectors preserve trusted-main control routing while moving other revisions to the isolated pool, and both package-gate jobs consistently require that pool (.github/workflows/codeql-pr.yml:64 RIGHT; .github/workflows/package-description-boundary.yml:66 and 136 RIGHT). Static adversarial checks falsified routing, fallback, and test-fixture regression hypotheses. One non-blocking routing comment is stale; runtime isolation and capacity remain unverified.
Reviewed changed lines
.github/actionlint.yaml:1 (RIGHT): Correctly distinguishes lint acceptance of custom labels from runtime isolation. This configuration does not grant runner-group access or establish disposable execution..github/workflows/codeql-pr.yml:64 (RIGHT): The trusted-main predicate retains the existing control-group selection. Nonmatching workflow references now select CWL CI isolated with the isolation label rather than a hosted runner..github/workflows/codeql-pr.yml:170 (RIGHT): The analysis job uses the same predicate and alternatives as language detection, keeping routing consistent across the required-check flow..github/workflows/codeql-pr.yml:376 (RIGHT): The coordinator's labels expression duplicates its group expression's predicate and JSON alternatives, so splitting the selector into explicit properties does not introduce a group/label mismatch..github/workflows/package-description-boundary.yml:66 (RIGHT): Caller-controlled build execution is restricted to the named isolated group and all four required labels; the selector contains no hosted alternative..github/workflows/package-description-boundary.yml:136 (RIGHT): The inspector uses the same restricted selector as the producer. Its existing dependency and failed-producer rejection remain intact.docs/doctoring/package-description-boundary.md:182 (RIGHT): Appropriately states that routing changes neither provision runners nor prove cleanup, and identifies operational evidence required before accepting a real caller.tests/test_audit_org_codeql_coverage.py:267 (RIGHT): The default-clock test now supplies a genuinely current timestamp instead of allowing the fixed September fixture to age out.tests/test_audit_org_codeql_coverage.py:316 (RIGHT): The CLI fixture receives its matching reference clock through pytest's scoped monkeypatch, without changing production clock behavior or permanently modifying other tests.tests/test_codeql_pr_workflow_contract.py:1161 (RIGHT): The parsed fallback assertion checks the complete isolated group and label set rather than merely accepting any self-hosted selector.tests/test_package_description_boundary.py:351 (RIGHT): The new contract compares both jobs' full runs-on mappings against the same expected selector and separately excludes the previous hosted labels.tests/test_required_review_runner_image_contract.py:104 (RIGHT): Checks that all three selectors have corresponding labels expressions and retain the trusted-reference predicate in both properties.tests/test_sandboxed_web_e2e.py:1716 (RIGHT): The scoped synthetic-home fixture separates the modeled home from the sandbox workspace, making the path tests independent of whether the host scratch directory lies beneath the real home.tests/test_scheduler_and_codeql_dispatch_runner_image_contract.py:67 (RIGHT): Updates the scheduler contract to require the complete isolated fallback while retaining its existing trusted-main control assertions.
Adversarial validation
.github/workflows/codeql-pr.yml:64 (RIGHT)falsified: A PR workflow reference still selects the restricted central-control group or falls back to a hosted runner. — Static expression evaluation makes the comparison false and selects the literal object containing group CWL CI isolated and labels self-hosted, linux, x64, and cwlab-ci-isolated. Neither alternative is hosted..github/workflows/codeql-pr.yml:376 (RIGHT)falsified: Splitting runs-on into group and labels changes trusted-main behavior or combines a group with the wrong branch's labels. — Each property uses the same predicate and identical JSON alternatives. Trusted main yields CWL central control with the original three labels; the other branch yields CWL CI isolated with four labels. Only the final property dereference differs..github/workflows/package-description-boundary.yml:136 (RIGHT)falsified: Unavailable isolated capacity allows the inspector to escape to hosted execution or publish a successful gate without its producer. — Both jobs have a single fixed isolated selector with no fallback. A queued producer does not satisfy the inspector's needs dependency; after an unsuccessful producer, the existing Reject a failed input producer step remains. always() does not substitute another runner or bypass that rejection.tests/test_audit_org_codeql_coverage.py:316 (RIGHT)falsified: The clock repair still ages with the fixed fixture or leaks its frozen clock into the real-default-clock test. — The CLI test binds datetime.now to NOW through the scoped monkeypatch fixture, matching its analysis fixture. The separate default-clock test generates its timestamp with datetime.now(timezone.utc), and pytest restores the patched audit attribute after the CLI test.tests/test_sandboxed_web_e2e.py:1716 (RIGHT)falsified: The synthetic-home change permanently alters Path.home or accidentally places the sandbox workspace beneath the modeled home. — The modeled home is tmp_path/synthetic-home, while the workspace is tmp_path/sandbox/repo, so the workspace is not beneath the modeled home. The change uses pytest monkeypatch rather than permanent assignment and is restored after the test.- Residual risk: Validation was static; no pytest, actionlint, live scheduling, or cleanup canary was executed. Runner-group access, available capacity, installed tooling, organization workflow restrictions, and disposable cleanup cannot be established from this diff. The documentation correctly keeps those operational prerequisites separate from source routing.
Findings
- [low] .github/workflows/codeql-pr.yml:64 (RIGHT): The file header still says that PR-authored workflow revisions 'retain hosted execution', but all three changed selectors now route those revisions to CWL CI isolated. Update that comment to describe isolated self-hosted execution so the documented runner boundary matches the implementation.
- Result: APPROVE
- Head SHA:
51711760d1644acf5d866c9b4c7fd6064101cc4f - Reviewer credential:
noema-review-github-app-refresh - Actor:
cwl-noema-review[bot]
44eba24
into
fix/strix-sandbox-state-diagnostics-aa11d478
범위
닫힌 #2261의 successor #2573 위에 올라가는 package self-hosted 수리입니다. 중앙 main 배포와 이 stack base 전달을 구분합니다.
CWL CI isolated의 self-hosted/Linux/x64/cwlab-ci-isolated runner로 전환합니다. Hosted fallback은 없습니다.현재 검증
Head:
51711760d1644acf5d866c9b4c7fd6064101cc4fBase:
41e9c45407e3f72d138da2ad24cdf934aa42fbe1(#2573)4e32b99ec79b6565800d1081f60acfea368adecd의 파일과 byte 단위로 같습니다.job.workflow_repository/sha에 대한 actionlint 1.7.12 schema 오류 4건은 계속 미해결입니다. Ignore를 추가하지 않았습니다.실행 및 전달 상태
Ready for review이며, 신규 head의 체크는 진행 중입니다. Queue/in-progress/skip을 통과나 장애로 단정하지 않습니다. 실제 disposable runner 격리/cleanup canary, literal auto inference와 author-distinct App APPROVED는 별도 미완료입니다.
이전 head
d2c96e6에서 확인된 실패는 역사적 근거로 남깁니다: CodeQL hosted ubuntu-24.04에서 runner 미배정·step 0개; Noema 독립 issuer/custody input 부재; OpenCode current-head formal receipt 부재; Strix self-hosted 실행 중 gh executable 부재. 이들은 신규 head 소스 finding이나 성공으로 이월하지 않습니다.Shared LiteLLM credential/auto/App integration은 기존 #2560 담당 경계를 유지합니다. 키 중복 발급, secret dump, runner/ACL/VM 변경, 보호 완화, 미리 정한 승인 결과를 수행하지 않았습니다. 이 PR의 stack base 병합은 main 배포 완료가 아닙니다.