π v2.8.2 is out, with EFS, Ephemeral Registry support, and YOLO mode (tmpfs)!
Check out the new documentation pages for:
Now for the full release notes:
π v2.8.2
Support for EFS, TMPFS, and ECR ephemeral registry for fast docker builds. Also some bug fixes.
What's changed
EFS
- Embedded networking stack can now create an Elastic File System (EFS), and runners will auto-mount it at
/mnt/efs
if theextras
label includeefs
. Useful to share artefacts across job runs, with classic filesystem primitives.
jobs:
with-efs:
runs-on: runs-on=${{ github.run_id }},runner=2cpu-linux-x64,extras=efs
steps:
- run: df -ah /mnt/efs
# 127.0.0.1:/ 8.0E 35G 8.0E 1% /mnt/efs
π Example use case for maintaining mirrors
For instance this can be used to maintain local mirrors of very large github repositories and avoid long checkout times for every job:env:
MIRRORS: "https://github.com/PostHog/posthog.git"
# can be ${{ github.ref }} if same repo as the workflow
REF: main
jobs:
with-efs:
runs-on: runs-on=${{ github.run_id }},runner=2cpu-linux-x64,extras=efs
steps:
- name: Setup / Refresh mirrors
run: |
for MIRROR in ${{ env.MIRRORS }}; do
full_repo_name=$(echo $MIRROR | cut -d/ -f4-)
MIRROR_DIR=/mnt/efs/mirrors/$full_repo_name
mkdir -p "$(dirname $MIRROR_DIR)"
test -d "${MIRROR_DIR}" || git clone --mirror ${MIRROR/https:\/\//https:\/\/x-access-token:${{ secrets.GITHUB_TOKEN }}@} "${MIRROR_DIR}"
( cd "$MIRROR_DIR" && \
git remote set-url origin ${MIRROR/https:\/\//https:\/\/x-access-token:${{ secrets.GITHUB_TOKEN }}@} && \
git fetch origin ${{ env.REF }} )
done
- name: Checkout from mirror
run: |
git clone file:///mnt/efs/mirrors/PostHog/posthog.git --branch ${{ env.REF }} --single-branch --depth 1 upstream
Ephemeral registry
- Support for an Ephemeral ECR registry: can now automatically create an ECR repository that can act as an ephemeral registry for pulling/pushing images and cache layers from your runners. Especially useful with the
type=registry
buildkit cache instruction. If theextras
label includesecr-cache
, the runners will automatically setup docker credentials for that registry at the start of the job.
jobs:
ecr-cache:
runs-on: runs-on=${{ github.run_id }},runner=2cpu-linux-x64,extras=ecr-cache
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v4
env:
TAG: ${{ env.RUNS_ON_ECR_CACHE }}:my-app-latest
with:
context: .
push: true
tags: ${{ env.TAG }}
cache-from: type=registry,ref=${{ env.TAG }}
cache-to: type=registry,ref=${{ env.TAG }} }},mode=max,compression=zstd,compression-level=22
Tmpfs
Support for setting up a tmpfs
volume (size: 100% of available RAM, so only to be used on high-memory instances), and binding the /tmp
, /home/runner
, and /var/lib/docker
folders on it. /tmp
and /home/runner
are mounted as overlays, preserving their existing content.
Can speed up some IO-intensive workflows. Note that if tmpfs
is active, instances with ephemeral disks won't have those mounted since it would conflict with the tmpfs
volume.
jobs:
with-tmpfs:
runs-on: runs-on=${{ github.run_id }},family=r7,ram=16,extras=tmpfs
steps:
- run: df -ah /mnt/tmpfs
# tmpfs 16G 724K 16G 1% /mnt/tmpfs
- run: df -ah /home/runner
# overlay 16G 724K 16G 1% /home/runner
- run: df -ah /tmp
# overlay 16G 724K 16G 1% /tmp
- run: df -ah /var/lib/docker
# tmpfs 16G 724K 16G 1% /var/lib/docker
You can obviously combine options, i.e. extras=efs+tmpfs+ecr-cache+s3-cache
is a valid label π
Instance-storage mounting changes
Until now, when an instance has locally attached NVMe SSDs available, they would be automatically formatted and mounted so that /var/lib/docker
and /home/runner/_work
directories would end up on the local disks. Since a lot of stuff (caches etc.) seem to end up within the /home/runner
folder itself, the agent now uses the same strategy as for the new tmpfs
mounts above (i.e. the whole /home/runner
folder is mounted as an overlay on the local disk volume, as well as the /tmp
folder. /var/lib/docker
remains mounted as a normal filesystem on the local disk volume). Fixes #284.
Misc
- Move all RunsOn-specific config files into
/runs-on
folder on Linux. More coherent with Windows (C:\runs-on
), and avoids polluting/opt
folder. - Fix
app_version
in logs (was previously empty string due to incorrect env variable being used in v2.8.1). - Fix "Require any Amazon EC2 launch template not to auto-assign public IP addresses to network interfaces" from AWS Control Tower. When the
Private
mode is set toonly
, no longer enable public ip auto-assignment in the launch templates. Thanks @temap!
Upgrade
- Upgrade Guide
- CloudFormation Versioned template URL: https://runs-on.s3.eu-west-1.amazonaws.com/cloudformation/template-v2.8.2.yaml
Info card
- Released on: .
- For more details: view release notes on GitHub.
- CloudFormation template: https://runs-on.s3.eu-west-1.amazonaws.com/cloudformation/template-v2.8.2.yaml
- Upgrade guide