This repo contains the docker files that we suggest using with the assignments for CMPUT 415. This container is also packaged on our packages so that you don't have to build from source.
This repository and the images it publishes follow Semantic Versioning
2.0.0. Releases are cut as annotated
git tags of the form vMAJOR.MINOR.PATCH; each image is tagged with the
matching version (in addition to :latest and a dated tag).
For a container-publishing repo, the version increments mean:
- MAJOR — a change that breaks a documented consumer contract: removing
a tool that was on
PATH, bumping a tool's major version (e.g. LLVM 18 → 19), changing the base OS, changing the defaultWORKDIR/ENTRYPOINT, or renaming an image. Anything that would require a student, grader, or downstream CI to change their commands or Dockerfile. - MINOR — additive changes that keep existing usage working: a new tool installed, a new build arg, a new image variant, or a minor tool-version bump that preserves CLI compatibility.
- PATCH — bug fixes, base-image security refreshes, and internal cleanups that don't alter the installed toolchain surface.
Release notes are generated from commit trailers via GitLab's Changelog API;
contributors should add a Changelog: trailer to user-visible commits (see
the agent-commit protocol / project contributor guide for the trailer
conventions and category mapping).
Local dev tooling (pre-commit hooks and the GitLab CI lint helper) is managed with uv:
uv sync # create .venv/, install dev deps
uv run pre-commit install # register hooks in .git/hooks/The gitlab-ci-lint hook validates .gitlab-ci.yml against the project's
CI Lint API and needs a personal access token:
# Create a PAT with `api` scope at
# https://ua-gitlab.srv.ualberta.ca/-/user_settings/personal_access_tokens
export GITLAB_TOKEN=glpat-...Without a token the hook prints a hint and passes (so first-time contributors are not blocked); server-side lint still runs in CI.