CI: update to Qt 6.9.2 and macOS 26 #303
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
| name: Build DB48X | |
| on: | |
| push: | |
| branches: [ stable, dev ] | |
| tags: | |
| - 'v[0-9]+.[0-9]+.[0-9]' | |
| pull_request: | |
| branches: [ stable, dev ] | |
| workflow_dispatch: | |
| release: | |
| types: [ published ] | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-simulator-macos: | |
| name: Build Simulator (macOS) | |
| runs-on: macos-latest | |
| env: | |
| APPLE_CERT_DATA: ${{ secrets.APPLE_CERT_DATA }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: '6.9.2' | |
| host: 'mac' | |
| target: 'desktop' | |
| arch: 'clang_64' | |
| modules: 'qtmultimedia' | |
| - name: Build simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make sim | |
| - name: Run test suite | |
| run: ./db48x.app/Contents/MacOS/db48x -H -I -w 10000 -r 50 -Tall | |
| - name: Deploy Qt dependencies | |
| run: | | |
| macdeployqt db48x.app | |
| - name: Code sign macOS app (with Apple Developer certificate) | |
| if: ${{ env.APPLE_CERT_DATA != '' }} | |
| uses: lando/code-sign-action@v3 | |
| with: | |
| file: db48x.app | |
| certificate-data: ${{ secrets.APPLE_CERT_DATA }} | |
| certificate-password: ${{ secrets.APPLE_CERT_PASSWORD }} | |
| apple-team-id: ${{ secrets.APPLE_TEAM_ID }} | |
| apple-notary-user: ${{ secrets.APPLE_NOTARY_USER }} | |
| apple-notary-password: ${{ secrets.APPLE_NOTARY_PASSWORD }} | |
| apple-product-id: org.db48x.simulator | |
| - name: Code sign macOS app (ad-hoc fallback) | |
| if: ${{ env.APPLE_CERT_DATA == '' }} | |
| run: | | |
| codesign --force --deep --sign - db48x.app | |
| - name: Create macOS archive | |
| run: | | |
| chmod +x allow-db48x-macos.sh | |
| zip -r db48x-macos.zip db48x.app allow-db48x-macos.sh | |
| - name: Upload simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-simulator-macos | |
| path: db48x-macos.zip | |
| build-simulator-linux: | |
| name: Build Simulator (Linux, Ubuntu) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libxcb-cursor0 libgl1-mesa-dev libxkbcommon-x11-0 libfreetype6-dev pkg-config | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: '6.9.2' | |
| host: 'linux' | |
| target: 'desktop' | |
| modules: 'qtmultimedia' | |
| - name: Build simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make sim | |
| - name: Run test suite | |
| run: ./db48x -H -I -w 10000 -r 50 -Tall | |
| - name: Upload simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-simulator-linux | |
| path: | | |
| db48x | |
| help/ | |
| build-simulator-linux-fedora: | |
| name: Build Simulator (Linux, Fedora) | |
| runs-on: ubuntu-latest | |
| container: fedora:latest | |
| env: | |
| LANG: C.UTF-8 | |
| LC_ALL: C.UTF-8 | |
| QT_QPA_PLATFORM: offscreen | |
| steps: | |
| - name: Install git | |
| run: dnf install -y git | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install dependencies | |
| run: | | |
| dnf install -y @development-tools gcc gcc-c++ git which python3 \ | |
| python3-pip glibc-langpack-en \ | |
| pulseaudio-libs-devel \ | |
| libxcb-devel mesa-libGL-devel libxkbcommon-x11-devel freetype-devel \ | |
| pkgconfig xcb-util-wm-devel xcb-util-image-devel \ | |
| xcb-util-keysyms-devel xcb-util-renderutil-devel | |
| python3 -m pip install aqtinstall | |
| python3 -m aqt install-qt linux desktop 6.9.2 --outputdir /opt/Qt \ | |
| --modules qtmultimedia | |
| echo "/opt/Qt/6.9.2/gcc_64/bin" >> "$GITHUB_PATH" | |
| - name: Build simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make sim | |
| - name: Run test suite | |
| run: ./db48x -H -I -w 10000 -r 50 -Tall | |
| - name: Upload simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-simulator-linux-fedora | |
| path: | | |
| db48x | |
| help/ | |
| build-simulator-linux-arch: | |
| name: Build Simulator (Linux, Arch) | |
| runs-on: ubuntu-latest | |
| container: archlinux:latest | |
| env: | |
| LANG: C.UTF-8 | |
| LC_ALL: C.UTF-8 | |
| QT_QPA_PLATFORM: offscreen | |
| steps: | |
| - name: Install git | |
| run: pacman -Sy --noconfirm git | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install dependencies | |
| run: | | |
| pacman -Syu --noconfirm base-devel git which python python-pip \ | |
| libpulse fontconfig libxcb mesa libxkbcommon-x11 freetype2 pkgconf \ | |
| xcb-util-wm xcb-util-image xcb-util-keysyms xcb-util-renderutil | |
| python -m pip install --break-system-packages aqtinstall | |
| python -m aqt install-qt linux desktop 6.9.2 --outputdir /opt/Qt \ | |
| --modules qtmultimedia | |
| echo "/opt/Qt/6.9.2/gcc_64/bin" >> "$GITHUB_PATH" | |
| - name: Build simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make sim | |
| - name: Run test suite | |
| run: ./db48x -H -I -w 10000 -r 50 -Tall | |
| - name: Upload simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-simulator-linux-arch | |
| path: | | |
| db48x | |
| help/ | |
| build-simulator-windows: | |
| name: Build Simulator (Windows) | |
| runs-on: windows-latest | |
| env: | |
| WINDOWS_CERT_DATA: ${{ secrets.WINDOWS_CERT_DATA }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Setup MSYS2 with Qt6 | |
| uses: msys2/setup-msys2@v2 | |
| with: | |
| msystem: MINGW64 | |
| update: true | |
| cache: true | |
| install: >- | |
| git | |
| mingw-w64-x86_64-gcc | |
| mingw-w64-x86_64-make | |
| mingw-w64-x86_64-freetype | |
| mingw-w64-x86_64-pkg-config | |
| mingw-w64-x86_64-libsystre | |
| mingw-w64-x86_64-qt6-base | |
| mingw-w64-x86_64-qt6-declarative | |
| mingw-w64-x86_64-qt6-multimedia | |
| mingw-w64-x86_64-qt6-translations | |
| mingw-w64-x86_64-qt6-tools | |
| - name: Build simulator | |
| shell: msys2 {0} | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| mingw32-make sim | |
| - name: Run test suite | |
| shell: msys2 {0} | |
| run: ./db48x.exe -H -I -w 10000 -r 50 -Tall | |
| - name: Deploy Qt dependencies | |
| shell: msys2 {0} | |
| run: | | |
| windeployqt6 db48x.exe | |
| # Copy MinGW runtime and MSYS2 dependencies | |
| cp /mingw64/bin/libgcc_s_seh-1.dll . | |
| cp /mingw64/bin/libstdc++-6.dll . | |
| cp /mingw64/bin/libwinpthread-1.dll . | |
| cp /mingw64/bin/libsystre-0.dll . | |
| cp /mingw64/bin/libtre-5.dll . | |
| cp /mingw64/bin/libintl-8.dll . | |
| cp /mingw64/bin/libiconv-2.dll . | |
| # Copy all Qt dependency DLLs | |
| cp /mingw64/bin/libb2-1.dll . | |
| cp /mingw64/bin/libdouble-conversion.dll . | |
| cp /mingw64/bin/libicuin*.dll . | |
| cp /mingw64/bin/libicuuc*.dll . | |
| cp /mingw64/bin/libicudt*.dll . | |
| cp /mingw64/bin/libpcre2-16-0.dll . | |
| cp /mingw64/bin/zlib1.dll . | |
| cp /mingw64/bin/libzstd.dll . | |
| cp /mingw64/bin/libfreetype-6.dll . | |
| cp /mingw64/bin/libharfbuzz-0.dll . | |
| cp /mingw64/bin/libmd4c.dll . | |
| cp /mingw64/bin/libpng16-16.dll . | |
| cp /mingw64/bin/libbrotlidec.dll . | |
| cp /mingw64/bin/libbrotlicommon.dll . | |
| cp /mingw64/bin/libbz2-1.dll . | |
| cp /mingw64/bin/libglib-2.0-0.dll . | |
| cp /mingw64/bin/libgraphite2.dll . | |
| cp /mingw64/bin/libpcre2-8-0.dll . | |
| - name: Code sign Windows executable | |
| if: ${{ env.WINDOWS_CERT_DATA != '' }} | |
| uses: lando/code-sign-action@v3 | |
| with: | |
| file: db48x.exe | |
| certificate-data: ${{ secrets.WINDOWS_CERT_DATA }} | |
| certificate-password: ${{ secrets.WINDOWS_CERT_PASSWORD }} | |
| - name: Upload simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-simulator-windows | |
| path: | | |
| db48x.exe | |
| *.dll | |
| platforms/ | |
| imageformats/ | |
| tls/ | |
| translations/ | |
| help/ | |
| build-color-simulator-macos: | |
| name: Build Color DM32 Simulator (macOS) | |
| runs-on: macos-latest | |
| env: | |
| APPLE_CERT_DATA: ${{ secrets.APPLE_CERT_DATA }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: '6.9.2' | |
| host: 'mac' | |
| target: 'desktop' | |
| arch: 'clang_64' | |
| modules: 'qtmultimedia' | |
| - name: Build color DM32 simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make color-dm32-sim | |
| - name: Run test suite | |
| run: ./db50x.app/Contents/MacOS/db50x -H -I -w 10000 -r 50 -Tall | |
| - name: Deploy Qt dependencies | |
| run: | | |
| macdeployqt db50x.app | |
| - name: Code sign macOS app (with Apple Developer certificate) | |
| if: ${{ env.APPLE_CERT_DATA != '' }} | |
| uses: lando/code-sign-action@v3 | |
| with: | |
| file: db50x.app | |
| certificate-data: ${{ secrets.APPLE_CERT_DATA }} | |
| certificate-password: ${{ secrets.APPLE_CERT_PASSWORD }} | |
| apple-team-id: ${{ secrets.APPLE_TEAM_ID }} | |
| apple-notary-user: ${{ secrets.APPLE_NOTARY_USER }} | |
| apple-notary-password: ${{ secrets.APPLE_NOTARY_PASSWORD }} | |
| apple-product-id: org.db48x.color-simulator | |
| - name: Code sign macOS app (ad-hoc fallback) | |
| if: ${{ env.APPLE_CERT_DATA == '' }} | |
| run: | | |
| codesign --force --deep --sign - db50x.app | |
| - name: Create macOS archive | |
| run: | | |
| chmod +x allow-db50x-macos.sh | |
| zip -r db50x-macos.zip db50x.app allow-db50x-macos.sh | |
| - name: Upload color simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-color-simulator-macos | |
| path: db50x-macos.zip | |
| build-color-simulator-linux: | |
| name: Build Color DM32 Simulator (Linux, Ubuntu) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libxcb-cursor0 libgl1-mesa-dev libxkbcommon-x11-0 libfreetype6-dev pkg-config | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: '6.9.2' | |
| host: 'linux' | |
| target: 'desktop' | |
| modules: 'qtmultimedia' | |
| - name: Build color DM32 simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make color-dm32-sim | |
| - name: Run test suite | |
| run: ./db50x -H -I -w 10000 -r 50 -Tall | |
| - name: Upload color simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-color-simulator-linux | |
| path: | | |
| db50x | |
| help/ | |
| build-color-simulator-linux-fedora: | |
| name: Build Color DM32 Simulator (Linux, Fedora) | |
| runs-on: ubuntu-latest | |
| container: fedora:latest | |
| env: | |
| LANG: C.UTF-8 | |
| LC_ALL: C.UTF-8 | |
| QT_QPA_PLATFORM: offscreen | |
| steps: | |
| - name: Install git | |
| run: dnf install -y git | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install dependencies | |
| run: | | |
| dnf install -y @development-tools gcc gcc-c++ git which python3 \ | |
| python3-pip glibc-langpack-en \ | |
| pulseaudio-libs-devel \ | |
| libxcb-devel mesa-libGL-devel libxkbcommon-x11-devel freetype-devel \ | |
| pkgconfig xcb-util-wm-devel xcb-util-image-devel \ | |
| xcb-util-keysyms-devel xcb-util-renderutil-devel | |
| python3 -m pip install aqtinstall | |
| python3 -m aqt install-qt linux desktop 6.9.2 --outputdir /opt/Qt \ | |
| --modules qtmultimedia | |
| echo "/opt/Qt/6.9.2/gcc_64/bin" >> "$GITHUB_PATH" | |
| - name: Build color DM32 simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make color-dm32-sim | |
| - name: Run test suite | |
| run: ./db50x -H -I -w 10000 -r 50 -Tall | |
| - name: Upload color simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-color-simulator-linux-fedora | |
| path: | | |
| db50x | |
| help/ | |
| build-color-simulator-linux-arch: | |
| name: Build Color DM32 Simulator (Linux, Arch) | |
| runs-on: ubuntu-latest | |
| container: archlinux:latest | |
| env: | |
| LANG: C.UTF-8 | |
| LC_ALL: C.UTF-8 | |
| QT_QPA_PLATFORM: offscreen | |
| steps: | |
| - name: Install git | |
| run: pacman -Sy --noconfirm git | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install dependencies | |
| run: | | |
| pacman -Syu --noconfirm base-devel git which python python-pip \ | |
| libpulse fontconfig libxcb mesa libxkbcommon-x11 freetype2 pkgconf \ | |
| xcb-util-wm xcb-util-image xcb-util-keysyms xcb-util-renderutil | |
| python -m pip install --break-system-packages aqtinstall | |
| python -m aqt install-qt linux desktop 6.9.2 --outputdir /opt/Qt \ | |
| --modules qtmultimedia | |
| echo "/opt/Qt/6.9.2/gcc_64/bin" >> "$GITHUB_PATH" | |
| - name: Build color DM32 simulator | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make color-dm32-sim | |
| - name: Run test suite | |
| run: ./db50x -H -I -w 10000 -r 50 -Tall | |
| - name: Upload color simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-color-simulator-linux-arch | |
| path: | | |
| db50x | |
| help/ | |
| build-color-simulator-windows: | |
| name: Build Color DM32 Simulator (Windows) | |
| runs-on: windows-latest | |
| env: | |
| WINDOWS_CERT_DATA: ${{ secrets.WINDOWS_CERT_DATA }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Setup MSYS2 with Qt6 | |
| uses: msys2/setup-msys2@v2 | |
| with: | |
| msystem: MINGW64 | |
| update: true | |
| cache: true | |
| install: >- | |
| git | |
| mingw-w64-x86_64-gcc | |
| mingw-w64-x86_64-make | |
| mingw-w64-x86_64-freetype | |
| mingw-w64-x86_64-pkg-config | |
| mingw-w64-x86_64-libsystre | |
| mingw-w64-x86_64-qt6-base | |
| mingw-w64-x86_64-qt6-declarative | |
| mingw-w64-x86_64-qt6-multimedia | |
| mingw-w64-x86_64-qt6-translations | |
| mingw-w64-x86_64-qt6-tools | |
| - name: Build color DM32 simulator | |
| shell: msys2 {0} | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| mingw32-make color-dm32-sim | |
| - name: Run test suite | |
| shell: msys2 {0} | |
| run: ./db50x.exe -H -I -w 10000 -r 50 -Tall | |
| - name: Deploy Qt dependencies | |
| shell: msys2 {0} | |
| run: | | |
| windeployqt6 db50x.exe | |
| # Copy MinGW runtime and MSYS2 dependencies | |
| cp /mingw64/bin/libgcc_s_seh-1.dll . | |
| cp /mingw64/bin/libstdc++-6.dll . | |
| cp /mingw64/bin/libwinpthread-1.dll . | |
| cp /mingw64/bin/libsystre-0.dll . | |
| cp /mingw64/bin/libtre-5.dll . | |
| cp /mingw64/bin/libintl-8.dll . | |
| cp /mingw64/bin/libiconv-2.dll . | |
| # Copy all Qt dependency DLLs | |
| cp /mingw64/bin/libb2-1.dll . | |
| cp /mingw64/bin/libdouble-conversion.dll . | |
| cp /mingw64/bin/libicuin*.dll . | |
| cp /mingw64/bin/libicuuc*.dll . | |
| cp /mingw64/bin/libicudt*.dll . | |
| cp /mingw64/bin/libpcre2-16-0.dll . | |
| cp /mingw64/bin/zlib1.dll . | |
| cp /mingw64/bin/libzstd.dll . | |
| cp /mingw64/bin/libfreetype-6.dll . | |
| cp /mingw64/bin/libharfbuzz-0.dll . | |
| cp /mingw64/bin/libmd4c.dll . | |
| cp /mingw64/bin/libpng16-16.dll . | |
| cp /mingw64/bin/libbrotlidec.dll . | |
| cp /mingw64/bin/libbrotlicommon.dll . | |
| cp /mingw64/bin/libbz2-1.dll . | |
| cp /mingw64/bin/libglib-2.0-0.dll . | |
| cp /mingw64/bin/libgraphite2.dll . | |
| cp /mingw64/bin/libpcre2-8-0.dll . | |
| - name: Code sign Windows executable | |
| if: ${{ env.WINDOWS_CERT_DATA != '' }} | |
| uses: lando/code-sign-action@v3 | |
| with: | |
| file: db50x.exe | |
| certificate-data: ${{ secrets.WINDOWS_CERT_DATA }} | |
| certificate-password: ${{ secrets.WINDOWS_CERT_PASSWORD }} | |
| - name: Upload color simulator artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-color-simulator-windows | |
| path: | | |
| db50x.exe | |
| *.dll | |
| platforms/ | |
| imageformats/ | |
| tls/ | |
| translations/ | |
| help/ | |
| build-wasm: | |
| name: Build WebAssembly | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libfreetype6-dev pkg-config | |
| - name: Generate recorder config header | |
| run: | | |
| make -C recorder TARGET=opt BUILDENV=auto RECURSE=.config .config | |
| cp recorder/.build/linux/opt/config.h recorder/config.h | |
| - name: Setup Emscripten | |
| uses: mymindstorm/setup-emsdk@v16 | |
| with: | |
| version: 'latest' | |
| - name: Verify Emscripten | |
| run: | | |
| emcc --version | |
| - name: Build WASM | |
| shell: bash | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make SHELL=/bin/bash wasm | |
| - name: Upload WASM artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-wasm | |
| path: | | |
| wasm/db48x.js | |
| wasm/db48x.wasm | |
| wasm/*.html | |
| help/ | |
| build-android: | |
| name: Build Android App (db48x) | |
| runs-on: ubuntu-latest | |
| env: | |
| ANDROID_KEYSTORE_DATA: ${{ secrets.ANDROID_KEYSTORE_DATA }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Install Qt for Android | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: '6.9.2' | |
| host: 'linux' | |
| target: 'android' | |
| arch: 'android_arm64_v8a' | |
| modules: 'qtmultimedia' | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v4 | |
| - name: Install Android NDK | |
| run: | | |
| sdkmanager --install "ndk;26.1.10909125" | |
| - name: Install build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libfreetype6-dev pkg-config | |
| - name: Build Android App Bundle | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| export ANDROID_SDK_ROOT=$ANDROID_HOME | |
| export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk/26.1.10909125 | |
| export ANDROID_QT_BASE="$(dirname "$QT_ROOT_DIR")" | |
| if [ -n "$ANDROID_KEYSTORE_DATA" ]; then | |
| mkdir -p "$HOME/.local" | |
| echo "$ANDROID_KEYSTORE_DATA" | base64 -d > "$HOME/.local/android_release.keystore" | |
| fi | |
| make android | |
| env: | |
| ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }} | |
| - name: List generated AAB files | |
| run: | | |
| echo "Looking for AAB files in workspace:" | |
| find . -name "*.aab" -type f 2>/dev/null || echo "No AAB files found" | |
| - name: Verify generated AAB | |
| run: test -f android/db48x.aab | |
| - name: Upload Android artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-android | |
| if-no-files-found: error | |
| path: | | |
| android/*.aab | |
| android/**/*.aab | |
| help/ | |
| build-color-android: | |
| name: Build Android App (db50x) | |
| runs-on: ubuntu-latest | |
| env: | |
| ANDROID_KEYSTORE_DATA: ${{ secrets.ANDROID_KEYSTORE_DATA }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Install Qt for Android | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: '6.9.2' | |
| host: 'linux' | |
| target: 'android' | |
| arch: 'android_arm64_v8a' | |
| modules: 'qtmultimedia' | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v4 | |
| - name: Install Android NDK | |
| run: | | |
| sdkmanager --install "ndk;26.1.10909125" | |
| - name: Install build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libfreetype6-dev pkg-config | |
| - name: Build Android App Bundle | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| export ANDROID_SDK_ROOT=$ANDROID_HOME | |
| export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk/26.1.10909125 | |
| export ANDROID_QT_BASE="$(dirname "$QT_ROOT_DIR")" | |
| if [ -n "$ANDROID_KEYSTORE_DATA" ]; then | |
| mkdir -p "$HOME/.local" | |
| echo "$ANDROID_KEYSTORE_DATA" | base64 -d > "$HOME/.local/android_release.keystore" | |
| fi | |
| make color-dm32-android | |
| env: | |
| ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }} | |
| - name: List generated AAB files | |
| run: | | |
| echo "Looking for AAB files in workspace:" | |
| find . -name "*.aab" -type f 2>/dev/null || echo "No AAB files found" | |
| - name: Verify generated AAB | |
| run: test -f android/db50x.aab | |
| - name: Upload Android artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-android | |
| if-no-files-found: error | |
| path: | | |
| android/*.aab | |
| android/**/*.aab | |
| help/ | |
| build-dm42-firmware: | |
| name: Build DM42 Firmware | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y gcc-arm-none-eabi binutils-arm-none-eabi libfreetype6-dev pkg-config | |
| - name: Build DM42 firmware | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make dist || make dist | |
| mv db48x-v*.tgz db48x-dm42-firmware.tgz | |
| - name: Upload DM42 firmware artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db48x-dm42-firmware | |
| path: db48x-dm42-firmware.tgz | |
| build-dm32-firmware: | |
| name: Build DM32 Firmware | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y gcc-arm-none-eabi binutils-arm-none-eabi libfreetype6-dev pkg-config | |
| - name: Build DM32 firmware | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make dm32-dist || make dm32-dist | |
| mv db50x-v*.tgz db50x-dm32-firmware.tgz | |
| - name: Upload DM32 firmware artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-dm32-firmware | |
| path: db50x-dm32-firmware.tgz | |
| build-dm42n-firmware: | |
| name: Build DM42n Firmware | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Install build dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y gcc-arm-none-eabi binutils-arm-none-eabi libfreetype6-dev pkg-config | |
| - name: Build DM42n firmware | |
| run: | | |
| echo "${{ github.run_number }}" > .build_id | |
| make dm42n-dist || make dm42n-dist | |
| mv db50x-v*.tgz db50x-dm42n-firmware.tgz | |
| - name: Upload DM42n firmware artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: db50x-dm42n-firmware | |
| path: db50x-dm42n-firmware.tgz | |
| build-release-package: | |
| name: Create Release Package | |
| runs-on: ubuntu-latest | |
| needs: [ | |
| build-simulator-macos, | |
| build-simulator-linux, | |
| build-simulator-linux-fedora, | |
| build-simulator-linux-arch, | |
| build-simulator-windows, | |
| build-color-simulator-macos, | |
| build-color-simulator-linux, | |
| build-color-simulator-linux-fedora, | |
| build-color-simulator-linux-arch, | |
| build-color-simulator-windows, | |
| build-android, | |
| build-color-android, | |
| build-wasm, | |
| build-dm42-firmware, | |
| build-dm32-firmware, | |
| build-dm42n-firmware | |
| ] | |
| if: github.event_name == 'push' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/dev') | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v7 | |
| - name: Display structure of downloaded files | |
| run: ls -R | |
| - name: Create release archives | |
| run: | | |
| cd db48x-dm42-firmware | |
| tar czf ../db48x-dm42-${GITHUB_SHA:0:8}.tar.gz * | |
| cd ../db50x-dm32-firmware | |
| tar czf ../db50x-dm32-${GITHUB_SHA:0:8}.tar.gz * | |
| cd ../db50x-dm42n-firmware | |
| tar czf ../db50x-dm42n-${GITHUB_SHA:0:8}.tar.gz * | |
| cd ../db48x-android | |
| tar czf ../db48x-android-${GITHUB_SHA:0:8}.tar.gz * | |
| cd ../db50x-android | |
| tar czf ../db50x-android-${GITHUB_SHA:0:8}.tar.gz * | |
| cd ../db48x-wasm | |
| tar czf ../db48x-wasm-${GITHUB_SHA:0:8}.tar.gz * | |
| cd .. | |
| # macOS simulators are already zipped, just rename them | |
| cp db48x-simulator-macos/db48x-macos.zip db48x-simulator-macos-${GITHUB_SHA:0:8}.zip | |
| cp db50x-color-simulator-macos/db50x-macos.zip db50x-color-simulator-macos-${GITHUB_SHA:0:8}.zip | |
| - name: Upload release packages | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: release-packages | |
| path: | | |
| db48x-dm42-*.tar.gz | |
| db50x-dm32-*.tar.gz | |
| db50x-dm42n-*.tar.gz | |
| db48x-android-*.tar.gz | |
| db50x-android-*.tar.gz | |
| db48x-wasm-*.tar.gz | |
| db48x-simulator-macos-*.zip | |
| db50x-color-simulator-macos-*.zip | |
| create-release: | |
| name: Create Release and Upload Assets | |
| if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | |
| needs: [ | |
| build-simulator-macos, | |
| build-simulator-linux, | |
| build-simulator-linux-fedora, | |
| build-simulator-linux-arch, | |
| build-simulator-windows, | |
| build-color-simulator-macos, | |
| build-color-simulator-linux, | |
| build-color-simulator-linux-fedora, | |
| build-color-simulator-linux-arch, | |
| build-color-simulator-windows, | |
| build-android, | |
| build-color-android, | |
| build-wasm, | |
| build-dm42-firmware, | |
| build-dm32-firmware, | |
| build-dm42n-firmware | |
| ] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 # Fetch full history for tag access | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: artifacts/ | |
| - name: Zip Linux artifacts # Zip for consistency (macOS is already zipped) | |
| run: | | |
| mkdir -p releases | |
| cd artifacts/db48x-simulator-linux | |
| zip -r ../../releases/db48x-linux.zip * | |
| cd ../db50x-color-simulator-linux | |
| zip -r ../../releases/db50x-linux.zip * | |
| - name: Zip Windows artifacts | |
| run: | | |
| cd artifacts/db48x-simulator-windows | |
| zip -r ../../releases/db48x-windows.zip * | |
| cd ../db50x-color-simulator-windows | |
| zip -r ../../releases/db50x-windows.zip * | |
| - name: Move macOS artifacts (already zipped) | |
| run: | | |
| mv artifacts/db48x-simulator-macos/db48x-macos.zip releases/ | |
| mv artifacts/db50x-color-simulator-macos/db50x-macos.zip releases/ | |
| - name: Move DM32, DM42 and DM42n firmware artifacts | |
| run: | | |
| mv artifacts/db48x-dm42-*.tar.gz releases/db48x-dm42.tar.gz | |
| mv artifacts/db50x-dm32-*.tar.gz releases/db50x-dm32.tar.gz | |
| mv artifacts/db50x-dm42n-*.tar.gz releases/db50x-dm42n.tar.gz | |
| - name: Package Android artifacts | |
| run: | | |
| cd artifacts/db48x-android | |
| tar czf ../../releases/db48x-android.tar.gz * | |
| cd ../db50x-android | |
| tar czf ../../releases/db50x-android.tar.gz * | |
| - name: Extract tag message for release body | |
| run: | | |
| git fetch --tags | |
| git tag -l --format='%(contents)' "${{ github.ref_name }}" > release_notes.md | |
| - name: Create Release and Upload Assets | |
| uses: softprops/action-gh-release@v3 | |
| with: | |
| tag_name: ${{ github.ref_name }} | |
| name: ${{ github.ref_name }} | |
| body_path: release_notes.md | |
| files: | | |
| releases/db48x-macos.zip | |
| releases/db48x-linux.zip | |
| releases/db48x-windows.zip | |
| releases/db50x-macos.zip | |
| releases/db50x-linux.zip | |
| releases/db50x-windows.zip | |
| releases/db48x-dm32.tar.gz | |
| releases/db48x-dm42.tar.gz | |
| releases/db48x-dm42n.tar.gz | |
| releases/db48x-android.tar.gz | |
| releases/db50x-android.tar.gz |