概要
nektos/act でGithub Actionsワークフローをローカル環境で実行した際に、githubコンテキストに格納される値を確認する方法
背景
CI/CDツールとして、Github Actionsが広く親しまれるようになったが、Github Actionsは一定以上の使用について有料である 1 。
そこで、ワークフローの検証・デバッグ・非課金での実行のために、nektos/actを用いてローカル環境でワークフローを実行するケースがある。
このとき、ワークフローにGithub依存のコンテキスト変数(例えば、githubコンテキスト)があった場合に、どんな値が格納されるかを知っておく必要がある。
方法
コンテキスト変数をechoするだけのワークフローを実行することで確認できる。
下記にgithubコンテキストの値を確認するためのワークフロー例を示す。
name: Verify Github Contexts
on:
push:
branches:
- develop
jobs:
verify_github_contexts:
name: verify github contexts
runs-on: ubuntu-latest
env:
TZ: "Asia/Tokyo"
steps:
- name: Verify Github Contexts
run: |
echo "github.action ${{github.action}}" # string 現在実行中のアクションの名前。 GitHubは、現在のステップがスクリプトを実行する際に、特殊なキャラクターを削除するか、runという名前を使います。 同じジョブの中で同じアクションを複数回使う場合、名前には順番に番号が加えられます。 たとえば、実行する最初のスクリプトの名前はrun1で、2番目のスクリプトの名前はrun2というようになります。 同様に、actions/checkoutの2回目の呼び出しはactionscheckout2となります。
echo "github.action_path ${{github.action_path}}" # string アクションが置かれているパス。 このパスを使用して、アクションと同じリポジトリにあるファイルに簡単にアクセスできます。 This attribute is only supported in composite actions.
echo "github.actor ${{github.actor}}" # string ワークフローの実行を開始したユーザのログイン。
echo "github.base_ref ${{github.base_ref}}" # string ワークフローの実行における base_ref またはPull Requestのターゲットブランチ。 このプロパティは、ワークフローの実行をトリガーするイベントが pull_request または pull_request_target のいずれかである場合にのみ使用できます。
echo "github.event ${{github.event}}" # オブジェクト webhook ペイロードの完全なイベント。 詳しい情報については、「ワークフローをトリガーするイベント」を参照してください。 このコンテキストを使用して、イベントの個々のプロパティにアクセスできます。
echo "github.event_name ${{github.event_name}}" # string ワークフローの実行をトリガーしたイベントの名前。
echo "github.event_path ${{github.event_path}}" # string ランナー上の完全なイベントwebhookペイロードへのパス。
echo "github.head_ref ${{github.head_ref}}" # string ワークフローの実行における head_ref またはPull Requestのソースブランチ。 このプロパティは、ワークフローの実行をトリガーするイベントが pull_request または pull_request_target のいずれかである場合にのみ使用できます。
echo "github.job ${{github.job}}" # string 現在のジョブのjob_id。
echo "github.ref ${{github.ref}}" # string ワークフローの実行をトリガーしたブランチまたはタグ ref。 For branches this is the format refs/heads/<branch_name>, and for tags it is refs/tags/<tag_name>.
echo "github.repository ${{github.repository}}" # string 所有者およびリポジトリの名前。 Codertocat/Hello-Worldなどです。
echo "github.repository_owner ${{github.repository_owner}}" # string リポジトリのオーナーの名前。 たとえばCodertocat。
echo "github.run_id ${{github.run_id}}" # string リポジトリ内でユニークな各実行に対する番号。 この番号は、ワークフローの実行をやり直しても変化しません、
echo "github.run_number ${{github.run_number}}" # string リポジトリ内の特定のワークフローの各実行に対するユニークな番号。 この番号は、ワークフローの最初の実行時に1で始まり、新たな実行ごとにインクリメントされます。 この番号は、ワークフローの実行をやり直しても変化しません、
echo "github.sha ${{github.sha}}" # string ワークフローの実行をトリガーしたコミット SHA。
echo "github.token ${{github.token}}" # string リポジトリにインストールされたGitHub Appの代わりに認証するためのトークン。 これは機能的にGITHUB_TOKENシークレットに等価です。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。
echo "github.workflow ${{github.workflow}}" # string ワークフローの名前。 ワークフローファイルで name を指定していない場合、このプロパティの値は、リポジトリ内にあるワークフローファイルのフルパスになります。
echo "github.workspace ${{github.workspace}}" # string checkoutアクションを使う際の、ステップにとってのデフォルトのワーキングディレクトリであり、リポジトリのデフォルトの場所です。
結果
$ act -j verify_github_contexts
の実行結果を示す。
github.event はオブジェクトを返すため、[object Object]と表示されている