LoginSignup
30
23

More than 3 years have passed since last update.

Github Actions を API から実行する

Last updated at Posted at 2019-12-28

背景

ある workflow から別の workflow を起動したくなることありますよね。
最近では circleci がようやく workflow(circleciではworkflowも含む概念としてpipelineといいますが) を起動するAPI v2がGAになりました。

Github Actions では repository dispatch event API を利用することで、任意の actions を実行できるようになりますのでご紹介します。

repository dispatch event とは

から作成できます。
以下の2つのパラメータを指定することができます。

  • event_type
    • 必須
  • client_payload
    • 任意のjsonを指定できます

こんな感じで手元から試すことができます

$ curl -vv \
    -H "Authorization: token ${{ secrets.REPO_GITHUB_TOKEN }}" \
    -H "Accept: application/vnd.github.everest-preview+json" \ 
    "https://api.github.com/repos/okitan/actions-sandbox/dispatches" \
    -d '{"event_type": "build", "client_payload": {"hoge": "fuga"}}'

repository dispatch event を受け取る action

です。
12月28日現在、types(event_typeを指定する機能のことと予想)はサポートしてないとドキュメントに書いてありますが、普通にtypesでfilterしてくれるようになってます。

Communityのproposalにも返答ないみたいだし、つい最近実装された機能なのでしょうか?

こんな感じで repository_dispatch を使うとよいと思います。
こうすることで、普段のactionsを簡単にAPI経由で起動できるようになって非常に便利だと思います。

ただし master ブランチに対して event が発行されてしまうので、 branch に対して実行するには、client_payload を使って branch を指定しておいて checkout を頑張るとか工夫が必要になります。

name: build

on:
  repository_dispatch:
    types: [build]
  push:
    branches:
      - master

event_type にアクセスする

types で filtering できるために多くの場合不要かと思うのですが、
以下のように何故か action という名前で取得できます。

  steps:
    - run: echo "${{ github.event.action }}"

client_payload にアクセスする

普通に github event context から取得できます。

  steps:
    - run: echo "${{ toJSON(github.event.client_payload) }}"

repository dispatch event を簡単に送る Github Actions

そもそも、なくてもまぁ curl 叩くだけなのでそんなに難しくはないとは思いますが、あるものは使ったほうが楽になるので、使うといいと思います。

まとめ

repository dispatch event を利用することで、
外部システムからのAPI連携以外にも、
github actions内から動的なworkflowの制御ができるようになります。

よりはかどりますね。

30
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
23