メモ
ワークフロー依存関係ロックファイルは パブリック プレビュー にあり、変更される可能性があります。
ワークフローの依存関係をロックする理由
ワークフローがタグまたはブランチ (uses: octo-org/deploy-action@v3 や uses: octo-org/deploy-action@main など) によってアクションを参照すると、GitHub Actions はその参照を実行時にタグまたはブランチが指すコミットに解決します。
タグとブランチは移動できるため、実行されるコードが、ワークフロー作成者が最初にレビューしたコードであるとは限りません。 アップストリームのメンテナのアカウントが侵害され、タグが再ポイントされると、リポジトリで悪意のあるコードが実行される可能性があります。
ワークフロー依存関係ロックファイルは、コミット SHA をすべてのアクション (推移的な依存関係を含む) と、ワークフローが依存しているすべての再利用可能なワークフローにピン留めします。 これにより、次の操作が行われます。
- 再現可能なビルド
- レビュー可能な依存関係の変更と Dependabot バージョンの更新
- CI/CD システムの依存関係の監査可能なインベントリ
ロックファイルはどのように機能しますか?
ロックファイルは、.github/workflows/actions.lock にあるリポジトリで定義されます。
GitHub CLI拡張機能である gh actions-lock によって生成されるため、手動で編集してはいけません。
リポジトリのワークフローをロックファイルに 1 つずつ、またはまとめてオンボードできます。 ワークフローが追加された後:
- ワークフローで使用されるすべてのアクションの依存関係は、ロックファイル内に存在する必要があります。
- ロックされたコミットは、ワークフローの実行時に使われるコミットであり、許可されたアクション ポリシーが確認する対象です。 このコミットは、ソース リポジトリのブランチ内に存在する必要があります。
ロックファイルは、自身のリポジトリ内のワークフローを対象とします。 これは、推移的な依存関係 (ご使用のアクションの依存関係が使用するアクション) にまで拡張されます。ただし、再利用可能なワークフロー呼び出しの依存関係は除きます。 再利用可能なワークフローは、それが定義されているリポジトリの lock file の対象です。
ロックファイルは何を記録しますか?
ロックファイルには 2 つのセクションがあります。
workflows は、オンボードされた各ワークフローが使用する依存関係を記録し、dependencies はそれらの各参照が解決されるコミットを記録します。
# This file is machine-generated by `gh actions-lock`.
# Do not edit by hand; run `gh actions-lock` to update.
version: 'v0.0.2'
workflows:
'.github/workflows/ci.yml':
- 'octo-org/[email protected]'
dependencies:
'octo-org/[email protected]':
ref: 'v3.1.0'
commit: 'sha1-...'
owner_id: 44036562
repo_id: 197814629
各依存関係には次が記録されます:
ref: タグやブランチなど、ワークフローで使用される参照。commit: 参照が解決された正確なコミット。 これは実行されるコードです。owner_idとrepo_id: ソース リポジトリの数値 ID。 GitHub Actions では、これらを使用して、実行時に、名前に対応するリポジトリが、まだロックしたものと同じであることを確認します。
ロックファイルと SHA ピン留めはどのように比較されますか?
GitHub では従来、ワークフロー ファイル内でサードパーティのアクションを完全な長さのコミット SHA にピン留めすることを推奨してきました。 ロックファイルを採用するリポジトリの場合、ワークフロー ファイル内での SHA ピン留めは 不要になります。 lockfile は推移的な依存関係をサポートし、ワークフロー ファイルの読み取りを容易にし、ソース リポジトリの ID を記録するため、より優れたオプションです。
次のステップ
リポジトリのロックファイルを作成するには、 リポジトリのワークフローでのアクションの依存関係のロック を参照してください。