リリースノートの自動出力先をNotionにしたい場合、手っ取り早いのはGitHub上で整形したリリースノート用出力をそのままNotion APIに渡すことです。GitHub Actionsにはリリースノートの整形出力用Actionが存在しており、幾つかの設定を追加するだけで手作業いらずとなります。
ramnes/notion-sdk-pyとrelease-drafter/release-drafterを組み合わせて、リリースノートを出力する際にNotion更新も試してみました。
ramnes/notion-sdk-pyについては以前書いた記事を参考にしてください。
Workflowを組む
release-drafter実行後のoutputをnotion-sdk-pyからAPIに送る本文に加えるだけです。
# This is a basic workflow to help you get started with Actions
name: publish-release
defaults:
run:
shell: bash
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "master" branch
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
- name: update release
id: release_drafter
uses: release-drafter/release-drafter@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Run publish-draft
run: |
sudo -H pip install -U pipenv
PYTHON_BIN_PATH="$(python3 -m site --user-base)/bin"
PATH="$PATH:$PYTHON_BIN_PATH"
pipenv sync
pipenv run python publish-draft.py
working-directory: ./notion
env:
NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
DUMP_BODY: ${{ steps.release_drafter.outputs.body }}
publish-draft.py
import os
from notion_client import Client
from pprint import pprint
notion = Client(auth=os.environ["NOTION_TOKEN"])
result = notion.blocks.children.append('XXXXXXXXXXXXXXXXXXXXXXXXX',
children=[
{
"object": "block",
"type": "code",
"code": {
"rich_text": [{
"type": "text",
"text": {
"content": os.environ['DUMP_BODY']
}
}],
"language": "plain text"
},
}]
)
pprint(result)
リリースノート部分が識別しやすくなるようにcodeブロックを指定しています。必要に応じてlanguageの指定を変えるとよいでしょう。
注意点
幾つかパターンを変えつつ行ってみたところ、API仕様による制約がありました
- API仕様制約により常にブロック最下段への追加となる
- 既存ブロックの単純移動は不可能
文章だと分かりづらいので実例を上げると、下図1のような構成にてTestとコードブロックの間に新しくコードブロック挟もうとすると下図2のようになります。
図1
図2
Testの小ページ扱いにて間への挟み込みとはなりません。常に小ページの最下に追加される新規ブロックとして扱われるということです。
あとがき
意外と手軽にできました。ネックがあるとすれば、リリースノートで最新を常に最上段に上げたい場合はDBにて各リリースノートを個別レコード扱いにする必要があります。追加日付で並べるわけです。
NotionAPIがブロックの間への挟み込みに対応してくれればリリースノートで最新順に並べて追加することも可能になります。今後に期待しましょう。