Use this action to generator and/or upload a generated SBOM to your Manifest account. Requires a Manifest API key.
This action will also install all required dependencies including generators, signers etc.
The examples/generate.yml file shows how you can use this action to generate an SBOM in your workflow.
To use this template, copy the contents of the file into your workflow directory .github/workflows/ and then modify the template to match your needs.
By default, if the template is left unmodified, then an SBOM will be generated using syft as the generator and CycloneDX as the format.
The examples/publish.yml file shows how you can use this action to transmit an SBOM to your Manifest account. This template should only be used if some other third-party tool is generating the SBOM for you, and you want to transmit it to your Manifest account.
Note: the SBOM generation must occur prior to the SBOM upload.
The examples/generate-and-publish.yml file shows how you can use this action to generate and transmit an SBOM to your Manifest account.
Note that any empty value provided to the input will result in a using the default values. Also note, that for some values, if they already exists in the generated SBOM, the values from the SBOM will be used.
REQUIRED FOR UPLOADING {STRING}
Your Manifest API key. Generate this key in the Manifest Cyber app (https://app.manifestcyber.com), and then store it in your Github repository secrets.
Alternative parameter name: apikey
REQUIRED FOR UPLOADING BUT NOT GENERATING {STRING}
The path of the SBOM to upload. This is useful if you are generating the SBOM in a different step (not using this action), and want to upload it (using this action) in a later step.
Accepts CycloneDX or SPDX SBOMs in JSON (recommended), XML, or SPDX tag:value format.
Alternative parameter names: sbomFilePath
Optional
{STRING}
Sets the root path of the source code to generate the SBOM for. This is needed if you are using this action to generate an SBOM and use a non-default checkout path.
Optional
{STRING}
Sets the relationship of the SBOM. Must be either "first" or "third" with most cases being "first" for SBOMs generated using the GitHub action.
Default: first.
Optional
{STRING}
The source of the uploaded SBOM. This will be visible to you in the Manifest app and is intended for tracking/analytics purposes. We generally recommend not to change this, but you do you :)
Accepts any string. Default: github-action.
Optional
{STRING}
The SBOM name, defaults to repository name.
Alternative parameter names: bomName, name
Optional
{STRING}
The SBOM version, defaults to environment variable tag, or commit hash.
Alternative parameter names: bomVersion, version
Optional
{STRING}
The SBOM output format, this is needed when passing spdx-json SBOM files.
Default: cyclonedx-json.
Alternative parameter names: sbom-output, bomOutput
Optional
{STRING}
The SBOM generator, defaults to syft. Supports: syft | trivy | cdxgen | sigstore-bom | spdx-sbom-generator | docker-sbom.
Default: syft.
Alternative parameter names: bomGenerator, generator
Optional
{STRING}
Specific SBOM generator version to install.
Default: latest.
Optional
{STRING}
Manifest-provided presets for generators to choose from.
Options: none|recommended
Default: recommended.
Optional
{STRING}
Path to custom config file for generator, if supported.
Optional
{STRING}
Boolean to publish the SBOM to the Manifest Cyber platform. Expects either true or false. When unset, the action will upload if an API Key is present.
Alternative parameter names: bomPublish, publish
[DEPREACTED: use asset-labels instead]
Optional
{STRING}
A comma separated list of labels to apply to the SBOM.
Alternative parameter names: bomLabels, asset-labels
Optional
{STRING}
A comma separated list of labels to apply to the SBOM product.
Optional
{STRING}
The product ID to associate the SBOM with.
Optional
{STRING}
A comma separated list of labels to apply to the SBOM product, will only be applied if the product-id is set.
Optional
{STRING}
ADVANCED USERS: Flags the Manifest CLI passes through to the generator.
Alternative parameter names: bomGeneratorFlags, generator-flags
Optional
{STRING}
Boolean to upload the SBOM as a GitHub artifact. Expects either true or false.
Default: true.
Alternative parameter names: bomArtifact
Optional
{STRING}
Custom name for the GitHub artifact when uploading the SBOM. This allows you to specify a unique name to prevent artifact name collisions in your workflow.
Default: sbom.
Alternative parameter names: bomArtifactName
Optional
{STRING}
Use a specific Manifest CLI version.
Default: latest.
Alternative parameter names: manifest-cli-version
Optional
{STRING}
The URI of the Manifest API. This is useful if you need to use a specific API endpoint.
Optional
{STRING}
set the SBOM as active. Expects either true or false. If no value is provided, the SBOM will default to the organization's default behavior, which is typically true.
ECOSYSTEMS
Optional
{NONE|ECOSYSTEMS}
Optionally enrich the SBOM with additional data. Expects either NONE or ECOSYSTEMS. If no value is provided, the SBOM will default to the organization's default behavior.
Optional
{STRING}
The action fetches necessary Github releases from the Github Releases API. If you run into rate limit warnings from Github, the action can use a Github API token with authenticating (which may increase your rate limit beyond public limits). See usage examples for more.
- uses: actions/checkout@v2
- name: Generate SBOM
    uses: manifest-cyber/manifest-github-action@main
    id: generate
  with:
    apiKey: ${{ secrets.MANIFEST_API_KEY }}
In this example, all depedencies would be installed by the action, generating an SBOM from source code and publishing to Manifest platform.
- name: Build SBOM
  uses: CycloneDX/gh-node-module-generatebom@master
  with:
    path: ./
    output: ./bom.json
- name: Transmit own SBOM
  uses: manifest-cyber/manifest-github-action@main
  id: transmit
  with:
    apiKey: ${{ secrets.MANIFEST_API_KEY }}
    bomFilePath: ./bom.json
- uses: actions/checkout@v4
- name: generate SBOM
    uses: manifest-cyber/manifest-github-action@main
  with:
    apiKey: ${{ secrets.MANIFEST_API_KEY }}
    sbomGenerator: syft
    sbomGeneratorFlags: --exclude=**/testdata/**
- name: Set version
  id: set-date
  run: echo "date=$(date '+%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Set short sha
  id: set-sha
  run: echo "sha=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_OUTPUT
- name: generate SBOM
  uses: manifest-cyber/manifest-github-action@main
  id: transmit
  with:
    apiKey: ${{ secrets.MANIFEST_API_KEY }}
    sbomName: ${{ env.GITHUB_JOB }}-${{ env.GITHUB_REPOSITORY_OWNER }}
    sbomVersion: v1.0.0-${{ steps.set-date.outputs.date }}-${{ steps.set-sha.outputs.sha }}
    sbomOutput: cyclonedx-json
- name: Set version
  id: set-date
  run: echo "date=$(date '+%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Set short sha
  id: set-sha
  run: echo "sha=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_OUTPUT
- name: generate SBOM
  uses: manifest-cyber/manifest-github-action@main
  id: transmit
  with:
    apiKey: ${{ secrets.MANIFEST_API_KEY }}
    sbomName: ${{ env.GITHUB_JOB }}-${{ env.GITHUB_REPOSITORY_OWNER }}
    sbomVersion: v1.0.0-${{ steps.set-date.outputs.date }}-${{ steps.set-sha.outputs.sha }}
    sbomOutput: cyclonedx-json
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v4
- name: Generate SBOM
  uses: manifest-cyber/manifest-github-action@main
  id: generate
  with:
    apiKey: ${{ secrets.MANIFEST_API_KEY }}
    sbomArtifactName: ${{ github.repository_owner }}-${{ github.repository }}-sbom
In this example, the artifact name will include the repository owner and repository name to ensure uniqueness.
An example SBOM test-sbom-example.json is included, as well as a dev script in package.json for local testing.