Docker images for AtCoder language environments.
- Pick the selector for the language you want. The safest choice is the
info/*.tomlfilename stem. - Pull the image:
docker pull ghcr.io/sortA0329/atcoder-docker-image/<normalized-stem>:2025-10- Run it with your source mounted into
/judge:
docker run --rm -it -v "$PWD:/judge" ghcr.io/sortA0329/atcoder-docker-image/<normalized-stem>:2025-10 bashInside the container, work in /judge and use the language tools directly.
Each image is built by running the install step in its metadata file. Common pieces include:
- Base image:
ubuntu:24.04 - Shared packages:
bash,curl,git,python3,build-essential, and more - Working directory:
/judge - Metadata:
/opt/atcoder/info.toml - Install script:
/opt/atcoder/atcoder-install.sh - Default shell at runtime:
bash
Each image is defined by one info/*.toml file. That file is the source of truth for the image and usually contains:
language: a short language namedisplay: the user-facing name shown in selectorsinstall: the build-time setup scriptcompile: the compile check or command, when presentexecution: the runtime command, when presentfilename: the main source filename expected by the runtime, when presentlicenseandlibrary: dependency metadata, when present
If you are choosing an image, start with the filename stem under info/, then check the display field when needed.
patches/ contains short notes for images that need extra handling. The patch filename matches the image stem, and each file names its target language:
ada-2022-gnat-15-2-0.md— Adaclay-20250308-1-gcc-15-2-0.md— cLayeiffel-liberty-eiffel-07829e3.md— Liberty Eiffeljule-0-1-6.md— Julekuin-kuincl-v-2021-8-17.md— Kuinjulia-1-11-6.md— Juliagleam-1-12-0-otp-28-0-2.md— Gleampony-ponyc-0-59-0.md— Ponypython-codon-0-19-3.md— Codonpython-pypy-3-11-v7-3-20.md— PyPyruby-3-3-truffleruby-25-0-0.md— TruffleRubyruby-3-4-5.md— Rubysagemath-10-7.md— SageMathwhitespace-whitespacers-1-3-0.md— Whitespace
If a language has a patch file, read it before using that image.
uv run build.py python-cpython-3-13-7selector can be any of:
- the
info/*.tomlfilename stem - the
languagefield - the
displayfield
Examples:
uv run build.py "Python"
uv run build.py "Python (CPython 3.13.7)"
uv run build.py python-cpython-3-13-7The local tag after building is "<normalized-stem>:2025-10".
For example, python-cpython-3-13-7 becomes python-cpython-3-13-7:2025-10.
docker run --rm -it python-cpython-3-13-7:2025-10 bashThe working directory is /judge. Put your source files there and use tools like python and g++ directly.
This is only needed if you are publishing a new image.
uv run upload.py python-cpython-3-13-7upload.py resolves the GHCR namespace in this order:
GITHUB_REPOSITORYremote.origin.url
It accepts credentials from either:
GHCR_USERNAME+GHCR_TOKENGITHUB_ACTOR+GITHUB_TOKEN
If neither is set, it falls back to the gh CLI.
The full pushed image reference is:
ghcr.io/sortA0329/atcoder-docker-image/<normalized-stem>:2025-10
Two workflows are included:
build-and-upload-language.yml- builds and uploads one selector
build-and-upload-all-languages.yml- builds and uploads all languages
- supports
skip_selectorsto exclude specific images