# CI/CD Just Recipes # Generated by dev-system/ci - Dynamic template # Provides `just` recipes for running CI checks locally # Based on detected languages and enabled tools # Show CI help [doc("Show ci help")] help: @echo "CI/CD Just Recipes" @echo "" @echo "Main Commands:" @echo " just ci-full - Run all CI checks" @echo " just ci-fmt - Format code" @echo " just ci-lint - Run all linting checks" @echo " just ci-test - Run all tests" @echo " just ci-audit - Run security audits" @echo "" @echo "Language-Specific:" @echo " just ci-lint-rust - Lint Rust (clippy)" @echo " just ci-fmt-toml - Check TOML formatting" @echo " just ci-lint-toml - Lint TOML files (taplo)" @echo " just ci-lint-nickel - Type check Nickel" @echo " just ci-lint-markdown - Lint Markdown (markdownlint-cli2)" @echo " just ci-lint-prose - Lint prose (Vale)" @echo "" @echo "Other:" @echo " just ci-check-config-sync - Verify form/template parity" @echo " just ci-sbom - Generate SBOM" @echo " just ci-test-coverage - Run tests with coverage" @echo " just setup-hooks - Install pre-commit hooks" @echo " just hooks-run-all - Run pre-commit on all files" @echo " just clean - Clean build artifacts" # Run all CI checks ci-full: ci-lint-rust ci-fmt-toml ci-lint-toml ci-lint-nickel ci-lint-markdown ci-lint-prose ci-test ci-audit ci-check-config-sync @echo "โœ… All CI checks passed!" # ============================================================================== # Formatting Checks # ============================================================================== # Check Rust code formatting ci-fmt: @echo "๐Ÿ“ Checking Rust code formatting..." cargo fmt --all -- --check # Check TOML file formatting ci-fmt-toml: @echo "๐Ÿ“ Checking TOML formatting..." @command -v taplo >/dev/null || (echo "โŒ taplo not installed: cargo install taplo-cli"; exit 1) taplo format --check # Format all code fmt: @echo "๐ŸŽจ Formatting code..." cargo fmt --all just fmt-toml # Format TOML files fmt-toml: @echo "๐ŸŽจ Formatting TOML files..." @command -v taplo >/dev/null || (echo "โŒ taplo not installed: cargo install taplo-cli"; exit 1) taplo format # ============================================================================== # Linting # ============================================================================== # Run all linting checks ci-lint: ci-lint-rust ci-lint-toml ci-lint-nickel ci-lint-markdown ci-lint-prose ci-check-config-sync @echo "โœ… All lint checks passed!" # Lint Rust code ci-lint-rust: @echo "๐Ÿ” Linting Rust (clippy)..." cargo clippy --all-targets --all-features -- -D warnings # Lint TOML files ci-lint-toml: @echo "๐Ÿ” Linting TOML files..." @command -v taplo >/dev/null || (echo "โŒ taplo not installed: cargo install taplo-cli"; exit 1) taplo lint # Lint Nickel schemas ci-lint-nickel: #!/usr/bin/env bash echo "๐Ÿ” Type checking Nickel..." SCHEMAS=$(find . -name "*.ncl" -type f \ ! -path "./target/*" \ ! -path "./.git/*" \ ! -path "./node_modules/*" \ | head -20) if [ -z "$SCHEMAS" ]; then echo " โ„น๏ธ No Nickel schemas found" exit 0 fi export NICKEL_IMPORT_PATH="/Users/Akasha/Tools/dev-system/ci/schemas:/Users/Akasha/Tools/dev-system/ci/validators:/Users/Akasha/Tools/dev-system/ci/defaults:." for schema in $SCHEMAS; do echo " Checking: $schema" nickel typecheck "$schema" || exit 1 done echo " โœ“ All Nickel schemas valid" # Lint Markdown files ci-lint-markdown: @echo "๐Ÿ” Linting Markdown files..." @command -v markdownlint-cli2 >/dev/null || (echo "โŒ markdownlint-cli2 not installed: npm install markdownlint-cli2"; exit 1) markdownlint-cli2 "**/*.md" "#node_modules" "#.git" # Lint prose/documentation ci-lint-prose: @echo "๐Ÿ” Linting prose with Vale..." @command -v vale >/dev/null || (echo "โŒ vale not installed: brew install vale"; exit 1) vale sync vale . # ============================================================================== # Testing # ============================================================================== # Run all tests ci-test: @echo "๐Ÿงช Running tests..." cargo test --workspace --all-features # Run tests with coverage (requires cargo-llvm-cov) ci-test-coverage: @echo "๐Ÿ“Š Running tests with coverage..." cargo llvm-cov --all-features --lcov --output-path lcov.info # ============================================================================== # Security Auditing # ============================================================================== # Run all security audits ci-audit: ci-audit-rust @echo "โœ… All security audits passed!" # Audit Rust dependencies ci-audit-rust: @echo "๐Ÿ”’ Auditing Rust dependencies..." cargo audit cargo deny check licenses cargo deny check advisories # Assert reflection/forms/config.ncl and config.ncl.j2 have matching fields ci-check-config-sync: @echo "๐Ÿ” Checking config form/template sync..." nu install/check-config-sync.nu # Generate SBOM ci-sbom: @echo "๐Ÿ“ฆ Generating Software Bill of Materials..." cargo sbom > sbom.json @echo "โœ“ SBOM generated: sbom.json" # ============================================================================== # Documentation # ============================================================================== # Generate documentation docs: @echo "๐Ÿ“š Generating documentation..." cargo doc --no-deps --open # Check documentation ci-docs: @echo "๐Ÿ“š Checking documentation..." cargo doc --no-deps --document-private-items 2>&1 | grep -i "warning:" && exit 1 || true @echo "โœ“ Documentation check passed" # ============================================================================== # Pre-commit Setup # ============================================================================== # Install pre-commit hooks + ontoref git hooks (post-merge, post-checkout) setup-hooks: #!/usr/bin/env bash set -euo pipefail echo "Installing pre-commit hooks..." if command -v pre-commit &> /dev/null; then pre-commit install && pre-commit install --hook-type pre-push echo "โœ“ Pre-commit hooks installed" else echo "โŒ pre-commit not found. Install with: pip install pre-commit" exit 1 fi # ontoref operational hooks โ€” auto-detect mode on merge/checkout git_hooks_dir="$(git rev-parse --git-dir)/hooks" hook_body='#!/usr/bin/env bash'$'\n''# ontoref git hook โ€” mode auto-detection and ontology sync'$'\n''nu "$(git rev-parse --show-toplevel)/reflection/hooks/git-event.nu" "$1" 2>/dev/null || true' for hook in post-merge post-checkout; do printf '%s\n' "${hook_body}" > "${git_hooks_dir}/${hook}" chmod +x "${git_hooks_dir}/${hook}" echo "โœ“ ${hook} hook installed" done # Run pre-commit on all files hooks-run-all: @echo "๐Ÿช Running pre-commit on all files..." pre-commit run --all-files # ============================================================================== # Install # ============================================================================== # Build UnoCSS bundle for the daemon UI build-css: cd assets/css && pnpm install && pnpm run build # Build UnoCSS in watch mode (development) watch-css: cd assets/css && pnpm install && pnpm run watch # Build ontoref-daemon and install binary, assets, CLI wrapper, and bootstrapper install-daemon: build-css cargo build --release -p ontoref-daemon nu install/install.nu # ============================================================================== # Utility Commands # ============================================================================== # Clean build artifacts clean: @echo "๐Ÿงน Cleaning..." cargo clean rm -rf target/ rm -f sbom.json lcov.info