GlueOps / github-actions-build-push-containers

10 stars 2 forks source link

Support for multi-platform builds? #35

Closed itavero closed 2 weeks ago

itavero commented 1 month ago

Does this action have the ability to do a multi-platform build?

Currently the resulting image from the GitHub workflow is targeted at linux/amd64, but I also need an linux/arm64/v8 build.

kubo6472 commented 2 weeks ago

In need of this too (I made this me too comment, since this repo does not seem to have that much traction currently. Sorry for the email notification OP :D)

venkatamutyala commented 2 weeks ago

Hey @kubo6472 @itavero Apologies for the delay. I meant to follow up late last week. We have recently stopped usage of this action ourselves and been migrating to the manifest shown below. It should be a drop in replacement if you are using ghcr.io but also give you flexibility to leverage caching, multi-architecture builds and much more.

name: Publish to GHCR.io

on: [push]

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build_tag_push_to_ghcr:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4

      - name: Set up QEMU
        uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3

      - name: Setup Docker buildx
        uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0

      - name: Log into registry ${{ env.REGISTRY }}
        uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 # v3.2.0
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract Docker metadata
        id: meta
        uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
          tags: |
            type=ref,event=branch,prefix=
            type=ref,event=tag,prefix=
            type=sha,format=short,prefix=
            type=sha,format=long,prefix=

      - name: Build and push Docker image
        id: build-and-push
        uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
        with:
          context: .
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          provenance: false
          cache-from: type=gha
          cache-to: type=gha,mode=max

ref for multi-platform builds:

https://github.com/docker/setup-qemu-action?tab=readme-ov-file#inputs https://github.com/docker/setup-buildx-action?tab=readme-ov-file#inputs

kubo6472 commented 2 weeks ago

I've been using build-push-action @v6 along with qemu, buildx and caching. I thought you made some magic potion that can do this automagically.

venkatamutyala commented 2 weeks ago

@kubo6472 not that I know of. We were heavily opionated and i believe our action only supported x86 builds. I'd recommend switching back to what you had before or leveraging the example I provided above.