New website under development. In the meantime, follow EV Fleet (Pty) Ltd on LinkedIn for updates.
Status: decided — option 1, wired into .gitlab-ci.yml. This was a
visible change to shared project infrastructure that every future MR runs
against, so per postgres-implementation-plan.md Phase 4 it needed Chris’s
explicit sign-off before landing — Chris approved option 1 below on MR !6’s
review thread, and the test job now exists in .gitlab-ci.yml.
The initial sketch below assumed a full pip install -e ".[test]" — see
“Open question” for why that doesn’t work today, and option 1 (the one
Chris approved) for what actually landed in .gitlab-ci.yml instead.
test:
image: python:3.11-slim # placeholder — see "Open question" below
services:
- postgres:16-alpine
variables:
POSTGRES_DB: ev_fleet_sim
POSTGRES_USER: ev_fleet_sim
POSTGRES_PASSWORD: dev-only-change-me
before_script:
- pip install -e ".[test]"
script:
- pytest tests/ -q
The real pip install -e ".[test]" does not currently succeed on any
Python version available in this dev environment — matplotlib==3.3.4
fails to build on Python 3.14 (versioneer.py calls the removed
configparser.SafeConfigParser), and pyproj==3.2.1 fails on Python 3.11
(needs pkg_resources, absent from current build-isolation setuptools).
Both pins predate this Postgres work (see
postgres-implementation-plan.md Phase 1’s self-test notes).
This means the placeholder image: python:3.11-slim above is almost
certainly wrong for a real CI run of the full install — it would hit the
same wall. Three options, in order of how much they touch beyond this
Postgres slice:
db/-scoped tests, skipping the full pip install -e .
entirely — tests/conftest.py already loads db/’s submodules directly
without triggering the parent package’s heavy import chain (see
tests/README.md for why), so pip install "psycopg[binary]>=3.1" pytest
plus pytest tests/ -q on a plain python:3.11-slim image would work
today, verified locally. Narrowest job, doesn’t touch the pin problem.
← Chris’s decision: go with this option.sim-worker-full / the
Dockerfile.prod target) once one exists in CI, since that’s the only
environment where the full package is known to install. Broadest
coverage, but ties this test job to Sim’s full build, which is
currently Brain-side infra, not something this Postgres slice owns.matplotlib, pyproj, others) — out of scope for
this Postgres project entirely; a separate, larger conversation with
Chris about the package’s dependency health in general.