組織の GitHub Webhook を受け取り、非公開リポジトリのイベントを除いて、Discord の Webhook に転送する Worker です。組織の Webhook には、リポジトリの公開範囲で絞る設定がないため、間に挟んでいます。
X-Hub-Signature-256を検証する。合わなければ 401- 本文の
repository.privateがtrueなら、転送せずに 204 を返す。リポジトリを持たないイベント(組織のメンバーの変更など)は転送する - それ以外を、
<DISCORD_WEBHOOK_URL>/githubに、本文とイベントのヘッダーをそのまま転送する
秘密は wrangler secret put で入れます(リポジトリには入れません)。
GITHUB_WEBHOOK_SECRET: 組織の Webhook に設定する秘密DISCORD_WEBHOOK_URL: Discord の Webhook の URL(末尾に/githubは付けない)
組織の Webhook は、URL をこの Worker の URL にし、Secret に GITHUB_WEBHOOK_SECRET と同じ値を入れ、Content type を application/json にします。
デプロイ先の Cloudflare のアカウントは、設定ファイルに書かず、環境変数 CLOUDFLARE_ACCOUNT_ID で渡します。
pnpm test: 単体テストpnpm typecheck: 型の検査pnpm deploy: Cloudflare Workers にデプロイする(CLOUDFLARE_ACCOUNT_IDが要る)
次の 2 つのライセンスのどちらかを選んで使えます(SPDX の式では BSD-3-Clause OR Apache-2.0)。Funmary と同じです。
- BSD 3-Clause License (LICENSE-BSD-3-CLAUSE)
- Apache License, Version 2.0 (LICENSE-APACHE-2.0)