---
on:
  push:
  workflow_dispatch:

jobs:
  test:
    runs-on: 'self-hosted'
    steps:
      - uses: 'actions/checkout@v4'
      - uses: 'actions/setup-go@v5'
        with:
          go-version-file: 'go.mod'
      - name: 'fmt'
        run: |
          make tidy no-dirty
      - name: 'check'
        run: |
          make check no-dirty
  build:
    if: "${{ startsWith(github.ref, 'refs/tags/') }}"
    needs:
      - 'test'
    runs-on: 'self-hosted'
    steps:
      - uses: 'actions/checkout@v4'
      - uses: 'actions/setup-go@v5'
        with:
          go-version-file: 'go.mod'
      - name: 'build'
        run: |
          printf '%s' "$GIT_CRYPT_SECRET" | base64 -d > secret
          git-crypt unlock secret
          make build
        env:
          GIT_CRYPT_SECRET: '${{ secrets.GIT_CRYPT }}'
      - uses: 'actions/upload-artifact@v4'
        with:
          if-no-files-found: 'error'
          name: 'ods'
          path: 'ods'
  deploy:
    needs:
      - 'build'
    runs-on: 'self-hosted'
    steps:
      - uses: 'actions/download-artifact@v4'
        with:
          name: 'ods'
      - run: |
          umask 077
          printf '%s' "$SSH_PRIVATE_KEY" | base64 -d > private_key
          SSHOPTS="-i private_key -o StrictHostKeyChecking=accept-new"
          rsync -e "ssh ${SSHOPTS}" ods ods@ods.adyxax.org:
          ssh ${SSHOPTS} ods@ods.adyxax.org "chmod +x ods; systemctl --user restart ods"
        env:
          SSH_PRIVATE_KEY: '${{ secrets.SSH_PRIVATE_KEY }}'
  publish:
    needs:
      - 'build'
    runs-on: 'self-hosted'
    steps:
      - uses: 'actions/download-artifact@v4'
        with:
          name: 'ods'
      - uses: 'actions/forgejo-release@v2'
        with:
          direction: 'upload'
          tag: '${{ github.ref_name }}'
          sha: '${{ github.sha }}'
          release-dir: './'
          token: '${{ env.GITHUB_TOKEN }}'
          hide-archive-link: true
          prerelease: true
