要件 ​
- 逐次、タイムライン的な形で更新できる
- Markdown で入力できる
- クローズできる
- タグをつけられる
- ブログ記事と共有する
- https://www.codingfeline.com/tags/ にまとめて表示できる
 
 
- ブログ記事と共有する
- ブログ本体のデプロイ毎に GitHub API を使いすぎないようにする
- Issue の更新トリガーで JSON を生成するような感じがよさそ
 
- 並び順は作成の降順?
- 各コメントにアンカーつけたい
# yshrsmz/scraps
name: dispatch scrap update
on:
  issues:
  issue_comment:
jobs:
  create-scrap:
    # yshrsmz.github.io の workflow を参照
    uses: yshrsmz/yshrsmz.github.io/.github/workflows/_create-scrap.yml@scraps
    with:
      issue_number: ${{ github.event.issue.number }}
    secrets:
      target_github_token: ${{ secrets.GITHUB_TOKEN }}# _create-scrap.yml
jobs:
  create-scrap:
    runs-on: ubuntu-latest
    steps:
      - name: create scrap
        # action も workflow も同じレポジトリ内ではあるが、ここもフルパスで指定する必要有り
        uses: yshrsmz/yshrsmz.github.io/packages/action-create-scrap@scraps
        with:
          issue_number: ${{ github.event.inputs.issue_number }}
          github_token: ${{ secrets.target_github_token }}repository_dispatch するか、 yshrsmz.github.io を clone & push するか
repository_dispatch だと各レポジトリで PAT が必要になるから、 clone & push のほうが楽ぽい
ページネーション、これでいけるらしい
const comments = await octokit.paginate(
    octokit.rest.issues.listComments,
    {
      ...repo,
      issue_number: issueNumber,
      per_page: 10,
    },
    (response) => response.data,
  )commit は git config が必要
credential は @actions/core に token を与えると persist してくれる
vitepress で JSON からページを描画するには
が必要
paths loader は本文を content として渡すことができるが、html か Markdown を想定しているようなので、今回の用途には合わないdata loader を別で作る必要あり
data loader で MarkdownIt をかませる必要ありimport { createMarkdownRenderer, type SiteConfig } from 'vitepress'
export default {
  watch: ['data/scraps/*.json'],
  async load(watchedFiles: string[]) {
    // config は VITEPRESS_CONFIG
    const config: SiteConfig = (global as any).VITEPRESS_CONFIG
    const md = await createMarkdownRenderer(
      // ...
    )
    return watchedFiles
      .map((file) => readFileSync(file, 'utf-8'))
      .map<Scrap>((json) => JSON.parse(json))
      .map((scrap) => {
        return {
          ...scrap,
          body: md.render(scrap.body),
          comments: ... // comments の body も md.render() する
        }
      })
  }
}echo '${{ needs.create-scrap.outputs.output }}' > ./packages/blog/data/scraps/${{ github.event.issue.number }}.jsonだと、JSON に含まれる single quote が消えてしまう 🤔
一度環境変数に入れてあげればいけそう
- run: |
    echo $SCRAP_JSON > ./packages/blog/data/scraps/${{ github.event.issue.number }}.json
  env:
    SCRAP_JSON: ${{ needs.create-scrap.outputs.output }}変数パターンだと連続したスペースがまとめられちゃってそう。インデントが崩れる。
double quote で囲ってあげるといける
  - run: |
-     echo $SCRAP_JSON > ./packages/blog/data/scraps/${{ github.event.issue.number }}.json
+     echo "$SCRAP_JSON" > ./packages/blog/data/scraps/${{ github.event.issue.number }}.json
    env:
      SCRAP_JSON: ${{ needs.create-scrap.outputs.output }}アンカーは issue/comment の node_id を使うと良さそう。
node_id は GraphQL API の id に相当するので、将来的に(あるかどうか知らんけど) GraphQL API に乗り換えるとしたらはかどりそ
残作業
除外設定のラベルをつけるのがよさそ そっちなら余計なラベルをフィルターする処理も不要
このスクラップはに完了しました