name: build

on:
  push:
    branches: [ master ]
defaults:
  run:
    working-directory: ./HorseIsleServer

jobs:
  build-linux:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    
    - name: Git Submodule update
      run: git submodule update --init --recursive
      
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 7.x
        include-prerelease: true
    - name: Install utils
      run: |
        sudo apt update
        sudo apt install -y clang zlib1g-dev dos2unix
        dotnet tool install -g dotnet-script
        
    - name: Restore dependencies
      run: |
        dotnet restore LibHISP
        dotnet restore HISPd
# nativeaot linux x64
    - name: Build linux-x64
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=Linux64.pubxml
        cd ..
        cd MPN00BS
        dotnet publish -p:PublishProfile=Linux64.pubxml
        cd ..
        
# Currently broken ...

#        dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease
#        cd HISPd
#        dotnet publish -r linux-x64 -c Linux /p:Platform=x64 --self-contained
#        cd ..
#        mkdir -p HISPd/bin/x64/Linux/net7.0/linux-x64/native/gamedata
#        cp -r HISPd/bin/x64/Linux/net7.0/linux-x64/gamedata/* HISPd/bin/x64/Linux/net7.0/linux-x64/native/gamedata
#        cp HISPd/bin/x64/Linux/net7.0/linux-x64/HI1.MAP HISPd/bin/x64/Linux/net7.0/linux-x64/native/HI1.MAP
#        cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/libe_sqlite3.so HISPd/bin/x64/Linux/net7.0/linux-x64/native/libe_sqlite3.so
#        rm -f HISPd/bin/x64/Linux/net7.0/linux-x64/native/HISPd.dbg
#        dotnet remove HISPd package Microsoft.DotNet.ILCompiler
        
        
    - name: Build linux-arm
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=LinuxARM.pubxml
        cd ..
# nativeaot linux arm64
    - name: Build linux-arm64
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=LinuxARM64.pubxml
        cd ..

#        dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease
#        dotnet add HISPd package runtime.linux-x64.Microsoft.DotNet.ILCompiler --prerelease
#        cd HISPd
#        dotnet publish -r linux-arm64 -c Linux /p:Platform=ARM64 --self-contained
#        cd ..
#        mkdir -p HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/gamedata
#        cp -r HISPd/bin/ARM64/Linux/net7.0/linux-arm64/gamedata/* HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/gamedata
#        cp HISPd/bin/ARM64/Linux/net7.0/linux-arm64/HI1.MAP HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/HI1.MAP
#        cp HISPd/bin/ARM64/Linux/net7.0/linux-arm64/publish/libe_sqlite3.so HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/libe_sqlite3.so
#        rm -f HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/HISPd.dbg
#        dotnet remove HISPd package Microsoft.DotNet.ILCompiler
#        dotnet remove HISPd package runtime.linux-x64.Microsoft.DotNet.ILCompiler
        
    - name: Build deb package
      continue-on-error: false
      run: |
        mkdir /tmp/debpkg
        mkdir /tmp/debpkg/Debian64
        mkdir /tmp/debpkg/Debian64/etc
        mkdir /tmp/debpkg/Debian64/usr
        mkdir /tmp/debpkg/Debian64/etc/hisp
        mkdir /tmp/debpkg/Debian64/etc/hisp/gamedata
        mkdir /tmp/debpkg/Debian64/etc/systemd
        mkdir /tmp/debpkg/Debian64/etc/systemd/system
        mkdir /tmp/debpkg/Debian64/usr/bin
        mkdir /tmp/debpkg/Debian64/usr/lib
        mkdir /tmp/debpkg/Debian64/DEBIAN
        cp LibHISP/Resources/server.properties /tmp/debpkg/Debian64/etc/hisp/server.properties
        cp LibHISP/Resources/default_cross_domain.xml /tmp/debpkg/Debian64/etc/hisp/CrossDomainPolicy.xml
        cp -r HISPd/Resources/DEBIAN/* /tmp/debpkg/Debian64/DEBIAN
        cp -r HISPd/bin/x64/Linux/net7.0/linux-x64/publish/gamedata/* /tmp/debpkg/Debian64/etc/hisp/gamedata
        cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/libe_sqlite3.so /tmp/debpkg/Debian64/usr/lib/libe_sqlite3.so
        cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/HI1.MAP /tmp/debpkg/Debian64/etc/hisp/HI1.MAP
        cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/HISPd /tmp/debpkg/Debian64/usr/bin/HISPd
        cp HISPd/Resources/HISP.service /tmp/debpkg/Debian64/etc/systemd/system/HISP.service
        cat /tmp/debpkg/Debian64/DEBIAN/control
        dos2unix /tmp/debpkg/Debian64/DEBIAN/conffiles
        dos2unix /tmp/debpkg/Debian64/DEBIAN/control
        dos2unix /tmp/debpkg/Debian64/DEBIAN/postinst
        dos2unix /tmp/debpkg/Debian64/DEBIAN/postrm
        dos2unix /tmp/debpkg/Debian64/DEBIAN/prerm
        dos2unix /tmp/debpkg/Debian64/etc/systemd/system/HISP.service
        chmod 755 -R /tmp/debpkg/Debian64
        chmod +x /tmp/debpkg/Debian64/usr/bin/HISPd
        mkdir debpackage
        dpkg-deb --build /tmp/debpkg/Debian64
        mv /tmp/debpkg/Debian64.deb debpackage/HISP-Debian-AMD64.deb
        
        
#android .. maybe someday

#    - name: Build android-arm
#      continue-on-error: false
#      run: |
#        dotnet publish -p:PublishProfile=AndroidARM.pubxml

#    - name: Build android-arm64
#      continue-on-error: false
#      run: |
#        dotnet publish -p:PublishProfile=AndroidARM64.pubxml


#    - name: Upload android-arm
#      uses: actions/upload-artifact@v2
#      with:
#        name: HISP-AndroidARM
#        path: HorseIsleServer/HISPd/bin/arm/Android/net7.0/android-arm/publish/

#    - name: Upload android-arm64
#      uses: actions/upload-artifact@v2
#      with:
#        name: HISP-AndroidARM64
#        path: HorseIsleServer/HISPd/bin/arm64/Android/net7.0/android-arm64/publish/


# Upload LINUX
    - name: Upload linux-x64
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Linux64
        path: HorseIsleServer/HISPd/bin/x64/Linux/net7.0/linux-x64/publish/

    - name: Upload linux-x64-noobs
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Linux64-Noobs
        path: HorseIsleServer/MPN00BS/bin/x64/Linux/net7.0/linux-x64/publish/

    - name: Upload linux-arm
      uses: actions/upload-artifact@v2
      with:
        name: HISP-LinuxARM
        path: HorseIsleServer/HISPd/bin/ARM/Linux/net7.0/linux-arm/publish/
    
    - name: Upload linux-arm64
      uses: actions/upload-artifact@v2
      with:
        name: HISP-LinuxARM64
        path: HorseIsleServer/HISPd/bin/ARM64/Linux/net7.0/linux-arm64/publish/

    - name: Upload deb package
      uses: actions/upload-artifact@v2
      with:
        name: HISP-DebianPackage
        path: HorseIsleServer/debpackage
        
  build-win:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    
    - name: Git Submodule update
      run: git submodule update --init --recursive
      
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 7.x
        include-prerelease: true
    
    - name: Install utils
      run: dotnet tool install -g dotnet-script
        
    - name: Restore dependencies
      run: dotnet restore

#nativeaot x64 build
    - name: Build win-x64
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=Win64.pubxml
        cd ..
        cd MPN00BS
        dotnet publish -p:PublishProfile=Win64.pubxml
        cd ..

#        dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease
#        cd HISPd
#        dotnet publish -r win-x64 -c Windows /p:Platform=x64 --self-contained
#        cd ..
#        mkdir "HISPd\bin\x64\Windows\net7.0\win-x64\native\gamedata"
#        copy "..\HorseIsleData\gamedata\*" "HISPd\bin\x64\Windows\net7.0\win-x64\native\gamedata"
#        copy "..\HorseIsleData\HI1.MAP" "HISPd\bin\x64\Windows\net7.0\win-x64\native\HI1.MAP"
#        copy "HISPd\bin\x64\Windows\net7.0\win-x64\publish\e_sqlite3.dll" "HISPd\bin\x64\Windows\net7.0\win-x64\native\e_sqlite3.dll"
#        del "HISPd\bin\x64\Windows\net7.0\win-x64\native\HISPd.pdb"
#        del "HISPd\bin\x64\Windows\net7.0\win-x64\native\HISPd.lib"
#        del "HISPd\bin\x64\Windows\net7.0\win-x64\native\HISPd.exp"
#        dotnet remove HISPd package Microsoft.DotNet.ILCompiler
#        cd N00BS
#        dotnet publish -p:PublishProfile=Win64.pubxml
#        cd ..
    - name: Build win-x86
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=Win32.pubxml
        cd ..
        cd MPN00BS
        dotnet publish -p:PublishProfile=Win32.pubxml
        cd ..
    - name: Build win-arm
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=WinARM.pubxml
        cd ..
#nativeaot arm64 build
    - name: Build win-arm64
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=WinARM64.pubxml
        cd ..
#        dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease
#        dotnet add HISPd package runtime.win-x64.Microsoft.DotNet.ILCompiler --prerelease
#        cd HISPd
#        dotnet publish -r win-arm64 -c Windows /p:Platform=ARM64  --self-contained
#        cd ..
#        mkdir "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\gamedata"
#        copy "..\HorseIsleData\gamedata\*" "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\gamedata"
#        copy "..\HorseIsleData\HI1.MAP" "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HI1.MAP"
#        copy "HISPd\bin\ARM64\Windows\net7.0\win-arm64\publish\e_sqlite3.dll" "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\e_sqlite3.dll"
#        del "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HISPd.pdb"
#        del "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HISPd.lib"
#        del "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HISPd.exp"
#        dotnet remove HISPd package Microsoft.DotNet.ILCompiler
#        dotnet remove HISPd package runtime.win-x64.Microsoft.DotNet.ILCompiler


# Upload WINDOWS

    - name: Upload win-x64
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Win64
        path: HorseIsleServer/HISPd/bin/x64/Windows/net7.0/win-x64/publish/
    
    - name: Upload win-x86
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Win32
        path: HorseIsleServer/HISPd/bin/x86/Windows/net7.0/win-x86/publish/
        
    - name: Upload win-arm
      uses: actions/upload-artifact@v2
      with:
        name: HISP-WinARM
        path: HorseIsleServer/HISPd/bin/arm/Windows/net7.0/win-arm/publish/

    - name: Upload win-arm64
      uses: actions/upload-artifact@v2
      with:
        name: HISP-WinARM64
        path: HorseIsleServer/HISPd/bin/arm64/Windows/net7.0/win-arm64/publish/

    - name: Upload win-x86-noobs
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Win32-Noobs
        path: HorseIsleServer/MPN00BS/bin/x86/Windows/net7.0/win-x86/publish/

    - name: Upload win-x64-noobs
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Win64-Noobs
        path: HorseIsleServer/MPN00BS/bin/x64/Windows/net7.0/win-x64/publish/

  build-mac:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    
    - name: Git Submodule update
      run: git submodule update --init --recursive
      
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 7.x
        include-prerelease: true
        
    - name: Install utils
      run: dotnet tool install -g dotnet-script

    - name: Restore dependencies
      run: |
        dotnet restore LibHISP
        dotnet restore HISPd

    - name: Build mac-x64
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=Osx64.pubxml
        cd ..
    - name: Build mac-arm64
      continue-on-error: false
      run: |
        cd HISPd
        dotnet publish -p:PublishProfile=OsxARM64.pubxml
        cd ..
    - name: Upload mac-x64
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Mac64
        path: HorseIsleServer/HISPd/bin/x64/MacOS/net7.0/osx-x64/publish/

    - name: Upload mac-arm64
      uses: actions/upload-artifact@v2
      with:
        name: HISP-MacARM64
        path: HorseIsleServer/HISPd/bin/arm64/MacOS/net7.0/osx-arm64/publish/
        
  build-web:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    
    - name: Git Submodule update
      run: git submodule update --init --recursive

    # UPLOAD WEB

    - name: Upload Website (master)
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Web-Master
        path: HorseIsleWeb/master-site
        
    - name: Upload Website (game)
      uses: actions/upload-artifact@v2
      with:
        name: HISP-Web-Game
        path: HorseIsleWeb/game-site