Skip to main content

依存関係サブミッション API を使用する

依存関係送信 APIを使用して、プロジェクトのビルドまたはコンパイル時に解決された依存関係など、プロジェクトの依存関係を送信できます。

依存関係送信 APIは、依存関係グラフにデータを送信する方法です。 これにより、静的分析によってキャプチャされない依存関係を送信できます。 詳細については、「依存関係グラフが依存関係を認識する方法」を参照してください。

ビルド時に依存関係を送信する

依存関係送信 API ワークフローのGitHub Actionsを使用して、プロジェクトのビルド時にプロジェクトの依存関係を送信できます。

事前に作成されたアクションを使用する

依存関係送信 API を使う最も簡単な方法は、依存関係のリストを収集して必要なスナップショット形式に変換したものを API に送信するアクションを事前に作成し、それをリポジトリに追加することです。

エコシステムアクション
GoGo の依存関係送信
GradleGradle の依存関係送信
MavenMaven 依存関係ツリーの依存関係送信
製粉Mill の依存関係送信
Mix (Elixir)Mix の依存関係送信
ScalaSbt の依存関係送信
NuGet とその他コンポーネント検出の依存関係の送信アクション

メモ

コンポーネント検出依存関係の送信アクションの場合、サポートされているその他のエコシステムには、Vcpkg、Conan、Conda、Crates、NuGet などがあります。

たとえば、次の Go 依存関係送信ワークフローは、Go ビルド ターゲット (main 関数を含む Go ファイル) の依存関係を計算し、そのリストを 依存関係送信 API に送信します。

name: Go Dependency Submission
on:
  push:
    branches:
      - main

# The API requires write permission on the repository to submit dependencies
permissions:
  contents: write

# Environment variables to configure Go and Go modules. Customize as necessary
env:
  GOPROXY: '' # A Go Proxy server to be used
  GOPRIVATE: '' # A list of modules are considered private and not requested from GOPROXY
jobs:
  go-action-detection:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v6

      - uses: actions/setup-go@v5
        with:
          go-version: ">=1.18.0"

      - name: Run snapshot action
        uses: actions/go-dependency-submission@v2
        with:
            # Required: Define the repo path to the go.mod file used by the
            # build target
            go-mod-path: go-example/go.mod
            #
            # Optional. Define the repo path of a build target,
            # a file with a `main()` function.
            # If undefined, this action will collect all dependencies
            # used by all build targets for the module. This may
            # include Go dependencies used by tests and tooling.
            go-build-target: go-example/cmd/octocat.go

これらのアクションについての詳細は、「依存関係グラフがサポートされるパッケージ エコシステム」を参照してください。

独自のアクションを作成する

代わりに、ビルド時にプロジェクトの依存関係を送信する独自のアクションを記述することもできます。 次のようなワークフローにする必要があります。

  1. プロジェクトの依存関係のリストを生成します。
  2. 依存関係の一覧を、 依存関係送信 APIで受け入れられるスナップショット形式に変換します。 形式について詳しくは、「依存関係送信用の REST API エンドポイント」の "リポジトリ スナップショットの作成" API エンドポイントの本文パラメーターを参照してください。
  3. 依存関係の書式設定された一覧を 依存関係送信 APIに送信します。

GitHub では、Dependency Submission Toolkit は TypeScript ライブラリを保持し、依存関係送信 API に依存関係を送信するための独自のGitHub アクションを作成するのに役立ちます。 アクションの記述について詳しくは、「自動化の再利用」を参照してください。

SBOM をスナップショットとして送信する

ソフトウェア部品表 (SBOM) を作成または管理する外部ツールがある場合は、それらの SBOM を 依存関係送信 APIに送信することもできます。 スナップショット データ形式は標準の SPDX や CycloneDX の SBOM 形式とよく類似しており、スナップショットとして使用可能な形式を生成または変換できるツールがいくつかあります。

ヒント

SPDX 依存関係送信アクションAnchore SBOM アクションを使用して、SBOM を生成し、それを依存関係送信 APIに送信できます。

たとえば、次の SPDX 依存関係送信アクション ワークフローは、リポジトリの依存関係を計算し、SPDX 2.2 形式でエクスポート可能な SBOM を生成して、 依存関係送信 APIに送信します。

# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: SBOM upload

on:
  workflow_dispatch:
  push:
    branches: ["main"]

jobs:
  SBOM-upload:

    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write

    steps:
    - uses: actions/checkout@v6
    - name: Generate SBOM
      # generation command documentation: https://github.com/microsoft/sbom-tool#sbom-generation
      run: |
        curl -Lo $RUNNER_TEMP/sbom-tool https://github.com/microsoft/sbom-tool/releases/latest/download/sbom-tool-linux-x64
        chmod +x $RUNNER_TEMP/sbom-tool
        $RUNNER_TEMP/sbom-tool generate -b . -bc . -pn $ -pv 1.0.0 -ps OwnerName -nsb https://sbom.mycompany.com -V Verbose
    - uses: actions/upload-artifact@v4
      with:
        name: sbom
        path: _manifest/spdx_2.2
    - name: SBOM upload
      uses: advanced-security/spdx-dependency-submission-action@5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e
      with:
        filePath: "_manifest/spdx_2.2/"