Security Health GitHub Action

The Security Recipes Health Check action turns this site’s guidance into a CI gate. It connects to the hosted Security Recipes MCP server for recipe context, evaluates bounded repository evidence with the model you choose, and reports every check — including the ones you have not enabled — in the job summary, so remaining coverage is always visible.

Quick start

name: Security health
on:
  pull_request:

jobs:
  security-health:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: stevologic/security-recipes.ai/actions/security-health@main
        with:
          provider: openai              # anthropic | openai | xai | ollama
          api-key: ${{ secrets.OPENAI_API_KEY }}

Each check is a boolean toggle grounded in a published recipe:

Toggle Default Grounded in
check-dependencies on Vulnerable dependencies
check-secrets on Secrets and data exposure audit
check-injection on Injection sink audit
check-supply-chain on Supply chain build integrity audit
check-authz off Authorization and tenant boundary audit
check-containers off Base image hygiene
check-owasp off OWASP Top 10 audit
check-cve-exposure off CVE intelligence intake gate
check-compliance off Compliance standards

Models

Select provider (Anthropic, OpenAI, Grok/xAI, or an Ollama-served model via base-url) and optionally model. When no model is set, the action queries the provider’s live model list and picks the lowest available model — for Ollama, the smallest installed model by size — so the default run stays cheap.

How verdicts work

  • Recipe context is fetched from https://security-recipes.ai/mcp (streamable-HTTP MCP) with an automatic fallback to the public api/recipes.json feed.
  • Evidence is bounded and deterministic: manifests, workflows, container files, and source excerpts, capped to a few dozen kilobytes per check.
  • The model must answer in strict JSON (pass / warn / fail plus findings); malformed replies degrade to warn, never to silence.
  • fail-on decides whether the job fails on fail (default), on warn, or never (report-only).

This repository runs the action on itself (workflow) in report-only mode: the deterministic build gate stays the required check, and the LLM verdicts surface loudly in every pull request summary.

An LLM check is a bounded review gate, not a proof of security. Keep the evaluation discipline and your required human review and CI gates in place.