---
name: SBOM Generation
"on":
workflow_dispatch:
permissions:
contents: read
jobs:
generate-sbom:
name: Generate Software Bill of Materials
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
with:
toolchain: stable
- name: Install cargo-sbom
uses: taiki-e/install-action@7a79fe8c3a13344501c80d99cae481c1c9085912
with:
tool: cargo-sbom
- name: Compute versioned SBOM name
run: |
set -euo pipefail
VERSION="$(cargo metadata --no-deps --format-version 1 \
| grep -o '"version":"[^"]*"' | head -n1 | cut -d'"' -f4)"
if [ -z "$VERSION" ]; then
echo "::error::could not determine package version from cargo metadata" >&2
exit 1
fi
echo "SBOM_NAME=nsip-${VERSION}-sbom-spdx.json" >> "$GITHUB_ENV"
- name: Generate SBOM (SPDX format)
run: |
cargo sbom --output-format spdx_json_2_3 > "${SBOM_NAME}"
- name: Upload SBOM artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with:
name: ${{ env.SBOM_NAME }}
path: ${{ env.SBOM_NAME }}
retention-days: 90