From cf2b2d5e85d7f891d62680dce80c3e8398ab2b84 Mon Sep 17 00:00:00 2001 From: Badlop Date: Fri, 17 Jan 2025 10:18:34 +0100 Subject: [PATCH] Container: Build ARM in native runner instead of QEMU, merge and clean --- .github/workflows/container.yml | 64 +++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index 0bb169ccc..9f1143131 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -15,9 +15,17 @@ env: IMAGE_NAME: ${{ github.repository }} jobs: - container: - name: Container - runs-on: ubuntu-22.04 + + build: + runs-on: ubuntu-24.04${{ matrix.suffix }} + strategy: + matrix: + platform: [amd64, arm64] + include: + - platform: amd64 + suffix: + - platform: arm64 + suffix: -arm permissions: packages: write steps: @@ -32,8 +40,7 @@ jobs: repository: processone/ejabberd-contrib path: .ejabberd-modules/sources/ejabberd-contrib - - name: Log in to the Container registry - uses: docker/login-action@v3 + - uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -43,24 +50,19 @@ jobs: id: gitdescribe run: echo "ver=$(git describe --tags)" >> $GITHUB_OUTPUT - - name: Extract metadata (tags, labels) for Docker + - uses: docker/metadata-action@v5 id: meta - uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + flavor: suffix=--${{ matrix.platform }},latest=false labels: | org.opencontainers.image.revision=${{ steps.gitdescribe.outputs.ver }} org.opencontainers.image.licenses=GPL-2.0 org.opencontainers.image.vendor=ProcessOne - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + - uses: docker/setup-buildx-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build and push Docker image - uses: docker/build-push-action@v6 + - uses: docker/build-push-action@v6 with: build-args: | VERSION=${{ steps.gitdescribe.outputs.ver }} @@ -69,6 +71,38 @@ jobs: context: . file: .github/container/Dockerfile labels: ${{ steps.meta.outputs.labels }} - platforms: linux/amd64,linux/arm64 + platforms: linux/${{ matrix.platform }} push: true tags: ${{ steps.meta.outputs.tags }} + + merge: + needs: [build] + runs-on: ubuntu-24.04 + outputs: + image-uri: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.merge.outputs.digest }} + steps: + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - uses: docker/metadata-action@v5 + id: metadata + with: + images: ghcr.io/${{ github.repository }} + - uses: int128/docker-manifest-create-action@v2 + id: merge + with: + index-annotations: ${{ steps.metadata.outputs.labels }} + tags: ${{ steps.metadata.outputs.tags }} + sources: | + ${{ steps.metadata.outputs.tags }}--amd64 + ${{ steps.metadata.outputs.tags }}--arm64 + - uses: dataaxiom/ghcr-cleanup-action@v1 + with: + dry-run: true + delete-tags: '*--a??64' + delete-untagged: true + delete-ghost-images: true + delete-partial-images: true + delete-orphaned-images: true