provenance-action: ロックファイルの依存関係プロビナンス検出アクション
概要
provenance-actionは、ロックファイルの変更差分を解析して、依存関係がnpmの「provenance(出所情報や発行者の信頼性)」を失っていないかを検出するGitHub Actionです。pnpm、npm、Yarnのロックファイルをサポートし、トランジティブ(間接)依存まで解決済みバージョンを比較して問題を検出します。検出時にはロックファイルの該当行にインライン注釈を付与でき、JSONでの出力やCIを強制的に失敗させるオプションもあります。開発中のツールであり、依存関係のセキュリティ強化を支援する一つの手段です。
リポジトリの統計情報
- スター数: 119
- フォーク数: 3
- ウォッチャー数: 119
- コミット数: 21
- ファイル数: 11
- メインの言語: TypeScript
主な特徴
- pnpm-lock.yaml、package-lock.json、yarn.lock(v1およびv2+)に対応
- トランジティブ依存を含め、解決済みバージョンを比較してプロビナンス低下を検出
- ロックファイル該当行へのGitHub注釈(インライン)とJSON出力
- オプションでCIをハードフェイル(ビルド失敗)させる機能、TypeScriptで実装
技術的なポイント
provenance-actionは、ロックファイルの差分(プルリクやコミットの変更)を解析して依存関係の「出所情報(provenance)」が低下していないかを自動判定します。対応するロックファイル形式(pnpm、npm、Yarn v1/v2+)をパースし、ローカルに記録された解決済みバージョンやメタ情報を用いて、変更前後でどの依存がどのように変化したかを比較します。トランジティブ依存にも対応しているため、直接のpackage.json変更だけでなく間接的な差分からもリスクを検出できます。
検出結果はGitHub Actionsのワークフロー内で利用しやすい形で出力され、ロックファイル上の該当行に対してインライン注釈を追加して開発者へ視覚的にフィードバックを行います。さらにJSON形式の詳細レポートを出力でき、外部の集計や自動化されたポリシーチェックに連携可能です。設定次第で問題検出時にワークフローを失敗させる(hard-fail)こともでき、セキュリティ要件が高いプロジェクトでの自動防御に使えます。
実装面では純粋なTypeScriptで記述され、GitHub Actions用のaction.ymlやESLint設定など開発環境が整備されています。READMEでは「開発中のツール」である旨が明記されており、本ツールは依存供給連鎖の安全性向上を補助する一手段であることに留意が必要です。
プロジェクトの構成
主要なファイルとディレクトリ:
- .github: dir
- .gitignore: file
- README.md: file
- action.yml: file
- eslint.config.ts: file
…他 6 ファイル
まとめ
ロックファイル差分から依存の出所信頼性低下を検出する実用的なGitHub Action。
リポジトリ情報:
- 名前: provenance-action
- 説明: GitHub Action that detects dependency provenance downgrades from lockfile changes (npm/pnpm/yarn).
- スター数: 119
- 言語: TypeScript
- URL: https://github.com/danielroe/provenance-action
- オーナー: danielroe
- アバター: https://avatars.githubusercontent.com/u/28706372?v=4
READMEの抜粋:
danielroe/provenance-action
Detect and fail CI when dependencies in your lockfile lose npm provenance or trusted publisher status.
[!WARNING] This action is under active development and is only one tool to assist in securing your dependencies.
✨ Features
pnpm-lock.yaml,package-lock.json,yarn.lock(v1 and v2+)- Handles transitives by comparing resolved versions
- Inline GitHub annotations at the lockfile line
- JSON output and optional hard‑fail (default: on)
- Pure TypeS…