nektos/actのgithubコンテキストの確認


概要

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]と表示されている