chore: replace docker-compose with nix process-compose for dev deps#725
chore: replace docker-compose with nix process-compose for dev deps#725vindard wants to merge 3 commits into
Conversation
es-entity 0.10.37 contains the direction-aware NULL fallback in cursor WHERE clauses for nullable sort columns (GaloyMoney/es-entity#137) and the opt-in `nullable` column attribute for non-Option<T> Rust types (GaloyMoney/es-entity#138). The macro change in #137 alters the DESC SQL emitted for `Option<...>` columns — for cala-ledger this affects `Account.external_id` and `AccountSet.external_id` pagination. New fingerprints replace the old ones in `cala-ledger/.sqlx/`; semantics are unchanged for non-NULL rows and now also include NULL rows on page 2+ for DESC (previously dropped). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Align with lana-bank's docker-free dev tooling: contributors no longer need
Docker (or podman) installed. start-deps now runs Postgres (with
pg_stat_statements preloaded) plus the OTel collector directly via
process-compose-flake, with data stored under .nix-deps/.
Drops docker-compose.yml, dev/bin/{clean-deps,docker-compose-up}.sh, and
nix/podman-runner.nix. The otel-agent config switches the deprecated
`logging` exporter to `debug` for compatibility with otelcol-contrib 0.144+
(nixpkgs default).
CI surfaces (.github workflows + Concourse pipeline) are unchanged — both
already invoke nix run .#nextest / .#perf, whose internals now use the
process-compose path.
Refs GaloyMoney/volcano-wip#772.
📊 Performance ReportCommit: 31460dc Cala Performance Benchmark Results (non-representative)Criterion Benchmark Results (single-threaded)
Load Testing Results (parallel-execution)
Note: Performance results may vary based on system resources and database state. Last updated by commit 31460dc |
Closes the only gap in per-service readiness coverage: without a probe, process-compose marks otel-agent as Running but never Ready, so `is-ready --wait` hangs forever if the collector fails to start (e.g. a deprecated config option that decoded fine until otelcol 0.144). With the probe, PC fails the process after 60s and the wait exits non-zero — fast, self-describing failure instead of CI timeout. The probe targets the health_check extension already enabled in dev/otel-agent-config.yaml (default :13133/).
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 31460dc. Configure here.
| signal = 2; | ||
| timeout_seconds = 10; | ||
| }; | ||
| }; |
There was a problem hiding this comment.
Race condition: tests may start before migrations complete
Medium Severity
The setup-db process has no readiness_probe, so project is-ready --wait considers it "ready" the moment it enters the Running state — even while migrations are still executing. Both nextest-runner and perf-runner immediately proceed to run tests/queries after is-ready returns, creating a race where the database schema may not yet exist. In practice the otel-agent probe's 2-second initial delay provides a timing buffer, but this is fragile and could cause flaky failures on slow CI machines or as migrations grow.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 31460dc. Configure here.


Summary
Aligns cala's dev tooling with lana-bank's docker-free pattern: contributors no longer need Docker (or podman) installed locally.
start-depsnow runs Postgres (withpg_stat_statementspreloaded) plus the OTel collector directly viaprocess-compose-flake, with data stored under.nix-deps/.process-compose-flakeflake inputnix-deps-base(process-compose stack:server-pg+setup-db+otel-agent) andsetup-db-devpackagesnextest-runnerandperf-runnerto use the new stack instead ofpodman-compose-runnerdocker-compose.yml,dev/bin/{clean-deps,docker-compose-up}.sh, andnix/podman-runner.nixdocker-compose,podman,podman-compose,wait4xfromnativeBuildInputsMakefilestart-deps/clean-deps/setup-dbto callnix run .#...dev/otel-agent-config.yaml's deprecatedloggingexporter todebugfor compat withotelcol-contrib0.144+ (the nixpkgs version — the old docker image pinned 0.57.2)CI is unchanged: both
.github/workflows/test-integration.yml/perf-report.ymlandci/pipeline.ymlalready invokenix run .#nextest/.#perf, and the runners' internals are what we updated.Refs
Test plan
make start-depsbrings up server-pg + otel-agent + auto-applies migrations under.nix-deps/server-pg/cargo nextest run --workspace --locked— all 97 tests pass against the new PGpg_stat_statementsextension available (shared_preload_librariesset in postgresql.conf)make clean-depsstops the stack and clears.nix-deps/🤖 Generated with Claude Code
Note
Medium Risk
es-entity 0.10.37 changes SQL for job polling and entity list pagination, which can affect runtime DB behavior beyond the dev-tooling swap.
Overview
Replaces Docker/podman-based dev dependencies with a Nix + process-compose stack: local Postgres (with
pg_stat_statements), automaticsqlxmigrations, and the OTel collector run from.nix-deps/.make start-deps,clean-deps, andsetup-dbnow callnix run .#nix-deps-baseand.#setup-db-dev;nextest-runnerandperf-runnerstart the same stack instead of compose/podman.Removes
docker-compose.yml,dev/bin/clean-deps.sh,docker-compose-up.sh, andnix/podman-runner.nix, and drops Docker from the README. Updatesdev/otel-agent-config.yamlto use thedebugexporter (replacing deprecatedlogging) for currentotelcol-contrib.Bumps
es-entityto 0.10.37 and refreshes.sqlxoffline metadata for generated job-poller and account/account-set list queries (extra timestamptz bind parameters and revised cursor/pagination predicates).Reviewed by Cursor Bugbot for commit 31460dc. Bugbot is set up for automated code reviews on this repo. Configure here.