# Built for tinyraycaster: build from source using CMake on Ubuntu Jammy
FROM ubuntu:jammy-20260509
# Install build tools and SDL2 dependencies
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
build-essential \
cmake \
netpbm \
libsdl2-dev \
&& rm -rf /var/lib/apt/lists/*
# Create and set working directory for the project
WORKDIR /tinyraycaster
# Copy source code into container
COPY . .
# Build the project from source
RUN cmake -S . -B build && cmake --build build
# Default command: run the built binary (may require a display server)
CMD ["bash", "-lc", "./build/tinyraycaster"]
# Node / npm binaries (not used in this project but common in repos) node_modules/ # macOS and Windows junk .DS_Store Thumbs.db # Git and other VCS artifacts .git/ .gitignore # Build artifacts build/ CMakeFiles/ CMakeCache.txt cmake_install.cmake # SDL generated assets (optional) *.dll *.dylib *.so
Concerns: The Dockerfile builds a desktop SDL2-based app which may require a display server at runtime. Smoke tests should use a headless SDL driver (e.g., SDL_VIDEODRIVER=dummy) to avoid GUI requirements in CI., Runtime dependencies for SDL apps vary by distro; while libsdl2-dev is installed, runtime SDL2 libraries (and possibly X11 or a virtual framebuffer) may be needed on the host. Consider validating that the runtime libs are present in the final image., No explicit tests are included in the repository (no test/smoke scripts shown). If the app relies on non-trivial map/scene inputs, ensure smoke tests use realistic input formats that the binary actually accepts. Smoke [FAIL]: bash -lc 'printf "P3\n2 1\n255\n0 0 0 255 255 255\n" > /tinyraycaster/scene.ppm; SDL_VIDEODRIVER=dummy ./build/tinyraycaster -i /tinyraycaster/scene.ppm -o /tinyraycaster/output.ppm; test -s /tinyraycaster/output.ppm Output: sh: 1: set: Illegal option -o pipefail Smoke [FAIL]: bash -lc 'set -e; if [ ! -f /tinyraycaster/scene.ppm ]; then printf "P3\n2 1\n255\n0 0 0 255 255 255\n" > /tinyraycaster/scene.ppm; fi; SDL_VIDEODRIVER=dummy ./build/tinyraycaster -i /tinyraycaster/scene.ppm -o /tinyraycaster/output.ppm; test -s /tinyraycaster/output.ppm Output: sh: 1: set: Illegal option -o pipefail Smoke [FAIL]: bash -lc 'if [ -x ./build/tinyraycaster ]; then SDL_VIDEODRIVER=dummy ./build/tinyraycaster -i /tinyraycaster/scene.ppm -o /tinyraycaster/output.ppm; test -s /tinyraycaster/output.ppm; else echo FAIL; exit 1; fi Output: sh: 1: set: Illegal option -o pipefail
# Built for tinyraycaster: build from source using CMake on Ubuntu Jammy
FROM ubuntu:jammy-20260509
# Install build tools and SDL2 dependencies
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
build-essential \
cmake \
netpbm \
libsdl2-dev \
bash \
&& rm -rf /var/lib/apt/lists/*
# Ensure /bin/sh is bash to support pipefail usage in smoke tests
RUN ln -sf /bin/bash /bin/sh
# Create and set working directory for the project
WORKDIR /tinyraycaster
# Copy source code into container
COPY . .
# Build the project from source
RUN cmake -S . -B build && cmake --build build
# Default command: run the built binary (may require a display server)
CMD ["bash", "-lc", "./build/tinyraycaster"]
Concerns: The built binary is an SDL2 desktop app which may require a display server; smoke testing only the build/tests may miss runtime GUI issues when run headless., If the repository has no CTest-enabled tests, the proposed smoke test (ctest) may do nothing or pass trivially, giving a false sense of health., The FROM tag ubuntu:jammy-20260509 is date-specific and may not be stable across environments or registries; ensure this tag exists in the target registry. Smoke [PASS]: cd /tinyraycaster/build && ctest --output-on-failure -j2