name: Build on: push: branches: [main] pull_request: branches: [main] permissions: contents: write jobs: windows: runs-on: windows-latest steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Install Qt6 uses: jurplel/install-qt-action@v4 with: version: '6.8.1' arch: 'win64_msvc2022_64' cache: true aqtversion: '==3.1.21' - uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: Configure run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release - name: Build run: cmake --build build - name: Test run: ctest --test-dir build --output-on-failure --exclude-regex "test_editor|test_windbg_provider|test_com_security" - name: Upload artifact uses: actions/upload-artifact@v4 if: always() with: name: Reclass-Windows-x64 path: | build/Reclass.exe build/ReclassMcpBridge.exe build/Plugins/ build/*.dll build/platforms/ build/styles/ build/imageformats/ build/iconengines/ build/themes/ build/screenshot.png - name: Package release zip if: github.event_name == 'push' && github.ref == 'refs/heads/main' shell: bash run: | mkdir -p release cp build/Reclass.exe release/ cp build/ReclassMcpBridge.exe release/ cp build/*.dll release/ 2>/dev/null || true cp -r build/platforms release/ 2>/dev/null || true cp -r build/styles release/ 2>/dev/null || true cp -r build/imageformats release/ 2>/dev/null || true cp -r build/iconengines release/ 2>/dev/null || true cp -r build/Plugins release/ 2>/dev/null || true cp -r build/themes release/ 2>/dev/null || true cp build/screenshot.png release/ 2>/dev/null || true cd release && 7z a ../win64-reclass-latest.zip * - name: Update win64 release if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: softprops/action-gh-release@v2 with: tag_name: latest-win64 name: win64 body: | Windows x64 build from main branch. Commit: ${{ github.sha }} prerelease: true files: win64-reclass-latest.zip make_latest: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} linux: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Install Qt6 uses: jurplel/install-qt-action@v4 with: version: '6.8.1' cache: true aqtversion: '==3.1.21' - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y ninja-build libgl1-mesa-dev libfuse2 libxcb-cursor0 - name: Configure run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release - name: Build run: cmake --build build - name: Test run: xvfb-run ctest --test-dir build --output-on-failure --exclude-regex "test_editor" env: QT_QPA_PLATFORM: offscreen - name: Create AppImage run: | # Download linuxdeploy and Qt plugin wget -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage wget -q https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage chmod +x linuxdeploy-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage # Build AppDir structure mkdir -p AppDir/usr/bin AppDir/usr/share/icons/hicolor/256x256/apps cp build/Reclass AppDir/usr/bin/ cp build/ReclassMcpBridge AppDir/usr/bin/ cp -r build/themes AppDir/usr/bin/ 2>/dev/null || true cp src/icons/class.png AppDir/usr/share/icons/hicolor/256x256/apps/reclass.png # Create AppImage with Qt libs bundled # Qt6_DIR points to cmake config dir; derive the Qt root from it QT_ROOT=$(cd "$Qt6_DIR/../../.." && pwd) export QMAKE="$QT_ROOT/bin/qmake" export LD_LIBRARY_PATH="$QT_ROOT/lib:$LD_LIBRARY_PATH" export EXTRA_QT_PLUGINS="svg;iconengines" ./linuxdeploy-x86_64.AppImage --appdir AppDir \ --desktop-file deploy/Reclass.desktop \ --icon-file AppDir/usr/share/icons/hicolor/256x256/apps/reclass.png \ --plugin qt \ --output appimage mv Reclass-*.AppImage Reclass-x86_64.AppImage - name: Upload artifact uses: actions/upload-artifact@v4 if: always() with: name: Reclass-Linux-x64 path: Reclass-x86_64.AppImage - name: Update linux64 release if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: softprops/action-gh-release@v2 with: tag_name: latest-linux64 name: linux64 body: | Linux x64 AppImage build from main branch. Commit: ${{ github.sha }} Run `chmod +x Reclass-x86_64.AppImage && ./Reclass-x86_64.AppImage` prerelease: true files: Reclass-x86_64.AppImage make_latest: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}