# Author: K4YT3X <i@k4yt3x.com>
# Cross-compiles dvmhost and dvmcmd for all architectures upon pushing a new tag.

name: dvmhost-build-release
on:
  push:
    tags:
      - "*"

permissions:
  contents: write

jobs:
  setup:
    name: Setup
    runs-on: ubuntu-20.04
    outputs:
      APPNAME: ${{ steps.get_appname.outputs.APPNAME }}
      VERSION: ${{ steps.get_version.outputs.VERSION }}
    steps:
      - name: Get app name
        id: get_appname
        run: echo APPNAME=${{ github.event.repository.name }} >> $GITHUB_OUTPUT
      - name: Get version
        id: get_version
        run: echo VERSION=${GITHUB_REF/refs\/tags\//} >> $GITHUB_OUTPUT

  build:
    name: Build
    needs: [setup]
    strategy:
      matrix:
        arch: ["amd64", "arm", "aarch64", "armhf"]
    runs-on: ubuntu-20.04
    env:
      PACKAGENAME: ${{ needs.setup.outputs.APPNAME }}-${{ needs.setup.outputs.VERSION }}-${{ matrix.arch }}
      DEBIAN_FRONTEND: noninteractive
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          ref: ${{ needs.setup.outputs.VERSION }}
          submodules: recursive
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y git build-essential cmake \
            g++-arm-linux-gnueabihf \
            gcc-arm-linux-gnueabihf \
            g++-aarch64-linux-gnu \
            libasio-dev libssl-dev
      - name: Build
        run: |
          if [[ "${{ matrix.arch }}" == 'armhf' ]]; then
            cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-s" -DCMAKE_CXX_FLAGS="-s" \
              -DENABLE_TUI_SUPPORT=0 \
              -DCROSS_COMPILE_RPI_ARM=1 .
          else
            cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-s" -DCMAKE_CXX_FLAGS="-s" \
              -DENABLE_TUI_SUPPORT=0 \
              -D "CROSS_COMPILE_$(echo '${{ matrix.arch }}' | tr '[:lower:]' '[:upper:]')=1" .
          fi

          make -j $(nproc)
      - name: Package
        run: |
          mkdir -p ${{ env.PACKAGENAME }}
          cp dvmcmd dvmhost ${{ env.PACKAGENAME }}
          zip -9 -r ${{ env.PACKAGENAME }}.zip ${{ env.PACKAGENAME }}
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ needs.setup.outputs.APPNAME }}-${{ matrix.arch }}
          path: ${{ env.PACKAGENAME }}.zip

  create-release:
    name: Create Release
    needs: [setup, build]
    runs-on: ubuntu-20.04
    outputs:
      upload_url: ${{ steps.create_release.outputs.upload_url }}
    steps:
      - name: Create release
        id: create_release
        uses: softprops/action-gh-release@v1
        with:
          tag_name: ${{ needs.setup.outputs.VERSION }}
          name: Release ${{ needs.setup.outputs.VERSION }}
          draft: false
          prerelease: false

  upload:
    name: Upload
    needs: [setup, build, create-release]
    strategy:
      matrix:
        arch: ["amd64", "arm", "aarch64", "armhf"]
    runs-on: ubuntu-20.04
    env:
      PACKAGENAME: ${{ needs.setup.outputs.APPNAME }}-${{ needs.setup.outputs.VERSION }}-${{ matrix.arch }}
      DEBIAN_FRONTEND: noninteractive
    steps:
      - name: Download artifact
        uses: actions/download-artifact@v4
        with:
          name: ${{ needs.setup.outputs.APPNAME }}-${{ matrix.arch }}
      - name: Upload release asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ needs.create-release.outputs.upload_url }}
          asset_path: ${{ env.PACKAGENAME }}.zip
          asset_name: ${{ env.PACKAGENAME }}.zip
          asset_content_type: application/zip
