name: Server release

on:
  workflow_dispatch:

jobs:
  build-server:
    name: Build a docker image for spacedrive server
    runs-on: ubuntu-20.04
    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@v3

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

      - 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
          GITHUB_REPOSITORY_LOWER=$(echo $GITHUB_REPOSITORY | awk '{print tolower($0)}')
          IMAGE_NAME="$GITHUB_REPOSITORY_LOWER/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
        uses: redhat-actions/buildah-build@v2
        with:
          tags: ${{ steps.image_info.outputs.tag }} ${{ github.event_name == 'release' && 'production' || '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
        uses: redhat-actions/push-to-registry@v2
        with:
          tags: ${{ steps.build-image.outputs.tags }}
          image: ${{ steps.build-image.outputs.image }}
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
