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 : |
@@ -84,20 +92,42 @@ jobs:
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+ GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}"
97+ #DOCKER_MANIFEST=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-edge")
98+ GITHUB_MANIFEST=("manifest" "create" "${GITHUB_IMAGE}:${VERSION}-edge")
99+ # Upload each rock to the container registry
100+ for rock in *.rock; do
101+ echo "Create container from ${rock}"
102+ ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Architecture }}")
103+ echo "Architecture: ${ARCH}"
104+ rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge"
105+ # Push to Docker Hub
106+ # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge ${USERNAME}:${VERSION}-${ARCH}-edge
107+ # docker push ${USERNAME}/${IMAGE}:${VERSION}-${ARCH}-edge
108+ # DOCKER_MANIFEST+=("${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge")
109+ # Push to GitHub Packages
110+ docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-edge ${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge
111+ docker push ${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge
112+ GITHUB_MANIFEST+=("${GITHUB_IMAGE}:${VERSION}-${ARCH}-edge")
113+ done
114+
115+ # Create and upload a multi-arch manifest for Docker Hub
116+ # echo "create multi-arch container with args: ${DOCKER_MANIFEST[@]}"
117+ # docker "${DOCKER_MANIFEST[@]}"
90118 # Push to Docker Hub
91119 # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${USERNAME}:${VERSION}-edge
92120 # docker push ${USERNAME}/${IMAGE}:${VERSION}-edge
93121 # docker tag ${USERNAME}/${IMAGE}:${VERSION}-edge ${USERNAME}/${IMAGE}:latest
94122 # docker push ${USERNAME}/${IMAGE}:latest
123+
124+ # Create and upload a multi-arch manifest for Github Packages
125+ echo "create multi-arch container with args: ${GITHUB_MANIFEST[@]}"
126+ docker "${GITHUB_MANIFEST[@]}"
95127 # Push to GitHub Packages
96- GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}"
97- docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:${VERSION}-edge
98- docker push ${GITHUB_IMAGE}:${VERSION}-edge
99- docker tag ${GITHUB_IMAGE}:${VERSION}-edge ${GITHUB_IMAGE}:latest
100- docker push ${GITHUB_IMAGE}:latest
128+ docker manifest push ${GITHUB_IMAGE}:${VERSION}-edge
129+ docker manifest create ${GITHUB_IMAGE}:latest ${GITHUB_IMAGE}:${VERSION}-edge
130+ docker manifest push ${GITHUB_IMAGE}:latest
101131
102132 - name : Build and Push Docker Image (Stable Channel)
103133 if : github.event.inputs.workflow_choice == 'stable' || github.event.inputs.workflow_choice == 'both'
@@ -107,13 +137,35 @@ jobs:
107137 run : |
108138 IMAGE="$(yq '.name' rockcraft.yaml)"
109139 VERSION="$(yq '.version' rockcraft.yaml)"
110- ROCK="$(ls *.rock | tail -n 1)"
111140 ORG_NAME=$(echo "${ORG}" | tr '[:upper:]' '[:lower:]')
112- sudo rockcraft.skopeo --insecure-policy copy oci-archive:"${ROCK}" docker-daemon:"${ORG_NAME}/${IMAGE}:${VERSION}-stable"
141+ GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}"
142+ #DOCKER_MANIFEST=("manifest" "create" "${ORG_NAME}/${IMAGE}:${VERSION}-stable")
143+ GITHUB_MANIFEST=("manifest" "create" "${GITHUB_IMAGE}:${VERSION}-stable")
144+ # Upload each rock to the container registry
145+ for rock in *.rock; do
146+ echo "Create container from ${rock}"
147+ ARCH=$(rockcraft.skopeo --insecure-policy inspect "oci-archive:${rock}" --format "{{ .Architecture }}")
148+ echo "Architecture: ${ARCH}"
149+ rockcraft.skopeo --insecure-policy copy oci-archive:${rock} "docker-daemon:${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable"
150+ # Push to Docker Hub
151+ # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable ${USERNAME}:${VERSION}-${ARCH}-stable
152+ # docker push ${USERNAME}/${IMAGE}:${VERSION}-${ARCH}-stable
153+ # DOCKER_MANIFEST+=("${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable")
154+ # Push to GitHub Packages
155+ docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-${ARCH}-stable ${GITHUB_IMAGE}:${VERSION}-${ARCH}-stable
156+ docker push ${GITHUB_IMAGE}:${VERSION}-${ARCH}-stable
157+ GITHUB_MANIFEST+=("${GITHUB_IMAGE}:${VERSION}-${ARCH}-stable")
158+ done
159+
160+ # Create and upload a multi-arch manifest for Docker Hub
161+ # echo "create multi-arch container with args: ${DOCKER_MANIFEST[@]}"
162+ # docker "${DOCKER_MANIFEST[@]}"
113163 # Push to Docker Hub
114164 # docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-stable ${USERNAME}:${VERSION}-stable
115165 # docker push ${USERNAME}/${IMAGE}:${VERSION}-stable
166+
167+ # Create and upload a multi-arch manifest for Github Packages
168+ echo "create multi-arch container with args: ${GITHUB_MANIFEST[@]}"
169+ docker "${GITHUB_MANIFEST[@]}"
116170 # Push to GitHub Packages
117- GITHUB_IMAGE="ghcr.io/${ORG_NAME}/${IMAGE}"
118- docker tag ${ORG_NAME}/${IMAGE}:${VERSION}-stable ${GITHUB_IMAGE}:${VERSION}-stable
119- docker push ${GITHUB_IMAGE}:${VERSION}-stable
171+ docker manifest push ${GITHUB_IMAGE}:${VERSION}-stable
0 commit comments