Work on CI builds #224
This file contains hidden or 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
| #------------------------------------------------------------------------------- | |
| # Workflow configuration | |
| #------------------------------------------------------------------------------- | |
| name: "Desktop CI builds" | |
| on: | |
| push: | |
| pull_request: | |
| workflow_dispatch: | |
| #------------------------------------------------------------------------------- | |
| # Define application name & version | |
| #------------------------------------------------------------------------------- | |
| env: | |
| APP_NAME: "Theengs" | |
| APP_VERSION: "1.5.0" | |
| QT_VERSION: "6.10.1" | |
| #------------------------------------------------------------------------------- | |
| # Workflow jobs | |
| #------------------------------------------------------------------------------- | |
| jobs: | |
| ## GNU/Linux build ########################################################### | |
| build-linux: | |
| name: "Linux CI build" | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| # Checkout repository (and submodules) | |
| - name: Checkout repository (and submodules) | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| # Install dependencies (from package manager) | |
| - name: Install dependencies (from package manager) | |
| run: | | |
| sudo apt-get install libgl1-mesa-dev libxkbcommon-x11-dev libx11-xcb-dev libzstd-dev -y; | |
| sudo apt-get install cmake ninja-build pkgconf libtool -y; | |
| sudo apt-get install libfuse2 appstream -y; | |
| # Install Qt | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{ env.QT_VERSION }} | |
| modules: qtconnectivity qtcharts qtwebsockets | |
| # Setup env | |
| - name: Setup env | |
| run: | | |
| qmake --version | |
| cmake --version | |
| ninja --version | |
| # Build dependencies (from contribs script) | |
| - name: Build dependencies (from contribs script) | |
| run: | | |
| cd contribs/ | |
| python3 contribs_builder_qt.py --targets=linux --software qtmqtt --qt-directory ${{env.QT_ROOT_DIR}}/../.. --qt-version ${{env.QT_VERSION}} | |
| python3 contribs_builder.py --targets=linux --software mbedtls --qt-directory ${{env.QT_ROOT_DIR}}/../.. --qt-version ${{env.QT_VERSION}} | |
| # Build application | |
| - name: Build application | |
| run: | | |
| cmake -B build/ -DCMAKE_BUILD_TYPE=Release -G Ninja | |
| cmake --build build/ --config Release | |
| # Deploy application | |
| - name: Deploy application | |
| run: ./deploy_linux.sh -c -p | |
| # Upload AppImage | |
| - name: Upload AppImage | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-linux64.AppImage | |
| path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-linux64.AppImage | |
| retention-days: 7 | |
| ## macOS build ############################################################### | |
| build-mac: | |
| name: "macOS CI build" | |
| runs-on: macos-15 | |
| steps: | |
| # Checkout repository (and submodules) | |
| - name: Checkout repository (and submodules) | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| # Install dependencies (from package manager) | |
| #- name: Install dependencies (from package manager) | |
| # run: | | |
| # brew install qt6 cmake ninja | |
| # Install Qt | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{ env.QT_VERSION }} | |
| modules: qtconnectivity qtcharts qtwebsockets | |
| # Setup env | |
| - name: Setup env | |
| run: | | |
| qmake --version | |
| cmake --version | |
| ninja --version | |
| # Setup certificate(s) | |
| - name: Setup certificate(s) | |
| if: env.MACOS_CERTIFICATE | |
| env: | |
| MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} | |
| MACOS_CERTIFICATE_NAME: ${{ secrets.MACOS_CERTIFICATE_NAME }} | |
| MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }} | |
| MACOS_CI_KEYCHAIN_PASSWORD: ${{ secrets.MACOS_CI_KEYCHAIN_PASSWORD }} | |
| run: | | |
| # Turn our base64-encoded certificate(s) back to a regular file(s) | |
| echo "$MACOS_CERTIFICATE" | base64 --decode > certificate.p12 | |
| # Create a temporary headless keychain, import certificate, ... | |
| security create-keychain -p "$MACOS_CI_KEYCHAIN_PASSWORD" build.keychain | |
| security set-keychain-settings -lut 21600 build.keychain | |
| security unlock-keychain -p "$MACOS_CI_KEYCHAIN_PASSWORD" build.keychain | |
| security import certificate.p12 -k build.keychain -P "$MACOS_CERTIFICATE_PASSWORD" -T /usr/bin/codesign | |
| security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$MACOS_CI_KEYCHAIN_PASSWORD" build.keychain | |
| security list-keychains -s build.keychain "$(security list-keychains | tr -d '\"')" | |
| security default-keychain -s build.keychain | |
| # Build dependencies (from contribs script) | |
| - name: Build dependencies (from contribs script) | |
| run: | | |
| cd contribs/ | |
| python3 contribs_builder_qt.py --targets=macos --software qtmqtt --qt-directory ${{env.QT_ROOT_DIR}}/../.. --qt-version ${{env.QT_VERSION}} | |
| python3 contribs_builder.py --targets=macos --software mbedtls --qt-directory ${{env.QT_ROOT_DIR}}/../.. --qt-version ${{env.QT_VERSION}} | |
| # Build application | |
| - name: Build application | |
| run: | | |
| export CMAKE_BUILD_PARALLEL_LEVEL=`sysctl -n hw.logicalcpu` | |
| cmake -B build/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" | |
| cmake --build build/ --config Release | |
| # Deploy application | |
| - name: Deploy application | |
| env: | |
| MACOS_CERTIFICATE_NAME: ${{ secrets.MACOS_CERTIFICATE_NAME }} | |
| run: ./deploy_macos.sh -c | |
| # Upload application bundle | |
| - name: Upload application bundle | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-macOS.zip | |
| path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-macOS.zip | |
| retention-days: 7 | |
| ## Windows build ############################################################# | |
| build-windows: | |
| name: "Windows CI build" | |
| runs-on: windows-2022 | |
| steps: | |
| # Checkout repository (and submodules) | |
| - name: Checkout repository (and submodules) | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| # Configure MSVC | |
| - name: Configure MSVC | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| with: | |
| arch: x86_64 | |
| # Install NSIS (already installed in 'windows-2022') | |
| #- name: Install NSIS | |
| # run: | | |
| # Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') | |
| # scoop bucket add extras | |
| # scoop install nsis | |
| # Install Qt | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{ env.QT_VERSION }} | |
| modules: qtconnectivity qtcharts qtwebsockets | |
| arch: 'win64_msvc2022_64' | |
| # Setup env | |
| - name: Setup env | |
| run: | | |
| qmake --version | |
| cmake --version | |
| # Build dependencies (from contribs script) | |
| - name: Build dependencies (from contribs script) | |
| run: | | |
| cd contribs/ | |
| python3 contribs_builder_qt.py --targets=msvc2022 --software qtmqtt --qt-directory ${{env.QT_ROOT_DIR}}/../.. --qt-version ${{env.QT_VERSION}} | |
| # Build application | |
| - name: Build application | |
| run: | | |
| cmake -B build/ -DCMAKE_BUILD_TYPE=Release -G "NMake Makefiles" | |
| cd build/ | |
| nmake | |
| # Deploy application | |
| - name: Deploy application | |
| run: sh deploy_windows.sh -c -p | |
| # Upload application ZIP | |
| - name: Upload application ZIP | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64.zip | |
| path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64.zip | |
| retention-days: 7 | |
| # Upload NSIS installer | |
| - name: Upload NSIS installer | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64.exe | |
| path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64.exe | |
| retention-days: 7 |