Skip to content

Build xPilot for Linux #111

Build xPilot for Linux

Build xPilot for Linux #111

Workflow file for this run

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