# docker.yml
# Reusable workflow that builds a docker image for Libation.
---
name: docker

on:
  workflow_call:
    inputs:
      version:
        type: string
        description: "Version number"
        required: true
      release:
        type: boolean
        description: "Is this a release build?"
        required: true
    secrets:
      docker_username:
        required: true
      docker_token:
        required: true

jobs:
  build_and_push:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v6

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

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        if: ${{ inputs.release }}
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.docker_username }}
          password: ${{ secrets.docker_token }}

      - name: Generate docker image tags
        id: metadata
        uses: docker/metadata-action@v5
        with:
          flavor: |
            latest=true
          images: |
            name=${{ secrets.docker_username }}/libation
          tags: |
            type=raw,value=${{ inputs.version }},enable=${{ inputs.release }}

      - name: Build and push image
        uses: docker/build-push-action@v6
        with:
          platforms: linux/amd64,linux/arm64
          push: ${{ steps.metadata.outputs.tags != ''}}
          cache-from: type=gha
          cache-to: type=gha,mode=max
          tags: ${{ steps.metadata.outputs.tags }}
          labels: ${{ steps.metadata.outputs.labels }}
