diff options
Diffstat (limited to '.github/workflows/build.yml')
-rw-r--r-- | .github/workflows/build.yml | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..d2ccc59e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,186 @@ +name: build_portable + +on: + [push, pull_request, workflow_dispatch] + +jobs: + build: + strategy: + fail-fast: false + matrix: + include: + + - os: ubuntu-20.04 + qt_version: 5.15.2 + qt_host: linux + + - os: windows-2022 + qt_version: 5.15.2 + qt_host: windows + qt_arch: win32_mingw81 + + - os: macos-11 + qt_version: 5.12.12 + qt_host: mac + macosx_deployment_target: 10.12 + + runs-on: ${{ matrix.os }} + + env: + MACOSX_DEPLOYMENT_TARGET: ${{ matrix.macosx_deployment_target }} + INSTALL_DIR: "install" + BUILD_DIR: "build" + + steps: + - name: Install 32bit mingw on Windows + if: runner.os == 'Windows' + uses: egor-tensin/setup-mingw@v2 + with: + platform: x86 + + - name: Install 32bit zlib via Strawberry on Windows + if: runner.os == 'Windows' + run: | + choco install strawberryperl -y --force --x86 + + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: 'true' + + # We need to do this here because it inexplicably fails if we split the step + - name: Download and install OpenSSL libs on Windows + if: runner.os == 'Windows' + run: | + python -m pip install --upgrade pip + python -m pip install aqtinstall==2.0.5 + python -m aqt install-tool -O "${{ github.workspace }}\Qt\" windows desktop tools_openssl_x86 + mkdir ${{ env.INSTALL_DIR }} + copy "${{ github.workspace }}\Qt\Tools\OpenSSL\Win_x86\bin\libssl-1_1.dll" "${{ github.workspace }}\${{ env.INSTALL_DIR }}\" + copy "${{ github.workspace }}\Qt\Tools\OpenSSL\Win_x86\bin\libcrypto-1_1.dll" "${{ github.workspace }}\${{ env.INSTALL_DIR }}\" + + - name: Install OpenJDK + uses: AdoptOpenJDK/install-jdk@v1 + with: + version: '17' + + - name: Cache Qt + id: cache-qt + uses: actions/cache@v2 + with: + path: "${{ github.workspace }}/Qt/" + key: ${{ runner.os }}-${{ matrix.qt_version }}-${{ matrix.qt_arch }}-qt_cache + + - name: Install Qt + uses: jurplel/install-qt-action@v2 + with: + version: ${{ matrix.qt_version }} + host: ${{ matrix.qt_host }} + arch: ${{ matrix.qt_arch }} + cached: ${{ steps.cache-qt.outputs.cache-hit }} + dir: "${{ github.workspace }}/Qt/" + + - name: Install Ninja + uses: urkle/action-get-ninja@v1 + + - name: Download linuxdeploy family + if: runner.os == 'Linux' + run: | + wget "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" + wget "https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage" + wget "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" + + - name: Download JREs for AppImage on Linux + if: runner.os == 'Linux' + shell: bash + run: | + ${{ github.workspace }}/.github/scripts/prepare_JREs.sh + + - name: Configure CMake + if: runner.os != 'Linux' + run: | + cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=Debug -G Ninja + + - name: Configure CMake on Linux + if: runner.os == 'Linux' + run: | + cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug -DLauncher_LAYOUT=lin-system -G Ninja + + - name: Build + run: | + cmake --build ${{ env.BUILD_DIR }} + + - name: Install + if: runner.os != 'Linux' + run: | + cmake --install ${{ env.BUILD_DIR }} + + - name: Install for AppImage on Linux + if: runner.os == 'Linux' + run: | + DESTDIR=${{ env.INSTALL_DIR }} cmake --install ${{ env.BUILD_DIR }} + + - name: Bundle AppImage + if: runner.os == 'Linux' + shell: bash + run: | + export OUTPUT="PolyMC-${{ github.sha }}-x86_64.AppImage" + + chmod +x linuxdeploy-*.AppImage + + mkdir -p ${{ env.INSTALL_DIR }}/usr/lib/jvm/java-{8,17}-openjdk + + cp -r ${{ github.workspace }}/JREs/jre8/* ${{ env.INSTALL_DIR }}/usr/lib/jvm/java-8-openjdk + + cp -r ${{ github.workspace }}/JREs/jre17/* ${{ env.INSTALL_DIR }}/usr/lib/jvm/java-17-openjdk + + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${{ env.INSTALL_DIR }}/usr/lib" + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${{ env.INSTALL_DIR }}/usr/lib/jvm/java-8-openjdk/lib/amd64/server" + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${{ env.INSTALL_DIR }}/usr/lib/jvm/java-8-openjdk/lib/amd64" + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${{ env.INSTALL_DIR }}/usr/lib/jvm/java-17-openjdk/lib/server" + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${{ env.INSTALL_DIR }}/usr/lib/jvm/java-17-openjdk/lib" + + ./linuxdeploy-x86_64.AppImage --appdir ${{ env.INSTALL_DIR }} --output appimage --plugin qt -i ${{ env.INSTALL_DIR }}/usr/share/icons/hicolor/scalable/apps/org.polymc.PolyMC.svg + + - name: Run windeployqt + if: runner.os == 'Windows' + run: | + windeployqt --no-translations "${{ env.INSTALL_DIR }}/polymc.exe" + + - name: Run macdeployqt + if: runner.os == 'macOS' + run: | + cd ${{ env.INSTALL_DIR }} + macdeployqt "PolyMC.app" -executable="PolyMC.app/Contents/MacOS/polymc" -always-overwrite -use-debug-libs + + - name: chmod binary on macOS + if: runner.os == 'macOS' + run: | + chmod +x "${{ github.workspace }}/${{ env.INSTALL_DIR }}/PolyMC.app/Contents/MacOS/polymc" + + - name: tar bundle on macOS + if: runner.os == 'macOS' + run: | + cd ${{ env.INSTALL_DIR }} + tar -czf ../polymc.tar.gz * + + - name: Upload AppImage for Linux + if: runner.os == 'Linux' + uses: actions/upload-artifact@v2 + with: + name: PolyMC-${{ github.sha }}-x86_64.AppImage + path: PolyMC-${{ github.sha }}-x86_64.AppImage + + - name: Upload package for Windows + if: runner.os == 'Windows' + uses: actions/upload-artifact@v2 + with: + name: polymc-${{ runner.os }}-${{ github.sha }}-portable + path: ${{ env.INSTALL_DIR }}/** + + - name: Upload package for macOS + if: runner.os == 'macOS' + uses: actions/upload-artifact@v2 + with: + name: polymc-${{ runner.os }}-${{ github.sha }}-portable + path: polymc.tar.gz |