PrismLauncher/.github/workflows/build.yml

296 lines
10 KiB
YAML
Raw Normal View History

name: Build
2022-02-02 06:28:00 +00:00
on:
workflow_call:
inputs:
build_type:
description: Type of build (Debug, Release, RelWithDebInfo, MinSizeRel)
type: string
default: Debug
2022-02-02 06:28:00 +00:00
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
2022-02-19 19:46:43 +00:00
- os: ubuntu-20.04
qt_version: 5.12.8
qt_host: linux
2022-03-25 12:13:50 +00:00
- os: ubuntu-20.04
name: Linux-Portable
qt_version: 5.12.8
qt_host: linux
portable: true
- os: ubuntu-20.04
qt_version: 5.15.2
qt_host: linux
2022-02-19 19:46:43 +00:00
app_image: true
2022-02-02 06:28:00 +00:00
- os: windows-2022
2022-03-17 15:55:45 +00:00
name: "Windows-i686"
msystem: mingw32
2022-03-21 18:11:55 +00:00
portable: false
2022-03-17 15:55:45 +00:00
- os: windows-2022
name: "Windows-x86_64"
msystem: mingw64
2022-03-21 18:11:55 +00:00
portable: false
- os: windows-2022
name: "Windows-i686-portable"
msystem: mingw32
portable: true
- os: windows-2022
name: "Windows-x86_64-portable"
msystem: mingw64
portable: true
2022-02-02 06:28:00 +00:00
- 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"
2022-02-02 06:28:00 +00:00
steps:
2022-02-12 04:30:13 +00:00
- name: Checkout
uses: actions/checkout@v3
2022-02-12 04:30:13 +00:00
with:
submodules: 'true'
2022-03-17 15:55:45 +00:00
- name: 'Setup MSYS2'
2022-02-10 15:28:31 +00:00
if: runner.os == 'Windows'
2022-03-17 15:55:45 +00:00
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
update: true
install: >-
git
pacboy: >-
toolchain:p
cmake:p
ninja:p
qt5:p
2022-03-18 21:28:52 +00:00
- name: Set short version
shell: bash
run: |
ver_short=`git rev-parse --short HEAD`
echo "VERSION=$ver_short" >> $GITHUB_ENV
2022-02-02 06:28:00 +00:00
- name: Install OpenJDK
2022-03-17 22:32:44 +00:00
uses: actions/setup-java@v3
2022-02-02 06:28:00 +00:00
with:
2022-03-17 22:32:44 +00:00
distribution: 'temurin'
java-version: '17'
2022-02-02 06:28:00 +00:00
- name: Cache Qt
2022-03-17 15:55:45 +00:00
if: runner.os != 'Windows'
2022-02-02 06:28:00 +00:00
id: cache-qt
uses: actions/cache@v3
2022-02-02 06:28:00 +00:00
with:
path: "${{ github.workspace }}/Qt/"
2022-02-08 13:14:30 +00:00
key: ${{ runner.os }}-${{ matrix.qt_version }}-${{ matrix.qt_arch }}-qt_cache
2022-02-02 06:28:00 +00:00
- name: Install Qt
2022-03-17 15:55:45 +00:00
if: runner.os != 'Linux' && runner.os != 'Windows' || matrix.app_image == true
2022-02-02 06:28:00 +00:00
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/"
2022-02-22 14:41:17 +00:00
- name: Install System Qt on Linux
if: runner.os == 'Linux' && matrix.app_image != true
run: |
2022-03-10 08:08:16 +00:00
sudo apt-get -y update
2022-02-22 14:41:17 +00:00
sudo apt-get -y install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5core5a libqt5network5 libqt5gui5
2022-02-02 06:28:00 +00:00
- name: Install Ninja
2022-03-17 15:55:45 +00:00
if: runner.os != 'Windows'
2022-02-02 06:28:00 +00:00
uses: urkle/action-get-ninja@v1
2022-02-19 19:46:43 +00:00
- name: Download linuxdeploy family for AppImage on Linux
if: matrix.app_image == true
2022-02-07 12:19:58 +00:00
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
2022-02-19 19:46:43 +00:00
if: matrix.app_image == true
2022-02-07 12:19:58 +00:00
shell: bash
run: |
${{ github.workspace }}/.github/scripts/prepare_JREs.sh
2022-02-02 06:28:00 +00:00
- name: Configure CMake
2022-03-17 15:55:45 +00:00
if: runner.os != 'Linux' && runner.os != 'Windows'
run: |
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -G Ninja
2022-03-21 18:29:33 +00:00
- name: Configure CMake on Windows
if: runner.os == 'Windows' && matrix.portable != true
2022-03-17 15:55:45 +00:00
shell: msys2 {0}
run: |
2022-03-22 06:38:00 +00:00
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DLauncher_PORTABLE=OFF -G Ninja
2022-03-21 18:29:33 +00:00
- name: Configure CMake on Windows portable
if: runner.os == 'Windows' && matrix.portable == true
shell: msys2 {0}
run: |
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -G Ninja
- name: Configure CMake on Linux
2022-03-25 12:13:50 +00:00
if: runner.os == 'Linux' && matrix.portable != true
2022-02-02 06:28:00 +00:00
run: |
2022-02-14 19:12:14 +00:00
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DLauncher_PORTABLE=OFF -G Ninja
2022-02-02 06:28:00 +00:00
2022-03-25 12:13:50 +00:00
- name: Configure CMake on Linux Portable
if: runner.os == 'Linux' && matrix.portable == true
run: |
cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -G Ninja
2022-02-02 06:28:00 +00:00
- name: Build
2022-03-17 15:55:45 +00:00
if: runner.os != 'Windows'
run: |
cmake --build ${{ env.BUILD_DIR }}
2022-03-22 06:38:00 +00:00
- name: Build on Windows
2022-03-21 18:29:33 +00:00
if: runner.os == 'Windows'
2022-03-17 15:55:45 +00:00
shell: msys2 {0}
2022-02-02 06:28:00 +00:00
run: |
cmake --build ${{ env.BUILD_DIR }}
2022-02-02 06:28:00 +00:00
- name: Install
2022-03-17 15:55:45 +00:00
if: runner.os != 'Linux' && runner.os != 'Windows'
run: |
cmake --install ${{ env.BUILD_DIR }}
- name: Install on Windows
if: runner.os == 'Windows'
shell: msys2 {0}
run: |
cmake --install ${{ env.BUILD_DIR }}
2022-02-19 19:46:43 +00:00
- name: Install on Linux
2022-03-25 12:13:50 +00:00
if: runner.os == 'Linux' && matrix.portable != true
2022-02-02 06:28:00 +00:00
run: |
DESTDIR=${{ env.INSTALL_DIR }} cmake --install ${{ env.BUILD_DIR }}
2022-03-25 12:13:50 +00:00
- name: Install on Linux portable
if: runner.os == 'Linux' && matrix.portable == true
run: |
cmake --install ${{ env.BUILD_DIR }}
2022-02-07 12:19:58 +00:00
- name: Bundle AppImage
2022-02-19 19:46:43 +00:00
if: matrix.app_image == true
shell: bash
run: |
export OUTPUT="PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage"
2022-02-07 13:11:42 +00:00
chmod +x linuxdeploy-*.AppImage
2022-02-07 13:11:42 +00:00
mkdir -p ${{ env.INSTALL_DIR }}/usr/lib/jvm/java-{8,17}-openjdk
2022-02-07 13:11:42 +00:00
2022-02-07 10:18:47 +00:00
cp -r ${{ github.workspace }}/JREs/jre8/* ${{ env.INSTALL_DIR }}/usr/lib/jvm/java-8-openjdk
2022-02-07 13:11:42 +00:00
2022-02-07 10:18:47 +00:00
cp -r ${{ github.workspace }}/JREs/jre17/* ${{ env.INSTALL_DIR }}/usr/lib/jvm/java-17-openjdk
2022-02-07 13:11:42 +00:00
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"
2022-02-08 03:25:52 +00:00
./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 macdeployqt
if: runner.os == 'macOS'
run: |
cd ${{ env.INSTALL_DIR }}
macdeployqt "PolyMC.app" -executable="PolyMC.app/Contents/MacOS/polymc" -always-overwrite
2022-02-02 06:28:00 +00:00
- name: chmod binary on macOS
if: runner.os == 'macOS'
run: |
chmod +x "${{ github.workspace }}/${{ env.INSTALL_DIR }}/PolyMC.app/Contents/MacOS/polymc"
2022-02-02 06:28:00 +00:00
- name: tar bundle on macOS
if: runner.os == 'macOS'
run: |
cd ${{ env.INSTALL_DIR }}
tar -czf ../PolyMC.tar.gz *
2022-02-02 06:28:00 +00:00
2022-02-19 19:46:43 +00:00
- name: tar on Linux
2022-03-25 12:13:50 +00:00
if: runner.os == 'Linux' && matrix.app_image != true && matrix.portable != true
2022-02-19 19:46:43 +00:00
run: |
cd ${{ env.INSTALL_DIR }}
tar -czf ../PolyMC.tar.gz *
2022-03-25 12:13:50 +00:00
- name: tar on Linux portable
if: runner.os == 'Linux' && matrix.app_image != true && matrix.portable == true
run: |
cd ${{ env.INSTALL_DIR }}
tar -czf ../PolyMC-portable.tar.gz *
2022-02-19 19:46:43 +00:00
- name: Upload Linux tar.gz
2022-03-25 12:13:50 +00:00
if: runner.os == 'Linux' && matrix.app_image != true && matrix.portable != true
uses: actions/upload-artifact@v3
2022-02-19 19:46:43 +00:00
with:
name: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}
path: PolyMC.tar.gz
2022-03-25 12:13:50 +00:00
- name: Upload Linux Portable tar.gz
if: runner.os == 'Linux' && matrix.app_image != true && matrix.portable == true
uses: actions/upload-artifact@v3
with:
name: PolyMC-${{ runner.os }}-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
path: PolyMC-portable.tar.gz
- name: Upload AppImage for Linux
2022-02-19 19:46:43 +00:00
if: matrix.app_image == true
uses: actions/upload-artifact@v3
with:
name: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage
path: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage
2022-03-17 15:55:45 +00:00
- name: Copy OpenSSL libs on Windows x86
if: runner.os == 'Windows' && matrix.msystem == 'mingw32'
shell: msys2 {0}
run: |
cp /mingw32/bin/libcrypto-1_1.dll ${{ env.INSTALL_DIR }}/
cp /mingw32/bin/libssl-1_1.dll ${{ env.INSTALL_DIR }}/
- name: Copy OpenSSL libs on Windows x86_64
if: runner.os == 'Windows' && matrix.msystem == 'mingw64'
shell: msys2 {0}
run: |
cp /mingw64/bin/libcrypto-1_1-x64.dll ${{ env.INSTALL_DIR }}/
cp /mingw64/bin/libssl-1_1-x64.dll ${{ env.INSTALL_DIR }}/
- name: Upload package for Windows
if: runner.os == 'Windows'
uses: actions/upload-artifact@v3
2022-02-02 06:28:00 +00:00
with:
2022-03-18 21:28:52 +00:00
name: PolyMC-${{ matrix.name }}-${{ env.VERSION }}-${{ inputs.build_type }}
path: ${{ env.INSTALL_DIR }}/**
2022-02-02 06:28:00 +00:00
- name: Upload package for macOS
if: runner.os == 'macOS'
uses: actions/upload-artifact@v3
2022-02-02 06:28:00 +00:00
with:
name: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}
path: PolyMC.tar.gz