From 50c03de11aeb93549979b10a955d9d10ffc727b4 Mon Sep 17 00:00:00 2001 From: TheCodeLamp <12064217+TheCodeLamp@users.noreply.github.com> Date: Sun, 13 Sep 2026 12:54:41 +0200 Subject: [PATCH 1/3] Clean up --- build.sh | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/build.sh b/build.sh index 0db99f6..fc00980 100755 --- a/build.sh +++ b/build.sh @@ -10,7 +10,7 @@ IMAGE_REGISTRY=${3:?IMAGE_REGISTRY required} FULL_IMAGE="${IMAGE_REGISTRY}/${IMAGE_NAME}" TIMESTAMP=$(date -u +%Y%m%d) -echo "buildah version: $(buildah --version)" +echo "$(buildah --version)" # Pin a chunkah release for reproducible builds; bump deliberately. # Check https://github.com/coreos/chunkah/releases for newer tags. @@ -21,16 +21,9 @@ UNCHUNKED_TAG="localhost/${IMAGE_NAME}-${VARIANT}-unchunked:latest" echo "Building ${VARIANT} variant of ${FULL_IMAGE}" -# 1. Build exactly as before, but into a throwaway local tag. This has -# normal Dockerfile-shaped layers (one per RUN/COPY). -buildah build -f "Containerfile.${VARIANT}" -t "${UNCHUNKED_TAG}" . -# 2. Capture the image's config/labels (incl. containers.bootc=1 and -# versioning info) before chunkah rebuilds it - the splitter flow -# below doesn't carry these over on its own. CHUNKAH_CONFIG_STR=$(buildah inspect --type image "${UNCHUNKED_TAG}") -# 3. Rechunk into content-based layers. # --skip-unused-stages=false required by chunkah's splitter flow # --prune /sysroot/ strips the embedded OSTree repo, # turning this into a "plain" image @@ -55,7 +48,3 @@ buildah tag "${FULL_IMAGE}:${VARIANT}" "${FULL_IMAGE}:${VARIANT}-${TIMESTAMP}" # Clean up the intermediate unchunked image. buildah rmi "${UNCHUNKED_TAG}" || true - -echo "Successfully built ${VARIANT} variant with tags:" -echo " - ${FULL_IMAGE}:${VARIANT}" -echo " - ${FULL_IMAGE}:${VARIANT}-${TIMESTAMP}" From ccdb6609753e125210b444bab8e7fbb6e345f450 Mon Sep 17 00:00:00 2001 From: TheCodeLamp <12064217+TheCodeLamp@users.noreply.github.com> Date: Sun, 13 Sep 2026 12:55:15 +0200 Subject: [PATCH 2/3] Cache intermediate build step --- .github/workflows/build.yml | 10 +++++----- build.sh | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1238674..36de07d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,15 +42,15 @@ jobs: echo "IMAGE_REGISTRY=${IMAGE_REGISTRY,,}" >> ${GITHUB_ENV} echo "IMAGE_NAME=${IMAGE_NAME,,}" >> ${GITHUB_ENV} - - name: Build ${{ matrix.variant }} image - run: | - ./build.sh "${{ matrix.variant }}" "${{ env.IMAGE_NAME }}" "${{ env.IMAGE_REGISTRY }}" - - name: Login to GHCR - if: github.event_name != 'pull_request' run: | echo "${{ secrets.GITHUB_TOKEN }}" | buildah login ghcr.io -u ${{ github.actor }} --password-stdin + - name: Build ${{ matrix.variant }} image + run: | + if [ "${{ github.event_name }}" != "pull_request" ]; then CACHE_PUSH="true"; fi + ./build.sh "${{ matrix.variant }}" "${{ env.IMAGE_NAME }}" "${{ env.IMAGE_REGISTRY }}" + - name: Push ${{ matrix.variant }} image if: github.event_name != 'pull_request' run: | diff --git a/build.sh b/build.sh index fc00980..043747a 100755 --- a/build.sh +++ b/build.sh @@ -8,6 +8,7 @@ IMAGE_NAME=${2:?IMAGE_NAME required} IMAGE_REGISTRY=${3:?IMAGE_REGISTRY required} FULL_IMAGE="${IMAGE_REGISTRY}/${IMAGE_NAME}" +CACHE_REPO="${FULL_IMAGE}-cache-${VARIANT}" TIMESTAMP=$(date -u +%Y%m%d) echo "$(buildah --version)" @@ -21,6 +22,12 @@ UNCHUNKED_TAG="localhost/${IMAGE_NAME}-${VARIANT}-unchunked:latest" echo "Building ${VARIANT} variant of ${FULL_IMAGE}" +BUILD_ARGS=(--layers --cache-from "${CACHE_REPO}") +if [[ -v CACHE_PUSH ]]; then + BUILD_ARGS+=(--cache-to "${CACHE_REPO}") +fi + +buildah build "${BUILD_ARGS[@]}" -f "Containerfile.${VARIANT}" -t "${UNCHUNKED_TAG}" . CHUNKAH_CONFIG_STR=$(buildah inspect --type image "${UNCHUNKED_TAG}") From 9db1b951d79b0f8bd70c85d1398071b911a72f54 Mon Sep 17 00:00:00 2001 From: TheCodeLamp <12064217+TheCodeLamp@users.noreply.github.com> Date: Sun, 13 Sep 2026 13:11:32 +0200 Subject: [PATCH 3/3] Add caching var through arg --- .github/workflows/build.yml | 3 ++- build.sh | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 36de07d..cac8ac0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,8 +48,9 @@ jobs: - name: Build ${{ matrix.variant }} image run: | + CACHE_PUSH="false" if [ "${{ github.event_name }}" != "pull_request" ]; then CACHE_PUSH="true"; fi - ./build.sh "${{ matrix.variant }}" "${{ env.IMAGE_NAME }}" "${{ env.IMAGE_REGISTRY }}" + ./build.sh "${{ matrix.variant }}" "${{ env.IMAGE_NAME }}" "${{ env.IMAGE_REGISTRY }}" $CACHE_PUSH - name: Push ${{ matrix.variant }} image if: github.event_name != 'pull_request' diff --git a/build.sh b/build.sh index 043747a..dab95ec 100755 --- a/build.sh +++ b/build.sh @@ -6,6 +6,7 @@ set -ouex pipefail VARIANT=${1:?VARIANT required (base|desktop|laptop)} IMAGE_NAME=${2:?IMAGE_NAME required} IMAGE_REGISTRY=${3:?IMAGE_REGISTRY required} +CACHE_PUSH=${4:?CACHE_PUSH required (true|false)} FULL_IMAGE="${IMAGE_REGISTRY}/${IMAGE_NAME}" CACHE_REPO="${FULL_IMAGE}-cache-${VARIANT}" @@ -23,7 +24,7 @@ UNCHUNKED_TAG="localhost/${IMAGE_NAME}-${VARIANT}-unchunked:latest" echo "Building ${VARIANT} variant of ${FULL_IMAGE}" BUILD_ARGS=(--layers --cache-from "${CACHE_REPO}") -if [[ -v CACHE_PUSH ]]; then +if [[ "${CACHE_PUSH}" == "true" ]]; then BUILD_ARGS+=(--cache-to "${CACHE_REPO}") fi