任意条件でフィルタリングしたNotion DBのページリンクをSlack通知したい
そんな要望?に答えるべく以下GitHub Actionsを作成しましたが、こういう系の名称を正確にあらわそうとしすぎてかなり冗長な名前になってしまいました😅
Actionsの概要
- 対象とするNotion DBに対して任意のフィルタ条件を指定する
- 今回のActionsがSlackに通知するためのペイロードを生成する
- 生成したペイロードをslackapi/slack-github-action に渡してSlack通知する
というものです。Slack通知処理は slackapi/slack-github-action にまかせており、自作したActionsはそこに渡すためのペイロードを生成しています。
Notion DBのフィルター
以下のようなプロパティをもつDBだった場合、
SelectがFoo
のページだけをフィルタリングするには以下のようなJSONを指定します。
with: filter: | { "property": "Select", "select": { "equals": "Foo" } }
上記の設定でActionsを実行した場合の通知結果が以下です。現時点では超シンプルな通知となっています。
もっと複雑なフィルターも組むことが可能で、さらにNumberやMulti-selectプロパティの条件も追加したい場合は以下のようになります。
filter: | { "and": [ { "property": "Select", "select": { "equals": "Foo" } }, { "property": "Number", "number": { "greater_than_or_equal_to": 3 } }, { "property": "Multi-select", "multi_select": { "contains": "AAA" } } ] }
このあたりのプロパティのタイプごとの条件の記述方法などの詳細については公式のフィルターについてのAPIリファレンスを参照してください。 developers.notion.com
TypeScriptでGitHub Actionsを作成する
以下公式のテンプレートがありとりあえず必要なものが全部揃っているので何も考えずに0から作成する場合にはとても便利でした。
localで動かす場合にcore.getInput()
から値を取得できるようにする
開発時にdocker環境でcore.getInput("filter")
などの値の設定方法について調べたのですが、getInputの実装としてはINPUT_FILTER
のようにActionsにはINPUT_
がprefixとして変数名が大文字となった環境変数に値が入ってくるようで、今回の場合だとexport INPUT_FILTER={...
のように環境変数を与えてあげることでcore.getInput("filter")
などgetInputで値が取れるようにすることができました。
javascript - set GitHub Actions input value for local testing - Stack Overflow