任意条件でフィルタリングしたNotion DBのページリンクをSlack通知したい

そんな要望?に答えるべく以下GitHub Actionsを作成しましたが、こういう系の名称を正確にあらわそうとしすぎてかなり冗長な名前になってしまいました😅

github.com

Actionsの概要

というものです。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から作成する場合にはとても便利でした。

github.com

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