Persist Zig build caches in CI #1

Merged
wayfinderak merged 1 commits from perf/ci-speed-20260914 into main 2026-09-14 03:04:08 +00:00
+57 -14
View File
@@ -1,11 +1,19 @@
name: Build and Release
on:
pull_request:
branches:
- main
push:
branches:
- main
tags:
- 'v*'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
permissions:
contents: write
@@ -14,37 +22,72 @@ jobs:
build:
name: Build executables
runs-on: ubuntu-latest
env:
ZIG_INSTALL_ROOT: /ci-cache/zig-chess/0.16.0/linux-amd64/tool
ZIG_LOCAL_CACHE_DIR: /ci-cache/zig-chess/0.16.0/linux-amd64/local
ZIG_GLOBAL_CACHE_DIR: /ci-cache/zig-chess/0.16.0/linux-amd64/global
steps:
- name: Checkout
uses: actions/checkout@v4
uses: https://github.com/actions/checkout@v4
- name: Set up Zig
uses: mlugg/setup-zig@v2
with:
version: 0.16.0
- name: Install shader compiler
- name: Install pinned Zig from the persistent cache
run: |
sudo apt-get update
sudo apt-get install -y glslc
set -eu
cache_parent="$(dirname "$ZIG_INSTALL_ROOT")"
mkdir -p "$cache_parent"
exec 9>"$cache_parent/.install.lock"
flock -x 9
if ! test -x "$ZIG_INSTALL_ROOT/zig" || \
! test "$("$ZIG_INSTALL_ROOT/zig" version)" = "0.16.0"; then
archive="$(mktemp /tmp/zig-0.16.0.XXXXXXXX.tar.xz)"
staging="$(mktemp -d "$cache_parent/.tool.XXXXXXXX")"
trap 'rm -f "$archive"; rm -rf "$staging"' EXIT
curl --fail --location --retry 3 --retry-all-errors \
--output "$archive" \
https://ziglang.org/download/0.16.0/zig-x86_64-linux-0.16.0.tar.xz
printf '%s %s\n' \
70e49664a74374b48b51e6f3fdfbf437f6395d42509050588bd49abe52ba3d00 \
"$archive" | sha256sum --check -
tar -xJf "$archive" --strip-components=1 -C "$staging"
rm -rf "$ZIG_INSTALL_ROOT"
mv "$staging" "$ZIG_INSTALL_ROOT"
rm -f "$archive"
trap - EXIT
fi
echo "$ZIG_INSTALL_ROOT" >> "$GITHUB_PATH"
- name: Install native build dependencies
run: |
apt-get -o Acquire::Retries=2 update
apt-get install -y --no-install-recommends \
glslc \
libx11-dev \
libxcursor-dev \
libxi-dev \
libxinerama-dev \
libxrandr-dev
- name: Show tool versions
run: |
zig version
glslc --version
- name: Prepare persistent Zig caches
run: |
mkdir -p "$ZIG_LOCAL_CACHE_DIR" "$ZIG_GLOBAL_CACHE_DIR"
- name: Build GUI executable
run: |
zig build \
--cache-dir /tmp/zig-chess-cache \
--global-cache-dir /tmp/zig-global-cache
--cache-dir "$ZIG_LOCAL_CACHE_DIR" \
--global-cache-dir "$ZIG_GLOBAL_CACHE_DIR"
- name: Build magic generator executable
run: |
zig build magic-numbers \
--cache-dir /tmp/zig-chess-cache \
--global-cache-dir /tmp/zig-global-cache
--cache-dir "$ZIG_LOCAL_CACHE_DIR" \
--global-cache-dir "$ZIG_GLOBAL_CACHE_DIR"
- name: Package executables
run: |
@@ -60,7 +103,7 @@ jobs:
sha256sum "dist/${artifact_dir}.tar.gz" > "dist/${artifact_dir}.tar.gz.sha256"
- name: Upload build artifact
uses: actions/upload-artifact@v3
uses: https://github.com/actions/upload-artifact@v3
with:
name: zig-chess-${{ github.ref_name }}
path: |