name: Server release

on:
  release:
    types: [published]
  workflow_dispatch:

jobs:
  build-server:
    name: Build a docker image for spacedrive server
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash
    steps:
      - name: Maximize build space
        if: ${{ runner.os == 'Linux' }}
        uses: easimon/maximize-build-space@master
        with:
          remove-codeql: 'true'
          remove-dotnet: 'true'
          remove-haskell: 'true'
          remove-android: 'true'
          overprovision-lvm: 'true'
          remove-docker-images: 'true'

      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Update buildah
        shell: bash
        run: |
          wget -O- 'https://github.com/HeavenVolkoff/buildah-static/releases/latest/download/buildah-amd64.tar.gz' \
          | sudo tar -xzf- -C /usr/local/bin

      - name: Determine image name & tag
        id: image_info
        shell: bash
        run: |
          if [ "$GITHUB_EVENT_NAME" == "release" ]; then
            IMAGE_TAG="${GITHUB_REF##*/}"
          else
            IMAGE_TAG="$(git rev-parse --short "$GITHUB_SHA")"
          fi
          IMAGE_TAG="${IMAGE_TAG,,}"
          IMAGE_NAME="${GITHUB_REPOSITORY,,}/server"

          echo "Building ${IMAGE_NAME}:${IMAGE_TAG}"

          echo "tag=${IMAGE_TAG}" >> "$GITHUB_OUTPUT"
          echo "name=${IMAGE_NAME}" >> "$GITHUB_OUTPUT"
          echo "repo=${GITHUB_REPOSITORY}" >> "$GITHUB_OUTPUT"
          echo "repo_ref=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> "$GITHUB_OUTPUT"

      - name: Build image
        id: build-image
        # TODO: Change to stable version when available
        uses: redhat-actions/buildah-build@c79846fb306beeba490e89fb75d2d1af95831e79
        with:
          tags: ${{ steps.image_info.outputs.tag }} ${{ github.event_name == 'release' && 'latest' || 'staging' }}
          archs: amd64
          image: ${{ steps.image_info.outputs.name }}
          layers: 'false'
          context: ./apps/server/docker
          build-args: |
            REPO=${{ steps.image_info.outputs.repo }}
            REPO_REF=${{ steps.image_info.outputs.repo_ref }}
          containerfiles: |
            ./apps/server/docker/Dockerfile

      - name: Push image to ghcr.io
        # TODO: Restore redhat-actions/push-to-registry after PR is merged:
        # https://github.com/redhat-actions/push-to-registry/pull/93
        uses: Eusebiotrigo/push-to-registry@5acfa470857b62a053884f7214581d55ffeb54ac
        with:
          tags: ${{ steps.build-image.outputs.tags }}
          image: ${{ steps.build-image.outputs.image }}
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
