name: Build Standalone Docker Images

on:
  push:
    branches:
      - "**"
    tags:
      - "v*"
  workflow_dispatch:

jobs:
  build-standalone:
    runs-on: ubuntu-latest
    permissions:
      packages: write
    strategy:
      fail-fast: false
      matrix:
        GO_VERSION:
          - 1.25.5

    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          persist-credentials: false
          fetch-depth: 0

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

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

      - name: Set up Go
        uses: actions/setup-go@v6
        with:
          go-version: ${{ matrix.GO_VERSION }}

      - name: APT Install
        run: |
          sudo dpkg --add-architecture arm64

          sudo rm -f /etc/apt/sources.list.d/ubuntu.sources

          # Create proper deb822 format sources for both amd64 and arm64
          cat <<EOF | sudo tee /etc/apt/sources.list.d/amd64.sources
          Types: deb
          URIs: http://azure.archive.ubuntu.com/ubuntu/
          Suites: noble noble-updates noble-backports
          Components: main restricted universe multiverse
          Architectures: amd64

          Types: deb
          URIs: http://security.ubuntu.com/ubuntu/
          Suites: noble-security
          Components: main restricted universe multiverse
          Architectures: amd64
          EOF

          cat <<EOF | sudo tee /etc/apt/sources.list.d/arm64.sources
          Types: deb
          URIs: http://ports.ubuntu.com/ubuntu-ports/
          Suites: noble noble-updates noble-backports noble-security
          Components: main restricted universe multiverse
          Architectures: arm64
          EOF

          sudo apt-get update
          sudo apt-get -y install build-essential debhelper fakeroot crossbuild-essential-arm64

      - name: Build Debian packages
        run: |
          make debian
          make debian-arm64

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ghcr.io/hakwerk/labca-standalone
          annotations: |
            org.opencontainers.image.description=Standalone version of LabCA GUI for use with other ACME servers
            org.opencontainers.image.documentation=https://github.com/hakwerk/labca/blob/master/README_standalone.md
            org.opencontainers.image.title=labca-standalone
          labels: |
            org.opencontainers.image.description=Standalone version of LabCA GUI for use with other ACME servers
            org.opencontainers.image.documentation=https://github.com/hakwerk/labca/blob/master/README_standalone.md
            org.opencontainers.image.title=labca-standalone
          tags: |
            type=schedule,pattern={{date 'YYYYMMDD'}}
            type=match,pattern=v(.*),group=1
            type=edge,enable=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
            type=ref,event=branch,enable=${{ github.ref != format('refs/heads/{0}', github.event.repository.default_branch) }}
            type=ref,event=pr

      - name: Login to GHCR
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and push docker images
        uses: docker/build-push-action@v6
        with:
          annotations: ${{ steps.meta.outputs.annotations }}
          context: release
          file: build/Dockerfile-standalone
          labels: ${{ steps.meta.outputs.labels }}
          platforms: linux/amd64,linux/arm64/v8
          push: true
          tags: ${{ steps.meta.outputs.tags }}
