nsip 0.7.0

NSIP Search API client for nsipsearch.nsip.org/api
Documentation
---
name: SBOM Generation

# On-demand SBOM generation only. The authoritative, attested release SBOM is
# produced by release.yml's generate-sbom job on tag push; attaching here too
# would clobber that signed artifact and can break its provenance digest.
"on":
  workflow_dispatch:

permissions:
  contents: read

jobs:
  generate-sbom:
    name: Generate Software Bill of Materials
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        # v6.0.2
        uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10  # v6.0.3

      - name: Install Rust toolchain
        # master
        uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
        with:
          toolchain: stable

      - name: Install cargo-sbom
        # v2.67.18
        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
        # v4.6.2
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a  # v7.0.1
        with:
          name: ${{ env.SBOM_NAME }}
          path: ${{ env.SBOM_NAME }}
          retention-days: 90