Build xPilot for macOS #86
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 macOS" | |
on: | |
workflow_call: | |
workflow_dispatch: | |
env: | |
MIN_OS_VERSION: 11.0 | |
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-osx-installer.dmg | |
IB_LICENSE: ${{ secrets.INSTALLBUILDER_LICENSE }} | |
QT_VERSION: "v6.5.2" | |
jobs: | |
build: | |
runs-on: macos-latest | |
steps: | |
- 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 }} | |
- name: Load developer certificate | |
env: | |
CERTIFICATE: ${{ secrets.APPLE_SIGNING_CERTIFICATE }} | |
CERTIFICATE_PASSWORD: ${{ secrets.APPLE_SIGNING_CERTIFICATE_PASSWORD }} | |
run: ./scripts/make_keychain.sh | |
### Buid Plugin ### | |
- name: Build plugin | |
working-directory: ${{ env.PLUGIN_DIR }} | |
run: | | |
mkdir build && cd build | |
cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ env.MIN_OS_VERSION }} && cmake --build . --config ${{ env.BUILD_TYPE }} | |
- name: Extract debug symbols | |
working-directory: ${{ env.PLUGIN_DIR }}/build/mac_x64 | |
run: | | |
dsymutil xPilot.xpl -o xPilot.dSYM | |
- name: Package plugin | |
run: | | |
mkdir -p ${{ github.workspace }}/xPilot/mac_x64 | |
cp ${{ env.PLUGIN_DIR }}/build/mac_x64/xPilot.xpl ${{ github.workspace }}/xPilot/mac_x64 | |
cp -R ${{ env.PLUGIN_DIR }}/build/mac_x64/xPilot.dSYM ${{ github.workspace }}/xPilot/mac_x64 | |
cp ${{ env.PLUGIN_DIR }}/3rdparty/fmod/libfmod.dylib ${{ github.workspace }}/xPilot/mac_x64 | |
cp -R ${{ env.PLUGIN_DIR }}/Resources ${{ github.workspace }}/xPilot/ | |
- name: Fix FMOD rpath | |
working-directory: ${{ github.workspace }}/xPilot/mac_x64 | |
run: | | |
install_name_tool -id @executable_path/../../../Resources/plugins/xPilot/mac_x64/libfmod.dylib libfmod.dylib | |
install_name_tool -change @rpath/libfmod.dylib @executable_path/../../../Resources/plugins/xPilot/mac_x64/libfmod.dylib xPilot.xpl | |
### Build Client ### | |
- name: Download Qt | |
uses: robinraju/release-downloader@v1.6 | |
with: | |
repository: "xpilot-project/qt6" | |
tag: ${{ env.QT_VERSION }} | |
fileName: "macos.7z" | |
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
- name: Setup Qt | |
run: | | |
7z x -oqt6 macos.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/macos/openssl \ | |
-DCMAKE_OSX_DEPLOYMENT_TARGET=${{ env.MIN_OS_VERSION }} | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
- name: Code sign application | |
working-directory: ${{ env.CLIENT_DIR }}/build | |
run: | | |
codesign --force --options runtime --timestamp --sign "${{ secrets.APPLE_SIGNING_CERTIFICATE_IDENTITY }}" --entitlements ../entitlements.plist xPilot.app | |
- name: Get version | |
shell: bash | |
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 | |
shell: bash | |
run: | | |
curl -k -L ${{ env.IB_URL }} --output ib.dmg | |
hdiutil attach ib.dmg | |
/Volumes/InstallBuilder\ Enterprise/*.app/Contents/MacOS/installbuilder.sh --mode unattended --prefix ../ib | |
../ib/bin/builder --version | |
echo "$IB_LICENSE" > lic.xml | |
echo "CLIENT_BUILD_DIR=${{ env.CLIENT_DIR }}/build" >> $GITHUB_ENV | |
echo "PLUGIN_BUILD_DIR=${{ github.workspace }}/xPilot" >> $GITHUB_ENV | |
- name: Create installer | |
shell: bash | |
run: | | |
../ib/bin/builder build installer/macos.xml \ | |
--license lic.xml \ | |
--setvars project.outputDirectory=$(pwd) \ | |
--setvars project.version=${{ env.XPILOT_VERSION }} \ | |
--setvars apple_signing_identity=${{ secrets.APPLE_SIGNING_CERTIFICATE_IDENTITY }} \ | |
--setvars password=${{ secrets.APPLE_SIGNING_CERTIFICATE_PASSWORD }} | |
- name: Notarize installer | |
shell: bash | |
run: xcrun notarytool submit xPilot.dmg --apple-id "${{ secrets.NOTARIZATION_USERNAME }}" --password "${{ secrets.NOTARIZATION_PASSWORD }}" --team-id "${{ secrets.APPLE_TEAM_ID }}" | |
- name: Rename dmg | |
run: | | |
mv xPilot.dmg xPilot-${{ env.XPILOT_VERSION }}-MacOS.dmg | |
- name: Upload installer artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: xPilot-${{ env.XPILOT_VERSION }}-MacOS.zip | |
path: | | |
xPilot-${{ env.XPILOT_VERSION }}-MacOS.dmg | |
- name: Create artifacts archive | |
run: | | |
mkdir -p macos/plugin | |
cp -R ${{ github.workspace }}/xPilot macos/plugin/ | |
cp -R ${{ env.CLIENT_DIR }}/build/xPilot.app macos/xPilot.app | |
cd macos | |
zip -r ../macOS.zip plugin xPilot.app | |
- name: Notarize artifacts archive | |
run: | | |
xcrun notarytool submit macOS.zip --apple-id "${{ secrets.NOTARIZATION_USERNAME }}" --password "${{ secrets.NOTARIZATION_PASSWORD }}" --team-id "${{ secrets.APPLE_TEAM_ID }}" | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: macOS.zip | |
path: ${{ github.workspace }}/macOS.zip |