1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
default: all

fmt:
    cargo fmt --all

check:
    cargo check --workspace --all-features

clippy:
    cargo clippy --workspace --all-features -- -D warnings

coverage:
    ./bin/coverage

# The deploy path against real Fastmail: session open, full import,
# one poll. Read-only; the token is read from 1Password, so `op` must
# be installed and signed in.
smoke:
	cargo test --test smoke -- --ignored

mutants:
    #!/usr/bin/env bash
    set -uo pipefail
    cargo mutants --timeout-multiplier 3 -j4
    rc=$?
    # 0 = all caught, 3 = timeouts (infinite loops from mutants, still caught).
    if [ "$rc" -eq 0 ] || [ "$rc" -eq 3 ]; then
        exit 0
    fi
    exit "$rc"

all: fmt clippy coverage

# Serve the fixture-backed UI without Tailscale on http://127.0.0.1:3000,
# restarting on changes.
dev:
    { fd -t f . src assets; echo Cargo.toml docket.kdl; } | entr -r cargo run --features dev

install:
    cargo install --locked --path .