Cache Rust build artifacts for Alpine packages
Some checks failed
Build Alpine Packages / build-and-publish (push) Has been cancelled

This commit is contained in:
Joachim Schlöffel
2026-06-09 10:47:17 +02:00
parent 11ef6456af
commit 50e8eaa62a
5 changed files with 69 additions and 5 deletions

View File

@@ -18,9 +18,15 @@ RUN addgroup -g "${BUILDER_GID}" builder \
&& adduser -D -u "${BUILDER_UID}" -G builder builder \
&& addgroup builder abuild \
&& addgroup builder wheel \
&& mkdir -p /var/cache/distfiles /home/builder/packages \
&& mkdir -p \
/var/cache/distfiles \
/home/builder/.cache/cargo \
/home/builder/.cache/cargo-target \
/home/builder/.cache/rustup \
/home/builder/packages \
&& chgrp abuild /var/cache/distfiles /home/builder/packages \
&& chmod g+w /var/cache/distfiles /home/builder/packages \
&& chown -R builder:builder /home/builder/.cache \
&& printf 'permit nopass :wheel\n' > /etc/doas.d/wheel.conf \
&& printf '%%wheel ALL=(ALL) NOPASSWD: ALL\n' > /etc/sudoers.d/wheel

View File

@@ -19,6 +19,39 @@ if [[ "${builder_gid}" == "0" ]]; then
builder_gid=1000
fi
cache_scope_from_remote() {
local remote
local path
local owner
local repo
remote="$(git -C "${repo_root}" remote get-url origin 2>/dev/null || true)"
remote="${remote%.git}"
case "${remote}" in
ssh://*/*/*)
path="${remote#ssh://*/}"
;;
http://*/*/*|https://*/*/*)
path="${remote#*://*/}"
;;
*:*)
path="${remote#*:}"
;;
*)
path="$(basename "${repo_root}")"
;;
esac
owner="$(basename "$(dirname "${path}")")"
repo="$(basename "${path}")"
if [[ -n "${owner}" && "${owner}" != "." && -n "${repo}" ]]; then
printf '%s-%s\n' "${owner}" "${repo}" | sed 's/[^A-Za-z0-9_.-]/-/g'
else
printf '%s\n' "$(basename "${repo_root}")" | sed 's/[^A-Za-z0-9_.-]/-/g'
fi
}
validate_arch() {
case "$1" in
x86_64|aarch64) ;;
@@ -32,11 +65,17 @@ run_for_arch() {
local package_dir="$3"
local image_name
local container_package_dir
local package_name
local cache_scope
local cache_prefix
validate_arch "${arch}"
apk_validate_package_dir "${package_dir}"
package_name="$(apk_package_name "${package_dir}")"
container_package_dir="$(apk_container_package_dir "${repo_root}" "${package_dir}")"
image_name="${ALPINE_APK_BUILDER_IMAGE:-alpine-apk-builder:${arch}}"
cache_scope="${ALPINE_APK_CACHE_SCOPE:-$(cache_scope_from_remote)}"
cache_prefix="${ALPINE_APK_CACHE_PREFIX:-alpine-apk}-${cache_scope}-${package_name}-${arch}"
docker build \
--platform "${build_platform}" \
@@ -57,7 +96,13 @@ run_for_arch() {
-e "CARCH=${arch}" \
-e "ALPINE_REPO_NAME=${repo_name}" \
-e "APKBUILD_DIR=${container_package_dir}" \
-e "CARGO_HOME=/home/builder/.cache/cargo" \
-e "CARGO_TARGET_DIR=/home/builder/.cache/cargo-target" \
-e "PACKAGER=${PACKAGER:-Joachim Schlöffel <me@joachim-schloeffel.com>}" \
-e "RUSTUP_HOME=/home/builder/.cache/rustup" \
-v "${cache_prefix}-cargo:/home/builder/.cache/cargo" \
-v "${cache_prefix}-cargo-target:/home/builder/.cache/cargo-target" \
-v "${cache_prefix}-rustup:/home/builder/.cache/rustup" \
-v "${repo_root}:/work" \
-v "${repo_root}/.cache/abuild:/home/builder/.abuild" \
-v "${repo_root}/.cache/apk-distfiles:/var/cache/distfiles" \