name: build

on:
  push:
    branches:
      - release
      - prerelease
      - test
jobs:
  build-mac:
    runs-on: macOS-latest
    steps:
    - uses: actions/checkout@v2
    - name: Install Qt 5.15.2
      uses: jurplel/install-qt-action@v2
      with:
        version: "5.15.2"
        modules: "qtwebengine"  
        setup-python: 'false'
    - name: Install dependencies
      run: |
        brew update
        brew install ninja mpv
    - name: Release build
      run: |
        ./download_webclient.sh
        cd build
        cmake -GNinja -DQTROOT=$Qt5_DIR -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=output ..
        ninja install
    - name: Fix library paths and create dmg
      run: |
        python3 ./scripts/fix-install-names.py ./build/output/Jellyfin\ Media\ Player.app
        brew install create-dmg
        create-dmg --volname "Jellyfin Media Player" --no-internet-enable "JellyfinMediaPlayer.dmg" "./build/output/Jellyfin Media Player.app"
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: macos
        path: ${{ github.workspace }}/JellyfinMediaPlayer.dmg
        
  build-win64:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - name: Install Qt 5.15.2
      uses: jurplel/install-qt-action@v2
      with:
        version: "5.15.2"
        arch: "win64_msvc2019_64"
        modules: "qtwebengine"
    - name: Install dependencies
      run: |
        ./download_webclient.sh
        sed -i 's#Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Redist\\MSVC\\v142\\#'"$(ls -d "/c/Program Files/Microsoft Visual Studio/2022/"*"/VC/Redist/MSVC/v"* | head -n 1 | sed 's#/c/##g' | tr '/' '\\' | sed 's/\\/\\\\/g')\\\\#g" bundle/win/Bundle.wxs
        curl -L https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip > ninja.zip
        unzip ninja.zip
        mv ninja.exe build/
        curl -L https://sourceforge.net/projects/mpv-player-windows/files/libmpv/mpv-dev-x86_64-20211212-git-0e76372.7z/download > mpv.7z
        7z x mpv.7z
        mv include mpv
        mkdir include
        mv mpv include
        mkdir mpv
        mv include mpv
        mv mpv-1.dll mpv/mpv.dll
        mv mpv.def libmpv.dll.a mpv/
        mv mpv build/
      shell: bash
    - name: Build
      run: |
        call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
        cd build
        set PATH=%PATH%;C:\Program Files (x86)\WiX Toolset v3.11\bin;%CD%
        cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=output -DCMAKE_MAKE_PROGRAM=ninja.exe -DQTROOT=%Qt5_DIR% -DMPV_INCLUDE_DIR=mpv/include -DMPV_LIBRARY=mpv/mpv.dll -DCMAKE_INSTALL_PREFIX=output ..
        lib /def:mpv\mpv.def /out:mpv\mpv.dll.lib /MACHINE:X64
        ninja
        ninja windows_package
      shell: cmd
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: windows
        path: ${{ github.workspace }}/build/JellyfinMediaPlayer-*.exe

  build-win32:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - name: Install Qt 5.15.2
      uses: jurplel/install-qt-action@v2
      with:
        version: "5.15.2"
        arch: "win32_msvc2019"
        modules: "qtwebengine"
    - name: Install dependencies
      run: |
        ./download_webclient.sh
        sed -i 's#Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Redist\\MSVC\\v142\\#'"$(ls -d "/c/Program Files/Microsoft Visual Studio/2022/"*"/VC/Redist/MSVC/v"* | head -n 1 | sed 's#/c/##g' | tr '/' '\\' | sed 's/\\/\\\\/g')\\\\#g" bundle/win/Bundle.wxs
        curl -L https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip > ninja.zip
        unzip ninja.zip
        mv ninja.exe build/
        curl -L https://sourceforge.net/projects/mpv-player-windows/files/libmpv/mpv-dev-i686-20211212-git-0e76372.7z/download > mpv.7z
        7z x mpv.7z
        mv include mpv
        mkdir include
        mv mpv include
        mkdir mpv
        mv include mpv
        mv mpv-1.dll mpv/mpv.dll
        mv mpv.def libmpv.dll.a mpv/
        mv mpv build/
      shell: bash
    - name: Build
      run: |
        call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
        cd build
        set PATH=%PATH%;C:\Program Files (x86)\WiX Toolset v3.11\bin;%CD%
        cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=output -DCMAKE_MAKE_PROGRAM=ninja.exe -DQTROOT=%Qt5_DIR% -DMPV_INCLUDE_DIR=mpv/include -DMPV_LIBRARY=mpv/mpv.dll -DCMAKE_INSTALL_PREFIX=output ..
        lib /def:mpv\mpv.def /out:mpv\mpv.dll.lib /MACHINE:X86
        ninja
        ninja windows_package
      shell: cmd
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: windows-legacy32
        path: ${{ github.workspace }}/build/JellyfinMediaPlayer-*.exe

  build-ubuntu:
    strategy:
      matrix:
        tag: [focal, hirsute, impish]
    runs-on: "ubuntu-latest"
    steps:
    - uses: actions/checkout@v2
    - name: Docker Build
      run: |
        docker build -f deployment/Dockerfile.debian -t builddeb --build-arg TAG=${{ matrix.tag }} --build-arg IMG=ubuntu deployment
        docker run -v $(pwd)/deployment/dist:/dist -v $(pwd):/jellyfin -e TAG=${{ matrix.tag }} builddeb
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: ubuntu-${{ matrix.tag }}
        path: ${{ github.workspace }}/deployment/dist/*

  build-debian:
    strategy:
      matrix:
        tag: [bullseye, bookworm]
    runs-on: "ubuntu-latest"
    steps:
    - uses: actions/checkout@v2
    - name: Docker Build
      run: |
        docker build -f deployment/Dockerfile.debian -t builddeb --build-arg TAG=${{ matrix.tag }} deployment
        docker run -v $(pwd)/deployment/dist:/dist -v $(pwd):/jellyfin -e TAG=${{ matrix.tag }} builddeb
    - name: Archive production artifacts
      uses: actions/upload-artifact@v2
      with:
        name: debian-${{ matrix.tag }}
        path: ${{ github.workspace }}/deployment/dist/*