diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml new file mode 100644 index 0000000..84e5e36 --- /dev/null +++ b/.forgejo/workflows/ci.yml @@ -0,0 +1,41 @@ +# Forgejo Actions CI for Colibri. +# +# Gates every push to main and every pull request on the same checks agents are +# expected to run locally (./scripts/ci-checks.sh): rustfmt, clippy, workspace +# tests, and the markdown format gate. This is what would have caught the +# build-break that PR #23 had to fix. +# +# Requirements (verify on the Forgejo instance): +# - A registered Forgejo Actions runner whose labels include `ubuntu-latest` +# (adjust `runs-on` below to match your runner's label if different). +# - The runner can pull the `rust` and `node` container images and reach +# crates.io / npm for dependencies. +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + rust: + runs-on: ubuntu-latest + container: rust:1.95 + steps: + - uses: actions/checkout@v4 + - name: Ensure rustfmt + clippy are present + run: rustup component add rustfmt clippy + - name: cargo fmt --check + run: cargo fmt --check + - name: cargo clippy (warnings = errors) + run: cargo clippy --workspace --all-targets -- -D warnings + - name: cargo test --workspace + run: cargo test --workspace + + markdown: + runs-on: ubuntu-latest + container: node:20 + steps: + - uses: actions/checkout@v4 + - name: Markdown format gate + run: ./scripts/check-format.sh diff --git a/crates/colibri-client/src/bin/colibri.rs b/crates/colibri-client/src/bin/colibri.rs index 94b91d9..2f12a4f 100644 --- a/crates/colibri-client/src/bin/colibri.rs +++ b/crates/colibri-client/src/bin/colibri.rs @@ -348,7 +348,12 @@ fn parse_skill_options(args: &[String]) -> Result<(Option, Option return Err(format!("unknown register-skill option: {other}\n\n{}", usage())), + other => { + return Err(format!( + "unknown register-skill option: {other}\n\n{}", + usage() + )) + } } } Ok((description, category)) diff --git a/crates/colibri-contracts/tests/golden.rs b/crates/colibri-contracts/tests/golden.rs index 919dd79..6fd6b82 100644 --- a/crates/colibri-contracts/tests/golden.rs +++ b/crates/colibri-contracts/tests/golden.rs @@ -21,8 +21,7 @@ const OSA_WATCHDOG_STATUS: &str = const OSA_WATCHDOG_RUN: &str = include_str!("../../../manifests/2026-05-26-osa-watchdog-host-status-run-manifest.json"); const DEBBY_INV: &str = include_str!("../../../manifests/2026-05-26-debby-runtime-inventory.json"); -const USB_INV: &str = - include_str!("../../../manifests/2026-06-04-usb-runtime-inventory.json"); +const USB_INV: &str = include_str!("../../../manifests/2026-06-04-usb-runtime-inventory.json"); fn roundtrip_eq(value: &T) where diff --git a/scripts/ci-checks.sh b/scripts/ci-checks.sh new file mode 100755 index 0000000..bf33164 --- /dev/null +++ b/scripts/ci-checks.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# Run every repository gate, the same set CI runs. Use this before pushing. +# +# ./scripts/ci-checks.sh +# +# Gates: rustfmt, clippy (warnings = errors), workspace tests, markdown format. + +set -eu + +ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" +cd "$ROOT_DIR" + +echo "==> cargo fmt --check" +cargo fmt --check + +echo "==> cargo clippy --workspace --all-targets -- -D warnings" +cargo clippy --workspace --all-targets -- -D warnings + +echo "==> cargo test --workspace" +cargo test --workspace + +echo "==> markdown format gate" +./scripts/check-format.sh + +echo "All checks passed."