Add CMake support #756
Workflow file for this run
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
# SPDX-FileCopyrightText: Copyright (C) swift Project Community / Contributors | |
# SPDX-License-Identifier: CC0-1.0 | |
name: Build swift | |
on: | |
push: | |
branches-ignore: | |
- stable/** | |
- nobuild/** | |
pull_request: | |
concurrency: | |
group: ${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
do_vatsim_key: ${{ github.event_name == 'push' }} | |
do_symbols: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} | |
qt_version: 5.15.2 | |
bitrock_version: qt-professional-23.1.0 | |
bitrock_url: https://releases.installbuilder.com/installbuilder | |
jobs: | |
preBuild: | |
runs-on: ubuntu-22.04 | |
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository }} | |
outputs: | |
version: ${{ steps.version.outputs.value }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Get version number | |
id: version | |
run: | | |
echo "value=$(python3 -u scripts/build.py --version)" >>$GITHUB_OUTPUT | |
- name: Remove artifacts | |
uses: swift-project/delete-artifact@swift | |
with: | |
name: | | |
xswiftbus-thin-allos-${{ steps.version.outputs.value }} | |
xswiftbus-fat-allos-${{ steps.version.outputs.value }} | |
swiftsymbols-allos-${{ steps.version.outputs.value }} | |
swiftinstaller-linux-64-${{ steps.version.outputs.value }} | |
swiftinstaller-windows-64-${{ steps.version.outputs.value }} | |
swiftinstaller-windows-32-${{ steps.version.outputs.value }} | |
swiftinstaller-macos-64-${{ steps.version.outputs.value }} | |
failOnError: false | |
warnIfNotFound: false | |
checks: | |
runs-on: ubuntu-22.04 | |
needs: preBuild | |
outputs: | |
warnings: ${{ steps.cppcheck.outputs.warnings }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Run clang-format | |
run: | | |
scripts/run_clang_format.py | |
- name: Run cppcheck | |
id: cppcheck | |
run: | | |
sudo apt-get -y install cppcheck | |
sudo cpan Path::Class | |
cppcheck --template=gcc --inline-suppr --std=c++17 --enable=style,unusedFunction -i externals \ | |
-i src/plugins/weatherdata/gfs/g2clib -DCPPCHECK --force --suppressions-list=cppcheck.supp \ | |
--library=qt.cfg --library=posix.cfg . 2> >(tee error.log >&2) | |
perl scripts/warnings.pl error.log | |
buildLinux: | |
runs-on: ubuntu-20.04 | |
needs: [preBuild, checks] | |
env: | |
BACKTRACE_SYMBOL_TOKEN: ${{ secrets.BACKTRACE_SYMBOL_TOKEN }} | |
BACKTRACE_MINIDUMP_TOKEN: ${{ secrets.BACKTRACE_MINIDUMP_TOKEN }} | |
BITROCK_BUILDER: ~/installbuilder/bin/builder | |
outputs: | |
warnings: ${{ steps.warnings.outputs.warnings }} | |
steps: | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ env.qt_version }} | |
- name: Download InstallBuilder | |
run: | | |
wget --retry-connrefused -t 10 -w 10 -T 60 -O ~/installbuilder.run ${{ env.bitrock_url }}/installbuilder-${{ env.bitrock_version }}-linux-x64-installer.run | |
chmod 700 ~/installbuilder.run | |
~/installbuilder.run --mode unattended --prefix ~/installbuilder | |
cat >~/license.xml <<EOF | |
$BITROCK_LICENSE | |
EOF | |
env: | |
BITROCK_LICENSE: ${{ secrets.BITROCK_LICENSE }} | |
- name: Install dependencies | |
run: | | |
sudo apt-get -y install dbus-x11 doxygen graphviz libglu1-mesa-dev libopus-dev libsodium-dev libpulse-dev libdbus-1-dev libevent-dev libpng-dev ninja-build | |
sudo cpan Path::Class | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Start DBus session bus | |
run: | | |
dbus-launch --sh-syntax | tee session.sh | |
eval $(cat session.sh) | |
echo "DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS" >>$GITHUB_ENV | |
- name: Create Vatsim key file | |
if: ${{ env.do_vatsim_key == 'true' }} | |
run: | | |
cat >vatsim.json <<EOF | |
{ "vatsim": { "id": "$VATSIM_ID", "key": "$VATSIM_KEY" } } | |
EOF | |
echo "vatsim_key_file=vatsim.json" >>$GITHUB_ENV | |
env: | |
VATSIM_ID: ${{ secrets.VATSIM_ID }} | |
VATSIM_KEY: ${{ secrets.VATSIM_KEY }} | |
- name: Build swift (without symbols) | |
if: ${{ env.do_symbols != 'true' }} | |
run: | | |
python3 -u scripts/build.py -w 64 -t gcc -d -j2 -q "-DVATSIM_KEY_JSON=$vatsim_key_file" 2> >(tee error.log >&2) | |
- name: Build swift (with symbols) | |
if: ${{ env.do_symbols == 'true' }} | |
run: | | |
python3 -u scripts/build.py -w 64 -t gcc -d -j2 -q "-DVATSIM_KEY_JSON=$vatsim_key_file" --upload 2> >(tee error.log >&2) | |
- name: Check warnings | |
id: warnings | |
run: | | |
perl scripts/warnings.pl error.log | |
- name: Upload installer | |
uses: actions/upload-artifact@v3 | |
with: | |
name: swiftinstaller-linux-64-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftinstaller-* | |
- name: Upload symbols | |
uses: actions/upload-artifact@v3 | |
if: ${{ env.do_symbols == 'true' }} | |
with: | |
name: swiftsymbols-allos-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftsymbols-* | |
- name: Upload xswiftbus | |
uses: actions/upload-artifact@v3 | |
with: | |
name: xswiftbus-thin-allos-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/xswiftbus-* | |
buildWin64: | |
runs-on: windows-2022 | |
needs: [preBuild, checks] | |
env: | |
BACKTRACE_SYMBOL_TOKEN: ${{ secrets.BACKTRACE_SYMBOL_TOKEN }} | |
BACKTRACE_MINIDUMP_TOKEN: ${{ secrets.BACKTRACE_MINIDUMP_TOKEN }} | |
BITROCK_BUILDER: "~/installbuilder/bin/builder-cli.exe" | |
outputs: | |
warnings: ${{ steps.warnings.outputs.warnings }} | |
steps: | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ env.qt_version }} | |
arch: win64_msvc2019_64 | |
- name: Install Qt debug info | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ env.qt_version }} | |
arch: win64_msvc2019_64 | |
modules: debug_info | |
extra: --archives qtbase | |
- name: Download InstallBuilder | |
shell: C:\msys64\usr\bin\bash.exe -le {0} | |
run: | | |
wget --retry-connrefused -t 10 -w 10 -T 60 -O /c/installbuilder.exe ${{ env.bitrock_url }}/installbuilder-${{ env.bitrock_version }}-windows-x64-installer.exe | |
env: | |
MSYSTEM: MSYS2 | |
- name: Install InstallBuilder | |
run: | | |
start -wait "C:\installbuilder.exe" @("--mode", "unattended", "--prefix", "$HOME\installbuilder") | |
echo >$HOME\license.xml @" | |
$env:BITROCK_LICENSE | |
"@ | |
env: | |
BITROCK_LICENSE: ${{ secrets.BITROCK_LICENSE }} | |
- name: Install dependencies | |
run: | | |
pip install PyInstaller | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Create Vatsim key file | |
if: ${{ env.do_vatsim_key == 'true' }} | |
run: | | |
echo >vatsim.json @" | |
{ "vatsim": { "id": "$env:VATSIM_ID", "key": "$env:VATSIM_KEY" } } | |
"@ | |
echo "vatsim_key_file=vatsim.json" >>$env:GITHUB_ENV | |
env: | |
VATSIM_ID: ${{ secrets.VATSIM_ID }} | |
VATSIM_KEY: ${{ secrets.VATSIM_KEY }} | |
- name: Build swift (without symbols) | |
if: ${{ env.do_symbols != 'true' }} | |
shell: bash | |
run: | | |
python -u scripts/build.py -w 64 -t msvc -d -q "-DVATSIM_KEY_JSON=$vatsim_key_file" 2>&1 | tee error.log | |
- name: Build swift (with symbols) | |
if: ${{ env.do_symbols == 'true' }} | |
shell: bash | |
run: | | |
python -u scripts/build.py -w 64 -t msvc -d -q "-DVATSIM_KEY_JSON=$vatsim_key_file" --upload 2>&1 | tee error.log | |
- name: Check warnings | |
id: warnings | |
run: | | |
perl.exe scripts\warnings.pl error.log | |
- name: Upload installer | |
uses: actions/upload-artifact@v3 | |
with: | |
name: swiftinstaller-windows-64-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftinstaller-* | |
- name: Upload symbols | |
uses: actions/upload-artifact@v3 | |
if: ${{ env.do_symbols == 'true' }} | |
with: | |
name: swiftsymbols-allos-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftsymbols-* | |
- name: Upload xswiftbus | |
uses: actions/upload-artifact@v3 | |
with: | |
name: xswiftbus-thin-allos-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/xswiftbus-* | |
buildWin32: | |
runs-on: windows-2022 | |
needs: [preBuild, checks] | |
env: | |
BACKTRACE_SYMBOL_TOKEN: ${{ secrets.BACKTRACE_SYMBOL_TOKEN }} | |
BACKTRACE_MINIDUMP_TOKEN: ${{ secrets.BACKTRACE_MINIDUMP_TOKEN }} | |
BITROCK_BUILDER: "~/installbuilder/bin/builder-cli.exe" | |
outputs: | |
warnings: ${{ steps.warnings.outputs.warnings }} | |
steps: | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ env.qt_version }} | |
arch: win32_msvc2019 | |
- name: Install Qt debug info | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ env.qt_version }} | |
arch: win32_msvc2019 | |
modules: debug_info | |
extra: --archives qtbase | |
- name: Download InstallBuilder | |
shell: C:\msys64\usr\bin\bash.exe -le {0} | |
run: | | |
wget --retry-connrefused -t 10 -w 10 -T 60 -O /c/installbuilder.exe ${{ env.bitrock_url }}/installbuilder-${{ env.bitrock_version }}-windows-installer.exe | |
env: | |
MSYSTEM: MSYS2 | |
- name: Install InstallBuilder | |
run: | | |
start -wait "C:\installbuilder.exe" @("--mode", "unattended", "--prefix", "$HOME\installbuilder") | |
echo >$HOME\license.xml @" | |
$env:BITROCK_LICENSE | |
"@ | |
env: | |
BITROCK_LICENSE: ${{ secrets.BITROCK_LICENSE }} | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Create Vatsim key file | |
if: ${{ env.do_vatsim_key == 'true' }} | |
run: | | |
echo >vatsim.json @" | |
{ "vatsim": { "id": "$env:VATSIM_ID", "key": "$env:VATSIM_KEY" } } | |
"@ | |
echo "vatsim_key_file=vatsim.json" >>$env:GITHUB_ENV | |
env: | |
VATSIM_ID: ${{ secrets.VATSIM_ID }} | |
VATSIM_KEY: ${{ secrets.VATSIM_KEY }} | |
- name: Build swift (without symbols) | |
if: ${{ env.do_symbols != 'true' }} | |
shell: bash | |
run: | | |
python -u scripts/build.py -w 32 -t msvc -d -q "-DVATSIM_KEY_JSON=$vatsim_key_file" 2>&1 | tee error.log | |
- name: Build swift (with symbols) | |
if: ${{ env.do_symbols == 'true' }} | |
shell: bash | |
run: | | |
python -u scripts/build.py -w 32 -t msvc -d -q "-DVATSIM_KEY_JSON=$vatsim_key_file" --upload 2>&1 | tee error.log | |
- name: Check warnings | |
id: warnings | |
run: | | |
perl.exe scripts\warnings.pl error.log | |
- name: Upload installer | |
uses: actions/upload-artifact@v3 | |
with: | |
name: swiftinstaller-windows-32-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftinstaller-* | |
- name: Upload symbols | |
uses: actions/upload-artifact@v3 | |
if: ${{ env.do_symbols == 'true' }} | |
with: | |
name: swiftsymbols-allos-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftsymbols-* | |
buildMacOS: | |
runs-on: macos-11 | |
needs: [preBuild, checks] | |
env: | |
BACKTRACE_SYMBOL_TOKEN: ${{ secrets.BACKTRACE_SYMBOL_TOKEN }} | |
BACKTRACE_MINIDUMP_TOKEN: ${{ secrets.BACKTRACE_MINIDUMP_TOKEN }} | |
BITROCK_BUILDER: /Applications/installbuilder/bin/Builder.app/Contents/MacOS/installbuilder.sh | |
outputs: | |
warnings: ${{ steps.warnings.outputs.warnings }} | |
steps: | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ env.qt_version }} | |
- name: Download InstallBuilder | |
run: | | |
wget --retry-connrefused -t 10 -w 10 -T 60 -O $HOME/installbuilder.dmg ${{ env.bitrock_url }}/installbuilder-${{ env.bitrock_version }}-osx-installer.dmg | |
chmod 700 $HOME/installbuilder.dmg | |
sudo hdiutil attach $HOME/installbuilder.dmg | |
sudo cp -rf "/Volumes/InstallBuilder Qt/installbuilder-${{ env.bitrock_version }}-osx-installer.app" /Applications | |
sudo hdiutil detach "/Volumes/InstallBuilder Qt" | |
sudo spctl --master-disable | |
sudo chmod -R +x /Applications/installbuilder-${{ env.bitrock_version }}-osx-installer.app | |
sudo xattr -r -d com.apple.quarantine /Applications/installbuilder-${{ env.bitrock_version }}-osx-installer.app | |
sudo /Applications/installbuilder-${{ env.bitrock_version }}-osx-installer.app/Contents/MacOs/installbuilder.sh --mode unattended --prefix /Applications/installbuilder | |
cat >~/license.xml <<EOF | |
$BITROCK_LICENSE | |
EOF | |
env: | |
BITROCK_LICENSE: ${{ secrets.BITROCK_LICENSE }} | |
- name: Install dependencies | |
run: | | |
pip3 install requests | |
cpan Path::Class | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Create Vatsim key file | |
if: ${{ env.do_vatsim_key == 'true' }} | |
run: | | |
cat >vatsim.json <<EOF | |
{ "vatsim": { "id": "$VATSIM_ID", "key": "$VATSIM_KEY" } } | |
EOF | |
echo "vatsim_key_file=vatsim.json" >>$GITHUB_ENV | |
env: | |
VATSIM_ID: ${{ secrets.VATSIM_ID }} | |
VATSIM_KEY: ${{ secrets.VATSIM_KEY }} | |
- name: Build swift (without symbols) | |
if: ${{ env.do_symbols != 'true' }} | |
run: | | |
python3 -u scripts/build.py -w 64 -t clang -d -j2 -q "-DVATSIM_KEY_JSON=$vatsim_key_file" 2> >(tee error.log >&2) | |
- name: Build swift (with symbols) | |
if: ${{ env.do_symbols == 'true' }} | |
run: | | |
python3 -u scripts/build.py -w 64 -t clang -d -j2 -q "SWIFT_CONFIG_JSON+=$vatsim_key_file" --upload 2> >(tee error.log >&2) | |
- name: Check warnings | |
id: warnings | |
run: | | |
perl scripts/warnings.pl error.log | |
- name: Upload installer | |
uses: actions/upload-artifact@v3 | |
with: | |
name: swiftinstaller-macos-64-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftinstaller-* | |
- name: Upload symbols | |
uses: actions/upload-artifact@v3 | |
if: ${{ env.do_symbols == 'true' }} | |
with: | |
name: swiftsymbols-allos-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/swiftsymbols-* | |
- name: Upload xswiftbus | |
uses: actions/upload-artifact@v3 | |
with: | |
name: xswiftbus-thin-allos-${{ needs.preBuild.outputs.version }} | |
path: ${{ github.workspace }}/xswiftbus-* | |
postBuild: | |
runs-on: ubuntu-20.04 | |
needs: [preBuild, checks, buildLinux, buildWin64, buildWin32, buildMacOS] | |
steps: | |
- name: Download xswiftbus-thin | |
uses: actions/download-artifact@v3 | |
with: | |
name: xswiftbus-thin-allos-${{ needs.preBuild.outputs.version }} | |
- name: Repackage xswiftbus | |
run: | | |
7z x -y xswiftbus-windows-64-*.7z | |
7z x -y xswiftbus-linux-64-*.7z | |
7z x -y xswiftbus-macos-64-*.7z | |
7z a -y -mx=9 xswiftbus-fat-allos-${{ needs.preBuild.outputs.version }}.7z xswiftbus | |
- name: Upload xswiftbus-fat | |
uses: actions/upload-artifact@v3 | |
with: | |
name: xswiftbus-fat-allos-${{ needs.preBuild.outputs.version }} | |
path: xswiftbus-fat-allos-* | |
- name: Remove xswiftbus-thin | |
uses: swift-project/delete-artifact@swift | |
with: | |
name: xswiftbus-thin-allos-${{ needs.preBuild.outputs.version }} | |
release: | |
runs-on: ubuntu-20.04 | |
needs: [preBuild, postBuild] | |
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} | |
outputs: | |
id: ${{ steps.create.outputs.release_id }} | |
steps: | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
- name: Flatten directories | |
run: | | |
mv swiftinstaller-*/* . | |
mv xswiftbus-*/* . | |
mkdir swiftsymbols | |
mv swiftsymbols-*/* swiftsymbols | |
- name: Create release | |
uses: swift-project/[email protected] | |
id: create | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
tag: v${{ needs.preBuild.outputs.version }} | |
commitish: ${{ github.sha }} | |
body: Version ${{ needs.preBuild.outputs.version }} | |
draft: true | |
prerelease: true | |
gzip: folders | |
files: > | |
swiftinstaller-linux-64-${{ needs.preBuild.outputs.version }}.run | |
swiftinstaller-windows-64-${{ needs.preBuild.outputs.version }}.exe | |
swiftinstaller-windows-32-${{ needs.preBuild.outputs.version }}.exe | |
swiftinstaller-macos-64-${{ needs.preBuild.outputs.version }}.dmg | |
xswiftbus-fat-allos-${{ needs.preBuild.outputs.version }}.7z | |
swiftsymbols-allos-${{ needs.preBuild.outputs.version }}:swiftsymbols | |
notify: | |
runs-on: ubuntu-20.04 | |
needs: [preBuild, checks, buildLinux, buildWin64, buildWin32, buildMacOS, postBuild, release] | |
if: always() | |
steps: | |
- name: Install dependencies | |
run: | | |
sudo apt-get -y install jo | |
- name: Prepare Discord build message | |
run: | | |
result=SKIPPED | |
${{ contains(needs.*.result, 'success') }} && result=SUCCESS | |
${{ contains(needs.*.outputs.warnings, 'true') }} && result=WARNING | |
${{ contains(needs.*.result, 'cancelled') }} && result=CANCELLED | |
${{ contains(needs.*.result, 'failure') }} && result=FAILED | |
[[ $result = SKIPPED ]] && emoji=repeat | |
[[ $result = SUCCESS ]] && emoji=white_check_mark | |
[[ $result = WARNING ]] && emoji=warning | |
[[ $result = CANCELLED ]] && emoji=grey_question | |
[[ $result = FAILED ]] && emoji=x | |
echo "result=$result" >>$GITHUB_ENV | |
echo "emoji=$emoji" >>$GITHUB_ENV | |
- name: Prepare Discord release message | |
uses: octokit/[email protected] | |
if: ${{ needs.release.result == 'success' }} | |
id: release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
route: GET /repos/swift-project/pilotclient/releases/${{ needs.release.outputs.id }} | |
- name: Send Discord build message | |
run: | | |
cat >message <<EOF | |
> :${{ env.emoji }}: \`${{ github.ref }}\` | |
> **${{ env.result }}** (triggered by ${{ github.event_name }}) | |
> <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}> | |
EOF | |
jo content=@message | curl -i -H "Accept: application/json" -H "Content-Type: application/json" $WEBHOOK -d @- | |
env: | |
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} | |
- name: Send Discord release message | |
if: ${{ needs.release.result == 'success' }} | |
run: | | |
cat >message <<EOF | |
> :package: Created draft release \`v${{ needs.preBuild.outputs.version }}\` | |
> <${{ fromJson(steps.release.outputs.data).html_url }}> | |
EOF | |
jo content=@message | curl -i -H "Accept: application/json" -H "Content-Type: application/json" $WEBHOOK -d @- | |
env: | |
WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} |