Skip to content
This repository was archived by the owner on Feb 12, 2026. It is now read-only.

chore(main): release 1.18.1 #286

chore(main): release 1.18.1

chore(main): release 1.18.1 #286

Workflow file for this run

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