Files
MoShiro/ci/build-runner-image.sh
T

35 lines
2.0 KiB
Bash

#!/usr/bin/env bash
# Run as the WSL Podman user; retain image layers and tool archives across runs.
set -euo pipefail
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cache="${MOSHIRO_RUNNER_IMAGE_CACHE:-/home/justme/woodpecker/cache/runner-image}"
builder_image=localhost/moshiro-dotnet10-nativeaot-aotanywhere:ci
runner_image=localhost/moshiro-woodpecker-agent:ci
mkdir -p "$cache/context/ci"
exec 9> "$cache/.lock"
flock -w 900 9
tr -d '\r' < "$root/global.json" > "$cache/context/global.json"
install -m 0644 "$root/ci/fetch-quic-test-runtime.sh" "$root/ci/woodpecker-agent-entrypoint.sh" "$cache/context/ci/"
source "$root/ci/nativeaot-toolchain.sh"
moshiro_nativeaot_settings "$root"
podman build --layers --pull=missing --isolation chroot --network host \
--build-arg "AOTANYWHERE_VERSION=$MOSHIRO_AOTANYWHERE_VERSION" --build-arg "ZIG_TOOLSET_VERSION=$MOSHIRO_ZIG_TOOLSET_VERSION" \
-f "$root/packaging/container/NativeAot.Builder.Containerfile" -t "$builder_image" "$cache/context"
# Export once per image ID. Isolated Buildah stores import this local archive,
# so parallel architecture builds never download their toolchain from NuGet.
builder_id="$(podman image inspect --format '{{.Id}}' "$builder_image")"
builder_id="${builder_id#sha256:}"
archive="$cache/nativeaot-builder-$builder_id.oci"
if [[ ! -f "$archive" ]]; then
podman save --format oci-archive -o "$archive.tmp" "$builder_image"
mv "$archive.tmp" "$archive"
fi
printf '%s\n' "$builder_id" > "$cache/nativeaot-builder.id.tmp"
mv "$cache/nativeaot-builder.id.tmp" "$cache/nativeaot-builder.id"
printf '%s\n' "$MOSHIRO_NATIVEAOT_BUILDER_KEY" > "$cache/nativeaot-builder.key.tmp"
mv "$cache/nativeaot-builder.key.tmp" "$cache/nativeaot-builder.key"
podman build --layers --pull=missing --isolation chroot --network host \
--build-arg "NATIVEAOT_BUILDER_IMAGE=$builder_image" \
-f "$root/packaging/container/Woodpecker.Agent.Containerfile" -t "$runner_image" "$cache/context"
echo "built $runner_image; unchanged tool layers are reused"