【Renovate】サードパーティアクションをコミットSHAで管理する
結論
renovate.jsonに以下のように指定します。
{
"packageRules": [
{
"matchDepTypes": ["action"],
"excludePackagePrefixes": ["actions/"],
"pinDigests": true
}
]
}
以下、背景情報です。
GitHub Actions: サードパーティアクションの利用方法
GitHub Actionsではコミュニティで作成されたサードパーティアクションを利用できます。
サードパーティアクションはコミットSHAでバージョン指定することが推奨されています。
現在、アクションを不変のリリースとして使用する唯一の方法は、アクションを完全なコミット SHA にピン止めすることです。 特定の SHA にピン止めすると、有効な Git オブジェクトペイロードに対して SHA-1 衝突を生成する必要があるため、悪意のある人がアクションのリポジトリにバックドアを追加するリスクを軽減できます。
これは安定性とセキュリティの観点から重要です。
こちらの記事に詳しくまとまっていたので、そちらを参照してください。
Renovate: アクションのバージョン指定方法
Renovate はライブラリの自動アップデートツールです。
RenovateではアクションのバージョンをコミットSHAで指定しつつ、アップデートはバージョン(タグ)に追従させることができます。
uses
の行末尾に # <tagname>
の形式でコメントを追加すると、バージョンに追従してアップデートが行われるようになります。
steps:
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
また、自動的にコミットSHA指定にしたい場合は helpers:pinGitHubActionsDigests
プリセットを利用します。
{
"extends": ["helpers:pinGitHubActionDigests"]
}
サードパーティアクションをコミットSHAでバージョン指定する
先ほどの helpers:pinGitHubActionsDigests
プリセットでは全てのアクションのバージョンがコミットSHAで指定されます。
これは非常に堅牢ですが、actions/checkout
のような公式アクションではメジャーバージョン指定で楽をしたいです。
そのため、helpers:pinGitHubActionsDigests
プリセットを少し改変して設定を作成します。
変更後の設定がこちら↓
{
"packageRules": [
{
"matchDepTypes": ["action"],
"excludePackagePrefixes": ["actions/"],
"pinDigests": true
}
]
}
excludePackagePrefixes
で actions org内のアクションを対象外にしています。
自分で公開しているアクションがあれば、そちらも対象外にしても良いかもしれません。
これにより、サードパーティアクションのみコミットSHAで指定されるようになります。
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0
終わりに
ここまで読んでいただきありがとうございました。
Discussion