🥳
Node.js/パッケージのライセンスを検証する
TL;DR
npx license-checker --json | \
jq '. | to_entries | map(select(.value.licenses | tostring | test("(BSD|MIT|ISC|Apache|CC0-1.0|CC-BY-2.0|CC-BY-3.0|CC-BY-4.0|Public Domain|Unlicense|wtfpl)") | not)) | map(select(.key | test("__ignore_pattern__") | not )) | length' | \
xargs -I{} test {} -eq 0
__ignore_pattern__
は、検証の対象から除外したいパッケージのパターンを入力してください。
不要な場合は | map(select(.key | test("__ignore_pattern__") | not ))
を削除します。
経緯
以前 Ruby on Rails での GPL 汚染 の話があったので、
Node.js のプロジェクトでも、ライセンスの検証を CI で回すようにしました。
このコマンドを導入したリポジトリの CI は Github Actions なのですが、
runs-on: ubuntu-latest
, uses: actions/setup-node@v2
で npx
も jq
も使えます。
解説
license-checker は、依存関係があるパッケージのライセンスを出力してくれます。
これを json で出力させるようにして、そこから jq でフィルタリングし、
xargs
と test
で結果が 0 であるかを比較しているだけです。
license-checker による json の出力は、たとえば typescript ですと以下のようになります。
{
"typescript@4.2.3": {
"licenses": "Apache-2.0",
"repository": "https://github.com/Microsoft/TypeScript",
"publisher": "Microsoft Corp.",
"path": "/path/to/node_modules/typescript",
"licenseFile": "/path/to/node_modules/typescript/LICENSE.txt"
},
}
jq
でのフィルタは、ひとまず以下をホワイトリストとして除外しています。
- Apache
- BSD
-
クリエイティブ・コモンズ・ライセンス
- CC0-1.0
- CC-BY-2.0
- CC-BY-3.0
- CC-BY-4.0
- ISC
- MIT
- Public Domain
- Unlicense
- wtfpl
Discussion