📑

ワークフロー自身の YAML へアクセス [GitHub Actions]

2022/02/23に公開

概要

ほとんどの情報は環境変数コンテキストで取得できるのですが、たまにワークフロー自身の YAML の値を参照したくなることがあるのでその方法です。

ワークフロー

.github/workflows/self-workflow.yml
name: Self workflow

on:
  push:
    paths:
      - .github/workflows/self-workflow.yml
  workflow_dispatch:
    inputs:
      id:
        default: '123'

jobs:
  build:
    runs-on: ubuntu-20.04
    timeout-minutes: 1
    env:
      GH_TOKEN: ${{ github.token }}
      GH_REPO: ${{ github.repository }}

    steps:
      - run: gh workflow view "$GITHUB_WORKFLOW" --yaml | tee workflow.yml
      - run: yq '.on.workflow_dispatch.inputs.id.default' workflow.yml

解説

ワークフロー名を取得

ドキュメントには記載がないのですが実行中のワークフロー名は GITHUB_WORKFLOW または ${{ github.workflow }} で取得できます。
ファイル名や ID を直接取得する方法はなさそうです。

ファイル名や ID を取得

API を経由することで取得できます。
現時点では --json オプションがないので多少強引に。

ファイル名
gh workflow view "$GITHUB_WORKFLOW" | head -1 | cut -d ' ' -f 3
ID
gh workflow view "$GITHUB_WORKFLOW" | head -2 | tail -1 | cut -d ' ' -f 2

ワークフローの YAML を取得

gh workflow view で YAML を取得します。
ファイルへの出力は単純なリダイレクト (> workflow.yml) でも良いのですが標準出力にログを残したい場合は tee コマンドを使用します。

gh コマンドの使い方についてはこちらにまとめています。
https://zenn.dev/snowcait/articles/0e430af5fb1e50

YAML から情報を取得

Ubuntu 20.04 LTS には yq が入っているのでパースにはこれを使います。
jq のラッパーなので使い方は同じです。

set-output しておけば以後のステップやジョブで使用できます。

      - run: |
          id=$(yq '.on.workflow_dispatch.inputs.id.default' workflow.yml)
          echo "::set-output name=id::${id}"
        id: inputs-default
      - run: echo $ID
        env:
          ID: ${{ steps.inputs-default.outputs.id }}

Discussion