Skip to content

chore: release v3.10.0 #297

chore: release v3.10.0

chore: release v3.10.0 #297

Workflow file for this run

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