🦎
リポジトリ名の取得 [GitHub Actions]
環境変数
ワークフローを書くときに意外と難しいのがリポジトリ名の取得です。
owner/repo 形式は ${GITHUB_REPOSITORY} 環境変数か ${{ github.repository }} コンテキストで、 owner は ${GITHUB_REPOSITORY_OWNER} 環境変数か ${{ github.repository_owner }} コンテキストでそれぞれ取得できるのですが repo だけを取得する方法はありません。
そのうち素直に取得できるようになると思いますが今のところはこのように書きます。
環境変数
- run: echo "${GITHUB_REPOSITORY#${GITHUB_REPOSITORY_OWNER}/}"
Bash の変数展開を利用しています。
コンテキスト
github コンテキストから直接取得することはできないので steps コンテキストか env コンテキスト(環境変数)を経由します。
steps 経由
- id: repository
run: echo "name=${GITHUB_REPOSITORY#${GITHUB_REPOSITORY_OWNER}/}" >> $GITHUB_OUTPUT
- uses: actions/example@v1
with:
repo: ${{ steps.repository.outputs.name }}
環境変数経由
- run: echo "REPOSITORY_NAME=${GITHUB_REPOSITORY#${GITHUB_REPOSITORY_OWNER}/}" >> $GITHUB_ENV
- uses: actions/example@v1
with:
repo: ${{ env.REPOSITORY_NAME }}
様々な環境変数
まとめるついでにリポジトリ名以外でも役に立ちそうなものを少し紹介します。
詳細はドキュメントを参照してください。
| 項目 | 環境変数 |
|---|---|
| owner/repo | $GITHUB_REPOSITORY |
| owner | $GITHUB_REPOSITORY_OWNER |
| repo | ${GITHUB_REPOSITORY#${GITHUB_REPOSITORY_OWNER}/} |
| actor | $GITHUB_ACTOR |
| workspace | $GITHUB_WORKSPACE |
| branch | $GITHUB_REF_NAME |
| PR base branch | $GITHUB_BASE_REF |
| PR head branch | $GITHUB_HEAD_REF |
${{ github.* }} |
$GITHUB_* |
| run URL | $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID |
| OS | $RUNNER_OS |
| Architecture | $RUNNER_ARCH |
${{ runner.* }} |
$RUNNER_* |
Discussion
コンテキスト
github.event.repository.nameでリポジトリ名だけの文字列が取得できました。github.eventは、英語版ドキュメントでは「The full event webhook payload. 」だそうです。そして、webhook payloadの
repositoryは webhook ペイロードオブジェクトの共通プロパティだそうです。共通プロパティなのでgithub.event.repositoryの存在はアクションのトリガーによらず期待できそうです。github.event.repositoryはリポジトリオブジェクトであり、 name属性を持ちます。その値がowner/repo 形式のrepoの部分の文字列です。