Skip to content

feat(dev): add Justfile and pre-commit hooks #201

feat(dev): add Justfile and pre-commit hooks

feat(dev): add Justfile and pre-commit hooks #201

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
# Check that embedded files are in sync before other jobs
# This catches packaging issues early (before they break cargo install)
check-embedded-files:
name: Check embedded files
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check embedded files are in sync
run: ./scripts/sync-embedded-files.sh check
test:
name: Test
runs-on: ubuntu-latest
needs: check-embedded-files
steps:
- uses: actions/checkout@v4
- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libdbus-1-dev pkg-config
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Run tests
run: cargo test
clippy:
name: Clippy
runs-on: ubuntu-latest
needs: check-embedded-files
steps:
- uses: actions/checkout@v4
- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libdbus-1-dev pkg-config
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings
fmt:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libdbus-1-dev pkg-config
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Check formatting
run: cargo fmt --all -- --check
# Run mock E2E tests (cost-free, deterministic cassette replay)
# Note: Tests may fail but job succeeds to avoid blocking CI (report has details)
e2e-mock:
name: E2E Tests (Mock)
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libdbus-1-dev pkg-config
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build ralph and ralph-e2e
run: cargo build --release -p ralph-cli -p ralph-e2e
- name: Run mock E2E tests
run: ./target/release/ralph-e2e --mock --skip-analysis || true
- name: Upload E2E report
if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-report
path: .e2e-tests/report.md
retention-days: 30
web-tests:
name: Web Tests
runs-on: ubuntu-latest
needs: check-embedded-files
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm ci
- run: npm run build
- run: npm run test:server
- run: npm run test -w @ralph-web/dashboard
# Verify the crate can be packaged (catches include_str! issues)
# Only runs on PRs - main pushes are either merges (already verified) or
# version bumps (Release workflow handles publishing with correct deps)
package-check:
name: Package check
runs-on: ubuntu-latest
needs: [check-embedded-files, test]
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Check ralph-cli packages correctly
run: |
# This will fail if include_str! references files outside the crate
# Use --list to validate without resolving crates.io dependencies
cargo package -p ralph-cli --allow-dirty --list > /dev/null
echo "Package check passed - all embedded files are included"