Build xPilot for Linux #111
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Build xPilot for Linux" | |
on: | |
workflow_call: | |
workflow_dispatch: | |
env: | |
BUILD_TYPE: Release | |
VATSIM_CLIENT_ID: ${{ secrets.VATSIM_CLIENT_ID }} | |
VATSIM_CLIENT_KEY: ${{ secrets.VATSIM_CLIENT_KEY }} | |
VATSIM_TOWERVIEW_CLIENT_ID: ${{ secrets.VATSIM_TOWERVIEW_CLIENT_ID }} | |
CONFIG_ENCRYPTION_KEY: ${{ secrets.CONFIG_ENCRYPTION_KEY }} | |
CLIENT_DIR: ${{ github.workspace }}/client | |
PLUGIN_DIR: ${{ github.workspace }}/plugin | |
IB_URL: https://releases.installbuilder.com/installbuilder/installbuilder-enterprise-24.3.0-linux-x64-installer.run | |
IB_LICENSE: ${{ secrets.INSTALLBUILDER_LICENSE }} | |
QT_VERSION: "v6.5.2" | |
jobs: | |
build: | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get install \ | |
libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev xorg-dev \ | |
libglu1-mesa-dev freeglut3-dev mesa-common-dev libglfw3-dev libgles2-mesa-dev \ | |
libpulse-dev | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Delete dummy auth library | |
shell: bash | |
run: rm -rf dependencies/vatsim-auth | |
- name: Checkout auth library | |
uses: actions/checkout@v3 | |
with: | |
repository: xpilot-project/vatsim-auth | |
path: dependencies/vatsim-auth | |
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
### Buid Plugin ### | |
- name: Build plugin | |
working-directory: ${{ env.PLUGIN_DIR }} | |
run: | | |
mkdir build && cd build | |
cmake .. && cmake --build . --config ${{ env.BUILD_TYPE }} | |
- name: Package plugin | |
run: | | |
mkdir -p ${{ github.workspace }}/xPilot/lin_x64 | |
cp ${{ env.PLUGIN_DIR }}/build/lin_x64/xPilot.xpl ${{ github.workspace }}/xPilot/lin_x64 | |
cp ${{ env.PLUGIN_DIR }}/3rdparty/fmod/libfmod.so ${{ github.workspace }}/xPilot/lin_x64 | |
cp -R ${{ env.PLUGIN_DIR }}/Resources ${{ github.workspace }}/xPilot/ | |
- name: Extract debug symbols | |
if: github.ref_type == 'tag' && contains(github.ref_name, 'v') | |
working-directory: ${{ env.PLUGIN_DIR }}/build/lin_x64 | |
run: | | |
objcopy --only-keep-debug xPilot.xpl xPilot.debug | |
cp ${{ env.PLUGIN_DIR }}/build/lin_x64/xPilot.debug ${{ github.workspace }}/xPilot/lin_x64 | |
- name: Fix FMOD rpath | |
working-directory: ${{ github.workspace }}/xPilot/lin_x64 | |
run: | | |
sudo apt-get install patchelf | |
patchelf --set-rpath '$ORIGIN' xPilot.xpl | |
patchelf --replace-needed libfmod.so.13 libfmod.so xPilot.xpl | |
### Build Client ### | |
- name: Download Qt | |
uses: robinraju/release-downloader@v1.6 | |
with: | |
repository: "xpilot-project/qt6" | |
tag: ${{ env.QT_VERSION }} | |
fileName: "linux.7z" | |
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
- name: Setup Qt | |
run: | | |
7z x -oqt6 linux.7z | |
echo "Qt6_DIR=$(pwd)/qt6" >> $GITHUB_ENV | |
echo "QT_PLUGIN_PATH=$(pwd)/qt6/plugins" >> $GITHUB_ENV | |
echo "QML2_IMPORT_PATH=$(pwd)/qt6/qml" >> $GITHUB_ENV | |
echo "$(pwd)/qt6/bin" >> $GITHUB_PATH | |
chmod -R +x qt6 | |
- name: Build client | |
working-directory: ${{ env.CLIENT_DIR }} | |
run: | | |
mkdir build && cd build | |
cmake .. \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-DVATSIM_CLIENT_ID=${{ env.VATSIM_CLIENT_ID }} \ | |
-DVATSIM_CLIENT_KEY=${{ env.VATSIM_CLIENT_KEY }} \ | |
-DVATSIM_TOWERVIEW_CLIENT_ID=${{ env.VATSIM_TOWERVIEW_CLIENT_ID }} \ | |
-DCONFIG_ENCRYPTION_KEY=${{ env.CONFIG_ENCRYPTION_KEY }} \ | |
-DCMAKE_PREFIX_PATH=${{ env.Qt6_DIR }} \ | |
-DOPENSSL_ROOT_DIR=${{ github.workspace }}/dependencies/platform/linux/openssl | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
mv ${{ env.CLIENT_DIR }}/build/xPilot ${{ env.CLIENT_DIR }}/build/xpilot | |
- name: Build AppImage | |
working-directory: ${{ env.CLIENT_DIR }} | |
run: | | |
chmod +x ../scripts/appimage.sh | |
../scripts/appimage.sh | |
- name: Get version | |
run: | | |
echo "XPILOT_VERSION=$(cat xpilot.json | jq -r 'if .is_beta == true then "\(.version.major).\(.version.minor).\(.version.patch)-beta.\(.beta_number)" else "\(.version.major).\(.version.minor).\(.version.patch)" end')" >> $GITHUB_ENV | |
- name: Setup InstallBuilder | |
run: | | |
curl -k -L ${{ env.IB_URL }} --output ib.run | |
chmod +x ib.run | |
./ib.run --mode unattended --prefix ../ib | |
../ib/bin/builder --version | |
echo "$IB_LICENSE" > lic.xml | |
echo "CLIENT_BUILD_DIR=${{ github.workspace }}/dist" >> $GITHUB_ENV | |
echo "PLUGIN_BUILD_DIR=${{ github.workspace }}/xPilot" >> $GITHUB_ENV | |
- name: Create installer | |
run: | | |
../ib/bin/builder build installer/linux.xml \ | |
--license lic.xml \ | |
--setvars project.outputDirectory=$(pwd) \ | |
--setvars project.version=${{ env.XPILOT_VERSION }} | |
- name: Rename Installer | |
shell: bash | |
run: | | |
mv xPilot-${{ env.XPILOT_VERSION }}-linux-x64-installer.run xPilot-${{ env.XPILOT_VERSION }}-Linux.run | |
chmod +x xPilot-${{ env.XPILOT_VERSION }}-Linux.run | |
- name: Upload installer artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: xPilot-${{ env.XPILOT_VERSION }}-Linux.zip | |
path: | | |
xPilot-${{ env.XPILOT_VERSION }}-Linux.run | |
- name: Create artifacts archive | |
run: | | |
mkdir -p linux/plugin | |
cp -R ${{ github.workspace }}/xPilot linux/plugin/ | |
cp ${{ env.CLIENT_DIR }}/build/xpilot linux/xPilot | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Linux.zip | |
path: ${{ github.workspace }}/linux |