The toolchain, the environment and the tasks of this repository: the one place every tool version lives. Nothing here needs nix, nix-darwin or root:
mise trust && mise install the toolchain (git and curl must exist)
mise tasks what can be run
mise run check the fast gates (no database, no network)
mise run test the whole suite through buck2, on Postgres 17 and 18
tools/check-versions.sh (part of mise run check) fails when a version written
elsewhere (the PostgreSQL majors in build/defs.bzl, pgrx's pin, hk.pkl's hk release)
differs from the one here. The nix flake only wraps this file; it holds no version of its own.
12min_version = "2026.10.0"
14[tools]
The compiler the buck toolchain drives. rustfmt formats pgrx-pg-sys's generated bindings.
16rust = { version = "1.98.1", profile = "minimal", components = "rustfmt,clippy" }
buck2 owns the target graph. Pinned to a release: upstream replaces the assets of its "latest" tag in place. 2026-09-15 is the first release with the h2 window fix the test suite needs (tests/CLAUDE.md), and the one nix-pkgs carries.
21buck2 = "2026-09-15"
The prelude's python toolchain interpreter.
24python = "3.14.7"
A server of every supported major (PG_MAJORS in build/defs.bzl): each test starts a throwaway one, and bindgen reads each major's headers through its pg_config. Prebuilt, from conda-forge.
28"conda:postgresql" = ["17.11", "18.6"]
The C and C++ toolchain, self-contained (it carries its own sysroot, linker and archiver, so the machine needs no compiler), and libclang for pgrx-pg-sys's bindgen.
mise run pgrx:install: build the extension with cargo into a Postgres you already run.
36"cargo:cargo-pgrx" = "0.19.2"
43[env]
pgrx-pg-sys runs bindgen over each major's server headers, and bindgen needs libclang, the C headers clang ships and a libc sysroot. buck2 passes its own environment to the build scripts it runs, so these are set here, pointing at conda-forge's clang and libclang where mise installed them. tools/bindgen-shim holds the one header conda-forge's PostgreSQL 18 asks for that its sysroot no longer has.
48LIBCLANG_PATH = "{{ env.MISE_DATA_DIR | default(value=xdg_data_home ~ '/mise') }}/installs/conda-libclang/23.1.2/lib" 49BINDGEN_EXTRA_CLANG_ARGS = "--sysroot={{ env.MISE_DATA_DIR | default(value=xdg_data_home ~ '/mise') }}/installs/conda-clang/23.1.2/x86_64-conda-linux-gnu/sysroot -isystem {{ env.MISE_DATA_DIR | default(value=xdg_data_home ~ '/mise') }}/installs/conda-clang/23.1.2/lib/clang/23/include -isystem {{ config_root }}/tools/bindgen-shim"
Only for mise run gates:record; a secret, so never written here (see fnox.toml):
TYPESAFE_API_KEY
---------------------------------------------------------------- setup
59[tasks.configure] 60description = "Write .buckconfig.local: the paths of the C toolchain, python, rustc and each Postgres major" 61run = ''' 62POSTJEVSQL_PG_17="$(mise where conda:postgresql@17.11)" \ 63POSTJEVSQL_PG_18="$(mise where conda:postgresql@18.6)" \ 64tools/configure.sh 65''' 66 67[tasks."hooks:install"] 68description = "Install the git hooks (hk.pkl): the pure crates' tests before a push" 69run = "hk install"
---------------------------------------------------------------- checks
77[tasks."test:core"] 78description = "The crates that do no I/O (postjevsql-core, postjevsql-sidecar), natively with cargo: no database, no network, about a second" 79run = "cargo test -p postjevsql-core -p postjevsql-sidecar" 80 81[tasks.check] 82description = "The fast gates: versions and the crates that need no database" 83depends = ["check-versions", "test:core"]
---------------------------------------------------------------- build and test (buck2)
92[tasks."build:pg17"] 93description = "Build the extension for Postgres 17" 94depends = ["configure"] 95run = "buck2 build //crates/postjevsql:ext --target-platforms //platforms:pg17" 96 97[tasks.test] 98description = "The whole suite through buck2: every unit and integration test, on Postgres 17 and 18 (a cold run takes about 14 minutes on 3 cores)" 99run = "tests/run-check.sh" 100 101[tasks."test:buck"] 102description = "buck2 test //... directly, with no lock (use test: it queues checks that share this checkout's buck daemon)" 103depends = ["configure"] 104run = "buck2 test //..." 105 106[tasks."test:one"] 107description = "One buck2 test target, for example: mise run test:one -- //tests:happy_path" 108depends = ["configure"] 109run = "buck2 test" 110 111[tasks."generated:update"] 112description = "Rewrite the committed generated files (Cargo manifests, licence notices) from the buck graph" 113depends = ["configure"] 114run = ["buck2 run //tools/cargo-gen:update", "buck2 run //tools/third-party-notices:update"] 115 116[tasks."gates:record"] 117description = "Record the release gates against the live Jev, spending money (mise run gates:record -- --model jev-1.13.0 --repeats 30); needs TYPESAFE_API_KEY, from the environment or fnox" 118depends = ["configure"] 119run = "tools/with-secrets.sh buck2 run //tools/record-gates:record-gates --" 120 121[tasks."pgrx:install"] 122description = "Build the extension with cargo-pgrx into the Postgres that pg_config names (mise run pgrx:install -- /path/to/pg_config; default: the newest major mise installed)" 123run = ''' 124cfg="${1:-$(mise where conda:postgresql@18.6)/bin/pg_config}" 125cargo pgrx install --release --pg-config "$cfg" 126'''