Development
The Makefile runs normal developer workflows in containers. The development image (Dockerfile.dev) contains formatting, type-checking, and test tooling but not heavyweight ML runtime dependencies, so unit tests stub the ML backends.
| Command | Purpose |
|---|---|
make help | List targets |
make dev-image | Build the development image; the dev targets depend on it |
make shell | Open a shell in the development container |
make check | Lint and unit tests in the development image |
make lint | Run flake8 and mypy on src |
make test-unit | Run the offline unit tests (make test is the same) |
make format | Run isort and Black on src |
make build / make build-cuda | Build CPU or CUDA production image |
make build-all | Build both images |
make run / make run-cuda | Build and run an image on PORT (default 8000) with ~/.talkies-data as /data |
make test-streaming | Real CPU native WebSocket ASR E2E |
make test-streaming-custom | Real CPU Sherpa-ONNX/Vosk WebSocket and HTTP E2E |
make test-streaming-custom-cuda | Real CUDA Sherpa WebSocket and HTTP E2E |
make test-integration | CUDA integration suite on a GPU-capable host |
make compile-heavy | Regenerate the hash-locked ML requirements |
make pkg-add PKG=..., pkg-remove, pkg-update, pkg-upgrade, pkg-lock | Change light dependencies through uv |
make version | Print the release tag from pyproject.toml |
make docs | Build this documentation site into .testing/docs-site |
make clean | Remove local images and Python build and cache files |
make run and make run-cuda publish PORT on every host interface and do not set TALKIES_ENABLED_MODELS, so the first run downloads the whole bundled registry. Use the docker run commands in Getting started for a loopback-only, restricted start.
The two images get parakeet.cpp differently. The CPU image compiles it from a pinned upstream commit in a build stage of Dockerfile. The CUDA image installs the upstream parakeet.cpp v0.5.0 precompiled CUDA 12 shared-library bundle instead: Dockerfile.cuda pins both the release URL and its published SHA-256 digest, verifies the archive before extraction, and keeps the bundle’s CUDA 12.9 runtime libraries isolated under /opt/parakeet, so it has no parakeet.cpp compiler stage.
The streaming and integration tests run host-side because they start production images and connect to their HTTP/WebSocket port. The custom suite uses the pinned registry in tests/integration/.
Lightweight dependencies are locked in uv.lock. CPU and CUDA ML dependencies are hash-locked in requirements-heavy-cpu.txt and requirements-heavy-cuda.txt; use make compile-heavy to regenerate them. The pkg-* targets that change dependencies first move the uv exclude-newer cutoff to UTC midnight seven days ago.
Documentation site
Keep the root README short and place detailed user documentation in docs/. GitHub Pages builds docs/ from the main branch with Jekyll and the Just the Docs theme. Every page needs front matter with a title, a description of 50 to 170 characters, and a nav_order. Link pages to each other with relative .md paths, and link any file outside docs/ with its full https://github.com/psyb0t/docker-talkies/blob/main/<path> URL, because relative links out of docs/ break on the site.
make docs builds the site with the same Jekyll image GitHub Pages uses and writes it to .testing/docs-site, which Git ignores.