Composite Action 入門
composite action に入門
github actions では、様々な拡張機能(パッケージ)が公開されています。
ここでは、composite actions の内容について理解を深めていこうと思います。
ただの宣伝
今回作成した action はこちらです。
実装時の参考になればと思います。
PR のチェックリストを確認する action です。
composite action とは
複合アクションを使用すると、一連のワークフロー ジョブ ステップを 1 つのアクションに収集し、複数のワークフローで 1 つのジョブ ステップとして実行できます
つまり、再利用可能にするために用意された github actions の機能の一つと理解しています。
公式のドキュメントで十分demoは作れるくらい充実していました。
composite action 必須項目
composite action を利用するにあたり必要になる項目について
runs.using
composite
を指定する
runs:
using: "composite"
steps:
- run: ${{ github.action_path }}/test/script.sh
shell: bash
runs.steps
このアクションで実行する予定のステップ
Option 周り
runs.steps[*].run
実行したいコマンドを書く
runs.steps[*].shell
Optional The shell where you want to run the command. You can use any of the shells listed in "Workflow syntax for GitHub Actions." Required if run is set.
ここら辺が利用できるらしい
runs.steps[*].if
条件式を組み込める
steps:
- run: echo This event is a pull request that had an assignee removed.
if: ${{ github.event_name == 'pull_request' && github.event.action == 'unassigned' }}
runs.steps[*].name
composite の step 名
runs.steps[*].id
ステップの一意な識別子
runs.steps[*].env
そのステップだけの環境変数のマップを設定
runs.steps[*].working-directory
コマンドを実行する作業ディレクトリを指定
runs.steps[*].uses
ジョブのステップの一部として実行するアクションを選択します。 アクションは再利用可能なコード単位
runs:
using: "composite"
steps:
# Reference a specific commit
- uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3
# Reference the major version of a release
- uses: actions/checkout@v4
# Reference a specific version
- uses: actions/checkout@v4.2.0
# Reference a branch
- uses: actions/checkout@main
# References a subdirectory in a public GitHub repository at a specific branch, ref, or SHA
- uses: actions/aws/ec2@main
# References a local action
- uses: ./.github/actions/my-action
# References a docker public registry action
- uses: docker://gcr.io/cloud-builders/gradle
# Reference a docker image published on docker hub
- uses: docker://alpine:3.8
runs.steps[*].with
アクションで定義された入力パラメータのマップ
runs:
using: "composite"
steps:
- name: My first step
uses: actions/hello_world@main
with:
first_name: Mona
middle_name: The
last_name: Octocat
ここら辺が composite action で利用する各種項目
セキュリティー周りの話
composite action を採用するに当たり、気にすべき観点
Warning: When creating workflows and actions, you should always consider whether your code might execute untrusted input from possible attackers. Certain contexts should be treated as untrusted input, as an attacker could insert their own malicious content. For more information, see "Security hardening for GitHub Actions."
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#understanding-the-risk-of-script-injections
取り扱う内容により、観点は異なる。
Understanding the risk of script injections
script injection の例
Accessing secrets
秘密情報に関する取り扱いについて
-
${{ secrets.GITHUB_TOKEN }}
から、${{ github.token }}
を推奨 - 環境変数を扱う場合は、バリデーションなど利用すると良い。
- github.tokenを扱う場合は、Forkを考慮した設定にする。
攻撃者が取りうるステップ
攻撃者がGitHub Actions runner上で悪意のあるコマンドを実行できた場合に取り得る手順について
Tips
覚えておくと便利なやつ
GITHUB_ACTION_PATH
独自スクリプトを実装する場合は GITHUB_ACTION_PATH(デフォルト環境変数)を使用して、action.ymlが存在するパスを取得してくれる。
runs:
using: "composite"
steps:
- run: $GITHUB_ACTION_PATH/script.sh
shell: bash
Private リポジトリ同士で利用する場合
同じ組織内にいれば composite で登録したリポジトリの設定で
Actionsを組織内での利用を有効にすると使用可能
actions/checkout@v4の設定
composite action として登録する際に、actions/checkoutを利用する場合にrepositoryを設定する
- name: Checkout repository
uses: actions/checkout@v4
with:
repository: "org/repository"
Discussion