spm-cli 0.2.0

Skill package manager — declare AI skills in ai.json, materialize them for Claude/Copilot without polluting your repo.
name: ci

on:
  push:
    branches: [main]
  pull_request:
  merge_group:
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always

# Cancel superseded runs for the same branch/PR to save runner minutes.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  # Enforces Conventional Commits on the PR's commit messages via Camunda's
  # reusable workflow. PR-only: it reads github.event.pull_request.* to
  # determine the commit range, so it can only run on pull_request events.
  commitlint:
    if: github.event_name == 'pull_request'
    uses: camunda/sdk-infra/.github/workflows/sdk-commitlint.yml@v1

  test:
    name: test (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy, rustfmt
      - uses: Swatinem/rust-cache@v2
      - name: fmt
        run: cargo fmt --all --check
      - name: clippy
        run: cargo clippy --all-targets -- -D warnings
      - name: test
        run: cargo test --all

  # Guards the `rust-version` (MSRV) we publish in Cargo.toml: the matrix above
  # only exercises `stable`, so without this a newer-than-1.97 API could slip in
  # and break `cargo install` for users on the declared minimum toolchain.
  msrv:
    name: msrv (1.97)
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.97
      - uses: Swatinem/rust-cache@v2
      - name: check
        run: cargo check --locked --all-targets