name: Test

on:
  push:
  pull_request:
  workflow_dispatch:

jobs:


  doc:
    runs-on: ubuntu-latest
    name: '📓 Docs'
    steps:

    - name: '🧰 Checkout'
      uses: actions/checkout@v4

    - name: '📓 BuildTheDocs (BTD)'
      uses: buildthedocs/btd@v0
      with:
        token: ${{ github.token }}
        skip-deploy: ${{ github.event_name == 'pull_request' }}

    - name: '🧹 Clean HTML build'
      if: ${{ github.event_name != 'pull_request' }}
      run: sudo rm -rf doc/_build/html/.git

    - name: '📤 Upload artifact: HTML'
      uses: actions/upload-artifact@v4
      with:
        name: openFPGALoader-Documentation
        path: doc/_build/html


  lin-build:
    strategy:
      fail-fast: false
      matrix:
        os:
        - 22
        - 24
    name: '🚧🐧 Ubuntu ${{ matrix.os }} | build'
    runs-on: ubuntu-${{ matrix.os }}.04
    steps:

    - name: '🧰 Checkout'
      uses: actions/checkout@v4

    - name: '⚙️ Install dependencies'
      run: |
        sudo apt update -qq
        sudo apt install -y \
          cmake \
          gzip \
          libftdi1-2 \
          libftdi1-dev \
          libhidapi-libusb0 \
          libhidapi-dev \
          libudev-dev \
          pkg-config \
          tree \
          zlib1g-dev

    - name: '🚧 Build tarball'
      run: |
        mkdir build
        cd build
        cmake ..
        cmake --build .

        make DESTDIR=$(pwd)/dist install
        _rulesdir='dist/etc/udev/rules.d/'
        mkdir -p "${_rulesdir}"
        cp ../99-openfpgaloader.rules "${_rulesdir}"
        _licenses="dist/usr/local/share/licenses/openFPGALoader"
        mkdir -p "${_licenses}"
        install -m 644 ../LICENSE "${_licenses}"

        tar -cvzf ../ubtuntu${{ matrix.os }}.04-openFPGALoader.tgz -C dist .

    - name: '📤 Upload artifact: tarball'
      uses: actions/upload-artifact@v4
      with:
        name: ubtuntu${{ matrix.os }}.04-openFPGALoader
        path: ubtuntu${{ matrix.os }}.04-openFPGALoader.tgz

    - name: '🔍 Show package content'
      run: |
        mkdir tmp
        cd tmp
        tar -xf ../ubtuntu${{ matrix.os }}.04-openFPGALoader.tgz
        tree .


  mac-build:
    strategy:
      fail-fast: false
    name: '🚧🐧 macOS latest | build'
    runs-on: macos-latest
    steps:

    - name: '🧰 Checkout'
      uses: actions/checkout@v4

    - name: '⚙️ Install dependencies'
      run: |
        #brew update
        brew install --only-dependencies openFPGALoader

    - name: '🚧 Build tarball'
      run: |
        mkdir build
        cd build
        cmake ..
        cmake --build .


  lin-test:
    needs: lin-build
    strategy:
      fail-fast: false
      matrix:
        os:
        - 22
        - 24
    name: '🚦🐧 Ubuntu ${{ matrix.os }} | test'
    runs-on: ubuntu-${{ matrix.os }}.04
    steps:

    - name: '⚙️ Install dependencies'
      run: |
        sudo apt update -qq
        sudo apt install -y \
          libftdi1-2 \
          libhidapi-libusb0 \
          udev \
          zlib1g

    - name: '📥 Download artifact: package'
      uses: actions/download-artifact@v4.1.7
      with:
        name: ubtuntu${{ matrix.os }}.04-openFPGALoader

    - name: '🛠️ Install package'
      run: sudo tar -xvzf *.tgz -C /

    - name: '🚦 Test package'
      run: |
        openFPGALoader --help
        openFPGALoader --detect || true


  win-jobs:
    name: ⬜ Generate list of MSYS2 jobs
    runs-on: ubuntu-latest
    outputs:
      jobs: ${{ steps.matrix.outputs.jobs }}
    steps:
    - id: matrix
      uses: msys2/setup-msys2/matrix@main
      with:
        systems: >-
          mingw64
          ucrt64
          clang64

  win:
    needs: win-jobs
    uses: msys2/setup-msys2/.github/workflows/PKGBUILD.yml@main
    with:
      name: openFPGALoader
      matrix: ${{ needs.win-jobs.outputs.jobs }}
      path: scripts/msys2
      test: |
        uname -a
        which openFPGALoader
        openFPGALoader --help
        openFPGALoader --detect || true


  Release:
    if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/'))
    needs: [ lin-test, win ]
    runs-on: ubuntu-latest
    name: '📦 Release'
    steps:

    - name: '📥 Download artifacts'
      uses: actions/download-artifact@v4.1.7
      with:
        path: artifact

    - name: '✉️ Package Documentation'
      run: |
        cd artifact
        tar cvzf openFPGALoader-Documentation.tar.gz openFPGALoader-Documentation
        rm -rf openFPGALoader-Documentation

    # Tagged: create a pre-release or a release (semver)
    # Untagged: update the assets of pre-release 'nightly'
    - uses: pyTooling/Actions/releaser@r0
      with:
        token: ${{ github.token }}
        tag: 'nightly'
        files: artifact/**/*
