Contentfulでコンテンツを更新したらGitHubActionを実行したい
自作のブログをContentful(ヘッドレスCMS) + Next.jsのSSGで作ったのですが、Contentfulでコンテンツを更新した後、ビルドしてデプロイするためにGitHub Actionを実行する必要があります。
手動でやってましたがめんどくさいので、コンテンツを更新したら自動でアクションが実行されるようにしたいと思います。
大まかな手順
- GitHub Personal Access Tokenを作成
- ContentfulでWebhookを設定
- Actionを修正
前提:そもそもWebhookでGitHub Actionを実行する設定ってどうすればいいの?
GitHub Actionの公式Docを見たところ、どうやらrepository_dispatch
イベントというのを発生させるといいようです。
URLは、https://api.github.com/repos/OWNER/REPO/dispatches
とのこと。
ていうかWebhookってなに?
恥ずかしながら説明できないので改めて調べました。
- サービスで何尾かのイベントが発生した際にリアルタイムでHTTPプロトコルを使用して通知するシステムのこと
- APIとの違いは、明示的なリクエスト操作があるかないか
- 通常はPOSTリクエスト
要は普通のHTTP通信なんですね。なんか規格とかあるのかと思ってましたがそういうわけではなさそう。
1. GitHub Personal Access Tokenを作成
というわけで設定していきます。
まずは前述のrepository_dispatch
へのリクエストに必要なPersonal Access Tokenを作成します。
手順はこちら
Permissionsについては、以下のページの記載に従ってContents
を`Read and write`、`Metadata`を`Read-only`としました。
2. ContentfulでWebhookを設定
続いてContentfulのWebhookを設定していきます。
メニューの「webhook」から進んで、添付のように設定しました。
なお、nameに日本語を設定するとエラーとなるようです。
(上図のAuthorization
の値はBearer <1で作成したPersonal Access Token>
です。
3. Actionを修正
リポジトリの.github/workflows/
下のAction定義でon
節に追記します。
on:
push:
branches:
- main
workflow_dispatch:
repository_dispatch: # <= これを追加
今回あくまでActionをトリガーしたいだけなので、条件も内容も何もいらずこれだけです。
以上で、Contentfulでコンテンツを作成、編集、削除時にGitHub Actionが実行されました!🙌
Discussion