New website under development. In the meantime, follow EV Fleet (Pty) Ltd on LinkedIn for updates.

EV-Fleet


Documentation:

Proposal: Postgres-backed CI test job (PG-T4.2)

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.

What was proposed, and what shipped

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

Open question this proposal couldn’t resolve on its own

The real pip install -e ".[test]" does not currently succeed on any Python version available in this dev environmentmatplotlib==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:

  1. Run only the 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.
  2. Run inside the existing Sim Docker image (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.
  3. Fix the pins (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.