name: CI

on:
  push:
    branches: [ develop ]
  pull_request:
    branches: [ develop ]
  workflow_dispatch:
  schedule:
    - cron: "0 0 1 * *"

jobs:
  build-linux:
    name: build-linux
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@main
        with:
          submodules: 'recursive'

      - name: Install Dependencies
        run: |
          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
          sudo add-apt-repository 'deb http://dk.archive.ubuntu.com/ubuntu/ bionic main'
          sudo add-apt-repository 'deb http://dk.archive.ubuntu.com/ubuntu/ bionic universe'
          sudo apt update
          sudo apt install libgl1-mesa-dev qttools5-dev g++-5 gcc-5

      - name: Build
        run: |
          export JAVA_HOME=$JAVA_HOME_8_X64
          mkdir build
          cd build
          cmake \
           -DCMAKE_C_COMPILER=/usr/bin/gcc-5 \
           -DCMAKE_CXX_COMPILER=/usr/bin/g++-5 \
           -DCMAKE_BUILD_TYPE=Release \
           -DLauncher_NOTIFICATION_URL:STRING=https://files.multimc.org/notifications.json \
           -DCMAKE_INSTALL_PREFIX:PATH=/home/runner/UltimMC/UltimMC \
           -DLauncher_UPDATER_BASE=https://files.multimc.org/update/ \
           -DLauncher_PASTE_EE_API_KEY:STRING=utLvciUouSURFzfjPxLBf5W4ISsUX4pwBDF7N1AfZ \
           -DLauncher_ANALYTICS_ID:STRING=UA-87731965-2 \
           -DLauncher_LAYOUT=lin-nodeps \
           -DLauncher_BUILD_PLATFORM=lin64 \
           -DLauncher_BUG_TRACKER_URL=https://github.com/UltimMC/Launcher/issues \
           -DLauncher_EMBED_SECRETS=On \
           $GITHUB_WORKSPACE

      - name: Compile
        run: |
          cd build
          make -j$(nproc)

      - name: Test
        run: |
          cd build
          make test
          cmake -E remove_directory "/home/runner/UltimMC/UltimMC"

      - name: Install
        run: |
          cd build
          make install
          chmod +x /home/runner/UltimMC/UltimMC/UltimMC
          chmod +x /home/runner/UltimMC/UltimMC/bin/UltimMC

      - name: Upload Artifacts
        uses: actions/upload-artifact@main
        with:
          name: mmc-cracked-lin64
          path: /home/runner/UltimMC

  build-windows:
    name: build-windows
    runs-on: windows-latest

    steps:
      - uses: actions/checkout@main
        with:
          submodules: 'recursive'

      - name: Cache Qt
        uses: actions/cache@main
        id: qt-cached
        with:
          path: "D:/Qt"
          key: ${{ runner.os }}-qt56-installed-d

      - name: Cache Qt Installer
        uses: actions/cache@main
        if: steps.qt-cached.outputs.cache-hit != 'true'
        id: installer-cached
        with:
          path: "installer.exe"
          key: ${{ runner.os }}-qt56-installer

      - name: Create QtAccount File
        if: steps.qt-cached.outputs.cache-hit != 'true'
        run: |
          mkdir C:/Users/runneradmin/AppData/Roaming/Qt/
          curl https://gist.github.com/Neptune650/1086e0a3126be6a66580b71afcf8bd99/raw/797d8b90edf07ce88f265b38a573cc6b1fb45bfb/qtaccount.txt --output C:/Users/runneradmin/AppData/Roaming/Qt/qtaccount.ini

      - name: Download Qt Installer
        if: steps.installer-cached.outputs.cache-hit != 'true' && steps.qt-cached.outputs.cache-hit != 'true'
        run: curl https://download.qt.io/new_archive/qt/5.6/5.6.3/qt-opensource-windows-x86-mingw492-5.6.3.exe --output installer.exe

      - name: Download Qt non-Interactive Script
        if: steps.qt-cached.outputs.cache-hit != 'true'
        run: curl https://gist.githubusercontent.com/Neptune650/aa6c051abc17e7d9d609add7f6dfd16a/raw/074dedb7525c0ffc010b39871615b008c2efbcd6/qt-installer-noninteractive.qs --output nonInteractive.qs

      - name: Install Qt
        if: steps.qt-cached.outputs.cache-hit != 'true'
        shell: cmd
        run: installer.exe -v --script nonInteractive.qs --silent

      - name: Setup CMake
        run: |
          curl -L https://github.com/Kitware/CMake/releases/download/v3.30.4/cmake-3.30.4-windows-i386.zip -o cmake.zip
          unzip cmake.zip

      - name: Setup JDK
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '8'
          architecture: x86

      - name: Setup zlib
        run: |
          mkdir zlib
          cd zlib
          C:\msys64\usr\bin\wget.exe -O zlib.zip https://downloads.sourceforge.net/project/gnuwin32/zlib/1.2.3/zlib-1.2.3-bin.zip
          C:\msys64\usr\bin\wget.exe -O zliblibs.zip https://downloads.sourceforge.net/project/gnuwin32/zlib/1.2.3/zlib-1.2.3-lib.zip
          unzip zlib.zip
          unzip zliblibs.zip

      - name: Setup OpenSSL
        run: |
          mkdir OpenSSL
          cd OpenSSL
          curl -L https://files.catbox.moe/ctwswu.dll -o libeay32.dll
          curl -L https://files.catbox.moe/ie9e77.dll -o ssleay32.dll

      - name: Build
        shell: cmd
        if: steps.build-cached.outputs.cache-hit != 'true'
        run: |
          for /f "tokens=*" %%n in ('powershell -NoLogo -Command "$(ls $pwd\cmake-*-windows-i386\bin).Fullname"') do @(set PATHCM=%%n)
          set PATH=D:\Qt\5.6.3\mingw49_32\bin;D:\Qt\Tools\mingw492_32\bin;
          set PATH=%CD%\zlib;%CD%\zlib\bin;%CD%\zlib\lib;%CD%\zlib\include;%PATH%
          set PATH=%CD%\OpenSSL;%PATH%
          set PATH=%PATHCM%;%PATH%
          mkdir build
          cd build
          cmake ^
           -DCMAKE_C_COMPILER=gcc ^
           -DCMAKE_CXX_COMPILER=g++ ^
           -DCMAKE_BUILD_TYPE=Release ^
           -DLauncher_NOTIFICATION_URL:STRING=https://files.multimc.org/notifications.json ^
           -DCMAKE_INSTALL_PREFIX:PATH="D:/UltimMC/UltimMC" ^
           -DCMAKE_PREFIX_PATH="D:\Qt\5.6.3\mingw49_32" ^
           -DQt5_DIR="D:\Qt\5.6.3\mingw49_32" ^
           -DLauncher_UPDATER_BASE=https://files.multimc.org/update/ ^
           -DLauncher_PASTE_EE_API_KEY:STRING=utLvciUouSURFzfjPxLBf5W4ISsUX4pwBDF7N1AfZ ^
           -DLauncher_ANALYTICS_ID:STRING=UA-87731965-2 ^
           -DLauncher_LAYOUT=win-bundle ^
           -DLauncher_BUILD_PLATFORM=win32 ^
           -DLauncher_BUG_TRACKER_URL=https://github.com/UltimMC/Launcher/issues ^
           -DLauncher_EMBED_SECRETS=On ^
           -G "MinGW Makefiles" ^
           ..

      - name: Compile
        shell: cmd
        run: |
          for /f "tokens=*" %%n in ('powershell -NoLogo -Command "$(ls $pwd\cmake-*-windows-i386\bin).Fullname"') do @(set PATHCM=%%n)
          set PATH=D:\Qt\5.6.3\mingw49_32\bin;D:\Qt\Tools\mingw492_32\bin;
          set PATH=%CD%\zlib;%CD%\zlib\bin;%PATH%
          set PATH=%CD%\OpenSSL;%PATH%
          set PATH=%PATHCM%;%PATH%
          set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%PATH%
          cd build
          mingw32-make -j%NUMBER_OF_PROCESSORS%

      - name: Test
        shell: cmd
        run: |
          for /f "tokens=*" %%n in ('powershell -NoLogo -Command "$(ls $pwd\cmake-*-windows-i386\bin).Fullname"') do @(set PATHCM=%%n)
          set PATH=D:\Qt\5.6.3\mingw49_32\bin;D:\Qt\Tools\mingw492_32\bin;
          set PATH=%CD%\zlib;%CD%\zlib\bin;%PATH%
          set PATH=%CD%\OpenSSL;%PATH%
          set PATH=%PATHCM%;%PATH%
          set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%PATH%
          cd build
          mingw32-make test
          cmake -E remove_directory "D:/UltimMC/UltimMC"

      - name: Install
        shell: cmd
        run: |
          for /f "tokens=*" %%n in ('powershell -NoLogo -Command "$(ls $pwd\cmake-*-windows-i386\bin).Fullname"') do @(set PATHCM=%%n)
          set PATH=D:\Qt\5.6.3\mingw49_32\bin;D:\Qt\Tools\mingw492_32\bin;
          set PATH=%CD%\zlib;%CD%\zlib\bin;%PATH%
          set PATH=%CD%\OpenSSL;%PATH%
          set PATH=%PATHCM%;%PATH%
          set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%PATH%
          cd build
          mingw32-make install

      - name: Copy OpenSSL
        shell: cmd
        run: |
          cp OpenSSL/ssleay32.dll D:/UltimMC/UltimMC/ssleay32.dll
          cp OpenSSL/libeay32.dll D:/UltimMC/UltimMC/libeay32.dll

      - name: Upload Artifacts
        uses: actions/upload-artifact@main
        with:
          name: mmc-cracked-win32
          path: "D:/UltimMC"

  build-mac:
    name: build-mac
    runs-on: macos-13

    steps:
      - uses: actions/checkout@main
        with:
          submodules: 'recursive'

      - name: Cache Dependencies
        uses: actions/cache@main
        with:
          path: /Users/runner/Library/Caches/Homebrew
          key: ${{ runner.os }}-deps-cache

      - name: Install Dependencies
        run: |
          brew cleanup
          brew install qt@5

      - name: Build
        run: |
          mkdir build
          cd build
          cmake \
           -DCMAKE_C_COMPILER=/usr/bin/clang \
           -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
           -DCMAKE_BUILD_TYPE=Release \
           -DLauncher_NOTIFICATION_URL:STRING=https://files.multimc.org/notifications.json \
           -DCMAKE_INSTALL_PREFIX:PATH="/Users/runner/work/UltimMC/build/dist" \
           -DCMAKE_PREFIX_PATH="$(brew --prefix qt@5)/lib/cmake" \
           -DQt5_DIR="$(brew --prefix qt@5)" \
           -DLauncher_UPDATER_BASE=https://files.multimc.org/update/ \
           -DLauncher_PASTE_EE_API_KEY:STRING=utLvciUouSURFzfjPxLBf5W4ISsUX4pwBDF7N1AfZ \
           -DLauncher_ANALYTICS_ID:STRING=UA-87731965-2 \
           -DLauncher_LAYOUT=mac-bundle \
           -DLauncher_BUILD_PLATFORM=osx64-5.15.2 \
           -DLauncher_BUG_TRACKER_URL=https://github.com/UltimMC/Launcher/issues \
           -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
           -DLauncher_EMBED_SECRETS=On \
           $GITHUB_WORKSPACE

      - name: Compile
        run: |
          cd build
          make -j$(sysctl -n hw.logicalcpu)

      - name: Test
        run: |
          cd build
          make test
          cmake -E remove_directory "/Users/runner/work/UltimMC/build/dist"

      - name: Install
        run: |
          cd build
          make install
          chmod +x /Users/runner/work/UltimMC/build/dist/UltimMC.app/Contents/MacOS/UltimMC

      - name: Upload Artifacts
        uses: actions/upload-artifact@main
        with:
          name: mmc-cracked-osx64
          path: /Users/runner/work/UltimMC/build/dist
