This repository was archived by the owner on Feb 12, 2026. It is now read-only.
chore(dev): release 1.19.0-beta.2 #290
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: CI | |
| on: | |
| pull_request: | |
| branches: [dev, main] | |
| push: | |
| branches: [dev, main] | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| lint-rust: | |
| name: Rust Lint & Format | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Create dummy binaries | |
| run: | | |
| mkdir -p apps/tauri/binaries | |
| touch apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| touch apps/tauri/binaries/rclone-x86_64-pc-windows-msvc.exe | |
| - name: Install Linux dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: apps/web/package.json | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "pnpm" | |
| cache-dependency-path: apps/web/pnpm-lock.yaml | |
| - name: Install frontend dependencies | |
| working-directory: apps/web | |
| run: pnpm install --frozen-lockfile | |
| - name: Build frontend | |
| working-directory: apps/web | |
| run: pnpm build | |
| - name: Cache cargo | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| - name: Run clippy | |
| run: cargo clippy --workspace --all-targets -- -D warnings | |
| - name: Install cargo-audit | |
| run: cargo install cargo-audit | |
| - name: Security audit | |
| run: cargo audit | |
| lint-frontend: | |
| name: Frontend Lint & Type Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: apps/web/package.json | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "pnpm" | |
| cache-dependency-path: apps/web/pnpm-lock.yaml | |
| - name: Install dependencies | |
| working-directory: apps/web | |
| run: pnpm install --frozen-lockfile | |
| - name: Run type checking | |
| working-directory: apps/web | |
| run: pnpm typecheck | |
| - name: Run linting | |
| working-directory: apps/web | |
| run: pnpm lint | |
| test: | |
| name: Test | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Create dummy binaries (Linux) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| mkdir -p apps/tauri/binaries | |
| touch apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| touch apps/tauri/binaries/rclone-x86_64-pc-windows-msvc.exe | |
| - name: Create dummy binaries (Windows) | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: | | |
| New-Item -ItemType Directory -Force -Path apps/tauri/binaries | |
| New-Item -ItemType File -Force -Path apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| New-Item -ItemType File -Force -Path apps/tauri/binaries/rclone-x86_64-pc-windows-msvc.exe | |
| - name: Create dummy binaries (macOS) | |
| if: matrix.os == 'macos-latest' | |
| run: | | |
| mkdir -p apps/tauri/binaries | |
| touch apps/tauri/binaries/rclone-aarch64-apple-darwin | |
| touch apps/tauri/binaries/rclone-x86_64-apple-darwin | |
| - name: Install Linux dependencies | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: apps/web/package.json | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "pnpm" | |
| cache-dependency-path: apps/web/pnpm-lock.yaml | |
| - name: Install frontend dependencies | |
| working-directory: apps/web | |
| run: pnpm install --frozen-lockfile | |
| - name: Build frontend | |
| working-directory: apps/web | |
| run: pnpm build | |
| - name: Cache cargo | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: ${{ matrix.os }} | |
| - name: Run tests | |
| run: cargo test --workspace | |
| build: | |
| name: Build Check | |
| runs-on: ${{ matrix.os }} | |
| needs: [lint-rust, lint-frontend, test] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Install Linux dependencies | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: apps/web/package.json | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "pnpm" | |
| cache-dependency-path: apps/web/pnpm-lock.yaml | |
| - name: Install frontend dependencies | |
| working-directory: apps/web | |
| run: pnpm install --frozen-lockfile | |
| - name: Build frontend | |
| working-directory: apps/web | |
| run: pnpm build | |
| - name: Cache cargo | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: ${{ matrix.os }}-build | |
| - name: Download Rclone (Windows) | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: | | |
| New-Item -ItemType Directory -Force -Path apps/tauri/binaries | |
| Invoke-WebRequest -Uri "https://downloads.rclone.org/rclone-current-windows-amd64.zip" -OutFile "rclone.zip" | |
| Expand-Archive -Path "rclone.zip" -DestinationPath "rclone-temp" | |
| $rcloneDir = Get-ChildItem -Path "rclone-temp" -Directory | Select-Object -First 1 | |
| Copy-Item -Path "$($rcloneDir.FullName)/rclone.exe" -Destination "apps/tauri/binaries/rclone-x86_64-pc-windows-msvc.exe" | |
| - name: Download Rclone (Linux) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| mkdir -p apps/tauri/binaries | |
| curl -LO https://downloads.rclone.org/rclone-current-linux-amd64.zip | |
| unzip rclone-current-linux-amd64.zip | |
| cp rclone-*/rclone apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| chmod +x apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| - name: Download Rclone (macOS) | |
| if: matrix.os == 'macos-latest' | |
| run: | | |
| mkdir -p apps/tauri/binaries | |
| curl -LO https://downloads.rclone.org/rclone-current-osx-arm64.zip | |
| unzip rclone-current-osx-arm64.zip | |
| cp rclone-*/rclone apps/tauri/binaries/rclone-aarch64-apple-darwin | |
| chmod +x apps/tauri/binaries/rclone-aarch64-apple-darwin | |
| - name: Build Rust (check only) | |
| run: cargo check --workspace | |
| dependency-review: | |
| name: Dependency Review | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Dependency Review | |
| uses: actions/dependency-review-action@v4 | |
| with: | |
| fail-on-severity: moderate | |
| comment-summary-in-pr: always | |
| # Multi-Machine Sync Test - Simulates 2 machines syncing to same vault | |
| sync-test-a: | |
| name: Sync Test (Machine A - Ubuntu) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Create dummy binaries | |
| run: | | |
| mkdir -p apps/tauri/binaries | |
| touch apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| touch apps/tauri/binaries/rclone-x86_64-pc-windows-msvc.exe | |
| - name: Download crsqlite extension | |
| run: | | |
| curl -LO https://github.com/vlcn-io/cr-sqlite/releases/download/v0.16.3/crsqlite-linux-x86_64.zip | |
| unzip crsqlite-linux-x86_64.zip | |
| cp crsqlite.so apps/tauri/binaries/crsqlite-x86_64-unknown-linux-gnu.so | |
| chmod +x apps/tauri/binaries/crsqlite-x86_64-unknown-linux-gnu.so | |
| - name: Install Linux dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: apps/web/package.json | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "pnpm" | |
| cache-dependency-path: apps/web/pnpm-lock.yaml | |
| - name: Install frontend dependencies | |
| working-directory: apps/web | |
| run: pnpm install --frozen-lockfile | |
| - name: Build frontend | |
| working-directory: apps/web | |
| run: pnpm build | |
| - name: Cache cargo | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: sync-test-ubuntu | |
| - name: Run Machine A test (create vault) | |
| run: cargo test --package echovault-core --features ci-sync-test sync_test_machine_a_create -- --ignored --nocapture | |
| - name: Upload vault artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: vault-from-machine-a | |
| path: vault/ | |
| retention-days: 1 | |
| sync-test-b: | |
| name: Sync Test (Machine B - Windows) | |
| needs: sync-test-a | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Create dummy binaries | |
| shell: pwsh | |
| run: | | |
| New-Item -ItemType Directory -Force -Path apps/tauri/binaries | |
| New-Item -ItemType File -Force -Path apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| New-Item -ItemType File -Force -Path apps/tauri/binaries/rclone-x86_64-pc-windows-msvc.exe | |
| - name: Download crsqlite extension | |
| shell: pwsh | |
| run: | | |
| Invoke-WebRequest -Uri "https://github.com/vlcn-io/cr-sqlite/releases/download/v0.16.3/crsqlite-win-x86_64.zip" -OutFile "crsqlite.zip" | |
| Expand-Archive -Path "crsqlite.zip" -DestinationPath "." | |
| Copy-Item -Path "crsqlite.dll" -Destination "apps/tauri/binaries/crsqlite-x86_64-pc-windows-msvc.dll" | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: apps/web/package.json | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "pnpm" | |
| cache-dependency-path: apps/web/pnpm-lock.yaml | |
| - name: Install frontend dependencies | |
| working-directory: apps/web | |
| run: pnpm install --frozen-lockfile | |
| - name: Build frontend | |
| working-directory: apps/web | |
| run: pnpm build | |
| - name: Cache cargo | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: sync-test-windows | |
| - name: Download vault from Machine A | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: vault-from-machine-a | |
| path: vault/ | |
| - name: Run Machine B test (update vault) | |
| run: cargo test --package echovault-core --features ci-sync-test sync_test_machine_b_update -- --ignored --nocapture | |
| - name: Upload modified vault | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: vault-from-machine-b | |
| path: vault/ | |
| retention-days: 1 | |
| sync-test-verify: | |
| name: Sync Test (Verify Resolution) | |
| needs: sync-test-b | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Create dummy binaries | |
| run: | | |
| mkdir -p apps/tauri/binaries | |
| touch apps/tauri/binaries/rclone-x86_64-unknown-linux-gnu | |
| touch apps/tauri/binaries/rclone-x86_64-pc-windows-msvc.exe | |
| - name: Download crsqlite extension | |
| run: | | |
| curl -LO https://github.com/vlcn-io/cr-sqlite/releases/download/v0.16.3/crsqlite-linux-x86_64.zip | |
| unzip crsqlite-linux-x86_64.zip | |
| cp crsqlite.so apps/tauri/binaries/crsqlite-x86_64-unknown-linux-gnu.so | |
| chmod +x apps/tauri/binaries/crsqlite-x86_64-unknown-linux-gnu.so | |
| - name: Install Linux dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: apps/web/package.json | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "pnpm" | |
| cache-dependency-path: apps/web/pnpm-lock.yaml | |
| - name: Install frontend dependencies | |
| working-directory: apps/web | |
| run: pnpm install --frozen-lockfile | |
| - name: Build frontend | |
| working-directory: apps/web | |
| run: pnpm build | |
| - name: Cache cargo | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: sync-test-verify | |
| - name: Download vault from Machine B | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: vault-from-machine-b | |
| path: vault/ | |
| - name: Run verification test | |
| run: cargo test --package echovault-core --features ci-sync-test sync_test_verify_resolution -- --ignored --nocapture |