From 276c9cfef8dbb16d3ce108fec3293fa6971e8e8b Mon Sep 17 00:00:00 2001 From: Alexandre Relange Date: Sat, 2 Aug 2025 11:43:38 +0200 Subject: [PATCH 01/11] fix: rockcraft build build in CI started to fail, probably due to an update of rockcraft version Adjusting yaml file to make the build successful --- rockcraft.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rockcraft.yaml b/rockcraft.yaml index 5705ecb..3505002 100644 --- a/rockcraft.yaml +++ b/rockcraft.yaml @@ -1453,7 +1453,7 @@ parts: avahi-daemon: plugin: nil - overlay-packages: + stage-packages: - avahi-daemon - avahi-utils - libnss-mdns From 01b43ccb3d74f7cf0779651d7412fa3ea8767873 Mon Sep 17 00:00:00 2001 From: Alexandre Relange Date: Tue, 29 Jul 2025 08:04:11 +0200 Subject: [PATCH 02/11] ci: arm64 build and multi-arch container Build in the CI for arm64 in addition to amd64 architecture for both snaps and rockcraft Also create a multi-arch container (amd64+arm64) and push it to the registry --- .github/workflows/ci.yml | 20 ++++++++-- .github/workflows/registry-actions.yml | 54 +++++++++++++++++++++----- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8df5815..3ac102d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,14 @@ on: jobs: build-rock: - runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - arch: 'amd64' + runner: ubuntu-22.04 + - arch: 'arm64' + runner: ubuntu-22.04-arm + runs-on: ${{ matrix.runner }} steps: - name: Checkout repository uses: actions/checkout@v4 @@ -23,11 +30,18 @@ jobs: id: rockcraft build-snap: - runs-on: ubuntu-latest + strategy: + matrix: + include: + - arch: 'amd64' + runner: ubuntu-22.04 + - arch: 'arm64' + runner: ubuntu-22.04-arm + runs-on: ${{ matrix.runner }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Build Snap Package uses: snapcore/action-build@v1 - id: snapcraft \ No newline at end of file + id: snapcraft diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index 5c71fa4..2922d2f 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -23,11 +23,18 @@ on: jobs: build-rock: - runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - arch: 'amd64' + runner: ubuntu-22.04 + - arch: 'arm64' + runner: ubuntu-22.04-arm + runs-on: ${{ matrix.runner }} steps: - name: Checkout repository uses: actions/checkout@v4 - + - name: Pack with Rockcraft uses: canonical/craft-actions/rockcraft-pack@main id: rockcraft @@ -35,7 +42,7 @@ jobs: - name: Upload Rock Artifact uses: actions/upload-artifact@v4 with: - name: cups-rock + name: cups-rock-${{ matrix.arch }} path: ${{ steps.rockcraft.outputs.rock }} publish-rock: @@ -49,7 +56,8 @@ jobs: - name: Download Rock Artifact uses: actions/download-artifact@v4 with: - name: cups-rock + pattern: cups-rock-* + merge-multiple: true - name: Install Dependencies run: | @@ -84,9 +92,24 @@ jobs: run: | IMAGE="$(yq '.name' rockcraft.yaml)" VERSION="$(yq '.version' rockcraft.yaml)" - ROCK="$(ls *.rock | tail -n 1)" ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]') - sudo rockcraft.skopeo --insecure-policy copy oci-archive:"${ROCK}" docker-daemon:"${ORG_NAME}/${IMAGE}:${VERSION}-edge" + # Upload each rock to the container registry + declare -a digests=() + for rock in *.rock; do + echo "Create container from ${rock}" + digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") + echo "Digest: \n${digest}" + ARCH="$(echo ${digest} | yq '.Descriptor.platform.architecture')" + echo "Architecture: ${ARCH}" + rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${rock}" + done + args=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") + for digest in "${digests[@]}"; do + args+=("${ORG_NAME}/${IMAGE}@${digest}") + done + # Create and upload a multi-arch manifest + echo "create multi-arch container with args: ${args[@]}" + docker "${args[@]}" # Push to Docker Hub # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${USERNAME}:${VERSION}-edge # docker push ${USERNAME}/${IMAGE}:${VERSION}-edge @@ -95,9 +118,9 @@ jobs: # Push to GitHub Packages GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:${VERSION}-edge - docker push ${GITHUB_IMAGE}:${VERSION}-edge + #docker push ${GITHUB_IMAGE}:${VERSION}-edge docker tag ${GITHUB_IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:latest - docker push ${GITHUB_IMAGE}:latest + #docker push ${GITHUB_IMAGE}:latest - name: Build and Push Docker Image (Stable Channel) if: github.event.inputs.workflow_choice == 'stable' || github.event.inputs.workflow_choice == 'both' @@ -107,9 +130,20 @@ jobs: run: | IMAGE="$(yq '.name' rockcraft.yaml)" VERSION="$(yq '.version' rockcraft.yaml)" - ROCK="$(ls *.rock | tail -n 1)" ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]') - sudo rockcraft.skopeo --insecure-policy copy oci-archive:"${ROCK}" docker-daemon:"${ORG_NAME}/${IMAGE}:${VERSION}-stable" + # Upload each rock to the container registry + declare -a digests=() + for rock in *.rock; do + digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") + digests+=($digest) + rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker://${ORG_NAME}/${IMAGE}@${digest}" + done + # Create and upload a multi-arch manifest + args=("manifest" "create" "--insecure" "${ORG_NAME}/${IMAGE}:${VERSION}-stable") + for digest in "${digests[@]}"; do + args+=(--amend "${ORG_NAME}/${IMAGE}@${digest}") + done + docker "${args[@]}" # Push to Docker Hub # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-stable ${USERNAME}:${VERSION}-stable # docker push ${USERNAME}/${IMAGE}:${VERSION}-stable From 600aeee2c4c4bfe3c2f21f79576d32dedb2b7c58 Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Sun, 3 Aug 2025 21:16:47 +0200 Subject: [PATCH 03/11] hotfix --- .github/workflows/registry-actions.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index 2922d2f..1cebd3e 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -98,10 +98,10 @@ jobs: for rock in *.rock; do echo "Create container from ${rock}" digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") - echo "Digest: \n${digest}" - ARCH="$(echo ${digest} | yq '.Descriptor.platform.architecture')" + echo "Digest: ${digest}" + ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Platform.Architecture }}") echo "Architecture: ${ARCH}" - rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${rock}" + rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge" done args=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") for digest in "${digests[@]}"; do @@ -118,9 +118,9 @@ jobs: # Push to GitHub Packages GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:${VERSION}-edge - #docker push ${GITHUB_IMAGE}:${VERSION}-edge + docker push ${GITHUB_IMAGE}:${VERSION}-edge docker tag ${GITHUB_IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:latest - #docker push ${GITHUB_IMAGE}:latest + docker push ${GITHUB_IMAGE}:latest - name: Build and Push Docker Image (Stable Channel) if: github.event.inputs.workflow_choice == 'stable' || github.event.inputs.workflow_choice == 'both' From 69da22d36dae53d581ac339531f0fcf47c1074c2 Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Sun, 3 Aug 2025 21:47:24 +0200 Subject: [PATCH 04/11] ifix arch path --- .github/workflows/registry-actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index 1cebd3e..c1b7473 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -99,7 +99,7 @@ jobs: echo "Create container from ${rock}" digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") echo "Digest: ${digest}" - ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Platform.Architecture }}") + ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Architecture }}") echo "Architecture: ${ARCH}" rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge" done From 6acc39cfb64bedeebaf5d2a289f74d53abb91290 Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Sun, 3 Aug 2025 22:18:45 +0200 Subject: [PATCH 05/11] fix digest --- .github/workflows/registry-actions.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index c1b7473..26c0083 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -99,6 +99,7 @@ jobs: echo "Create container from ${rock}" digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") echo "Digest: ${digest}" + digests+=($digest) ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Architecture }}") echo "Architecture: ${ARCH}" rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge" From e7b113e659a34357a7253813e8059fbfe852ab1f Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Sun, 3 Aug 2025 22:54:47 +0200 Subject: [PATCH 06/11] pushing single arch on server before creating manifests --- .github/workflows/registry-actions.yml | 31 +++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index 26c0083..4be989b 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -93,6 +93,7 @@ jobs: IMAGE="$(yq '.name' rockcraft.yaml)" VERSION="$(yq '.version' rockcraft.yaml)" ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]') + GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" # Upload each rock to the container registry declare -a digests=() for rock in *.rock; do @@ -103,21 +104,35 @@ jobs: ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Architecture }}") echo "Architecture: ${ARCH}" rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge" + # Push to Docker Hub + # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge ${USERNAME}:${VERSION}-${ARCH}-edge + # docker push ${USERNAME}/${IMAGE}:${VERSION}-${ARCH}-edge + # Push to GitHub Packages + docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge ${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge + docker push ${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge done - args=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") - for digest in "${digests[@]}"; do - args+=("${ORG_NAME}/${IMAGE}@${digest}") - done - # Create and upload a multi-arch manifest - echo "create multi-arch container with args: ${args[@]}" - docker "${args[@]}" + + # Create and upload a multi-arch manifest for Docker Hub + # args=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") + # for digest in "${digests[@]}"; do + # args+=("${ORG_NAME}/${IMAGE}@${digest}") + # done + # echo "create multi-arch container with args: ${args[@]}" + # docker "${args[@]}" # Push to Docker Hub # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${USERNAME}:${VERSION}-edge # docker push ${USERNAME}/${IMAGE}:${VERSION}-edge # docker tag ${USERNAME}/${IMAGE}:${VERSION}-edge ${USERNAME}/${IMAGE}:latest # docker push ${USERNAME}/${IMAGE}:latest + + # Create and upload a multi-arch manifest for Github Packages + args=("manifest" "create" "${ORG_NAME}/${GITHUB_IMAGE}:${VERSION}-edge") + for digest in "${digests[@]}"; do + args+=("${GITHUB_IMAGE}@${digest}") + done + echo "create multi-arch container with args: ${args[@]}" + docker "${args[@]}" # Push to GitHub Packages - GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:${VERSION}-edge docker push ${GITHUB_IMAGE}:${VERSION}-edge docker tag ${GITHUB_IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:latest From d7e0726b1feb8ce62097fe08eeddb056c8d12ab6 Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Sun, 3 Aug 2025 23:27:26 +0200 Subject: [PATCH 07/11] fix manifest name to github --- .github/workflows/registry-actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index 4be989b..478ed0b 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -126,7 +126,7 @@ jobs: # docker push ${USERNAME}/${IMAGE}:latest # Create and upload a multi-arch manifest for Github Packages - args=("manifest" "create" "${ORG_NAME}/${GITHUB_IMAGE}:${VERSION}-edge") + args=("manifest" "create" "${GITHUB_IMAGE}:${VERSION}-edge") for digest in "${digests[@]}"; do args+=("${GITHUB_IMAGE}@${digest}") done From db546b6fdce36d90b47cd1ccc9fcec8fd153a872 Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Mon, 4 Aug 2025 09:00:32 +0200 Subject: [PATCH 08/11] replace digest by tags --- .github/workflows/registry-actions.yml | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index 478ed0b..f9c8359 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -94,8 +94,9 @@ jobs: VERSION="$(yq '.version' rockcraft.yaml)" ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]') GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" + #DOCKER_MANIFEST=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") + GITHUB_MANIFEST=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") # Upload each rock to the container registry - declare -a digests=() for rock in *.rock; do echo "Create container from ${rock}" digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") @@ -107,18 +108,16 @@ jobs: # Push to Docker Hub # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge ${USERNAME}:${VERSION}-${ARCH}-edge # docker push ${USERNAME}/${IMAGE}:${VERSION}-${ARCH}-edge + # DOCKER_MANIFEST+=("${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge") # Push to GitHub Packages docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge ${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge docker push ${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge + GITHUB_MANIFEST+=("${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge") done # Create and upload a multi-arch manifest for Docker Hub - # args=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") - # for digest in "${digests[@]}"; do - # args+=("${ORG_NAME}/${IMAGE}@${digest}") - # done - # echo "create multi-arch container with args: ${args[@]}" - # docker "${args[@]}" + # echo "create multi-arch container with args: ${DOCKER_MANIFEST[@]}" + # docker "${DOCKER_MANIFEST[@]}" # Push to Docker Hub # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${USERNAME}:${VERSION}-edge # docker push ${USERNAME}/${IMAGE}:${VERSION}-edge @@ -126,12 +125,8 @@ jobs: # docker push ${USERNAME}/${IMAGE}:latest # Create and upload a multi-arch manifest for Github Packages - args=("manifest" "create" "${GITHUB_IMAGE}:${VERSION}-edge") - for digest in "${digests[@]}"; do - args+=("${GITHUB_IMAGE}@${digest}") - done - echo "create multi-arch container with args: ${args[@]}" - docker "${args[@]}" + echo "create multi-arch container with args: ${GITHUB_MANIFEST[@]}" + docker "${GITHUB_MANIFEST[@]}" # Push to GitHub Packages docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:${VERSION}-edge docker push ${GITHUB_IMAGE}:${VERSION}-edge From 454e8a20255fab9ed75d410154b3f8c8ea6923b3 Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Mon, 4 Aug 2025 20:40:51 +0200 Subject: [PATCH 09/11] manifest directly on github --- .github/workflows/registry-actions.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index f9c8359..d45ad88 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -95,7 +95,7 @@ jobs: ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]') GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" #DOCKER_MANIFEST=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") - GITHUB_MANIFEST=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge") + GITHUB_MANIFEST=("manifest" "create" "${GITHUB_IMAGE}:${VERSION}-edge") # Upload each rock to the container registry for rock in *.rock; do echo "Create container from ${rock}" @@ -128,8 +128,7 @@ jobs: echo "create multi-arch container with args: ${GITHUB_MANIFEST[@]}" docker "${GITHUB_MANIFEST[@]}" # Push to GitHub Packages - docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:${VERSION}-edge - docker push ${GITHUB_IMAGE}:${VERSION}-edge + #docker push ${GITHUB_IMAGE}:${VERSION}-edge docker tag ${GITHUB_IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:latest docker push ${GITHUB_IMAGE}:latest From 397283b7fa8aa36dfcf9f68ea3e0ed30e320116c Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Mon, 4 Aug 2025 21:17:03 +0200 Subject: [PATCH 10/11] manifest push --- .github/workflows/registry-actions.yml | 42 ++++++++++++++++---------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index d45ad88..d7e630f 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -99,9 +99,6 @@ jobs: # Upload each rock to the container registry for rock in *.rock; do echo "Create container from ${rock}" - digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") - echo "Digest: ${digest}" - digests+=($digest) ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Architecture }}") echo "Architecture: ${ARCH}" rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge" @@ -128,6 +125,7 @@ jobs: echo "create multi-arch container with args: ${GITHUB_MANIFEST[@]}" docker "${GITHUB_MANIFEST[@]}" # Push to GitHub Packages + docker manifest push ${GITHUB_IMAGE}:${VERSION}-edge #docker push ${GITHUB_IMAGE}:${VERSION}-edge docker tag ${GITHUB_IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:latest docker push ${GITHUB_IMAGE}:latest @@ -141,23 +139,35 @@ jobs: IMAGE="$(yq '.name' rockcraft.yaml)" VERSION="$(yq '.version' rockcraft.yaml)" ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]') + GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" + #DOCKER_MANIFEST=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-stable") + GITHUB_MANIFEST=("manifest" "create" "${GITHUB_IMAGE}:${VERSION}-stable") # Upload each rock to the container registry - declare -a digests=() for rock in *.rock; do - digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}") - digests+=($digest) - rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker://${ORG_NAME}/${IMAGE}@${digest}" - done - # Create and upload a multi-arch manifest - args=("manifest" "create" "--insecure" "${ORG_NAME}/${IMAGE}:${VERSION}-stable") - for digest in "${digests[@]}"; do - args+=(--amend "${ORG_NAME}/${IMAGE}@${digest}") + echo "Create container from ${rock}" + ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Architecture }}") + echo "Architecture: ${ARCH}" + rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable" + # Push to Docker Hub + # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable ${USERNAME}:${VERSION}-${ARCH}-stable + # docker push ${USERNAME}/${IMAGE}:${VERSION}-${ARCH}-stable + # DOCKER_MANIFEST+=("${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable") + # Push to GitHub Packages + docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable ${GITHUB_IMAGE}:${VERSION}-${ARCH}-stable + docker push ${GITHUB_IMAGE}:${VERSION}-${ARCH}-stable + GITHUB_MANIFEST+=("${GITHUB_IMAGE}:${VERSION}-${ARCH}-stable") done - docker "${args[@]}" + + # Create and upload a multi-arch manifest for Docker Hub + # echo "create multi-arch container with args: ${DOCKER_MANIFEST[@]}" + # docker "${DOCKER_MANIFEST[@]}" # Push to Docker Hub # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-stable ${USERNAME}:${VERSION}-stable # docker push ${USERNAME}/${IMAGE}:${VERSION}-stable + + # Create and upload a multi-arch manifest for Github Packages + echo "create multi-arch container with args: ${GITHUB_MANIFEST[@]}" + docker "${GITHUB_MANIFEST[@]}" # Push to GitHub Packages - GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}" - docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-stable ${GITHUB_IMAGE}:${VERSION}-stable - docker push ${GITHUB_IMAGE}:${VERSION}-stable + docker manifest push ${GITHUB_IMAGE}:${VERSION}-stable + #docker push ${GITHUB_IMAGE}:${VERSION}-stable From 9ef8f1a07bdb34eaa15b69239798d4096dbf9504 Mon Sep 17 00:00:00 2001 From: Alexandre RELANGE Date: Mon, 4 Aug 2025 21:50:01 +0200 Subject: [PATCH 11/11] hopefully the last one --- .github/workflows/registry-actions.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/registry-actions.yml b/.github/workflows/registry-actions.yml index d7e630f..7f8b4dc 100644 --- a/.github/workflows/registry-actions.yml +++ b/.github/workflows/registry-actions.yml @@ -126,9 +126,8 @@ jobs: docker "${GITHUB_MANIFEST[@]}" # Push to GitHub Packages docker manifest push ${GITHUB_IMAGE}:${VERSION}-edge - #docker push ${GITHUB_IMAGE}:${VERSION}-edge - docker tag ${GITHUB_IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:latest - docker push ${GITHUB_IMAGE}:latest + docker manifest create ${GITHUB_IMAGE}:latest ${GITHUB_IMAGE}:${VERSION}-edge + docker manifest push ${GITHUB_IMAGE}:latest - name: Build and Push Docker Image (Stable Channel) if: github.event.inputs.workflow_choice == 'stable' || github.event.inputs.workflow_choice == 'both' @@ -170,4 +169,3 @@ jobs: docker "${GITHUB_MANIFEST[@]}" # Push to GitHub Packages docker manifest push ${GITHUB_IMAGE}:${VERSION}-stable - #docker push ${GITHUB_IMAGE}:${VERSION}-stable