From 8c336b4dec1d77e66904046eb64b89eed9bb54e5 Mon Sep 17 00:00:00 2001 From: BtbN Date: Tue, 20 Jun 2023 23:26:40 +0200 Subject: [PATCH] Add more explicit cache image name --- .github/workflows/build.yml | 11 ++++++++--- generate.sh | 5 +++++ makeimage.sh | 17 +++++++++++++---- scripts.d/50-aom.sh | 2 +- scripts.d/50-aribb24/50-libaribb24.sh | 2 +- scripts.d/50-zvbi.sh | 2 +- util/get_dl_cache_tag.sh | 4 ++++ util/vars.sh | 9 +++++---- 8 files changed, 38 insertions(+), 14 deletions(-) create mode 100755 util/get_dl_cache_tag.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 282904e..54631ed 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -78,7 +78,11 @@ jobs: cache-to: type=registry,mode=max,ref=${{ steps.imagename.outputs.name }}:cache cache-from: type=registry,ref=${{ steps.imagename.outputs.name }}:cache - name: Generate download cache Dockerfile - run: ./generate.sh dl only + id: dl_cache + run: | + ./generate.sh dl only + echo "dltagname=$(./util/get_dl_cache_tag.sh)" >> $GITHUB_OUTPUT + cat Dockerfile.dl - name: Build download cache image uses: docker/build-push-action@v3 with: @@ -86,7 +90,7 @@ jobs: file: Dockerfile.dl pull: true push: true - tags: ${{ steps.imagename.outputs.dlname }}:latest + tags: ${{ steps.imagename.outputs.dlname }}:${{ steps.dl_cache.outputs.dltagname }} cache-to: type=registry,mode=max,ref=${{ steps.imagename.outputs.dlname }}:cache cache-from: type=registry,ref=${{ steps.imagename.outputs.dlname }}:cache - name: Cleanup @@ -110,7 +114,8 @@ jobs: repository_owner: ${{ github.repository_owner }} repository: ${{ github.repository }} owner_type: user - untagged_only: true + untagged_only: false + keep_latest: 3 build_target_bases: name: Build target base image if: ${{ github.event.inputs.buildOnly != 'true' }} diff --git a/generate.sh b/generate.sh index 87c0dbb..091ade1 100755 --- a/generate.sh +++ b/generate.sh @@ -69,6 +69,8 @@ if [[ "$TARGET" == "dl" && "$VARIANT" == "only" ]]; then exit 0 fi +DL_IMAGE="${DL_IMAGE_RAW}:$(./util/get_dl_cache_tag.sh)" + ### ### Generate main Dockerfile ### @@ -78,7 +80,10 @@ exec_dockerstage() { ( SELF="$SCRIPT" source "$SCRIPT" + ffbuild_enabled || exit 0 + + to_df "ENV SELF=\"$SELF\"" ffbuild_dockerstage || exit $? ) } diff --git a/makeimage.sh b/makeimage.sh index 39a1fa2..2e63a43 100755 --- a/makeimage.sh +++ b/makeimage.sh @@ -43,11 +43,20 @@ if [[ -z "$QUICKBUILD" ]]; then fi ./generate.sh "$TARGET" "$VARIANT" "${ADDINS[@]}" +DL_CACHE_TAG="$(./util/get_dl_cache_tag.sh)" +DL_IMAGE="${DL_IMAGE_RAW}:${DL_CACHE_TAG}" -docker buildx --builder ffbuilder build -f Dockerfile.dl \ - --cache-from=type=local,src=.cache/"${DL_IMAGE/:/_}" \ - --cache-to=type=local,mode=max,dest=.cache/"${DL_IMAGE/:/_}" \ - --push --tag "${LOCAL_ROOT}/dl_cache:latest" . +if docker pull "${DL_IMAGE}"; then + export REGISTRY_OVERRIDE_DL="$REGISTRY" GITHUB_REPOSITORY_DL="$REPO" + ./generate.sh "$TARGET" "$VARIANT" "${ADDINS[@]}" +else + DL_IMAGE="${LOCAL_ROOT}/dl_cache:${DL_CACHE_TAG}" + docker manifest inspect --insecure "${DL_IMAGE}" >/dev/null || + docker buildx --builder ffbuilder build -f Dockerfile.dl \ + --cache-from=type=local,src=.cache/dl_image_cache \ + --cache-to=type=local,mode=max,dest=.cache/dl_image_cache \ + --push --tag "${DL_IMAGE}" . +fi docker buildx --builder ffbuilder build \ --cache-from=type=local,src=.cache/"${IMAGE/:/_}" \ diff --git a/scripts.d/50-aom.sh b/scripts.d/50-aom.sh index bc26159..95458f2 100755 --- a/scripts.d/50-aom.sh +++ b/scripts.d/50-aom.sh @@ -8,7 +8,7 @@ ffbuild_enabled() { } ffbuild_dockerstage() { - to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw --mount=src=patches/aom,dst=/patches SELF=\"$SELF\" run_stage /stage.sh" + to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw --mount=src=patches/aom,dst=/patches run_stage /stage.sh" } ffbuild_dockerbuild() { diff --git a/scripts.d/50-aribb24/50-libaribb24.sh b/scripts.d/50-aribb24/50-libaribb24.sh index 3ebb968..4232541 100755 --- a/scripts.d/50-aribb24/50-libaribb24.sh +++ b/scripts.d/50-aribb24/50-libaribb24.sh @@ -8,7 +8,7 @@ ffbuild_enabled() { } ffbuild_dockerstage() { - to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw --mount=src=patches/aribb24,dst=/patches SELF=\"$SELF\" run_stage /stage.sh" + to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw --mount=src=patches/aribb24,dst=/patches run_stage /stage.sh" } ffbuild_dockerbuild() { diff --git a/scripts.d/50-zvbi.sh b/scripts.d/50-zvbi.sh index 8025c8a..6eaa22e 100755 --- a/scripts.d/50-zvbi.sh +++ b/scripts.d/50-zvbi.sh @@ -8,7 +8,7 @@ ffbuild_enabled() { } ffbuild_dockerstage() { - to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw --mount=src=patches/zvbi,dst=/patches SELF=\"$SELF\" run_stage /stage.sh" + to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw --mount=src=patches/zvbi,dst=/patches run_stage /stage.sh" } ffbuild_dockerdl() { diff --git a/util/get_dl_cache_tag.sh b/util/get_dl_cache_tag.sh new file mode 100755 index 0000000..4ca3a36 --- /dev/null +++ b/util/get_dl_cache_tag.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -eo pipefail +printf dlcache_ +tail -n+3 Dockerfile.dl | sha256sum | cut -d' ' -f1 diff --git a/util/vars.sh b/util/vars.sh index 312f5f0..030ac15 100644 --- a/util/vars.sh +++ b/util/vars.sh @@ -36,12 +36,13 @@ REGISTRY="${REGISTRY_OVERRIDE:-ghcr.io}" BASE_IMAGE="${REGISTRY}/${REPO}/base:latest" TARGET_IMAGE="${REGISTRY}/${REPO}/base-${TARGET}:latest" IMAGE="${REGISTRY}/${REPO}/${TARGET}-${VARIANT}${ADDINS_STR:+-}${ADDINS_STR}:latest" -DL_IMAGE="${REGISTRY}/${REPO}/dl_cache:latest" +DL_IMAGE_RAW="${REGISTRY}/${REPO}/dl_cache" if [[ -n "$REGISTRY_OVERRIDE_DL" && -n "$GITHUB_REPOSITORY_DL" ]]; then - DL_IMAGE="${REGISTRY_OVERRIDE_DL}/${GITHUB_REPOSITORY_DL}/dl_cache:latest" - DL_IMAGE="${DL_IMAGE,,}" + DL_IMAGE_RAW="${REGISTRY_OVERRIDE_DL}/${GITHUB_REPOSITORY_DL}/dl_cache" + DL_IMAGE_RAW="${DL_IMAGE_RAW,,}" fi +DL_IMAGE="${DL_IMAGE_RAW}:unset" ffbuild_dockerdl() { default_dl "$SELF" @@ -52,7 +53,7 @@ ffbuild_dockerlayer_dl() { } ffbuild_dockerstage() { - to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw SELF=\"$SELF\" run_stage /stage.sh" + to_df "RUN --mount=src=${SELF},dst=/stage.sh --mount=src=\$FFBUILD_DLDIR,dst=\$FFBUILD_DLDIR,from=${DL_IMAGE},rw run_stage /stage.sh" } ffbuild_dockerlayer() {