This repository hosts the build pipeline for the runner images used by the OpenTofu/Terraform remote operations backend of the Scalr platform and on-prem Scalr Agents.
Three variants are published from this repository:
scalr/runner:<x.y.z>-slim— slim image: a minimal set of tools.scalr/runner:<x.y.z>— full image: the slim set plus cloud CLIs (AWS, Azure, gcloud, kubectl, scalr-cli) and Python 3.14.scalr/runner:<x.y.z>-python39— same as the full image, but with Python 3.9 instead of 3.14 (for legacy workflows).
Images are based on
debian:trixie-slim (pinned by digest in
versions.json) and published as multi-arch manifests for
linux/amd64 and linux/arm64.
The images provide a set of tools commonly used in IaC workflows, grouped below by the variant they appear in.
Present in all variants. These come from the pinned Debian Trixie snapshot
referenced by DEBIAN_BASE_DIGEST in versions.json, so
their exact versions are whatever that snapshot pins.
- Archive tools:
tar— manipulate tar archives (from the base image)gzip— compress and decompress.gzfiles (from the base image)zip,unzip— create and extract ZIP archives
- Encryption:
gnupg— secure data encryption and signing
- Git:
git-core— core Gitgit-lfs— Large File Storage extensionopenssh-client— SSH transport for Git over SSH
- HTTP / network:
curl— data transfer with URLswget— file downloads from the webca-certificates— trusted CA bundle
- System / misc:
jq— command-line JSON processorlsb-release— Linux Standard Base release infobash(default shell / entrypoint)
These are pinned by exact version + SHA256 in
versions.json and downloaded during the build. The
versions below are the current pins (kept in sync with versions.json by
bump-versions.py):
- Programming language
- Python (v3.14.5) — standalone CPython build from astral.sh
- Cloud CLIs
- AWS CLI (2.34.53) — Amazon Web Services CLI
- AWS Session Manager Plugin — SSM session support for the AWS CLI
- Azure CLI (2.86.0) — Microsoft Azure CLI
- Google Cloud SDK (569.0.0) —
gcloudwithalpha,beta, andgke-gcloud-auth-plugincomponents - Kubectl (0.36.1) — Kubernetes CLI
- Scalr CLI (0.18.0) — command-line client for the Scalr API
Same as the full image, with Python 3.14 replaced by Python 3.9 (currently v3.9.25).
Google Cloud SDK pin. Newer gcloud releases dropped Python 3.9
support, so the SDK is pinned to 564.0.0 (the last version that still
works on Python 3.9) via the versions_python39 map. bump-versions.py
does not auto-bump this pin — if you ever change it, recompute the
per-arch SHA256s for the new version by hand. The full (Python 3.14)
image continues to track the latest gcloud release.
A non-root user scalr with uid/gid 1000 is created in the base layer
and is therefore present in all variants.
Builds are driven by docker-bake.hcl (targets, tags,
cache config) and versions.json (pinned tool versions
and SHA256 checksums). versions.json is a native Docker Buildx Bake
variable file containing three maps:
versions_base— Debian base image and digest (used by every target, including-slim)versions_full— extra tools layered on top for the full image (kubectl, gcloud, AWS CLI, Azure CLI, Scalr CLI, Python 3.14, AWS SSM Plugin)versions_python39— Python 3.9 overrides merged on top ofversions_fullfor the-python39image
Always pass both files. Every download is verified by SHA256 in the Dockerfile.
Tags use VERSION from the environment, defaulting to dev for local
builds.
The bake file declares platforms = ["linux/amd64", "linux/arm64"] for CI
multi-arch builds. Local builds with Docker's default driver cannot do
multi-platform, so add --set "*.platform=linux/amd64" (or your host arch)
and --load to every local command.
VERSION=dev docker buildx bake -f docker-bake.hcl -f versions.json \
--set "*.platform=linux/amd64" --load# scalr/runner:dev
VERSION=dev docker buildx bake -f docker-bake.hcl -f versions.json \
--set "*.platform=linux/amd64" --load full
# scalr/runner:dev-python39
VERSION=dev docker buildx bake -f docker-bake.hcl -f versions.json \
--set "*.platform=linux/amd64" --load python39
# scalr/runner:dev-slim
VERSION=dev docker buildx bake -f docker-bake.hcl -f versions.json \
--set "*.platform=linux/amd64" --load slimTo update all tool versions to their latest releases, run:
./bump-versions.pyThis script fetches the latest versions from upstream sources and updates
the versions_base, versions_full, and versions_python39 maps in
versions.json (plus the Included Tools
section of this README). For every tool it also refreshes the per-arch
SHA256 checksums used by the Dockerfile to verify each download.
Requirements: python3 (stdlib only, no pip install needed).
GitHub's anonymous API quota is 60 requests/hour. The script makes ~5 calls
to api.github.com per run, so frequent reruns may hit HTTP 403: rate limit exceeded. Export GITHUB_TOKEN (or GH_TOKEN) to lift the limit to
5000/hour:
GITHUB_TOKEN=$(gh auth token) ./bump-versions.py