Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 31 additions & 6 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@ jobs:
- name: Read Versions
id: versions
run: |
echo "kubectl=$(grep kubectl versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "gcloud=$(grep gcloud versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "aws_cli=$(grep aws_cli versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "azure_cli=$(grep azure_cli versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "scalr_cli=$(grep scalr_cli versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "python=$(grep python versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "kubectl=$(grep '^kubectl=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "gcloud=$(grep '^gcloud=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "aws_cli=$(grep '^aws_cli=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "azure_cli=$(grep '^azure_cli=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "scalr_cli=$(grep '^scalr_cli=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "python=$(grep '^python=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "python_release=$(grep '^python_release=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT

- name: Build Docker image
uses: docker/build-push-action@v6
Expand All @@ -49,6 +50,7 @@ jobs:
AZURE_CLI_VERSION=${{ steps.versions.outputs.azure_cli }}
SCALR_CLI_VERSION=${{ steps.versions.outputs.scalr_cli }}
PYTHON_VERSION=${{ steps.versions.outputs.python }}
PYTHON_RELEASE=${{ steps.versions.outputs.python_release }}
cache-from: type=registry,ref=scalr/runner:buildcache
cache-to: type=registry,ref=scalr/runner:buildcache
load: true
Expand All @@ -65,3 +67,26 @@ jobs:
docker run --rm scalr/runner:sha-${{ github.sha }} -xc 'python --version'
docker run --rm scalr/runner:sha-${{ github.sha }} -xc 'pip --version'
docker run --rm scalr/runner:sha-${{ github.sha }} -xc 'pip install requests'

- name: Build Docker image (Python 3.9)
uses: docker/build-push-action@v6
with:
build-args: |
KUBECTL_VERSION=${{ steps.versions.outputs.kubectl }}
GCLOUD_VERSION=${{ steps.versions.outputs.gcloud }}
AWS_CLI_VERSION=${{ steps.versions.outputs.aws_cli }}
AZURE_CLI_VERSION=${{ steps.versions.outputs.azure_cli }}
SCALR_CLI_VERSION=${{ steps.versions.outputs.scalr_cli }}
PYTHON_VERSION=3.9.25
PYTHON_RELEASE=20251031
cache-from: type=registry,ref=scalr/runner:buildcache-python39
cache-to: type=registry,ref=scalr/runner:buildcache-python39
load: true
tags: |
scalr/runner:sha-${{ github.sha }}-python39

- name: Test Docker Image (Python 3.9)
run: |
docker run --rm scalr/runner:sha-${{ github.sha }}-python39 -xc 'python --version'
docker run --rm scalr/runner:sha-${{ github.sha }}-python39 -xc 'pip --version'
docker run --rm scalr/runner:sha-${{ github.sha }}-python39 -xc 'pip install requests'
38 changes: 29 additions & 9 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ name: Release Runner Image
on:
push:
tags:
- '*.*.*'

- "*.*.*"

jobs:
build:
Expand All @@ -29,12 +28,13 @@ jobs:
- name: Read Versions
id: versions
run: |
echo "kubectl=$(grep kubectl versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "gcloud=$(grep gcloud versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "aws_cli=$(grep aws_cli versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "azure_cli=$(grep azure_cli versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "scalr_cli=$(grep scalr_cli versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "python=$(grep python versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "kubectl=$(grep '^kubectl=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "gcloud=$(grep '^gcloud=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "aws_cli=$(grep '^aws_cli=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "azure_cli=$(grep '^azure_cli=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "scalr_cli=$(grep '^scalr_cli=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "python=$(grep '^python=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT
echo "python_release=$(grep '^python_release=' versions | cut -d= -f2)" | tee -a $GITHUB_OUTPUT

- name: Format Image Tag
id: image_tag
Expand All @@ -51,6 +51,7 @@ jobs:
AZURE_CLI_VERSION=${{ steps.versions.outputs.azure_cli }}
SCALR_CLI_VERSION=${{ steps.versions.outputs.scalr_cli }}
PYTHON_VERSION=${{ steps.versions.outputs.python }}
PYTHON_RELEASE=${{ steps.versions.outputs.python_release }}
platforms: linux/amd64,linux/arm64
cache-from: type=registry,ref=scalr/runner:buildcache
cache-to: type=registry,ref=scalr/runner:buildcache
Expand All @@ -59,6 +60,25 @@ jobs:
scalr/runner:latest
scalr/runner:${{ steps.image_tag.outputs.tag }}

- name: Build Docker image (Python 3.9)
uses: docker/build-push-action@v6
with:
build-args: |
KUBECTL_VERSION=${{ steps.versions.outputs.kubectl }}
GCLOUD_VERSION=${{ steps.versions.outputs.gcloud }}
AWS_CLI_VERSION=${{ steps.versions.outputs.aws_cli }}
AZURE_CLI_VERSION=${{ steps.versions.outputs.azure_cli }}
SCALR_CLI_VERSION=${{ steps.versions.outputs.scalr_cli }}
PYTHON_VERSION=3.9.25
PYTHON_RELEASE=20251031
platforms: linux/amd64,linux/arm64
cache-from: type=registry,ref=scalr/runner:buildcache-python39
cache-to: type=registry,ref=scalr/runner:buildcache-python39
push: true
tags: |
scalr/runner:latest-python39
scalr/runner:${{ steps.image_tag.outputs.tag }}-python39

update_changelog:
name: Update Changelog
runs-on: ubuntu-latest
Expand All @@ -71,7 +91,7 @@ jobs:

- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'
ruby-version: "3.3"

- name: Install Changelog Generator
run: gem install github_changelog_generator
Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

## Version Bump (2026-01-19)

**Updated dependencies:**

- kubectl: v1.33.1 -> v1.35.0
- gcloud: 525.0.0 -> 552.0.0
- aws_cli: 2.27.32 -> 2.33.2
- azure_cli: 2.74.0 -> 2.82.0
- scalr_cli: 0.17.1 -> 0.17.6
- python: 3.13.3 -> 3.13.11


## [0.1.5](https://github.com/Scalr/runner/tree/0.1.5) (2025-12-10)

[Full Changelog](https://github.com/Scalr/runner/compare/0.1.4...0.1.5)
Expand Down
18 changes: 11 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@ EOT

# Install python standalone build.
ARG PYTHON_VERSION
ARG PYTHON_RELEASE
LABEL python.version=${PYTHON_VERSION}
ENV PIP_ROOT_USER_ACTION=ignore

RUN <<EOT
# See: https://gregoryszorc.com/docs/python-build-standalone/main/running.html#extracting-distributions
export VERSION="${PYTHON_VERSION}"
export RELEASE="20250517"
export RELEASE="${PYTHON_RELEASE}"
# Extract major.minor version (e.g., 3.13 from 3.13.11)
export PY_MINOR="${VERSION%.*}"
apt-get update -y
apt-get install -y --no-install-recommends zstd binutils
[ "${TARGETARCH}" = "amd64" ] && export OPTIONS="x86_64-unknown-linux-gnu-pgo+lto-full"
Expand All @@ -49,14 +53,14 @@ RUN <<EOT
rm python.tar.zst
rm -rf python
# Strip debug symbols from shared libraries.
strip -d /usr/lib/libpython3.13.so
strip -d /usr/lib/libpython${PY_MINOR}.so
# Remove unneeded packages.
rm -rf /usr/lib/Tix* /usr/lib/tcl* /usr/lib/tk* /usr/lib/itcl* /usr/lib/thread*
rm -rf /usr/lib/libpython3.13.a
rm -rf "/usr/lib/python3.13/config-3.13-$(uname -m)-linux-gnu"
rm -rf /usr/lib/python3.13/ensurepip
rm -rf /usr/lib/python3.13/tkinker
rm -rf /usr/lib/python3.13/test
rm -rf /usr/lib/libpython${PY_MINOR}.a
rm -rf "/usr/lib/python${PY_MINOR}/config-${PY_MINOR}-$(uname -m)-linux-gnu"
rm -rf /usr/lib/python${PY_MINOR}/ensurepip
rm -rf /usr/lib/python${PY_MINOR}/tkinter
rm -rf /usr/lib/python${PY_MINOR}/test
# Cleanup.
apt-get remove -y zstd binutils
apt-get clean
Expand Down
59 changes: 47 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,31 +23,66 @@ This environment comes pre-equipped with a comprehensive suite of tools essentia
* wget - File downloads from the web
* ca-certificates - Trusted CA certificates
* **Programming Languages**
* Python ([v3.13.3](https://www.python.org/downloads/release/python-3133/)) - General-purpose programming language (release)
* Python ([v3.13.11](https://www.python.org/downloads/release/python-31311/)) - General-purpose programming language (release)
* jq - Command-line JSON processor
* **Cloud Clients**
* AWS CLI ([2.27.1](https://github.com/aws/aws-cli/releases/tag/2.27.32)) - Amazon Web Services CLI.
* Azure CLI ([2.71.0](https://github.com/Azure/azure-cli/releases/tag/azure-cli-2.74.0)) - Microsoft Azure CLI.
* Google Cloud SDK ([525.0.0](https://cloud.google.com/sdk/docs/release-notes#52500_2025-06-03)) - Stable, Alpha, Beta components. Includes kubectl authenticator.
* Kubectl ([0.33.1](https://github.com/kubernetes/kubectl/releases/tag/v0.33.1)) - Kubernetes CLI.
* Scalr CLI ([0.17.1](https://github.com/Scalr/scalr-cli/releases/tag/v0.17.1)) - The command-line to communicate with the Scalr API.
* AWS CLI ([2.33.2](https://github.com/aws/aws-cli/releases/tag/2.33.2)) - Amazon Web Services CLI.
* Azure CLI ([2.82.0](https://github.com/Azure/azure-cli/releases/tag/azure-cli-2.82.0)) - Microsoft Azure CLI.
* Google Cloud SDK ([552.0.0](https://cloud.google.com/sdk/docs/release-notes#55200)) - Stable, Alpha, Beta components. Includes kubectl authenticator.
* Kubectl ([0.35.0](https://github.com/kubernetes/kubectl/releases/tag/v0.35.0)) - Kubernetes CLI.
* Scalr CLI ([0.17.6](https://github.com/Scalr/scalr-cli/releases/tag/v0.17.6)) - The command-line to communicate with the Scalr API.

The versions for Python, Cloud Clients, Kubectl, and Scalr CLI are specifically pinned and detailed in the [versions](./versions) file. All other software included in this environment is sourced directly from the Debian Trixie upstream repositories.

## Python Distribution

The environment uses the [standalone Python build](https://github.com/astral-sh/python-build-standalone) provided by the [astral.sh](https://astral.sh/) team.

Two Python variants are available:

| Image Tag | Python Version |
|-----------|----------------|
| `scalr/runner:<x.y.z>` | Python 3.13.x |
| `scalr/runner:<x.y.z>-python39` | Python 3.9.x |

## Runner Image Building

```bash
docker buildx build \
--build-arg PYTHON_VERSION=3.13.3 \
--build-arg KUBECTL_VERSION=v1.33.1 \
--build-arg GCLOUD_VERSION=525.0.0 \
--build-arg AWS_CLI_VERSION=2.27.1 \
--build-arg AZURE_CLI_VERSION=2.71.0 \
--build-arg SCALR_CLI_VERSION=0.17.1 \
--build-arg PYTHON_VERSION=3.13.11 \
--build-arg PYTHON_RELEASE=20260114 \
--build-arg KUBECTL_VERSION=v1.35.0 \
--build-arg GCLOUD_VERSION=552.0.0 \
--build-arg AWS_CLI_VERSION=2.33.2 \
--build-arg AZURE_CLI_VERSION=2.82.0 \
--build-arg SCALR_CLI_VERSION=0.17.6 \
--platform linux/amd64 \
-t scalr/runner:latest --load .
```

To build the Python 3.9 variant:

```bash
docker buildx build \
--build-arg PYTHON_VERSION=3.9.25 \
--build-arg PYTHON_RELEASE=20251031 \
--build-arg KUBECTL_VERSION=v1.35.0 \
--build-arg GCLOUD_VERSION=552.0.0 \
--build-arg AWS_CLI_VERSION=2.33.2 \
--build-arg AZURE_CLI_VERSION=2.82.0 \
--build-arg SCALR_CLI_VERSION=0.17.6 \
--platform linux/amd64 \
-t scalr/runner:latest-python39 --load .
```

## Bumping Versions

To update all tool versions to their latest releases, run:

```bash
./bump-versions.sh
```

This script fetches the latest versions from upstream sources and updates the [versions](./versions) file and README.md.

Requirements: `curl` and `jq`.
Loading