Skip to content

chore(deps): bump jsdom from 29.1.1 to 30.0.1 #573

chore(deps): bump jsdom from 29.1.1 to 30.0.1

chore(deps): bump jsdom from 29.1.1 to 30.0.1 #573

Workflow file for this run

name: CI
on:
push:
branches: [main, master]
pull_request:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
frontend:
name: Frontend
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- name: Setup Node
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 24
cache: pnpm
- name: Install dependencies
id: install
run: pnpm install --frozen-lockfile
- name: Audit dependencies
run: pnpm audit --audit-level=high --ignore-registry-errors
- name: Typecheck
run: pnpm typecheck
- name: Format check
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
run: pnpm format:check
- name: Lint
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
run: pnpm lint
- name: knip (unused exports / dependencies)
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
run: pnpm knip --no-progress
- name: Frontend tests with coverage
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
run: pnpm vitest run --coverage --reporter=junit --outputFile=test-results.junit.xml
- name: Upload test results to Codecov
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
- name: Upload coverage report
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-report
path: coverage/
retention-days: 14
- name: Upload coverage to Codecov
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: coverage
flags: frontend
fail_ci_if_error: false
- name: Frontend build
if: ${{ !cancelled() && steps.install.outcome == 'success' }}
run: pnpm exec vite build
rust-fmt-check:
name: Rust Format
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Rust
uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable
with:
toolchain: 1.96.0
components: rustfmt
- name: Rust format check
run: cargo fmt --manifest-path src-tauri/Cargo.toml --check
rust-test:
name: Rust Test
runs-on: macos-14
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Node
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 24
- name: Setup Rust
uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable
with:
toolchain: 1.96.0
- name: Cache Cargo registry
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
key: ${{ runner.os }}-cargo-${{ hashFiles('src-tauri/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Cache sidecar downloads
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: src-tauri/binaries/.cache
key: ${{ runner.os }}-uv-sidecars-${{ hashFiles('scripts/prepare-sidecars.mjs') }}
- name: Prepare sidecars
run: node scripts/prepare-sidecars.mjs
- name: Rust compile check
run: cargo check --manifest-path src-tauri/Cargo.toml
- name: Clippy
run: cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings
- name: Rust audit
run: |
cargo install cargo-audit --locked
cd src-tauri && cargo audit
- name: Rust tests
run: cargo test -q --manifest-path src-tauri/Cargo.toml
cargo-deny:
name: Cargo Deny
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: cargo-deny
uses: EmbarkStudios/cargo-deny-action@3c6349835b2b7b196a839186cb8b78e02f7b5f25 # v2.1.1
with:
manifest-path: src-tauri/Cargo.toml
pr-lint:
name: PR Title
runs-on: ubuntu-slim
if: github.event_name == 'pull_request'
timeout-minutes: 5
steps:
- name: Check PR title
uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
workflow-lint:
name: Workflow lint
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
security-events: write # Needed by zizmor-action to upload SARIF results.
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: actionlint
uses: reviewdog/action-actionlint@dbe5299849118fd6f099ba563d263d770955a64a # v1.73.2
with:
actionlint_flags: ""
- name: zizmor
uses: zizmorcore/zizmor-action@3dc1ecc9bcb9e94e9b2c709687979e1298497054 # v0.6.2
with:
persona: pedantic
min-severity: low
validate:
name: Validate
runs-on: ubuntu-slim
needs: [frontend, rust-fmt-check, rust-test, cargo-deny, pr-lint, workflow-lint]
if: ${{ always() }}
timeout-minutes: 5
steps:
- name: Check required jobs
run: |
echo "frontend: ${{ needs.frontend.result }}"
echo "rust-fmt-check: ${{ needs['rust-fmt-check'].result }}"
echo "rust-test: ${{ needs['rust-test'].result }}"
echo "cargo-deny: ${{ needs['cargo-deny'].result }}"
echo "pr-lint: ${{ needs['pr-lint'].result }}"
echo "workflow-lint: ${{ needs['workflow-lint'].result }}"
test "${{ needs.frontend.result }}" = "success"
test "${{ needs['rust-fmt-check'].result }}" = "success"
test "${{ needs['rust-test'].result }}" = "success"
test "${{ needs['cargo-deny'].result }}" = "success"
test "${{ needs['workflow-lint'].result }}" = "success"
# pr-lint only runs on PRs; skip on push
if [ "${{ needs.pr-lint.result }}" != "skipped" ]; then
test "${{ needs.pr-lint.result }}" = "success"
fi