外部から任意の github actions を実行する
通常、github actions では、ブランチの actions をトリガーとするケースが多いと思います。 しかし、Slack 上で特定の actions を実行したいなど、任意のタイミングで github 外部から actions を実行するための手法を紹介します。
その場合、repository_dispatch
を使います。repository_dispatch
に指定した type を curl で実行する際の event_type
として指定すると、合致する job が実行されます。
以下の例では、前回の記事で紹介した Android アプリのバージョンを更新する shell script を、外部からのイベントで発火し、更新したアプリバージョンの Pull Request を作成する actions を定義しています。
name: dispatch_sample on: repository_dispatch: types: [dispatch-sample] jobs: dispatch-sample-job: runs-on: ubuntu-latest name: bump up app versions steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: setup git run: | git config --local user.name bump-up-bot git config --local user.email bump-up-bot@google.com - name: bump up app versions run: | ./bump.sh ${{ github.event.client_payload.version_name }} - name: Create Pull Request uses: peter-evans/create-pull-request@v2 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: bump up app versions title: bump up app versions to ${{ github.event.client_payload.version_name }} branch: ${{ github.event.client_payload.branch }}
上記 actions を実行するためには、外部から curl などで post します。
$ curl -X POST https://api.github.com/repos/[your-github-id]/[your-github-repository]/dispatches -H "Authorization: token [your-access-token]" -H "Accept: application/vnd.github.everest-preview+json" --data "{\"event_type\": \"dispatch-sample\", \"client_payload\": {\"branch\": \"release/hoge\", \"version_name\": \"1.0.0\"}}"
この例では、repository_dispatch
として dispatch-sample
が定義されている job を実行します。
また、外部から情報を渡したい場合、client_payload
として json 形式でデータを与える事ができます。
上記 curl を実行すると、client_payload
として指定した version_name
にアプリの version 名が更新され、version_code
はインクリメントした差分情報を、mater からチェックアウトした release/hoge
ブランチ上でコミットし、Pull Request を作成するところまで自動でやってくれます。
例えば、Slack から更新したい version name を指定し、lambda などから上記 post を実行すれば、 アプリのバージョンアップデートは slack 上で完結することが出来るので、普段のリリースフローを少し便利に済ますことが出来ます。
是非参考にしてみてください。