The toolchain image: an official image pinned by digest, plus only what the repository needs; ends with ENV DP_IN_CONTAINER=1
Makefile
Per repository
Includes tools/container.mk first; make check runs everything CI checks
.devcontainer/devcontainer.json
Per repository
The same Containerfile, for VS Code, JetBrains, and Codespaces
Each repository's CI has a Shared tooling job that fails if tools/dp-run or
tools/container.mk differs from the canonical copy. Language repositories get both files
from the curriculum submodule, through BASE-MAKEFILE.
tools/dp-run [--port N]... [--] COMMAND [ARG]... run COMMAND in the toolchain environment
tools/dp-run --shell interactive shell
tools/dp-run --resolve print the runtime: podman, docker, or local
tools/dp-run --image-ref print (building if needed) the image
tools/dp-run --info print runtime, image, and mounts
In a container, dp-run:
Aspect
Behavior
Image
DP_IMAGE, or ./Containerfile built once as localhost/dp-<repository>:<content hash>
Source
The repository root (git toplevel) is mounted read-write at the same path (on Windows: /workspace), and the working directory is preserved
Ownership
Files are created with your user and group IDs (Podman --userns=keep-id; Docker --user UID:GID)
SELinux
Mounts get the :z label when SELinux is enabled
Caches
~/.cache/dialectic-playground is mounted at /dp-cache; HOME and XDG_CACHE_HOME point into it
Ports
--port N publishes container port N on 127.0.0.1:N; DP_BIND_ADDRESS=0.0.0.0 is set so servers listen on it
Environment
DP_IN_CONTAINER=1, plus CI, GITHUB_ACTIONS, TERM, NO_COLOR, and DP_QUIET when set
Custom asset tools (Inkscape, ImageMagick, brand fonts), on debian:trixie-slim with a dated Debian snapshot. Published privately to ghcr.io/dialectic-playground/asset-tools.
docs
ghcr.io/astral-sh/uv (Python 3.12) + make
sdlc-curriculum
python:3.12-slim-trixie + make, git
repo-template
debian:trixie-slim + make, git; each new repository replaces it with its own toolchain
Language repositories (16)
The language's official image + python3 (for the black-box runner) + make; Objective-C uses debian:trixie-slim + GCC Objective-C + GNUstep Base. See Languages.
Every base image is pinned by its multi-architecture index digest, and Dependabot's docker
ecosystem keeps it current.