🔔

GitHub リポジトリの更新を Nostr へ通知する

2023/09/01に公開

概要

GitHub リポジトリの更新は GitHub Actions ワークフローを使うと簡単に拾うことができます。
トリガーされたら Nostr へ通知します。

そもそも Nostr とは

こちらに軽くまとめてあります。

ワークフロー

onjobs.if で Pull request がマージされたときにトリガーし snow-actions/nostr で投稿します。

https://github.com/SnowCait/nostter/blob/1ad29cd57958b128adc0ab6e90b1615c7bafabeb/.github/workflows/notify.yml

投稿

通常の投稿は NIP-01 kind 1 です。
vars.NOSTR_RELAYSsecrets.NOSTR_PRIVATE_KEY はリポジトリ設定の Secrets and variables > Actions から設定しておきます。

jobs:
  notify:
    if: ${{ github.event.pull_request.merged == true }}
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: snow-actions/nostr@v1.6.0
        with:
          relays: ${{ vars.NOSTR_RELAYS }}
          private-key: ${{ secrets.NOSTR_PRIVATE_KEY }}
          content: |
            #nostter ${{ github.event.pull_request.title }} 
            ${{ github.event.pull_request.html_url }}
          tags: |
            - ["t", "nostter"]

※ハッシュタグがなければ tags は不要です。

ユーザーステータス

また NIP-38 kind 30315 でユーザーステータスを更新できます。
ずっと表示しておくのも何なので 12 時間で expire するようにします。

jobs:
  user-status:
    if: ${{ github.event.pull_request.merged == true }}
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - run: echo "expiration=$(date +%s --date '12 hours')" >> $GITHUB_ENV
      - uses: snow-actions/nostr@v1.6.0
        with:
          relays: ${{ vars.NOSTR_RELAYS }}
          private-key: ${{ secrets.NOSTR_PRIVATE_KEY }}
          kind: 30315
          content: |
            #nostter ${{ github.event.pull_request.title }}
          tags: |
            - ["d", "general"]
            - ["t", "nostter"]
            - ["r", "${{ github.event.pull_request.html_url }}"]
            - ["expiration", "${{ env.expiration }}"]

参考

アイデアはかすてらふぃさんから。
https://nostter.vercel.app/note12uue4eur4xprzdw6wh8ugyvj538df37s7kfaxux6v2m68nh2v2ts9epuku

おまけ:その他のプラットフォームへの通知

https://zenn.dev/snowcait/articles/a8fe50fac7125c

Discussion