📑
ワークフロー自身の YAML へアクセス [GitHub Actions]
概要
ほとんどの情報は環境変数かコンテキストで取得できるのですが、たまにワークフロー自身の 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
コマンドの使い方についてはこちらにまとめています。
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