spm-cli 0.3.0

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

on:
  push:
    branches: [main]
  pull_request:
  schedule:
    # Run weekly on Mondays at 08:00 UTC (catches new advisories without code changes)
    - cron: "0 8 * * 1"

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:
  audit:
    name: cargo audit
    runs-on: ubuntu-latest
    timeout-minutes: 30
    # rustsec/audit-check writes check results and, on scheduled runs, opens
    # issues for new advisories. Declare the permissions explicitly so the job
    # behaves consistently regardless of the repo/org default GITHUB_TOKEN scope.
    permissions:
      checks: write
      contents: read
      issues: write
    steps:
      - uses: actions/checkout@v5
      - uses: rustsec/audit-check@v2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

  deny:
    name: cargo deny
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v5
      - uses: EmbarkStudios/cargo-deny-action@v2
        with:
          # The action's default Docker image ships an older Cargo that cannot
          # read the v4 Cargo.lock this repo commits. Update to a toolchain that
          # understands the current lockfile format before running cargo-deny.
          rust-version: stable