# ref: https://docs.docker.com/ci-cd/github-actions/ # https://blog.oddbit.com/post/2020-09-25-building-multi-architecture-im/ name: docker on: push: branches: - master tags: - 'v*' permissions: contents: read # New pushes cancel an in-progress build for the same ref. Tags are isolated # by ref, so re-pushing a release tag only de-dupes itself, never another tag. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 # Auto-generates image tags, replacing the former hand-rolled shell: # - master push -> :latest # - clean release tag vX.Y.Z -> :X.Y.Z :X :X.Y :latest # - nightly tag vX.Y.Z-nightly. -> :X.Y.Z-nightly. (no major/minor/latest) - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ${{ secrets.DOCKER_IMAGE }} flavor: latest=false tags: | type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) || (startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-')) }} type=semver,pattern={{version}} type=semver,pattern={{major}},enable=${{ !contains(github.ref_name, '-') }} type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref_name, '-') }} - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v3 - name: Login to DockerHub if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Buildx and push uses: docker/build-push-action@v6 with: platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/s390x,linux/riscv64 push: true tags: ${{ steps.meta.outputs.tags }} # Reuse build layers across runs via the GitHub Actions cache. cache-from: type=gha cache-to: type=gha,mode=max