name: ci on: push: pull_request: env: CARGO_TERM_COLOR: always jobs: secret-scan: name: secret scan runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: key / seed material run: ./tools/secret-scan.sh - name: gitleaks (full history) run: | curl -sSfL https://github.com/gitleaks/gitleaks/releases/download/v8.18.4/gitleaks_8.18.4_linux_x64.tar.gz \ | tar -xz gitleaks sudo mv gitleaks /usr/local/bin/ gitleaks detect --no-banner --redact --source . openapi-drift: name: openapi drift gate runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - name: Regenerate the spec; fail if it drifts from committed openapi.json run: | cargo run --quiet --bin gen_openapi > /tmp/openapi.json diff openapi.json /tmp/openapi.json rust: name: fmt / clippy / build / test / doc-test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - uses: Swatinem/rust-cache@v2 - run: cargo fmt --all -- --check - run: cargo clippy --all-targets -- -D warnings - run: cargo build --all-targets --locked - run: cargo test --locked - run: cargo test --doc integration: name: integration (postgres) runs-on: ubuntu-latest services: postgres: image: postgres:16 env: POSTGRES_USER: smirk POSTGRES_PASSWORD: smirk POSTGRES_DB: smirk_test ports: ['5432:5432'] options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: # Fundless L1 harness: a throwaway DB. The harness sets its own non-secret # test JWT/peppers internally. TEST_DATABASE_URL: postgres://smirk:smirk@localhost:5432/smirk_test steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - run: cargo test --locked --test auth_flow --test db_queries supply-chain: name: cargo-deny runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: EmbarkStudios/cargo-deny-action@v2