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
9 changes: 9 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,14 @@ final-status-level = "slow"
slow-timeout = { period = "60s", terminate-after = 2 }
retries = 1

# Building a 200-table persistent catalog is intentionally CPU- and I/O-heavy.
# Give this one overflow-chain regression exclusive access to the public runner
# and a larger hard timeout; every other test keeps the 120-second ceiling.
[[profile.ci.overrides]]
filter = 'test(massive_catalog_forces_meta_overflow_chain)'
threads-required = "num-cpus"
slow-timeout = { period = "60s", terminate-after = 5 }
retries = 0

[profile.ci.junit]
path = "junit.xml"
102 changes: 102 additions & 0 deletions .github/workflows/blacksmith-testbox.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Blacksmith Testbox

# Permanent reddb-only pilot. Warm with `--idle-timeout 10`, run the bounded
# comparison command, then always call `blacksmith testbox stop --id <id>`.
# Select exactly one job with `blacksmith testbox warmup blacksmith-testbox.yml
# --job rust-{2,4,8}vcpu --idle-timeout 10`.
on:
workflow_dispatch:
inputs:
testbox_id:
type: string
description: Testbox session ID
required: true

permissions:
contents: read

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0

jobs:
rust-2vcpu:
name: Rust 2 vCPU
runs-on: blacksmith-2vcpu-ubuntu-2404
timeout-minutes: 90
steps:
- name: Begin Testbox
uses: useblacksmith/begin-testbox@233448af4bfdc6fca509a7f0974411ac6d8a8043 # v2
with:
testbox_id: ${{ inputs.testbox_id }}
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@1.91.0
- uses: ./.github/actions/install-protoc
with:
version: '28.3'
- uses: rui314/setup-mold@v1
- uses: mozilla-actions/sccache-action@v0.0.10
- uses: Swatinem/rust-cache@v2
with:
shared-key: testbox-rust-1.91.0-2vcpu
cache-on-failure: 'true'
- uses: taiki-e/install-action@v2
with:
tool: nextest
- name: Run Testbox
uses: useblacksmith/run-testbox@5ca05834db1d3813554d1dd109e5f2087a8d7cbc # v2
if: always()

rust-4vcpu:
name: Rust 4 vCPU
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 90
steps:
- name: Begin Testbox
uses: useblacksmith/begin-testbox@233448af4bfdc6fca509a7f0974411ac6d8a8043 # v2
with:
testbox_id: ${{ inputs.testbox_id }}
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@1.91.0
- uses: ./.github/actions/install-protoc
with:
version: '28.3'
- uses: rui314/setup-mold@v1
- uses: mozilla-actions/sccache-action@v0.0.10
- uses: Swatinem/rust-cache@v2
with:
shared-key: testbox-rust-1.91.0-4vcpu
cache-on-failure: 'true'
- uses: taiki-e/install-action@v2
with:
tool: nextest
- name: Run Testbox
uses: useblacksmith/run-testbox@5ca05834db1d3813554d1dd109e5f2087a8d7cbc # v2
if: always()

rust-8vcpu:
name: Rust 8 vCPU
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 90
steps:
- name: Begin Testbox
uses: useblacksmith/begin-testbox@233448af4bfdc6fca509a7f0974411ac6d8a8043 # v2
with:
testbox_id: ${{ inputs.testbox_id }}
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@1.91.0
- uses: ./.github/actions/install-protoc
with:
version: '28.3'
- uses: rui314/setup-mold@v1
- uses: mozilla-actions/sccache-action@v0.0.10
- uses: Swatinem/rust-cache@v2
with:
shared-key: testbox-rust-1.91.0-8vcpu
cache-on-failure: 'true'
- uses: taiki-e/install-action@v2
with:
tool: nextest
- name: Run Testbox
uses: useblacksmith/run-testbox@5ca05834db1d3813554d1dd109e5f2087a8d7cbc # v2
if: always()
2 changes: 1 addition & 1 deletion .github/workflows/changesets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ concurrency:
jobs:
changesets:
name: Version Packages
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-latest
# Skip on the version-bump commit itself to avoid an infinite loop. The
# commit landing the version bump is authored by github-actions[bot] —
# that push doesn't need to re-trigger this workflow.
Expand Down
47 changes: 25 additions & 22 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
name: CI

on:
merge_group:
types: [checks_requested]
push:
branches: [ main, develop ]
paths-ignore:
Expand Down Expand Up @@ -32,13 +34,13 @@ on:
# Cost guard: new pushes cancel older runs on the same ref. Release-grade
# validation lives in release.yml; CI push runs should stay quick.
#
# Cost policy (July 2026, Blacksmith bill): expensive jobs (feature matrix,
# cross-platform, driver conformance, containers, fuzz smoke, packaging) run
# POST-MERGE on push to main/develop — never on an open PR. PRs keep the fast
# correctness lane: gate, lints, contract gates, quality, tests, RQL
# conformance. `workflow_dispatch` with full_ci=true still runs everything
# on demand. rust-cache saves are restricted to non-PR runs (save-if) so PR
# branches never persist multi-GB caches.
# Cost policy (August 2026, Blacksmith bill): pushes and pull requests run the
# trunk correctness lane on free standard runners for this public repository.
# Feature matrices, cross-platform builds, driver conformance, containers,
# fuzz smoke, and packaging are release-adjacent and run on Blacksmith only
# through `workflow_dispatch` with full_ci=true. Stable release builds remain
# authoritative in release.yml. rust-cache saves are restricted to non-PR runs
# (save-if) so PR branches never persist multi-GB caches.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
Expand All @@ -55,7 +57,8 @@ jobs:
# Dependabot (Dependabot PRs run the dedicated dependabot.yml workflow instead).
gate:
name: gate
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-latest
timeout-minutes: 2
if: |
github.actor != 'dependabot[bot]' &&
(github.event_name != 'pull_request' || github.event.pull_request.draft == false)
Expand Down Expand Up @@ -224,7 +227,7 @@ jobs:
quality:
name: Quality (fmt, check, clippy)
needs: gate
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 20
env:
SCCACHE_GHA_ENABLED: "true"
Expand Down Expand Up @@ -260,7 +263,7 @@ jobs:
# every later RQL-extraction slice must keep green.
name: RQL Conformance (sqllogictest)
needs: gate
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 20
env:
SCCACHE_GHA_ENABLED: "true"
Expand Down Expand Up @@ -292,7 +295,7 @@ jobs:
# that motivated this gate.
name: Drivers / Python (cargo check)
needs: gate
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 15
env:
SCCACHE_GHA_ENABLED: "true"
Expand Down Expand Up @@ -322,7 +325,7 @@ jobs:
# operators may select for release artifacts.
name: Feature Matrix (${{ matrix.features.label }})
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 20
strategy:
Expand Down Expand Up @@ -357,7 +360,7 @@ jobs:
tests:
name: Test Suite
needs: gate
runs-on: blacksmith-8vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 20
env:
SCCACHE_GHA_ENABLED: "true"
Expand Down Expand Up @@ -427,7 +430,7 @@ jobs:
driver-param-conformance:
name: Driver Param Conformance
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 10
steps:
Expand Down Expand Up @@ -501,7 +504,7 @@ jobs:
# statically links the engine, so `maturin develop` is self-contained.
name: Driver Runnable Examples
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 35
env:
Expand Down Expand Up @@ -550,7 +553,7 @@ jobs:
# tarball, so this also exercises the include manifest end-to-end.
name: Publish Dry-Run (crates.io)
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 25
env:
Expand All @@ -577,7 +580,7 @@ jobs:
containers:
name: Container Stack
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 25
steps:
Expand Down Expand Up @@ -716,7 +719,7 @@ jobs:
# (systemd install, mmap, Unix sockets) via cfg gates in the source.
name: Windows (build + unit tests)
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-8vcpu-windows-2025
timeout-minutes: 30
steps:
Expand All @@ -741,7 +744,7 @@ jobs:
# story complete. Same scope — library build + unit tests.
name: macOS (build + unit tests)
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-6vcpu-macos-15
timeout-minutes: 30
steps:
Expand All @@ -760,11 +763,11 @@ jobs:
run: cargo test --locked --lib

fuzz-parsers:
# Post-merge bounded smoke window (cost policy above); the long
# On-demand bounded smoke window (cost policy above); the long
# exploration window lives in parser-fuzz-nightly.yml.
name: Fuzz Parsers
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 15
env:
Expand Down Expand Up @@ -819,7 +822,7 @@ jobs:
package:
name: cargo package dry-run
needs: gate
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.full_ci)
if: github.event_name == 'workflow_dispatch' && inputs.full_ci
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 15
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/crypto-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
crypto-coverage:
name: Crypto Coverage Gate
if: github.actor != 'dependabot[bot]'
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-latest
permissions:
contents: read
timeout-minutes: 15
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
check:
name: Verify update compiles
if: github.actor == 'dependabot[bot]'
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
Expand Down Expand Up @@ -64,7 +64,7 @@ jobs:
name: Auto-approve patch/minor bumps
needs: check
if: github.actor == 'dependabot[bot]'
runs-on: blacksmith-2vcpu-ubuntu-2404
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ concurrency:
jobs:
deploy:
name: Deploy to GitHub Pages
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/drill-nightly.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: Nightly DR Drill
name: Weekly DR Drill

on:
schedule:
- cron: '0 3 * * *'
- cron: '0 3 * * 2'
workflow_dispatch:

permissions:
Expand All @@ -16,7 +16,7 @@ env:
jobs:
drill:
name: Backup/Restore Drills
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 30
env:
SCCACHE_GHA_ENABLED: "true"
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/dst-nightly.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: DST Nightly
name: DST Weekly

on:
schedule:
- cron: "23 7 * * *"
- cron: "23 7 * * 4"
workflow_dispatch:

permissions:
Expand All @@ -15,7 +15,7 @@ env:
jobs:
dst-seed-sweep:
name: DST seed sweep
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
Expand All @@ -32,7 +32,7 @@ jobs:

storage-fault-recovery:
name: Storage fault recovery
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-24.04
timeout-minutes: 25
permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/file-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
file-coverage:
name: File Coverage Gate
if: github.actor != 'dependabot[bot]'
runs-on: blacksmith-4vcpu-ubuntu-2404
runs-on: ubuntu-latest
permissions:
contents: read
timeout-minutes: 30
Expand Down
Loading
Loading