From 25f570ad4ee2aed38325f34b0a0ffc2833e55bc3 Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Tue, 30 Apr 2024 11:52:43 +0200 Subject: [PATCH] adapt workflows and top-level Makefile to deal with newer docker image files which do not always contain a layer.tar file but have to extract the top level layer file by parsing the manifest.json file. This should fix the OCI/Docker builds with newer docker v26 versions. --- .github/workflows/ci.yml | 19 ++++++++++++++----- .github/workflows/oci-repush.yml | 21 +++++++++++++++------ .github/workflows/release.yml | 19 ++++++++++++++----- .github/workflows/snapshot.yml | 19 ++++++++++++++----- Makefile | 22 ++++++++++++---------- 5 files changed, 69 insertions(+), 31 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f2bc6d8764..1e8b4a5607 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -273,12 +273,17 @@ jobs: - name: Extract OCI artifacts run: | + rm -rf oci_build mkdir -p oci_build - cd oci_build - for f in ../*-oci_*.tgz; do - tar --wildcards --strip-components 1 -xf $f "*/layer.tar" - mv -f layer.tar $(basename $f .tgz).tar - rm -f $f + cd oci_build || exit 1 + for f in ../RaspberryMatic-${{ env.BUILD_VERSION }}-oci_*.tgz; do + echo "extracting ${f}..." + DIR=$(basename "${f}" .tgz) + mkdir -p "${DIR}" + tar -C "${DIR}" -xf "${f}" + LAYER=$(jq -r '.[0].Layers[0]' "${DIR}/manifest.json") + mv -f "${DIR}/${LAYER}" "./${DIR}.tar" + rm -rf "${DIR}" "${f}"* done - name: Set up Docker Buildx @@ -424,3 +429,7 @@ jobs: docker volume rm ccu_data docker image ls -a docker image rm ${{ env.CCU_OCI_REPO }}:${{ env.CCU_OCI_TAG }} + + - name: Cleanup oci_build dir + run: | + rm -rf oci_build diff --git a/.github/workflows/oci-repush.yml b/.github/workflows/oci-repush.yml index 8fcb347acd..416f612306 100644 --- a/.github/workflows/oci-repush.yml +++ b/.github/workflows/oci-repush.yml @@ -41,14 +41,19 @@ jobs: fileName: "RaspberryMatic-*-oci_*.tgz" # extract all OCI assets - - name: Extract OCI assets + - name: Extract OCI artifacts run: | + rm -rf oci_build mkdir -p oci_build - cd oci_build - for f in ../*-oci_*.tgz; do - tar --wildcards --strip-components 1 -xf $f "*/layer.tar" - mv -f layer.tar $(basename $f .tgz).tar - rm -f $f + cd oci_build || exit 1 + for f in ../RaspberryMatic-${{ github.event.inputs.release_tag }}-oci_*.tgz; do + echo "extracting ${f}..." + DIR=$(basename "${f}" .tgz) + mkdir -p "${DIR}" + tar -C "${DIR}" -xf "${f}" + LAYER=$(jq -r '.[0].Layers[0]' "${DIR}/manifest.json") + mv -f "${DIR}/${LAYER}" "./${DIR}.tar" + rm -rf "${DIR}" "${f}"* done - name: Build OCI tags @@ -114,3 +119,7 @@ jobs: - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} + + - name: Cleanup oci_build dir + run: | + rm -rf oci_build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a6f55cd243..a620154e3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -374,12 +374,17 @@ jobs: - name: Extract OCI artifacts run: | + rm -rf oci_build mkdir -p oci_build - cd oci_build - for f in ../*-oci_*.tgz; do - tar --wildcards --strip-components 1 -xf $f "*/layer.tar" - mv -f layer.tar $(basename $f .tgz).tar - rm -f $f + cd oci_build || exit 1 + for f in ../RaspberryMatic-${{ needs.release_draft.outputs.version }}-oci_*.tgz; do + echo "extracting ${f}..." + DIR=$(basename "${f}" .tgz) + mkdir -p "${DIR}" + tar -C "${DIR}" -xf "${f}" + LAYER=$(jq -r '.[0].Layers[0]' "${DIR}/manifest.json") + mv -f "${DIR}/${LAYER}" "./${DIR}.tar" + rm -rf "${DIR}" "${f}"* done - name: Build OCI tags @@ -448,6 +453,10 @@ jobs: - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} + - name: Cleanup oci_build dir + run: | + rm -rf oci_build + ########################################## # Publish new version to public publish-build: diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 2978f33ea7..650c3719dd 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -325,12 +325,17 @@ jobs: - name: Extract OCI artifacts run: | + rm -rf oci_build mkdir -p oci_build - cd oci_build - for f in ../*-oci_*.tgz; do - tar --wildcards --strip-components 1 -xf $f "*/layer.tar" - mv -f layer.tar $(basename $f .tgz).tar - rm -f $f + cd oci_build || exit 1 + for f in ../RaspberryMatic-${{ env.BUILD_VERSION }}-oci_*.tgz; do + echo "extracting ${f}..." + DIR=$(basename "${f}" .tgz) + mkdir -p "${DIR}" + tar -C "${DIR}" -xf "${f}" + LAYER=$(jq -r '.[0].Layers[0]' "${DIR}/manifest.json") + mv -f "${DIR}/${LAYER}" "./${DIR}.tar" + rm -rf "${DIR}" "${f}"* done - name: Build OCI tags @@ -399,6 +404,10 @@ jobs: - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} + - name: Cleanup oci_build dir + run: | + rm -rf oci_build + helm: permissions: contents: write # stefanprodan/helm-gh-pages diff --git a/Makefile b/Makefile index 78a6a91fc2..6273c3711b 100644 --- a/Makefile +++ b/Makefile @@ -64,16 +64,18 @@ else mkdir -p build-$(PRODUCT)/images for f in `cat release/updatepkg/$(PRODUCT)/files-images.txt`; do echo DUMMY >build-$(PRODUCT)/images/$${f}; done # create fake OCI/Docker image - mkdir -p /tmp/oci - mkdir sbin - echo -e '#!/bin/sh\nwhile true; do echo CONTINUE; sleep 5; done\nexit 0' >sbin/init - chmod a+rx sbin/init - mkdir -p var/status - touch var/status/startupFinished - tar -cf /tmp/oci/layer.tar LICENSE sbin/init var/status/startupFinished - tar -C /tmp -cvf RaspberryMatic-$(PRODUCT_VERSION)-$(BOARD).tar oci - mv RaspberryMatic-$(PRODUCT_VERSION)-$(BOARD).tar build-$(PRODUCT)/images/ - rm -rf /tmp/oci + $(eval TMPDIR := $(shell mktemp -d)) + mkdir -p $(TMPDIR)/oci $(TMPDIR)/sbin + echo -e '#!/bin/sh\nwhile true; do echo CONTINUE; sleep 5; done\nexit 0' >$(TMPDIR)/sbin/init + chmod a+rx $(TMPDIR)/sbin/init + mkdir -p $(TMPDIR)/var/status + touch $(TMPDIR)/var/status/startupFinished + echo DUMMY >$(TMPDIR)/LICENSE + tar -C $(TMPDIR) -cvf $(TMPDIR)/oci/layer.tar LICENSE sbin/init var/status/startupFinished + echo '[{"Layers":["oci/layer.tar"]}]' >$(TMPDIR)/manifest.json + tar -C $(TMPDIR) -cvf $(TMPDIR)/RaspberryMatic-$(PRODUCT_VERSION)-$(BOARD).tar oci manifest.json + mv $(TMPDIR)/RaspberryMatic-$(PRODUCT_VERSION)-$(BOARD).tar build-$(PRODUCT)/images/ + rm -rf $(TMPDIR) # create fake sdcard.img and ova echo DUMMY >build-$(PRODUCT)/images/sdcard.img echo DUMMY >build-$(PRODUCT)/images/RaspberryMatic.ova