2323
2424jobs :
2525 build-rock :
26- runs-on : ubuntu-22.04
26+ strategy :
27+ matrix :
28+ include :
29+ - arch : ' amd64'
30+ runner : ubuntu-22.04
31+ - arch : ' arm64'
32+ runner : ubuntu-22.04-arm
33+ runs-on : ${{ matrix.runner }}
2734 steps :
2835 - name : Checkout repository
2936 uses : actions/checkout@v4
30-
37+
3138 - name : Pack with Rockcraft
3239 uses : canonical/craft-actions/rockcraft-pack@main
3340 id : rockcraft
3441
3542 - name : Upload Rock Artifact
3643 uses : actions/upload-artifact@v4
3744 with :
38- name : cups-rock
45+ name : cups-rock-${{ matrix.arch }}
3946 path : ${{ steps.rockcraft.outputs.rock }}
4047
4148 publish-rock :
4956 - name : Download Rock Artifact
5057 uses : actions/download-artifact@v4
5158 with :
52- name : cups-rock
59+ pattern : cups-rock-*
60+ merge-multiple : true
5361
5462 - name : Install Dependencies
5563 run : |
8492 run : |
8593 IMAGE="$(yq '.name' rockcraft.yaml)"
8694 VERSION="$(yq '.version' rockcraft.yaml)"
87- ROCK="$(ls *.rock | tail -n 1)"
8895 ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]')
89- sudo rockcraft.skopeo --insecure-policy copy oci-archive:"${ROCK}" docker-daemon:"${ORG_NAME}/${IMAGE}:${VERSION}-edge"
96+ # Upload each rock to the container registry
97+ declare -a digests=()
98+ for rock in *.rock; do
99+ digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}")
100+ digests+=($digest)
101+ rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker://${ORG_NAME}/${IMAGE}@${digest}"
102+ done
103+ # Create and upload a multi-arch manifest
104+ args=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge")
105+ for digest in "${digests[@]}"; do
106+ args+=(--amend "${ORG_NAME}/${IMAGE}@${digest}")
107+ done
108+ docker "${args[@]}"
109+ manifest=$(docker manifest push ${ORG_NAME}/${IMAGE}:${VERSION}-edge)
90110 # Push to Docker Hub
91111 # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${USERNAME}:${VERSION}-edge
92112 # docker push ${USERNAME}/${IMAGE}:${VERSION}-edge
@@ -107,9 +127,21 @@ jobs:
107127 run : |
108128 IMAGE="$(yq '.name' rockcraft.yaml)"
109129 VERSION="$(yq '.version' rockcraft.yaml)"
110- ROCK="$(ls *.rock | tail -n 1)"
111130 ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]')
112- sudo rockcraft.skopeo --insecure-policy copy oci-archive:"${ROCK}" docker-daemon:"${ORG_NAME}/${IMAGE}:${VERSION}-stable"
131+ # Upload each rock to the container registry
132+ declare -a digests=()
133+ for rock in *.rock; do
134+ digest=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Digest }}")
135+ digests+=($digest)
136+ rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker://${ORG_NAME}/${IMAGE}@${digest}"
137+ done
138+ # Create and upload a multi-arch manifest
139+ args=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-stable")
140+ for digest in "${digests[@]}"; do
141+ args+=(--amend "${ORG_NAME}/${IMAGE}@${digest}")
142+ done
143+ docker "${args[@]}"
144+ manifest=$(docker manifest push ${ORG_NAME}/${IMAGE}:${VERSION}-stable)
113145 # Push to Docker Hub
114146 # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-stable ${USERNAME}:${VERSION}-stable
115147 # docker push ${USERNAME}/${IMAGE}:${VERSION}-stable
0 commit comments