name: Docker

on:
  push:
    branches: [main]
  workflow_dispatch:

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Derive image name and tags
        id: meta
        shell: bash
        run: |
          set -euo pipefail

          SERVER_URL="${GITHUB_SERVER_URL:-${GITEA_SERVER_URL:-}}"
          REPO="${GITHUB_REPOSITORY:-${GITEA_REPOSITORY:-}}"
          SHA="${GITHUB_SHA:-${GITEA_SHA:-}}"

          if [[ -z "${SERVER_URL}" || -z "${REPO}" || -z "${SHA}" ]]; then
            echo "Missing SERVER_URL/REPO/SHA env vars." >&2
            echo "SERVER_URL='${SERVER_URL}' REPO='${REPO}' SHA='${SHA}'" >&2
            exit 1
          fi

          HOST=$(echo "${SERVER_URL}" | sed 's|https://||;s|http://||')
          IMAGE=$(echo "${HOST}/${REPO}" | tr '[:upper:]' '[:lower:]')
          SHORT_SHA=$(echo "${SHA}" | cut -c1-7)

          echo "host=${HOST}" >> "$GITHUB_OUTPUT"
          echo "image=${IMAGE}" >> "$GITHUB_OUTPUT"
          echo "short_sha=${SHORT_SHA}" >> "$GITHUB_OUTPUT"

      - name: Log in to Gitea container registry
        uses: docker/login-action@v3
        with:
          registry: ${{ steps.meta.outputs.host }}
          username: ${{ github.actor }}
          password: ${{ secrets.TKNTKN }}

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

      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          context: .
          file: Dockerfile
          push: true
          tags: |
            ${{ steps.meta.outputs.image }}:latest
            ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.short_sha }}
