postjevsql.git / mise.toml

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.

32"conda:clang" = "23.1.2"
33"conda:libclang" = "23.1.2"

mise run pgrx:install: build the extension with cargo into a Postgres you already run.

36"cargo:cargo-pgrx" = "0.19.2"

The jdx tools: git hooks, secrets.

39hk = "2.5.0"
40pkl = "0.32.1"
41fnox = "1.36.0"
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

55[tasks.submodules]
56description = "Fetch the git submodules (third-party/jevcrates)"
57run = "git submodule update --init --recursive"
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

73[tasks."check-versions"]
74description = "Fail if a version written outside mise.toml differs from it"
75run = "tools/check-versions.sh"
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)

87[tasks.build]
88description = "Build the extension with buck2 for the newest major (the install tree: lib/postjevsql.so, the control file, the install SQL)"
89depends = ["configure"]
90run = "buck2 build //crates/postjevsql:ext"
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'''