zenops 0.20.0

Declarative system configuration management for shell config and dotfiles.
# Inner loop: fast sanity check before commits.
default: fmt-check clippy

# Apply formatters and clippy autofixes. Mutates the working tree.
fix:
    cargo fmt --all
    cargo clippy --fix --workspace --allow-dirty --allow-staged --all-targets --all-features

# --- atomic recipes (read-only, composable) ---

fmt-check:
    cargo fmt --all -- --check

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

test FILTER='':
    cargo test --locked --workspace --all-targets --all-features {{FILTER}}
    cargo test --locked --workspace --doc --all-features {{FILTER}}

release-build:
    cargo build --locked --workspace --all-features --release

doc:
    RUSTDOCFLAGS="-D warnings" cargo doc --locked --workspace --all-features --no-deps

package:
    cargo package --locked --workspace --allow-dirty --no-verify

# Refresh vendored JS deps (Alpine, MiniSearch) under docs/book/theme/vendor/.
# Overwrites committed copies; run periodically and review the diff before
# pushing. Not part of the routine docs build.
vendor-js-update:
    mkdir -p docs/book/theme/vendor
    curl -fL --output docs/book/theme/vendor/alpine.min.js https://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.js
    curl -fL --output docs/book/theme/vendor/minisearch.min.js https://cdn.jsdelivr.net/npm/minisearch@7/dist/umd/index.min.js

# Generate the schema snapshot + CLI reference and build the mdBook site.
# Outputs to docs/book/book/ (gitignored). Requires mdbook on PATH.
docs-build:
    @command -v mdbook >/dev/null 2>&1 || { echo "ERROR: mdbook required (cargo install mdbook)" >&2; exit 1; }
    mkdir -p docs/book/theme/assets
    cargo run --quiet -- schema > docs/book/theme/assets/schema-snapshot.json
    printf 'window.ZENOPS_SCHEMA = ' > docs/book/theme/assets/schema-snapshot.js
    cat docs/book/theme/assets/schema-snapshot.json >> docs/book/theme/assets/schema-snapshot.js
    printf ';\n' >> docs/book/theme/assets/schema-snapshot.js
    cargo run --quiet -- cli-markdown > docs/book/src/reference/cli.md
    mdbook build docs/book

# Cross-platform integration matrix. Docker required; slow; opt-in.
e2e:
    @command -v docker >/dev/null 2>&1 || { echo "ERROR: docker required (install Docker or start colima)" >&2; exit 1; }
    @docker info >/dev/null 2>&1 || { echo "ERROR: docker daemon not reachable (start colima or your Docker engine)" >&2; exit 1; }
    @command -v python3 >/dev/null 2>&1 || { echo "ERROR: python3 required" >&2; exit 1; }
    python3 tests/cross-platform/run.py

# --- composites ---

# PR-time gate. The GitHub Action runs the same atomic recipes.
ci: fmt-check clippy test doc

# Full release gate. Invoked by the bump-version skill.
prerelease: ci release-build package e2e