Dependency Review Actionのライセンスチェック機能に関する調査メモ

Dependency Review Actionとは?

Marketplaceで公開されているGitHub Actionsで、構成管理にあるOSSのライセンスや脆弱性のチェックを行うことができる。
publicリポジトリでは無償で利用可能だが、privateリポジトリで実行するにはGitHub Advanced Securityのライセンスが必要。1

GitHub Actions Marketplaceで公開されている。
https://github.com/marketplace/actions/dependency-review

GItHubリポジトリは以下。
https://github.com/actions/dependency-review-action

OSSライセンスチェックに関する制限

  • GitHub Actionsのワークフロー内で使われているActionsも対象となる。
    例えばワークフローで以下のようにhashicorp/setup-terraformを使用している場合は、MPL-2.0 Licenseを使用しているものとみなされる。
       - name: HashiCorp - Setup Terraform
         uses: hashicorp/setup-terraform@v2.0.3  
    
  • PRの差分のみがチェック対象となる。既にリポジトリに入っているものはチェック対象とならない。

ライセンスやパッケージを複数指定する際の見やすい書き方について

OSSライセンスやパッケージをホワイトリスト方式もしくはブラックリスト方式の、コンマ区切りで記述できる。
複数指定する場合はコンマ区切りだと可読性の低下を招くが、以下の書き方をであれば1行1定義になり可読性を担保できる。

     - name: Dependency Review
       uses: actions/dependency-review-action@v3
       with:
         allow-licenses: |
           Apache-2.0,
           BSD-2-Clause AND BSD-3-Clause,
           MIT           
         allow-dependencies-licenses: |           
           pkg:pypi/psycopg2@2.9.4,
           pkg:pypi/aws-lambda-powertools@2.26.0

ただし最後の行だけはコンマが不要となる点に注意。

またコンフィグファイルとして切り出せば、以下のように箇条書きでの記述ができる模様。 https://github.com/marketplace/actions/dependency-review#example-1

allow_licenses:
  - 'GPL-3.0'
  - 'BSD-3-Clause'
  - 'MIT'

許可するパッケージを指定した場合のバージョンの扱いについて

(少なくとも2023/11/07時点の仕様においては)「allow-dependencies-licensesにて、バージョンを指定しても参照されない」ようになっている。
GitHub Actionsのソースコードでは、で指定した内容は以下のように「typeとnameが一致するものが見つかった場合にはライセンスチェックの対象外」とされている。

    if (
      licenseExclusions !== null &&
      licenseExclusions !== undefined &&
      licenseExclusions.findIndex(
        exclusion =>
          exclusion.type === changeAsPackageURL.type &&
          exclusion.name === changeAsPackageURL.name
      ) !== -1
    ) {
      return false
    } else {
      return true
    }

https://github.com/actions/dependency-review-action/blob/9f45b2463b475767b61721ccfef113fef513e6aa/src/licenses.ts#L53-L65

許可・不許可の対象として指定可能なパッケージ

purlで指定する。purlで記述できるパッケージの形式は、以下に記載されている。
https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst

なお、Marketplaceで公開されているGitHub Actionsについては例外を指定する方法がまだ分かっていない。
例えば以下のように記載した場合、GitHub ActionsがInvalid License(ライセンス不適合)となる。

     - name: HashiCorp - Setup Terraform
       uses: hashicorp/setup-terraform@v2.0.3

     - name: Dependency Review
       uses: actions/dependency-review-action@v3
       with:
         allow-licenses: Apache-2.0
         allow-dependencies-licenses: pkg:github/hashicorp/setup-terraform@v2.0.3

hashicorp/setup-terraformはMPL-2.0のためallow-licensesに該当していないためallow-dependencies-licensesに例外として指定したつもりだが、これは効いていないということになる。


  1. https://docs.github.com/ja/get-started/learning-about-github/about-github-advanced-security ↩︎

関連記事


  1. MavenでOSSのライセンス一覧を出力する
  2. TerraformでGitHub ActionsのIPリストを参照する
  3. 他の人には読めない形式でGitHubのSecretsの値を読み出す
  4. GitHub Actionsでプルリクのコメントに複数行テキストを投稿する
  5. GitHub Actionsでエラーの時だけ特定の処理を実行する
  6. プルリクレビューのノウハウ&観点集
  7. Terraformを選定する3つの理由

comments powered by Disqus