diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 934446e91..e93ea424f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,332 +55,9 @@ jobs: failOnError: false warnIfNotFound: false - checks: - runs-on: ubuntu-22.04 - needs: preBuild - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: '0' - - name: Install gitlint - run: | - pip install gitlint==0.19.1 - - name: Run gitlint - run: gitlint --commits d789f61044e63e1a00d8e9f1d4d49c8d9ffc42a9..HEAD - - name: Install REUSE - run: | - pip install reuse==4.0.3 - - name: Run REUSE lint - run: reuse lint - - name: Run clang-format - run: | - scripts/run_clang_format.py - - uses: Trass3r/setup-cpp@1b63900ecf3f0b7c60ee53aa7be122f2c4fe7a2c - - name: Run cppcheck - run: | - sudo apt-get -y install cppcheck - cppcheck --template=gcc --inline-suppr --std=c++17 --enable=style,unusedFunction \ - -i src/plugins/weatherdata/gfs/g2clib -DCPPCHECK --force --suppressions-list=cppcheck.supp \ - --library=qt.cfg --library=posix.cfg . - - name: Install Qt docs - if: ${{ env.do_doxygen == 'true' }} - uses: jurplel/install-qt-action@v4 - with: - version: ${{ env.qt_version }} - no-qt-binaries: true - documentation: true - cache: true - - name: Run doxygen - if: ${{ env.do_doxygen == 'true' }} - working-directory: docs - run: | - sudo apt-get -y install doxygen graphviz - doxygen Doxyfile - env: - DOXY_SRC_ROOT: .. - DOXY_TAGFILES: ${{ runner.workspace }}/Qt/Docs/Qt-${{ env.qt_version }} - - name: Upload doxygen - if: ${{ env.do_doxygen == 'true' }} - uses: actions/upload-pages-artifact@v3 - with: - path: docs/html/ - - name: Check if clang-tidy analysis is required - id: check_need_clang_tidy - run: | - if python3 -u scripts/run_static_analysis.py --check-changed-files; then - echo "should_run_clang_tidy=false" >> $GITHUB_OUTPUT - else - echo "should_run_clang_tidy=true" >> $GITHUB_OUTPUT - fi - - name: Checkout repository - if: ${{ steps.check_need_clang_tidy.outputs.should_run_clang_tidy == 'true' }} - uses: actions/checkout@v4 - with: - fetch-depth: '0' - submodules: 'true' - - name: Install Qt - if: ${{ steps.check_need_clang_tidy.outputs.should_run_clang_tidy == 'true' }} - uses: jurplel/install-qt-action@v4 - with: - version: ${{ env.qt_version }} - modules: 'qtmultimedia' - cache: true - - name: Install dependencies - if: ${{ steps.check_need_clang_tidy.outputs.should_run_clang_tidy == 'true' }} - run: | - sudo apt-get -y install dbus-x11 libglu1-mesa-dev libpulse-dev libdbus-1-dev ninja-build - pip3 install requests conan - - name: Checkout externals - if: ${{ env.use_externals == 'true' && steps.check_need_clang_tidy.outputs.should_run_clang_tidy == 'true' }} - uses: actions/checkout@v4 - env: - EXTERNALS_PAT: ${{ secrets.EXTERNALS_PAT }} - with: - repository: ${{ env.externals }} - ref: ${{ env.externals_sha }} - token: ${{ env.EXTERNALS_PAT }} - path: 'third_party/externals' - - name: Install conan dependencies - if: ${{ steps.check_need_clang_tidy.outputs.should_run_clang_tidy == 'true' }} - shell: bash - env: - ARTIFACTORY_USER: ${{ secrets.ARTIFACTORY_USER }} - ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }} - run: | - conan profile detect - conan remote disable conancenter - conan remote add swift https://artifactory.swift-project.org/artifactory/api/conan/conan-local - conan remote login swift "$ARTIFACTORY_USER" --password "$ARTIFACTORY_TOKEN" - conan install . --output-folder=build_conan --deployer=full_deploy -pr=ci/profile_linux - - name: Run clang-tidy - if: ${{ steps.check_need_clang_tidy.outputs.should_run_clang_tidy == 'true' }} - shell: bash - run: | - mkdir build && pushd build - cmake .. --preset ci-build-linux-no-pch - popd - python3 scripts/run_static_analysis.py --clang-tidy --build-path build --changed-files-ci - - buildLinux: - runs-on: ubuntu-22.04 - needs: [preBuild, checks] - env: - BACKTRACE_SYMBOL_TOKEN: ${{ secrets.BACKTRACE_SYMBOL_TOKEN }} - BACKTRACE_MINIDUMP_TOKEN: ${{ secrets.BACKTRACE_MINIDUMP_TOKEN }} - BITROCK_BUILDER: ~/installbuilder/bin/builder - - steps: - - name: Install Qt - uses: jurplel/install-qt-action@v4 - with: - version: ${{ env.qt_version }} - modules: 'qtmultimedia' - cache: true - - name: Cache InstallBuilder - id: cache-bitrock - uses: actions/cache@v4 - with: - path: ~/installbuilder.run - key: installbuilder-${{ env.bitrock_version }}-linux-x64 - - name: Download InstallBuilder - if: steps.cache-bitrock.outputs.cache-hit != 'true' - run: | - wget --retry-connrefused -t 10 -w 10 -T 60 -O ~/installbuilder.run ${{ env.bitrock_url }}/installbuilder-${{ env.bitrock_version }}-linux-x64-installer.run - - name: Install InstallBuilder - run: | - chmod 700 ~/installbuilder.run - ~/installbuilder.run --mode unattended --prefix ~/installbuilder - cat >~/license.xml <>$GITHUB_ENV - - name: Create Vatsim key file - if: ${{ env.do_vatsim_key == 'true' }} - run: | - cat >vatsim.json <$HOME\license.xml @" - $env:BITROCK_LICENSE - "@ - env: - BITROCK_LICENSE: ${{ secrets.BITROCK_LICENSE }} - - name: Install dependencies - run: | - pip install requests PyInstaller conan - - name: Checkout repository - uses: actions/checkout@v4 - with: - submodules: true - fetch-depth: 0 - - name: Checkout externals - if: ${{ env.use_externals == 'true' }} - uses: actions/checkout@v4 - env: - EXTERNALS_PAT: ${{ secrets.EXTERNALS_PAT }} - with: - repository: ${{ env.externals }} - ref: ${{ env.externals_sha }} - token: ${{ env.EXTERNALS_PAT }} - path: 'third_party/externals' - - name: Install conan dependencies - shell: bash - env: - ARTIFACTORY_USER: ${{ secrets.ARTIFACTORY_USER }} - ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }} - run: | - conan profile detect - conan remote disable conancenter - conan remote add swift https://artifactory.swift-project.org/artifactory/api/conan/conan-local - conan remote login swift "$ARTIFACTORY_USER" --password "$ARTIFACTORY_TOKEN" - conan install . --output-folder=build_conan --deployer=full_deploy -pr=ci/profile_win - - name: Create Vatsim key file - if: ${{ env.do_vatsim_key == 'true' }} - run: | - echo >vatsim.json @" - { "vatsim": { "id": "$env:VATSIM_ID", "key": "$env:VATSIM_KEY" } } - "@ - env: - VATSIM_ID: ${{ secrets.VATSIM_ID }} - VATSIM_KEY: ${{ secrets.VATSIM_KEY }} - - uses: Trass3r/setup-cpp@1b63900ecf3f0b7c60ee53aa7be122f2c4fe7a2c - - name: Build swift (without symbols) - if: ${{ env.do_symbols != 'true' }} - shell: cmd - run: | - build_conan\\build\\RelWithDebInfo\\generators\\conanrun.bat && python -u scripts/build.py -w 64 -t msvc - - name: Build swift (with symbols) - if: ${{ env.do_symbols == 'true' }} - shell: cmd - run: | - build_conan\\build\\RelWithDebInfo\\generators\\conanrun.bat && python -u scripts/build.py -w 64 -t msvc --upload-symbols - - name: Upload installer - uses: actions/upload-artifact@v4 - with: - name: swiftinstaller-windows-64-${{ needs.preBuild.outputs.version }} - path: ${{ github.workspace }}/swiftinstaller-* - - name: Upload symbols - uses: actions/upload-artifact@v4 - if: ${{ env.do_symbols == 'true' }} - with: - name: swiftsymbols-windows-64-${{ needs.preBuild.outputs.version }} - path: ${{ github.workspace }}/swiftsymbols-* - - name: Upload xswiftbus - uses: actions/upload-artifact@v4 - with: - name: xswiftbus-thin-windows-64-${{ needs.preBuild.outputs.version }} - path: ${{ github.workspace }}/xswiftbus-* - buildMacOS: runs-on: macos-15 - needs: [preBuild, checks] + needs: [preBuild] env: BACKTRACE_SYMBOL_TOKEN: ${{ secrets.BACKTRACE_SYMBOL_TOKEN }} BACKTRACE_MINIDUMP_TOKEN: ${{ secrets.BACKTRACE_MINIDUMP_TOKEN }} @@ -483,137 +160,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: xswiftbus-thin-macos-64-${{ needs.preBuild.outputs.version }} - path: ${{ github.workspace }}/xswiftbus-* - - postBuild: - runs-on: ubuntu-22.04 - needs: [preBuild, checks, buildLinux, buildWin64, buildMacOS] - - steps: - - name: Download xswiftbus-thin - uses: actions/download-artifact@v4 - with: - pattern: xswiftbus-thin-* - merge-multiple: true - - name: Repackage xswiftbus - run: | - unzip -o xswiftbus-windows-64-*.zip - unzip -o xswiftbus-linux-64-*.zip - unzip -o xswiftbus-macos-64-*.zip - zip -r -9 xswiftbus-fat-allos-${{ needs.preBuild.outputs.version }}.zip xswiftbus - - name: Upload xswiftbus-fat - uses: actions/upload-artifact@v4 - with: - name: xswiftbus-fat-allos-${{ needs.preBuild.outputs.version }} - path: xswiftbus-fat-allos-* - - name: Remove xswiftbus-thin artifacts - uses: swift-project/delete-artifact@swift - with: - name: xswiftbus-thin-* - - release: - runs-on: ubuntu-22.04 - needs: [preBuild, postBuild] - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - outputs: - id: ${{ steps.create.outputs.release_id }} - permissions: - id-token: write - contents: write - pages: write - environment: github-pages - - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 - - name: Flatten directories - run: | - mv swiftinstaller-*/* . - mv xswiftbus-*/* . - mkdir swiftsymbols - mv swiftsymbols-*/* swiftsymbols - - name: Create release - uses: swift-project/github-release@2.0-connreset-retry - 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-macos-64-${{ needs.preBuild.outputs.version }}.dmg - xswiftbus-fat-allos-${{ needs.preBuild.outputs.version }}.zip - swiftsymbols-allos-${{ needs.preBuild.outputs.version }}:swiftsymbols - - name: Publish doxygen - uses: actions/deploy-pages@v4 - - notify: - runs-on: ubuntu-22.04 - needs: [preBuild, checks, buildLinux, buildWin64, buildMacOS, postBuild, release] - if: always() - - steps: - - name: Install dependencies - run: | - sudo apt-get -y install jo jq - - name: Query GitHub annotations - uses: octokit/request-action@v2.x - id: checkruns - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - route: GET /repos/swift-project/pilotclient/commits/${{ github.sha }}/check-runs - - name: Prepare Discord build message - run: | - result=SKIPPED - ${{ contains(needs.*.result, 'success') }} && result=SUCCESS - for run in $CHECK_RUNS; do - curl -L -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $TOKEN" -H "X-GitHub-Api-Version: 2022-11-28" \ - "https://api.github.com/repos/swift-project/pilotclient/check-runs/$run/annotations" \ - | jq -e 'any(.[].annotation_level; . == "warning" or . == "error")' && result=WARNING - done - ${{ 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 - env: - CHECK_RUNS: ${{ join(fromJson(steps.checkruns.outputs.data).check_runs.*.id, ' ') }} - TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Prepare Discord release message - uses: octokit/request-action@v2.x - 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 < :${{ env.emoji }}: \`${{ github.ref }}\` - > **${{ env.result }}** (triggered by ${{ github.event_name }}) - > - 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 < :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 }} + path: ${{ github.workspace }}/xswiftbus-* \ No newline at end of file