Skip to main content

GitHub Action

AI-BOM provides an official GitHub Action for automated scanning in CI/CD pipelines. It handles Python setup, AI-BOM installation, scanning, and automatic SARIF upload to GitHub Code Scanning.

Quick start

name: AI-BOM Scan
on: [push, pull_request]
permissions:
security-events: write
contents: read

jobs:
ai-bom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Scan for AI components
uses: trusera/ai-bom@main
with:
format: sarif
output: ai-bom-results.sarif
fail-on: critical
scan-level: deep

Action inputs

InputDefaultDescription
formatsarifOutput format (sarif, cyclonedx, json, html, csv)
outputai-bom-results.sarifOutput file path
fail-onNoneFail the workflow if severity threshold is met (critical, high, medium, low)
scan-levelNoneSet to deep for AST-based analysis
target.Path to scan
policyNonePath to policy YAML file

Examples

SARIF upload to GitHub Code Scanning

This is the recommended setup. Scan results appear as annotations in pull requests and in the Security tab.

name: AI-BOM Scan
on: [push, pull_request]
permissions:
security-events: write
contents: read

jobs:
ai-bom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Scan for AI components
uses: trusera/ai-bom@main
with:
format: sarif
output: results.sarif
fail-on: critical

CycloneDX SBOM artifact

Generate a CycloneDX SBOM and upload it as a workflow artifact:

name: AI-BOM SBOM
on: [push]

jobs:
sbom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Generate AI SBOM
uses: trusera/ai-bom@main
with:
format: cyclonedx
output: ai-bom.cdx.json

- name: Upload SBOM artifact
uses: actions/upload-artifact@v4
with:
name: ai-bom-sbom
path: ai-bom.cdx.json

Policy gate

Use a policy file to enforce custom rules:

name: AI-BOM Policy Check
on: [pull_request]

jobs:
policy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check AI policy
uses: trusera/ai-bom@main
with:
policy: .ai-bom-policy.yml
fail-on: high

With a policy file:

# .ai-bom-policy.yml
max_critical: 0
max_high: 5
max_risk_score: 75
block_providers: []
block_flags:
- hardcoded_api_key
- hardcoded_credentials

Manual setup (without the action)

If you prefer to install AI-BOM manually:

name: AI-BOM Scan
on: [push, pull_request]

jobs:
ai-bom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install AI-BOM
run: pipx install ai-bom

- name: Scan for AI components
run: ai-bom scan . --fail-on critical --quiet -f sarif -o results.sarif

- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
if: always()

Required permissions

For SARIF upload to work, the workflow needs:

permissions:
security-events: write # Required for SARIF upload
contents: read # Required for checkout

PR comment integration

To post scan results as a PR comment:

- name: Scan and generate markdown
run: ai-bom scan . -f markdown -o scan-results.md --quiet

- name: Comment on PR
uses: marocchino/sticky-pull-request-comment@v2
with:
path: scan-results.md

Caching

Speed up scans by caching the AI-BOM installation:

- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ai-bom-${{ runner.os }}

- name: Install AI-BOM
run: pipx install ai-bom