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
}
許可・不許可の対象として指定可能なパッケージ
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
に例外として指定したつもりだが、これは効いていないということになる。