chore: release v3.10.0 #297
Workflow file for this run
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: Desktop CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - 'feature/desktop*' | |
| paths: | |
| - 'desktop/**' | |
| - '.github/workflows/desktop-ci.yml' | |
| pull_request: | |
| branches: | |
| - main | |
| paths: | |
| - 'desktop/**' | |
| - '.github/workflows/desktop-ci.yml' | |
| workflow_dispatch: | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| build-windows: | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '24' | |
| cache: 'npm' | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: x86_64-pc-windows-msvc | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: 'desktop/src-tauri' | |
| - name: Install main project dependencies | |
| run: npm install --legacy-peer-deps | |
| - name: Build frontend | |
| run: npm run build | |
| - name: Build server (TypeScript) | |
| run: npx tsc --project tsconfig.server.json | |
| - name: Copy OpenAPI spec | |
| shell: bash | |
| run: | | |
| mkdir -p dist/server/routes/v1 | |
| cp src/server/routes/v1/openapi.yaml dist/server/routes/v1/ | |
| - name: Install desktop dependencies | |
| working-directory: desktop | |
| run: npm install | |
| - name: Prepare desktop resources | |
| shell: cmd | |
| run: | | |
| mkdir desktop\resources | |
| mkdir desktop\resources\dist | |
| mkdir desktop\resources\binaries | |
| xcopy /E /I /Y dist\server desktop\resources\dist\server | |
| xcopy /E /I /Y dist\services desktop\resources\dist\services | |
| xcopy /E /I /Y dist\utils desktop\resources\dist\utils | |
| xcopy /E /I /Y dist\types desktop\resources\dist\types | |
| xcopy /E /I /Y dist\config desktop\resources\dist\config | |
| xcopy /E /I /Y dist\constants desktop\resources\dist\constants | |
| xcopy /E /I /Y dist\contexts desktop\resources\dist\contexts | |
| xcopy /E /I /Y dist\assets desktop\resources\dist\assets | |
| xcopy /E /I /Y dist\locales desktop\resources\dist\locales | |
| xcopy /E /I /Y dist\pmtiles desktop\resources\dist\pmtiles | |
| xcopy /E /I /Y protobufs desktop\resources\dist\protobufs | |
| copy dist\index.html desktop\resources\dist\index.html | |
| copy dist\logo.png desktop\resources\dist\logo.png | |
| copy dist\logo-original.png desktop\resources\dist\logo-original.png | |
| copy dist\favicon.ico desktop\resources\dist\favicon.ico | |
| copy dist\favicon-16x16.png desktop\resources\dist\favicon-16x16.png | |
| copy dist\favicon-32x32.png desktop\resources\dist\favicon-32x32.png | |
| copy dist\cors-detection.js desktop\resources\dist\cors-detection.js | |
| copy dist\cors-error.html desktop\resources\dist\cors-error.html | |
| copy package.json desktop\resources\package.json | |
| copy package.json desktop\resources\dist\package.json | |
| robocopy node_modules desktop\resources\dist\node_modules /E /NFL /NDL /NJH /NJS /NC /NS /NP | |
| if %ERRORLEVEL% leq 7 exit /b 0 | |
| - name: Download Node.js binary for bundling | |
| working-directory: desktop/resources/binaries | |
| run: | | |
| curl -L -o node.exe https://nodejs.org/dist/v24.12.0/win-x64/node.exe | |
| $expectedHash = "2ffe3acc0458fdde999f50d11809bbe7c9b7ef204dcf17094e325d26ace101d8" | |
| $actualHash = (Get-FileHash -Path node.exe -Algorithm SHA256).Hash.ToLower() | |
| if ($actualHash -ne $expectedHash) { | |
| throw "SHA256 checksum mismatch! Expected: $expectedHash, Got: $actualHash" | |
| } | |
| shell: pwsh | |
| - name: Run Rust linting | |
| working-directory: desktop/src-tauri | |
| run: cargo clippy --all-targets --all-features -- -D warnings | |
| - name: Run Rust tests | |
| working-directory: desktop/src-tauri | |
| run: cargo test --verbose | |
| - name: Build Tauri app (debug) | |
| working-directory: desktop | |
| run: npm run tauri:build -- --debug | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: meshmonitor-desktop-windows-debug | |
| path: desktop/src-tauri/target/debug/bundle/ | |
| retention-days: 7 | |
| if-no-files-found: warn | |
| build-macos: | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '24' | |
| cache: 'npm' | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-apple-darwin | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: 'desktop/src-tauri' | |
| - name: Install main project dependencies | |
| run: npm install --legacy-peer-deps | |
| - name: Build frontend | |
| run: npm run build | |
| - name: Build server (TypeScript) | |
| run: npx tsc --project tsconfig.server.json | |
| - name: Copy OpenAPI spec | |
| run: | | |
| mkdir -p dist/server/routes/v1 | |
| cp src/server/routes/v1/openapi.yaml dist/server/routes/v1/ | |
| - name: Install desktop dependencies | |
| working-directory: desktop | |
| run: npm install | |
| - name: Prepare desktop resources | |
| run: | | |
| mkdir -p desktop/resources/dist | |
| mkdir -p desktop/resources/binaries | |
| # Copy server-side compiled code | |
| cp -r dist/server desktop/resources/dist/ | |
| cp -r dist/services desktop/resources/dist/ | |
| cp -r dist/utils desktop/resources/dist/ | |
| cp -r dist/types desktop/resources/dist/ | |
| cp -r dist/config desktop/resources/dist/ | |
| cp -r dist/constants desktop/resources/dist/ | |
| cp -r dist/contexts desktop/resources/dist/ | |
| # Copy frontend assets | |
| cp -r dist/assets desktop/resources/dist/ | |
| cp -r dist/locales desktop/resources/dist/ | |
| # Copy pmtiles if it exists (may be in public or dist) | |
| [ -d dist/pmtiles ] && cp -r dist/pmtiles desktop/resources/dist/ || true | |
| [ -d public/pmtiles ] && cp -r public/pmtiles desktop/resources/dist/ || true | |
| # Copy protobufs | |
| cp -r protobufs desktop/resources/dist/ | |
| # Copy individual files | |
| cp dist/index.html desktop/resources/dist/ | |
| cp dist/logo.png desktop/resources/dist/ | |
| cp dist/logo-original.png desktop/resources/dist/ | |
| cp dist/favicon.ico desktop/resources/dist/ | |
| cp dist/favicon-16x16.png desktop/resources/dist/ | |
| cp dist/favicon-32x32.png desktop/resources/dist/ | |
| cp dist/cors-detection.js desktop/resources/dist/ | |
| cp dist/cors-error.html desktop/resources/dist/ | |
| cp package.json desktop/resources/ | |
| cp package.json desktop/resources/dist/ | |
| # Copy node_modules (may take a while) | |
| cp -r node_modules desktop/resources/dist/ | |
| - name: Download Node.js binary for bundling | |
| run: | | |
| NODE_VERSION="v24.12.0" | |
| EXPECTED_SHA256="319f221adc5e44ff0ed57e8a441b2284f02b8dc6fc87b8eb92a6a93643fd8080" | |
| curl -L -o node.tar.gz "https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-darwin-arm64.tar.gz" | |
| echo "${EXPECTED_SHA256} node.tar.gz" | shasum -a 256 -c - | |
| tar -xzf node.tar.gz | |
| cp "node-${NODE_VERSION}-darwin-arm64/bin/node" desktop/resources/binaries/node | |
| - name: Run Rust linting | |
| working-directory: desktop/src-tauri | |
| run: cargo clippy --all-targets --all-features -- -D warnings | |
| - name: Run Rust tests | |
| working-directory: desktop/src-tauri | |
| run: cargo test --verbose | |
| - name: Build Tauri app (debug) | |
| working-directory: desktop | |
| run: npm run tauri:build -- --debug --bundles app | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: meshmonitor-desktop-macos-debug | |
| path: desktop/src-tauri/target/debug/bundle/ | |
| retention-days: 7 | |
| if-no-files-found: warn | |
| build-macos-x64: | |
| runs-on: macos-14 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '24' | |
| cache: 'npm' | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: x86_64-apple-darwin | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: 'desktop/src-tauri' | |
| - name: Install main project dependencies | |
| run: npm install --legacy-peer-deps | |
| - name: Build frontend | |
| run: npm run build | |
| - name: Build server (TypeScript) | |
| run: npx tsc --project tsconfig.server.json | |
| - name: Copy OpenAPI spec | |
| run: | | |
| mkdir -p dist/server/routes/v1 | |
| cp src/server/routes/v1/openapi.yaml dist/server/routes/v1/ | |
| - name: Install desktop dependencies | |
| working-directory: desktop | |
| run: npm install | |
| - name: Prepare desktop resources | |
| run: | | |
| mkdir -p desktop/resources/dist | |
| mkdir -p desktop/resources/binaries | |
| # Copy server-side compiled code | |
| cp -r dist/server desktop/resources/dist/ | |
| cp -r dist/services desktop/resources/dist/ | |
| cp -r dist/utils desktop/resources/dist/ | |
| cp -r dist/types desktop/resources/dist/ | |
| cp -r dist/config desktop/resources/dist/ | |
| cp -r dist/constants desktop/resources/dist/ | |
| cp -r dist/contexts desktop/resources/dist/ | |
| # Copy frontend assets | |
| cp -r dist/assets desktop/resources/dist/ | |
| cp -r dist/locales desktop/resources/dist/ | |
| # Copy pmtiles if it exists (may be in public or dist) | |
| [ -d dist/pmtiles ] && cp -r dist/pmtiles desktop/resources/dist/ || true | |
| [ -d public/pmtiles ] && cp -r public/pmtiles desktop/resources/dist/ || true | |
| # Copy protobufs | |
| cp -r protobufs desktop/resources/dist/ | |
| # Copy individual files | |
| cp dist/index.html desktop/resources/dist/ | |
| cp dist/logo.png desktop/resources/dist/ | |
| cp dist/logo-original.png desktop/resources/dist/ | |
| cp dist/favicon.ico desktop/resources/dist/ | |
| cp dist/favicon-16x16.png desktop/resources/dist/ | |
| cp dist/favicon-32x32.png desktop/resources/dist/ | |
| cp dist/cors-detection.js desktop/resources/dist/ | |
| cp dist/cors-error.html desktop/resources/dist/ | |
| cp package.json desktop/resources/ | |
| cp package.json desktop/resources/dist/ | |
| # Copy node_modules (may take a while) | |
| cp -r node_modules desktop/resources/dist/ | |
| - name: Download Node.js binary for bundling (x64) | |
| run: | | |
| NODE_VERSION="v24.12.0" | |
| EXPECTED_SHA256="b82ea4c62fd08e250cab59d625e75d77cc5b0a3d60c6698ebee4545c88a169c5" | |
| curl -L -o node.tar.gz "https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-darwin-x64.tar.gz" | |
| echo "${EXPECTED_SHA256} node.tar.gz" | shasum -a 256 -c - | |
| tar -xzf node.tar.gz | |
| cp "node-${NODE_VERSION}-darwin-x64/bin/node" desktop/resources/binaries/node | |
| - name: Run Rust linting | |
| working-directory: desktop/src-tauri | |
| run: cargo clippy --target x86_64-apple-darwin --all-targets --all-features -- -D warnings | |
| - name: Run Rust tests | |
| working-directory: desktop/src-tauri | |
| run: cargo test --verbose | |
| - name: Build Tauri app (debug, x64 cross-compile) | |
| working-directory: desktop | |
| run: npm run tauri:build -- --debug --target x86_64-apple-darwin --bundles app | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: meshmonitor-desktop-macos-x64-debug | |
| path: desktop/src-tauri/target/x86_64-apple-darwin/debug/bundle/ | |
| retention-days: 7 | |
| if-no-files-found: warn | |
| lint-rust: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy, rustfmt | |
| - name: Install system dependencies for Tauri | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libgtk-3-dev | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: 'desktop/src-tauri' | |
| - name: Check Rust formatting | |
| working-directory: desktop/src-tauri | |
| run: cargo fmt --all -- --check | |
| - name: Create placeholder files for Clippy | |
| run: | | |
| mkdir -p desktop/resources/dist/server | |
| mkdir -p desktop/resources/binaries | |
| touch desktop/resources/dist/server/.placeholder | |
| touch desktop/resources/binaries/.placeholder | |
| echo '{"name":"meshmonitor","version":"0.0.0"}' > desktop/resources/package.json | |
| - name: Run Clippy | |
| working-directory: desktop/src-tauri | |
| run: cargo clippy --all-targets --all-features -- -D warnings |