Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
d7006e0
feat: checkpoint native orchestration backend
kvlonge Oct 30, 2026
bbd5094
feat: checkpoint pinned worker execution verification
kvlonge Oct 30, 2026
dbcd854
feat: checkpoint authenticated worker lifecycle client
kvlonge Oct 30, 2026
b151504
fix: scope orchestration test helpers to their consumers
kvlonge Oct 30, 2026
28f364d
feat: derive orchestration snapshots from native compiler records
kvlonge Oct 31, 2026
7c507a2
refactor: clarify scheduler storage ownership and regression cases
kvlonge Oct 31, 2026
88cb5a9
refactor: separate scheduler policies from transactional coordinators
kvlonge Oct 31, 2026
6712115
feat: observe platform health independently of scheduler leadership
kvlonge Oct 31, 2026
18ecdfa
test: align backend integration contracts with domain ownership
kvlonge Oct 31, 2026
975eed1
feat: monitor silent workers during scheduler cycles
kvlonge Oct 31, 2026
6981f10
feat: keep worker heartbeats independent of execution
kvlonge Oct 31, 2026
70e56d3
refactor: share authenticated control-plane transport
kvlonge Oct 31, 2026
1e50ac1
feat: publish retained compiler snapshots through the control API
kvlonge Oct 31, 2026
bb56e96
feat: ingest scoped worker output through the control API
kvlonge Oct 31, 2026
23cd632
feat: bootstrap audited locations and credentials natively
kvlonge Oct 31, 2026
259f1d9
fix: use a scalar expression in the DuckShop function fixture
kvlonge Oct 31, 2026
2904f54
feat: compile authored jobs and cron schedules into snapshots
kvlonge Oct 31, 2026
8b90eb5
feat: discover orchestration declarations in code locations
kvlonge Oct 31, 2026
067b438
feat: validate authored orchestration job settings
kvlonge Oct 31, 2026
8958e37
feat: administer principal credentials from native CLI
kvlonge Oct 31, 2026
b90a562
feat: expose location-scoped orchestration reads
kvlonge Oct 31, 2026
c836de1
feat: compile authored schedule runtime controls
kvlonge Oct 31, 2026
d3fc7fb
feat: add atomic privileged trigger controls
kvlonge Oct 31, 2026
9301ea0
feat: deliver claim-scoped Recall through native workers
kvlonge Oct 31, 2026
a61b4e2
feat: retain native worker ownership in the project interpreter
kvlonge Oct 31, 2026
5540514
refactor: keep scheduler planning entries within their domain
kvlonge Oct 31, 2026
786179f
feat: audit native run cancellation atomically
kvlonge Oct 31, 2026
e2e767c
feat: queue pinned published jobs with atomic audits
kvlonge Oct 31, 2026
6d4ac36
feat: publish compiled locations through scoped HTTP
kvlonge Oct 31, 2026
13a799f
feat: supervise isolated code location reloads
kvlonge Oct 31, 2026
bf359c1
feat: report scoped code location health
kvlonge Oct 31, 2026
13b990d
feat: keep code location compilers warm
kvlonge Oct 31, 2026
48b08b5
feat: process scoped outbound location work
kvlonge Oct 31, 2026
d965705
feat: execute scheduled jobs with supervised local workers
kvlonge Oct 31, 2026
75f8e0a
feat: supervise Docker workers across scheduler restarts
kvlonge Oct 31, 2026
d777cce
feat: checkpoint backend groups and pinned reruns (WIP)
kvlonge Oct 31, 2026
1bb63c7
fix: preserve failure-only reruns and transitive job ordering
kvlonge Oct 31, 2026
6df4947
test: complete scheduled-function DuckShop coverage
kvlonge Oct 31, 2026
2836325
feat: recover Linux local workers (WIP)
kvlonge Oct 31, 2026
ac93726
refactor: keep scheduler internals owner-local
kvlonge Oct 31, 2026
cd7a0de
feat: execute explicit backfill windows
kvlonge Oct 31, 2026
caefe0b
feat: publish and refresh authored calendars
kvlonge Oct 31, 2026
e69a976
test: avoid writable native executable copies
kvlonge Oct 31, 2026
dde985c
fix: distinguish PyO3 metadata from Python crossings
kvlonge Nov 1, 2026
21a9a56
refactor: align calendar backend ownership boundaries
kvlonge Nov 1, 2026
5fa350d
feat: deliver platform health to server webhook
kvlonge Nov 1, 2026
c302e33
test: share disposable PostgreSQL harness across native gates
kvlonge Nov 1, 2026
2c00edb
feat: schedule durable built-in platform sensors
kvlonge Nov 1, 2026
39eebce
feat: observe expired code location heartbeats
kvlonge Nov 1, 2026
80cbc0c
feat: retain typed launch failure observations
kvlonge Nov 1, 2026
91a5eb3
feat: add scoped job and group outcome sensors
kvlonge Nov 1, 2026
448a487
feat: require successful executed nodes in run sensors
kvlonge Nov 1, 2026
d728274
feat: trigger sensors for genuine successful node rebuilds
kvlonge Nov 1, 2026
bab7e7c
feat: execute custom polling sensors in isolated locations
kvlonge Nov 1, 2026
ed9783d
feat: persist warehouse observation identities and read history
kvlonge Nov 1, 2026
7031203
test: name fingerprint columns in stale-row fixture
kvlonge Nov 1, 2026
d12cf27
feat: bound freshness history by observation time
kvlonge Nov 1, 2026
7c75072
refactor: share warehouse history SQL construction
kvlonge Nov 1, 2026
7aee501
feat: read bounded fingerprint history from locations
kvlonge Nov 1, 2026
c51695c
fix: preserve fingerprint write metadata budgets
kvlonge Nov 1, 2026
b352da7
feat: ingest warehouse fingerprints losslessly
kvlonge Nov 1, 2026
3066609
feat: stream scoped changes and supervise local development
kvlonge Nov 1, 2026
34c51c9
feat: generate and verify the typed control API client
kvlonge Nov 1, 2026
8825ed6
Merge main into orchestration backend
kvlonge Nov 1, 2026
29420fd
feat: resolve independent named catalog connections
kvlonge Nov 1, 2026
9c62bd3
feat: derive individual failure and recovery transitions
kvlonge Nov 1, 2026
682b043
fix: restrict principal API tokens to service accounts
kvlonge Nov 1, 2026
310baf7
test: align CLI credentials and catalog diagnostic expectations
kvlonge Nov 1, 2026
b4a4959
Merge remote-tracking branch 'origin/main' into feat/orchestration-ba…
kvlonge Nov 1, 2026
4448c71
feat: add native password and browser session foundation
kvlonge Nov 1, 2026
7908e60
feat: advance shared authentication revision atomically
kvlonge Nov 1, 2026
47f7f6c
feat: expose native password provisioning and server configuration
kvlonge Nov 1, 2026
60d29dc
test: exercise browser sessions through the generated control client
kvlonge Nov 1, 2026
a094855
feat: rotate live credentials atomically without widening authority
kvlonge Nov 1, 2026
948f50b
feat: authenticate explicitly bound people through trusted proxies
kvlonge Nov 1, 2026
b1b3ec5
test: preserve worker execution coverage under derived-relation rules
kvlonge Nov 1, 2026
0b28f82
feat: verify explicitly bound OIDC identities with browser-bound PKCE
kvlonge Nov 1, 2026
7e19995
feat: package and verify redeploy-safe Compose orchestration
kvlonge Nov 1, 2026
d505a6b
fix: verify control-store restore and writable Compose development
kvlonge Nov 2, 2026
b17fb32
feat: add permission-enforced person operations
kvlonge Nov 2, 2026
d1657fb
feat: add exclusive offline administrator recovery
kvlonge Nov 2, 2026
a5ebdc8
feat: configure optional viewer metadata access
kvlonge Nov 2, 2026
6d0c346
feat: authorize person cancellation and frozen reruns
kvlonge Nov 2, 2026
f8482d1
Merge origin/main and synchronize workspace lock versions
kvlonge Nov 2, 2026
28499ad
test: exercise offline administrator recovery in installed wheels
kvlonge Nov 2, 2026
1e9b86e
feat: issue federated browser sessions with live person authorization
kvlonge Nov 2, 2026
aa6f2d0
feat: reconcile bounded warehouse history mirrors
kvlonge Nov 2, 2026
a4f4ddb
feat: automatically synchronize warehouse history
kvlonge Nov 2, 2026
96821ff
feat: add permission-protected ordered security audit feed
kvlonge Nov 2, 2026
0da04d4
fix: wait briefly for DuckDB cross-process file locks
kvlonge Nov 2, 2026
ddbe002
feat: incrementally synchronize warehouse history
kvlonge Nov 2, 2026
1ad2f09
fix: refresh workspace lock after base merge
kvlonge Nov 2, 2026
8828854
feat: report bounded warehouse synchronization health
kvlonge Nov 2, 2026
b586209
feat: synchronize warehouse audit-result history
kvlonge Nov 2, 2026
be4cefa
feat: synchronize warehouse janitor history
kvlonge Nov 2, 2026
a0b5bbf
feat(orchestration): mirror migration and old-name history
kvlonge Nov 2, 2026
2dccdac
chore: merge main and reconcile orchestration lock version
kvlonge Nov 2, 2026
ef8a073
feat: mirror immutable microbatch warehouse history
kvlonge Nov 2, 2026
389adf1
feat: trigger sensor runs from new source data
kvlonge Nov 2, 2026
1125266
Merge origin/main and align orchestration lock version
kvlonge Nov 2, 2026
bdd41a1
feat: trigger source sensors from timestamp age
kvlonge Nov 2, 2026
e5b56ed
perf: avoid reimporting committed reconciliation pages
kvlonge Nov 2, 2026
6d5ddd1
feat: export security audit facts through an independent webhook
kvlonge Nov 2, 2026
cc73cdd
feat: synchronize authoritative warehouse catalogs
kvlonge Nov 2, 2026
659cef0
feat: expose permission-enforced catalog pages
kvlonge Nov 2, 2026
9ab16a1
feat: expose bounded latest build fingerprint evidence
kvlonge Nov 2, 2026
2e6ef6a
ci: separate native workspace verification
kvlonge Nov 2, 2026
c1ae966
feat: publish planner-owned snapshot identities
kvlonge Nov 2, 2026
12d51ae
feat: expose bounded node evidence and local definition status
kvlonge Nov 2, 2026
bc18828
feat: add metadata-only relation statistics estimates
kvlonge Nov 2, 2026
2af07ab
feat: collect hourly warehouse metadata statistics
kvlonge Nov 2, 2026
98619dd
fix: pin discovered Python execution source in snapshots
kvlonge Nov 2, 2026
f6e2dd5
feat: publish observational attached-check lifecycle facts
kvlonge Nov 2, 2026
b8beb54
fix: preserve native inputs and durable denial metadata
kvlonge Nov 2, 2026
c0a352e
fix: isolate native PostgreSQL contract databases
kvlonge Nov 3, 2026
f2888c5
test: fix attached-check cancellation query binding
kvlonge Nov 3, 2026
77d5696
test: retain private delta comparison failure evidence
kvlonge Nov 3, 2026
9fb3590
feat: expose scoped person connection tests
kvlonge Nov 3, 2026
e5d8b0d
test: verify person session enforcement across transports
kvlonge Nov 3, 2026
d5f51de
test: verify installed PostgreSQL administrator recovery
kvlonge Nov 3, 2026
ebfc652
feat: add internal projection replay owners
kvlonge Nov 3, 2026
3b49c53
test: verify recovery across repeated supervisor crashes
kvlonge Nov 3, 2026
13a895d
feat: rebuild control projections from durable semantic facts
kvlonge Nov 3, 2026
9bfefdf
feat: add browser-authorized CLI person sessions
kvlonge Nov 3, 2026
ec29d2f
test: retain populated concurrency slots during repeated recovery
kvlonge Nov 3, 2026
19b01dc
feat: expose scoped published SQL inspection
kvlonge Nov 3, 2026
d48424e
feat: inspect published SQL with saved CLI sessions
kvlonge Nov 3, 2026
0888f47
fix: retain compile interrupts swallowed by Python callbacks
kvlonge Nov 3, 2026
96e2bd9
feat: configure the warehouse statistics retention horizon
kvlonge Nov 3, 2026
ef69e50
docs: describe the statistics retention option for sqb server
kvlonge Nov 3, 2026
3531a17
fix: name the retention flag when zero days are rejected
kvlonge Nov 3, 2026
45d441f
feat: expire security audit records after a configurable horizon
kvlonge Nov 4, 2026
0220cb2
feat: expire old skipped and covered schedule ticks
kvlonge Nov 4, 2026
169682f
feat: collect old published snapshots by reference
kvlonge Nov 4, 2026
ecb2f9f
feat: require administrator approval to widen custom roles
kvlonge Nov 4, 2026
bb8406f
fix: bound each schedule tick cleanup pass
kvlonge Nov 4, 2026
5601aef
test: keep scheduled worker fixtures inside the tick horizon
kvlonge Nov 4, 2026
40fbc75
fix: give latest catch-up one tick older than the tick horizon
kvlonge Nov 4, 2026
a9e0b4f
fix: start cron searches on whole seconds so first ticks land on thei…
kvlonge Nov 4, 2026
46383c5
test: simulate scheduler faults, failovers and DST transitions
kvlonge Nov 4, 2026
374264c
test: bound scheduler tick-to-queued latency and failover catch-up
kvlonge Nov 4, 2026
8637ea5
test: tighten scheduler latency bounds to 500 ms
kvlonge Nov 4, 2026
5bbe642
test: hold every scheduler crash point and a waiting standby in CI
kvlonge Nov 4, 2026
31ebba4
test: prove scheduler upgrade in place and recovery from killed proce…
kvlonge Nov 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
**
!dist/
!dist/*.whl
!deploy/
!deploy/Dockerfile
!deploy/project/
!deploy/project/sqlbuild_project.toml
!deploy/project/models/
!deploy/project/models/*.sql
!deploy/project/orchestration/
!deploy/project/orchestration/*.py
25 changes: 25 additions & 0 deletions .github/diagnostics-recipient.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEJTCCAo2gAwIBAgIUUgxZ6C8ykh+91sFO8z78yEl0flIwDQYJKoZIhvcNAQEL
BQAwIjEgMB4GA1UEAwwXc3FsYnVpbGQtY2ktZGlhZ25vc3RpY3MwHhcNMjYxMTAz
MDQ0ODU4WhcNMzYxMDMxMDQ0ODU4WjAiMSAwHgYDVQQDDBdzcWxidWlsZC1jaS1k
aWFnbm9zdGljczCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBANhDATXs
XtI0hyxJIba3/APxf8cVEZ7dTTHhyqyEpf2Pi5VKWvfLNkTJE+FIlXS37G5o4Hkb
Tnm44fWdQg/UAnQCY5J9QjEGJQAIv+4jx9jcALtbh0VG0hXHuEXBMFi3pakazhVf
rLHUtI4pDuU4Z0Zl7DsivZTgDiOAyCE+uIyCcKg5sn3vq3ITej7vIXaPHbrLV794
M6hyPbQu8kiREW+0g6iktAiHiw4prYBlbGIVfWoCzkNUEtO6djMKQlg1es8bhCYo
cVOwChPJrgsTX4tpN7I1y6kAYQ3EAd9AcoG+YmZ/Lf0wsawH4BrM0XZWV7Tr93CO
nrLqegrCx8eYn9cweoCsWq4Ad5xDecYnbaxX3c9bFfuDmaU8tUKjm4KXTQgJFznW
0cc1dRSbO7W8ogZyBj9KvRoJPboHiXaZQSHwcx/rwKmjZJ6yDcGTlTD7qY9WciuR
KK5mWLJvsQ33fjMTGnaW5cd73UR3Y6phvHv1s4HpVeAWOjWJAVuEzDjU1QIDAQAB
o1MwUTAdBgNVHQ4EFgQUg0RhY1QY4ID4KbGS710v48wx+jQwHwYDVR0jBBgwFoAU
g0RhY1QY4ID4KbGS710v48wx+jQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
AQsFAAOCAYEAlMrRv+zYmWbdSTM5vZM1qJMlDifRbRqTqcbMzv8W0tOrm+Ch2b94
VaPW0lCs+hOEUfAP2osegfLS6eAlv3MW774iVZzEcHjoQpvQQ2biaPgpJTe4jV+U
iwWlYrBbOjFPOQsnvxHSKjsrkt5bHcEXxShSkCYLjS+HvUT2huZ5LGxBUR9yfia2
gkOIa1zlPlbAMyUt6Fj66NL2+nbsCYLuGfQafqF4UUd3rG2sF1pkxSEuof1VpKTQ
rKU9u0+csNFHF20CGZ7h9jUU1ATLLwBlPunFCCO70gIGcoNspqPRIOwsEXXGr81N
aXJAeA5XMesS/v0k0x2GBLXujTT5+kC3iQA0+OfxH8t82D4xTXd2wYIKYwnzK+nv
XkF3Of+Y/puUv7R+ADfG0K7aMdLkBDjllJJL7gUml+X281m+2S5UlJZIHxe2kYGB
/i2XCahytLRBY9EGVSLEWjkhfnOydpjwuHfjkNaJDqNRDexMbzifxi0/liv8jbvV
ZCqMfibxPUoT
-----END CERTIFICATE-----
5 changes: 5 additions & 0 deletions .github/workflows/build-distributions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,11 @@ jobs:
"${run_as[@]}" "${smoke_scripts}/sqb" --version
"${run_as[@]}" "${smoke_scripts}/sqb" --help
"${run_as[@]}" "${smoke_scripts}/sqlbuild" --help
if [[ "${{ inputs.prebuilt-run-id == '' }}" == "true" ]]; then
cd "${GITHUB_WORKSPACE}"
"${run_as[@]}" "${smoke_python}" -m tests.integration.src.sqlbuild.compiler.compiled_project.publication.wheel.helpers \
"${smoke_scripts}/sqb${{ runner.os == 'Windows' && '.exe' || '' }}"
fi
- name: Check wheel contents and run a native command
if: matrix.platform.name == 'linux-x86_64'
run: |
Expand Down
115 changes: 108 additions & 7 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ jobs:
*) docs_only=false ;;
esac
case "${path}" in
crates/*|Cargo.toml|Cargo.lock|pyproject.toml|.github/workflows/verify.yml|.github/workflows/build-distributions.yml)
crates/*|Cargo.toml|Cargo.lock|pyproject.toml|.github/workflows/verify.yml|.github/workflows/build-distributions.yml|deploy/Dockerfile|deploy/project/*|deploy/compose*|compose.yml|.dockerignore|Makefile|tests/integration/src/sqlbuild/compiler/compiled_project/publication/test_compose.py|tests/integration/src/sqlbuild/compiler/compiled_project/publication/docker/compose/*|benchmarks/duckshop/edge_cases/orchestration/container_deployment.json)
wheels=true
;;
esac
Expand Down Expand Up @@ -249,6 +249,8 @@ jobs:
run: uv python install 3.12
- name: Verify lockfile
run: uv lock --check --python 3.12
- name: Verify native workspace lockfile
run: cargo metadata --locked --format-version 1 > /dev/null

checks:
name: Static checks and unit + integration tests
Expand Down Expand Up @@ -279,13 +281,59 @@ jobs:
run: uv python install 3.12
- name: Install dependencies
run: uv sync --locked --all-groups --all-extras
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm
cache-dependency-path: clients/typescript/package-lock.json
- name: Check generated control client against the built native API
run: |
npm --prefix clients/typescript ci
uv run --no-sync npm --prefix clients/typescript run check
uv run --no-sync npm --prefix clients/typescript test
- name: Run static checks
run: make check-ci
- name: Run native checks
run: make rust-check
- name: Prepare Docker worker tests
run: |
docker info > /dev/null
docker pull alpine:3.23
- name: Run unit and integration tests
env:
SQLBUILD_REQUIRE_DOCKER_TESTS: "1"
run: make test

native_checks:
name: Native workspace checks
needs: [changes, lockfile]
if: needs.changes.outputs.checks == 'true'
runs-on: ubuntu-24.04
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
with:
version: "0.12.3"
enable-cache: true
cache-dependency-glob: |
uv.lock
Cargo.lock
- uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
shared-key: verify-checks
save-if: false
- name: Install Python
run: uv python install 3.12
- name: Install native test dependencies without rebuilding the packages
run: uv sync --locked --all-groups --all-extras --no-install-package sqlbuild --no-install-package sqlbuild-cli
- name: Run native checks
env:
UV_NO_SYNC: "1"
PYO3_PYTHON: ${{ github.workspace }}/.venv/bin/python
run: make rust-check

e2e_shards:
name: DuckDB E2E (${{ matrix.name }})
needs: [changes, lockfile]
Expand Down Expand Up @@ -345,8 +393,23 @@ jobs:
f"{os.environ.get('PYTEST_XDIST_AUTO_NUM_WORKERS', '<unset>')}"
)
PY
- name: Validate diagnostic encryption recipient
if: matrix.target == 'test-e2e-duckdb-cli'
run: openssl x509 -in .github/diagnostics-recipient.pem -noout
- name: Run DuckDB E2E shard
env:
SQLBUILD_COMPARISON_ENCRYPTED_DIR: ${{ matrix.target == 'test-e2e-duckdb-cli' && format('{0}/comparison-encrypted', runner.temp) || '' }}
SQLBUILD_COMPARISON_RECIPIENT: ${{ github.workspace }}/.github/diagnostics-recipient.pem
run: make ${{ matrix.target }}
- name: Retain encrypted comparison failures
if: failure() && matrix.target == 'test-e2e-duckdb-cli'
uses: actions/upload-artifact@v4
with:
name: encrypted-comparison-${{ github.run_id }}-${{ github.run_attempt }}
path: ${{ runner.temp }}/comparison-encrypted/failure-*/failure.cms
if-no-files-found: warn
compression-level: 0
retention-days: 7

compiler_differential:
name: Compiler golden outputs
Expand Down Expand Up @@ -966,6 +1029,33 @@ jobs:
uses: ./.github/workflows/build-distributions.yml
with:
sdist: false
upload: true
retention-days: 3

compose:
name: Packaged Compose lifecycle
needs: [changes, lockfile, wheels]
if: needs.changes.outputs.wheels == 'true'
runs-on: ubuntu-24.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
with:
version: "0.12.3"
enable-cache: true
- name: Install Python test dependencies without rebuilding the packages
run: |
uv python install 3.12
uv sync --locked --all-groups --all-extras --no-install-package sqlbuild --no-install-package sqlbuild-cli
- uses: actions/download-artifact@v4
with:
name: dist-wheel-linux-x86_64
path: dist
- name: Install the same wheels used by the images
run: uv pip install --no-deps dist/*.whl
- name: Verify packaged Compose deployment and operational recovery
run: make test-compose-packaged

verify:
# The required Verify of a Release Please pull request is the commit status that the trusted
Expand All @@ -985,6 +1075,7 @@ jobs:
changes,
lockfile,
checks,
native_checks,
e2e_shards,
compiler_differential,
compiler_differential_python_versions,
Expand All @@ -999,6 +1090,7 @@ jobs:
postgres,
clickhouse,
wheels,
compose,
]
runs-on: ubuntu-24.04
steps:
Expand All @@ -1008,6 +1100,7 @@ jobs:
CHECKS_SELECTED: ${{ needs.changes.outputs.checks }}
LOCKFILE_RESULT: ${{ needs.lockfile.result }}
CHECKS_RESULT: ${{ needs.checks.result }}
NATIVE_CHECKS_RESULT: ${{ needs.native_checks.result }}
E2E_SHARDS_RESULT: ${{ needs.e2e_shards.result }}
COMPILER_DIFFERENTIAL_RESULT: ${{ needs.compiler_differential.result }}
COMPILER_DIFFERENTIAL_PYTHON_VERSIONS_RESULT: ${{ needs.compiler_differential_python_versions.result }}
Expand All @@ -1022,14 +1115,21 @@ jobs:
POSTGRES_RESULT: ${{ needs.postgres.result }}
CLICKHOUSE_RESULT: ${{ needs.clickhouse.result }}
WHEELS_RESULT: ${{ needs.wheels.result }}
COMPOSE_RESULT: ${{ needs.compose.result }}
run: |
if [[ "${CHANGES_RESULT}" != "success" || "${LOCKFILE_RESULT}" != "success" ]]; then
echo "Required classification or lockfile checks did not pass" >&2
exit 1
fi
if [[ "${CHECKS_RESULT}" != "success" ]] && \
! [[ "${CHECKS_SELECTED}" == "false" && "${CHECKS_RESULT}" == "skipped" ]]; then
echo "Required static checks did not pass: ${CHECKS_RESULT}" >&2
for result in "${CHECKS_RESULT}" "${NATIVE_CHECKS_RESULT}"; do
if [[ "${result}" != "success" ]] && \
! [[ "${CHECKS_SELECTED}" == "false" && "${result}" == "skipped" ]]; then
echo "Required static or native checks did not pass: ${result}" >&2
exit 1
fi
done
if [[ "${WHEELS_RESULT}" == "success" && "${COMPOSE_RESULT}" != "success" ]]; then
echo "Required packaged Compose verification did not pass: ${COMPOSE_RESULT}" >&2
exit 1
fi
for result in \
Expand All @@ -1046,7 +1146,8 @@ jobs:
"${RULES_PERFORMANCE_RESULT}" \
"${POSTGRES_RESULT}" \
"${CLICKHOUSE_RESULT}" \
"${WHEELS_RESULT}"; do
"${WHEELS_RESULT}" \
"${COMPOSE_RESULT}"; do
if [[ "${result}" != "success" && "${result}" != "skipped" ]]; then
echo "A selected verification suite did not pass: ${result}" >&2
exit 1
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ target/
*.dylib
.dlt/
.amp/portals/*
/.env

# Local SQLBuild overrides
sqlbuild_local.yml
Expand Down
13 changes: 13 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,19 @@ For a change confined to one Rust crate, run its focused tests before rebuilding
cargo test -p sqlbuild-sqltext given_model_files_when_matching_headers_then_offsets_follow_the_python_pattern
```

Control-plane integration tests require Docker and run both SQLite and PostgreSQL:

```bash
make test-native NATIVE_TEST_ARGS='-p sqlbuild-orchestration --lib'
```

The same Testcontainers harness runs under `make rust-check` in CI. Each invocation starts one
digest-pinned PostgreSQL container, waits for database readiness, shares it across the suite with
an isolated schema per fixture, and removes it after success or failure. No host PostgreSQL setup
is needed. Missing Docker, startup failures or missing database configuration fail the gate;
PostgreSQL cases never silently skip. `NATIVE_TEST_ARGS` accepts Cargo test arguments; its default
runs the workspace with all features.

Keep the toolchain, `CARGO_TARGET_DIR`, profile and `RUSTFLAGS` consistent between iterations.
Changing them can invalidate compiled artifacts. Coordinate builds that share a target directory;
do not delete another task's artifacts or change global compiler-cache settings. The first build
Expand Down
Loading
Loading