Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions .github/workflows/sbom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Generate SBOM

# This workflow uses cargo-cyclonedx and publishes an sbom.json artifact.
# It runs on manual trigger or when Cargo files change on main branch,
# and creates a PR with the updated SBOM.
# Internal documentation: go/sbom-scope

on:
workflow_dispatch: {}
push:
branches: ['main']
paths:
- 'Cargo.toml'
- 'Cargo.lock'
- 'driver/Cargo.toml'
- 'macros/Cargo.toml'

permissions:
contents: write
pull-requests: write

jobs:
sbom:
name: Generate SBOM and Create PR
runs-on: ubuntu-latest
concurrency:
group: sbom-${{ github.ref }}
cancel-in-progress: false

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Set up Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable

- name: Install cargo-cyclonedx
run: cargo install cargo-cyclonedx

- name: Generate SBOM
run: |
cargo cyclonedx --manifest-path driver/Cargo.toml --spec-version 1.5 -vv --format json --override-filename sbom
cp driver/sbom.json sbom.json
# Clean up workspace member SBOMs - we only want the driver SBOM
rm -f driver/sbom.json macros/sbom.json benchmarks/sbom.json etc/update_version/sbom.json

- name: Download CycloneDX CLI
run: |
curl -L -s -o /tmp/cyclonedx "https://github.com/CycloneDX/cyclonedx-cli/releases/download/v0.29.1/cyclonedx-linux-x64"
chmod +x /tmp/cyclonedx

- name: Validate SBOM
run: /tmp/cyclonedx validate --input-file sbom.json --fail-on-errors

- name: Upload SBOM artifact
uses: actions/upload-artifact@v4
with:
name: sbom
path: sbom.json
if-no-files-found: error

- name: Create Pull Request
uses: peter-evans/create-pull-request@b4733b9419fd47bbfa1807b15627e17cd70b5b22
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: 'chore: Update SBOM after dependency changes'
branch: auto-update-sbom-${{ github.run_id }}
delete-branch: true
title: 'chore: Update SBOM'
body: |
## Automated SBOM Update

This PR was automatically generated because dependency manifest files changed.

### Changes
- Updated `sbom.json` to reflect current dependencies

### Verification
The SBOM was generated using cargo-cyclonedx with the current Rust workspace.

### Triggered by
- Commit: ${{ github.sha }}
- Workflow run: ${{ github.run_id }}

---
_This PR was created automatically by the [SBOM workflow](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})_
labels: |
sbom
automated
dependencies