ci: Cache Zephyr workspace installation.

Can save several minutes downloading the Zephyr docker image and/or cloning
repo from GitHub. Cache keyed on the Zephyr version, which AFAIK is the
only determinant for the workspace contents.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
This commit is contained in:
Angus Gratton
2024-12-10 15:34:12 +11:00
committed by Angus Gratton
parent d10cda66dc
commit 92a5ea51b4
2 changed files with 25 additions and 2 deletions

View File

@@ -30,9 +30,22 @@ jobs:
docker-images: false
swap-storage: false
- uses: actions/checkout@v4
- id: versions
name: Read Zephyr version
run: source tools/ci.sh && echo "ZEPHYR=$ZEPHYR_VERSION" | tee "$GITHUB_OUTPUT"
- name: Cached Zephyr Workspace
id: cache_workspace
uses: actions/cache@v4
with:
# note that the Zephyr CI docker image is 15GB. At time of writing
# GitHub caches are limited to 10GB total for a project. So we only
# cache the "workspace"
path: ./zephyrproject
key: zephyr-workspace-${{ steps.versions.outputs.ZEPHYR }}
- name: Install packages
run: source tools/ci.sh && ci_zephyr_setup
- name: Install Zephyr
if: steps.cache_workspace.outputs.cache-hit != 'true'
run: source tools/ci.sh && ci_zephyr_install
- name: Build
run: source tools/ci.sh && ci_zephyr_build

View File

@@ -747,14 +747,24 @@ ZEPHYR_SDK_VERSION=0.16.8
ZEPHYR_VERSION=v3.7.0
function ci_zephyr_setup {
docker pull zephyrprojectrtos/ci:${ZEPHYR_DOCKER_VERSION}
IMAGE=zephyrprojectrtos/ci:${ZEPHYR_DOCKER_VERSION}
docker pull ${IMAGE}
# Directories cached by GitHub Actions, mounted
# into the container
ZEPHYRPROJECT_DIR="$(pwd)/zephyrproject"
mkdir -p "${ZEPHYRPROJECT_DIR}"
docker run --name zephyr-ci -d -it \
-v "$(pwd)":/micropython \
-v "${ZEPHYRPROJECT_DIR}":/zephyrproject \
-e ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-${ZEPHYR_SDK_VERSION} \
-e ZEPHYR_TOOLCHAIN_VARIANT=zephyr \
-e ZEPHYR_BASE=/zephyrproject/zephyr \
-w /micropython/ports/zephyr \
zephyrprojectrtos/ci:${ZEPHYR_DOCKER_VERSION}
${IMAGE}
docker ps -a
# qemu-system-arm is needed to run the test suite.