Skip to content

Repository files navigation

jobpin

GitHub Actions のジョブを監視して、完了・失敗を Slack に通知する bot。

使い方

Slack のチャンネルやスレッドで bot にメンションする。

@jobpin https://github.com/owner/repo/actions/runs/123456789
  • 受け付けると 👀 リアクションが付き、run が完了したら結果をスレッドに通知する
  • すでに完了している run はその場で結果を返信する
  • 1メッセージに複数の run URL を含めてもよい

アーキテクチャ

sequenceDiagram
    participant U as Slackユーザー
    participant B as jobpin
    participant D as DynamoDB
    participant G as GitHub API

    U->>B: @jobpin <run URL>
    B->>G: run 存在確認
    B->>D: ジョブ登録
    B->>U: 👀
    loop POLL_INTERVAL ごと
        B->>D: watching 中のジョブ取得
        B->>G: run status 確認
        alt completed
            B->>U: 結果をスレッドに通知
            B->>D: 通知済みに更新(TTLで自動削除)
        end
    end
Loading

設定

すべて環境変数で設定する。

変数 必須 デフォルト 説明
SLACK_BOT_TOKEN - Bot User OAuth Token (xoxb-)
SLACK_APP_TOKEN - App-Level Token (xapp-、Socket Mode 用)
GITHUB_TOKEN - PAT。設定時は PAT 認証
GITHUB_APP_ID - GitHub App の App ID
GITHUB_APP_PRIVATE_KEY - GitHub App の秘密鍵(PEM 本文)。_PATH とどちらか一方を指定
GITHUB_APP_PRIVATE_KEY_PATH - GitHub App の秘密鍵ファイルパス
DYNAMODB_TABLE jobpin テーブル名(権限があれば無い場合に自動作成)
DYNAMODB_ENDPOINT - DynamoDB Local 等のエンドポイント
POLL_INTERVAL 30s 監視間隔
WATCH_TTL 168h 監視レコードの保持期間
MAX_WATCH_DURATION 1h 監視の最大時間
ACK_REACTION eyes 受付時のリアクション
NOTIFY_TEMPLATE_SUCCESS 下記 成功時の通知テンプレート
NOTIFY_TEMPLATE_FAILURE 下記 失敗時の通知テンプレート
NOTIFY_TEMPLATE_TIMEOUT 下記 監視打ち切り時の通知テンプレート

GITHUB_TOKENGITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY(または GITHUB_APP_PRIVATE_KEY_PATH)のどちらかが必須。GitHub App の場合、installation は対象リポジトリから自動解決する。

AWS 認証は SDK 標準(AWS_REGIONAWS_PROFILE、IAM ロール等)に従う。

通知テンプレート

Go の text/template 形式。使える変数: .Requester .Owner .Repo .RunID .RunURL .WorkflowName .RunNumber .Status .Conclusion .Branch

デフォルト:

成功: <@{{.Requester}}> :white_check_mark: *{{.WorkflowName}}* (#{{.RunNumber}}) が成功しました\n{{.RunURL}}
失敗: <@{{.Requester}}> :x: *{{.WorkflowName}}* (#{{.RunNumber}}) が {{.Conclusion}} で終了しました\n{{.RunURL}}

監視打ち切り(NOTIFY_TEMPLATE_TIMEOUT)は使える変数が異なり、.Requester .Owner .Repo .RunID .RunURL のみ。

デフォルト:

打ち切り: <@{{.Requester}}> :hourglass_flowing_sand: {{.RunURL}} は監視期限を超えたため打ち切りました

Slack App の設定

  1. Slack API: Your Apps で「Create New App」→「From a manifest」を選び、slack-app-manifest.yml を貼り付けて作成
  2. App-Level Token(connections:write)を発行して SLACK_APP_TOKEN に設定
  3. 「Install to Workspace」で発行される Bot User OAuth Token を SLACK_BOT_TOKEN に設定
  4. bot を対象チャンネルに招待

開発

cp .env.sample .env   # トークン等を記入(.env は gitignore 済み)
make up               # DynamoDB Local 起動
make run              # .env を読み込んで起動
make test
make build

Docker

docker build -t jobpin .
docker run --rm -e SLACK_BOT_TOKEN=... -e SLACK_APP_TOKEN=... -e GITHUB_TOKEN=... jobpin

About

github actionsのjobを監視してSlack通知してくれるくん

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages