Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
cb07b8b
test(security): require non-200 dependency review fail-closed
seonghobae Sep 2, 2026
31f60e5
fix(security): fail closed on dependency graph non-200
seonghobae Sep 2, 2026
ee0f1ce
test(security): require caller permission envelope
seonghobae Sep 2, 2026
ca3bdbd
fix(security): preserve dependency-review caller permissions
seonghobae Sep 2, 2026
6d288ff
docs(security): record dependency-review authority boundary
seonghobae Sep 2, 2026
403ca1c
merge(main): preserve concurrent control-plane repairs
seonghobae Sep 2, 2026
ca7cb12
merge(main): preserve dependency-review control-plane fixes
seonghobae Sep 2, 2026
2595e24
test(security): preserve latest reusable dependency-review contract
seonghobae Sep 2, 2026
754121d
merge(main): preserve dependency-review owner and current controls
seonghobae Sep 2, 2026
3736634
test(security): require immutable dependency-review identities
seonghobae Sep 2, 2026
b1e6263
fix(security): validate immutable dependency-review identity
seonghobae Sep 2, 2026
8b86c0d
fix(security): carry exact identity validation into bundled scan
seonghobae Sep 2, 2026
ae12837
docs(security): record authenticated dependency-review evidence
seonghobae Sep 2, 2026
58a0b4c
test(security): preserve bundled dependency-review identity gate
seonghobae Sep 2, 2026
6e8998f
Merge branch 'main' into fix/dependency-review-non200-fail-closed
seonghobae Sep 3, 2026
04aad03
fix(security): reconcile immutable compare preflight with protected main
seonghobae Sep 6, 2026
c2e8ab0
fix(security): repair restack workflow composition
seonghobae Sep 6, 2026
0bb8f7c
chore(security): adopt protected main directly
seonghobae Sep 7, 2026
4ccb21d
chore(security): adopt protected main for dependency review
seonghobae Sep 8, 2026
59063ff
Merge protected main into dependency review owner
seonghobae Sep 12, 2026
f27c5cf
Merge protected main into dependency review owner
seonghobae Sep 12, 2026
d6ba56d
ci: stage isolated self-hosted routing for all workflow jobs
seonghobae Oct 3, 2026
cd49a60
ci: bind isolated runners to dedicated group
seonghobae Oct 3, 2026
1b9c710
Merge current main into dependency review owner
seonghobae Oct 3, 2026
fe9d193
test(security): reproduce incomplete 200 compare
seonghobae Oct 3, 2026
2290272
fix(security): require completed dependency compare
seonghobae Oct 3, 2026
f921189
test(ci): reproduce invalid R runner format template
seonghobae Oct 3, 2026
7fc1e2e
fix(ci): escape R runner format braces
seonghobae Oct 3, 2026
cd2c3f9
docs(ci): record R runner format repair
seonghobae Oct 3, 2026
650bc6e
merge(security): preserve dependency-review fail-closed owner
seonghobae Oct 3, 2026
665321c
test(docs): reject unpublished merge evidence
seonghobae Oct 3, 2026
f0f7ed9
docs(evidence): bind published dependency merge
seonghobae Oct 3, 2026
ab0c865
fix(ci): serialize R runner matrix labels
seonghobae Oct 3, 2026
3b35d3d
fix(ci): publish reviewed typed runner selectors and isolation oracle
seonghobae Oct 4, 2026
9a1aa12
ci: run billing-locked central schedules on existing self-hosted runners
seonghobae Oct 6, 2026
d165b4e
Merge pull request #2586 from ContextualWisdomLab/infra/hosted-schedu…
seonghobae Oct 6, 2026
2161ef0
ci: attach trusted schedules to the MCP runner group
seonghobae Oct 6, 2026
7554587
Merge pull request #2590 from ContextualWisdomLab/infra/mcp-expressio…
seonghobae Oct 6, 2026
cc42969
test(security): capture runner cache and artifact quota failures
seonghobae Oct 7, 2026
26f993c
fix(security): isolate scanner setup from runner cache
seonghobae Oct 7, 2026
98beb17
docs(security): record scanner runner isolation evidence
seonghobae Oct 7, 2026
62c051b
fix(docs): restore complete product gap baseline
seonghobae Oct 7, 2026
d694e85
fix(ci): admit only supported isolated Linux R matrix legs
seonghobae Oct 8, 2026
6e924f3
chore(ci): stop hosted Dependabot version-update scheduling
seonghobae Oct 8, 2026
a206770
fix(ci): reject mixed unsupported isolated platforms
seonghobae Oct 9, 2026
8d4a2eb
fix(ci): admit law runner group with exact label
seonghobae Oct 9, 2026
ef65b2f
fix(ci): complete cost-fenced auto review routing and regression cont…
seonghobae Oct 9, 2026
7e1836e
fix(ci): isolate PR coverage and reconcile trusted main runner routes
seonghobae Oct 9, 2026
ef0c9d4
ci: enforce k-csap Noema App reviewer identity
seonghobae Oct 10, 2026
5c1196a
fix(noema): bind sidecar evidence to current producer
seonghobae Oct 10, 2026
7435189
fix(noema): bind sidecar evidence to current producer (#2622)
seonghobae Oct 10, 2026
b78007b
fix(ci): reconcile auto review and fail closed on dismissed receipts
seonghobae Oct 11, 2026
32eced9
fix(ci): publish reviewed production review caller and lint successor
seonghobae Oct 12, 2026
362fed6
fix(ci): bind existing App issuer and final source quality controls
seonghobae Oct 12, 2026
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
5 changes: 5 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Source validation only; labels do not attest runtime isolation.
self-hosted-runner:
labels:
- cwlab-ci-isolated
- cwlab-control
13 changes: 13 additions & 0 deletions .github/actions/noema-review/two_phase.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ def prepare_verdict(repo: str, number: int, expected_head: str, path: Path) -> i
return 0
expected_base = _canonical_base(pull_request)
actor = _reviewer_actor()
author = gate.require_distinct_pr_author(pull_request, actor)
if pull_request.get("isDraft"):
print("PR is draft; Noema verdict preparation skipped.")
return 0
Expand Down Expand Up @@ -190,6 +191,8 @@ def prepare_verdict(repo: str, number: int, expected_head: str, path: Path) -> i
"pull_request_number": number,
"expected_head": expected,
"expected_base": expected_base,
"reviewer_actor": actor,
"pull_request_author": author,
"verdict": verdict,
},
)
Expand Down Expand Up @@ -250,6 +253,8 @@ def publish_verdict(repo: str, number: int, expected_head: str, path: Path) -> i
"pull_request_number",
"expected_head",
"expected_base",
"reviewer_actor",
"pull_request_author",
"verdict",
}
if set(payload) != required_keys:
Expand Down Expand Up @@ -277,6 +282,14 @@ def publish_verdict(repo: str, number: int, expected_head: str, path: Path) -> i
print("Pull request base advanced after model review; stale prepared verdict was not published.")
return 0
actor = _reviewer_actor(allow_refreshed_app=True)
author = gate.require_distinct_pr_author(current_pull_request, actor)
if payload["pull_request_author"] != author:
raise RuntimeError("Noema pull request author changed after verdict preparation")
reviewer_actor = payload["reviewer_actor"]
if not isinstance(reviewer_actor, str) or not reviewer_actor.strip():
raise RuntimeError("Noema prepared reviewer actor is invalid")
if reviewer_actor.strip().casefold() != actor.strip().casefold():
raise RuntimeError("Noema refreshed reviewer actor differs from verdict preparation")
if current_pull_request.get("isDraft"):
print("PR became draft after model review; prepared verdict was not published.")
return 0
Expand Down
15 changes: 0 additions & 15 deletions .github/dependabot.yml

This file was deleted.

4 changes: 3 additions & 1 deletion .github/workflows/actions-queue-health.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ permissions:
jobs:
collect:
name: Collect exact-head queue evidence
runs-on: ubuntu-24.04
runs-on:
group: ${{ (github.repository == 'ContextualWisdomLab/.github' && github.ref == 'refs/heads/main' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).group }}
labels: ${{ (github.repository == 'ContextualWisdomLab/.github' && github.ref == 'refs/heads/main' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).labels }}
timeout-minutes: 30
permissions:
contents: read
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/agent-mention-noema-dispatch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ permissions:
jobs:
validate-and-forward:
if: github.repository == 'ContextualWisdomLab/.github'
runs-on: ${{ github.repository == 'ContextualWisdomLab/.github' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('["ubuntu-24.04"]') }}
runs-on:
group: ${{ (github.repository == 'ContextualWisdomLab/.github' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).group }}
labels: ${{ (github.repository == 'ContextualWisdomLab/.github' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).labels }}
timeout-minutes: 5
permissions:
actions: read
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/agent-mention-opencode-dispatch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ permissions:
jobs:
validate-and-forward:
if: github.repository == 'ContextualWisdomLab/.github'
runs-on: ${{ github.repository == 'ContextualWisdomLab/.github' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('["ubuntu-24.04"]') }}
runs-on:
group: ${{ (github.repository == 'ContextualWisdomLab/.github' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).group }}
labels: ${{ (github.repository == 'ContextualWisdomLab/.github' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).labels }}
timeout-minutes: 5
permissions:
actions: read
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/agent-mention-router-quality-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ env:

jobs:
quality:
runs-on: ubuntu-24.04
runs-on:
group: CWL CI isolated
labels: [self-hosted, linux, x64, cwlab-ci-isolated]
timeout-minutes: 20
steps:
- name: Harden runner
Expand Down
26 changes: 25 additions & 1 deletion .github/workflows/agent-review-runtime-quality-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,16 @@ on:
- "scripts/ci/zdr_policy.py"
- "scripts/ci/contextual_orchestrator_review_policy.py"
- "scripts/ci/contextual_orchestrator_review_launcher.py"
- "scripts/ci/personal_review_route.py"
- "scripts/ci/contextual_orchestrator_review_sidecar.sh"
- "tests/test_zdr_policy.py"
- "tests/test_contextual_orchestrator_review_policy.py"
- "tests/test_contextual_orchestrator_review_launcher.py"
- "tests/test_review_auto_route.py"
- "tests/test_personal_review_route.py"
- "tests/test_tokyo_review_consumer.py"
- "tests/test_review_auto_cost_admission.py"
- "tests/test_review_ai_app_independence.py"
- "tests/test_review_preflight_concurrency.py"
- "tests/test_contextual_orchestrator_review_sidecar_contract.py"
- "tests/test_sidecar_disk_free_guard.py"
Expand Down Expand Up @@ -140,7 +146,9 @@ permissions:
jobs:
agent_review_runtime_quality:
name: agent-review-runtime-quality
runs-on: ubuntu-24.04
runs-on:
group: CWL CI isolated
labels: [self-hosted, linux, x64, cwlab-ci-isolated]
timeout-minutes: 25
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
Expand Down Expand Up @@ -283,10 +291,16 @@ jobs:
scripts/ci/zdr_policy.py|\
scripts/ci/contextual_orchestrator_review_policy.py|\
scripts/ci/contextual_orchestrator_review_launcher.py|\
scripts/ci/personal_review_route.py|\
scripts/ci/contextual_orchestrator_review_sidecar.sh|\
tests/test_zdr_policy.py|\
tests/test_contextual_orchestrator_review_policy.py|\
tests/test_contextual_orchestrator_review_launcher.py|\
tests/test_review_auto_route.py|\
tests/test_personal_review_route.py|\
tests/test_tokyo_review_consumer.py|\
tests/test_review_auto_cost_admission.py|\
tests/test_review_ai_app_independence.py|\
tests/test_review_preflight_concurrency.py|\
tests/test_contextual_orchestrator_review_sidecar_contract.py|\
tests/test_sidecar_disk_free_guard.py|\
Expand Down Expand Up @@ -473,6 +487,11 @@ jobs:
tests/test_zdr_policy.py \
tests/test_contextual_orchestrator_review_policy.py \
tests/test_contextual_orchestrator_review_launcher.py \
tests/test_review_auto_route.py \
tests/test_personal_review_route.py \
tests/test_tokyo_review_consumer.py \
tests/test_review_auto_cost_admission.py \
tests/test_review_ai_app_independence.py \
tests/test_review_preflight_concurrency.py \
tests/test_contextual_orchestrator_review_sidecar_contract.py \
tests/test_sidecar_disk_free_guard.py \
Expand Down Expand Up @@ -514,6 +533,11 @@ jobs:
tests/test_zdr_policy.py \
tests/test_contextual_orchestrator_review_policy.py \
tests/test_contextual_orchestrator_review_launcher.py \
tests/test_review_auto_route.py \
tests/test_personal_review_route.py \
tests/test_tokyo_review_consumer.py \
tests/test_review_auto_cost_admission.py \
tests/test_review_ai_app_independence.py \
tests/test_review_preflight_concurrency.py \
tests/test_contextual_orchestrator_review_sidecar_contract.py \
tests/test_sidecar_disk_free_guard.py \
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/audit-central-ruleset.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ permissions:
jobs:
audit:
name: Audit organization ruleset 18156473
runs-on: ubuntu-latest
runs-on:
group: ${{ (github.repository == 'ContextualWisdomLab/.github' && github.ref == 'refs/heads/main' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).group }}
labels: ${{ (github.repository == 'ContextualWisdomLab/.github' && github.ref == 'refs/heads/main' && endsWith(github.workflow_ref, '@refs/heads/main') && fromJSON('{"group":"CWL MCP remediation","labels":["self-hosted","linux","x64"]}') || fromJSON('{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).labels }}
env:
GH_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN || secrets.OPENCODE_APPROVE_TOKEN || github.token }}
steps:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/cloudflare-dns.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ permissions:
jobs:
reconcile:
name: Reconcile zones (${{ github.event.client_payload.mode || 'dry-run' }})
runs-on: ubuntu-latest
runs-on:
group: CWL CI isolated
labels: [self-hosted, linux, x64, cwlab-ci-isolated]
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand Down
12 changes: 9 additions & 3 deletions .github/workflows/codeql-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ jobs:
name: Detect CodeQL languages
# Draft PRs get no runner; ready_for_review re-runs this on the same head.
if: (github.event.action != 'closed') && (github.event.pull_request.draft != true || github.event.action == 'converted_to_draft' || github.event.action == 'closed')
runs-on: ${{ fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '"ubuntu-24.04"') }}
runs-on:
group: ${{ (fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).group }}
labels: ${{ (fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).labels }}
timeout-minutes: 5
permissions:
contents: read
Expand Down Expand Up @@ -164,7 +166,9 @@ jobs:
# dependency exactly; the only case where it's genuinely skipped is a
# closed PR, where this job being implicitly skipped too is fine because
# closed PRs need no required check.
runs-on: ${{ fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '"ubuntu-24.04"') }}
runs-on:
group: ${{ (fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).group }}
labels: ${{ (fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).labels }}
# Verdict reads have exceeded five minutes; retain the ten-minute control budget.
timeout-minutes: 10
permissions:
Expand Down Expand Up @@ -367,7 +371,9 @@ jobs:
&& github.event.pull_request.state != 'closed'
&& needs.detect-languages.result == 'success'
&& needs.detect-languages.outputs.code == 'true'
runs-on: ${{ fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '"ubuntu-24.04"') }}
runs-on:
group: ${{ (fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).group }}
labels: ${{ (fromJSON(github.workflow_ref == 'ContextualWisdomLab/.github/.github/workflows/codeql-pr.yml@refs/heads/main' && '{"group":"CWL central control","labels":["self-hosted","linux","x64"]}' || '{"group":"CWL CI isolated","labels":["self-hosted","linux","x64","cwlab-ci-isolated"]}')).labels }}
timeout-minutes: 5
permissions:
contents: read
Expand Down
64 changes: 64 additions & 0 deletions .github/workflows/company-default-head-trust-gate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Reusable company default-head trust gate

on:
workflow_call:
inputs:
target_runner_label:
required: true
type: string
trusted_ref_sha:
required: false
type: string
default: ""
trusted_ref_ack:
required: false
type: string
default: ""
outputs:
runner_matrix:
value: ${{ jobs.validate.outputs.runner_matrix }}

permissions:
contents: read

jobs:
validate:
runs-on:
group: CWL CI isolated
labels: [self-hosted, Linux, X64, cwlab-ci-isolated]
timeout-minutes: 5
outputs:
runner_matrix: ${{ steps.runner.outputs.runner_matrix }}
steps:
- id: runner
shell: bash
env:
TARGET: ${{ inputs.target_runner_label }}
run: |
case "$TARGET" in
all) matrix='["itxllmpgw01","itxllmpgw02","xtrmsales-llmgw1","xtrmsales-llmgw2"]' ;;
itxllmpgw01|itxllmpgw02|itxllmpgw03|itxllmpgw04|xtrmsales-llmgw1|xtrmsales-llmgw2|llm-gateway-dev|itx-llm-operation-1|itx-llm-operation-2)
matrix="[\"$TARGET\"]"
;;
*) echo "unsupported target_runner_label=$TARGET" >&2; exit 2 ;;
esac
echo "runner_matrix=$matrix" >> "$GITHUB_OUTPUT"
- shell: bash
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch || 'main' }}
REF_NAME: ${{ github.ref_name }}
SHA: ${{ github.sha }}
GH_TOKEN: ${{ github.token }}
REPOSITORY: ${{ github.repository }}
run: |
set -Eeuo pipefail
if [ "$REF_NAME" != "$DEFAULT_BRANCH" ]; then
echo "self-hosted failure diagnostics require the protected default branch" >&2
exit 2
fi
current_sha="$(gh api "repos/$REPOSITORY/commits/$DEFAULT_BRANCH" --jq .sha)"
if [ "$SHA" != "$current_sha" ]; then
echo "refusing stale default-branch run sha=$SHA current_sha=$current_sha" >&2
exit 2
fi
echo "trusted_ref_status=current_default_head sha=$SHA"
56 changes: 56 additions & 0 deletions .github/workflows/company-settlement-validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Source-only fixed-pool candidate. Caller-context group admission remains separate.
name: Company settlement validate
on:
workflow_call: {}
permissions:
contents: read
jobs:
validate:
runs-on:
group: CWL CI isolated
labels: [self-hosted, Linux, X64, cwlab-ci-isolated]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
- name: Install locked test dependencies
run: uv pip install --system -r requirements.txt -r requirements-dev.txt
- name: Start isolated PostgreSQL without a TCP listener
shell: bash
run: |
set -Eeuo pipefail
pg_bin="$(pg_config --bindir)"
test -x "$pg_bin/initdb"
test -x "$pg_bin/pg_ctl"
"$pg_bin/postgres" --version
data_dir="$RUNNER_TEMP/settlement-verify-postgres"
socket_dir="$RUNNER_TEMP/settlement-verify-socket"
mkdir -m 700 "$data_dir" "$socket_dir"
printf 'SETTLEMENT_VERIFY_PG_BIN=%s\n' "$pg_bin" >> "$GITHUB_ENV"
printf 'SETTLEMENT_VERIFY_PG_DATA=%s\n' "$data_dir" >> "$GITHUB_ENV"
"$pg_bin/initdb" -D "$data_dir" --no-locale --encoding=UTF8 \
--auth-local=trust --auth-host=reject
"$pg_bin/pg_ctl" -D "$data_dir" \
-o "-F -h '' -k $socket_dir" -l "$RUNNER_TEMP/settlement-verify-postgres.log" -w start
printf 'SETTLEMENT_VERIFY_TEST_DSN=host=%s dbname=postgres\n' "$socket_dir" >> "$GITHUB_ENV"
- name: Verify exact-head PgCat and lock regressions
env:
SETTLEMENT_VERIFY_REQUIRE_POSTGRES: "1"
run: >-
python -m pytest -q tests/test_issue119_pgcat_endpoint_resolver.py
tests/test_issue119_settlement_live_verify.py
tests/test_issue119_settlement_replica_routing.py
tests/test_issue119_settlement_review_regressions.py
tests/test_multi_instance_runtime_contract.py
- name: Stop isolated test database
if: always()
shell: bash
run: |
if test -f "${SETTLEMENT_VERIFY_PG_DATA:-}/postmaster.pid"; then
"$SETTLEMENT_VERIFY_PG_BIN/pg_ctl" -D "$SETTLEMENT_VERIFY_PG_DATA" -m fast -w stop
fi
Loading
Loading