LoginSignup
6
3

More than 1 year has passed since last update.

GitHub Actionsを使ってGitHub Discussionsの通知をSlackで受け取る

Last updated at Posted at 2021-12-21

この記事は岩手県立大学とか、岩手の人たち Advent Calendar 2021の 8 日目の記事です!

はじめに

現在、GitHub の Slack App では GitHub Discussions で Discussion やコメントが作成されたときの通知に対応していません。

そこで、GitHub Actions を使って、

  • Discussion の作成
  • Discussion へのコメントの作成

を Slack に通知するまでを記事としてまとめます。

Slack で Webhook の設定

Slack の Webhook の URL を用意しておきます。

以下の記事が参考になります。

GitHub Actions の設定

通知を受け取りたい GitHub Discussions のあるリポジトリに GitHub Actions の workflow を設定します。

workflow は以下のようになります。
jqを使う例がいくつかありましたが、一番シンプルなものにしました。)

.github/workflows/discussions-notice.yml
on:
  discussion:
    types: [created]
  discussion_comment:
    types: [created]
jobs:
  discussion_created:
    runs-on: ubuntu-latest
    if: github.event.discussion && !github.event.comment
    steps:
      - run: |
          curl -X POST -d '{ "text": "Created discussion: ${{ github.event.discussion.html_url }}" }' ${{ secrets.SLACK_WEBHOOK_URL }}
  discussion_commented:
    runs-on: ubuntu-latest
    if: github.event.discussion && github.event.comment
    steps:
      - run: |
          curl -X POST -d '{ "text": "Created discussion comment: ${{ github.event.comment.html_url }}" }' ${{ secrets.SLACK_WEBHOOK_URL }}

あとは、リポジトリのSettings > Secretsで取得した Webhook の URL をSLACK_WEBHOOK_URLとして登録してあげれば完了です。

解説

on:
  discussion:
    types: [created]
  discussion_comment:
    types: [created]

workflow を実行する event で、

  • discussion
    • Discussion のイベント
  • discussion_comment
    • Discussion へのコメントのイベント

です。

また、event には type があり、作成(created)、編集(edited)などの type ごとに event を発火させることができます。

  discussion_created:
    runs-on: ubuntu-latest
    if: github.event.discussion && !github.event.comment

    省略...

  discussion_commented:
    runs-on: ubuntu-latest
    if: github.event.discussion && github.event.comment

各 job についているifでは、Discussion が作成されたのか、Discussion へのコメントが作成されたのかを判定しています。

github.event.discussionは対象となった Discussion のオブジェクトが含まれているため、コメントをした際でもgithub.event.discussionにはオブジェクトが入っています。
また、Discussion へのコメントをした際には、github.event.commentにコメントの情報が入っています。そのため、github.event.commentの中身を確認し、Discussion か Discussion へのコメント化を判定しています。

実際に何が入っているかは以下のようにすると確認できます。

check_github_event_discussion:
  runs-on: ubuntu-latest
  steps:
    - run: echo "${{ toJSON(github.event.discussion) }}"

動作テスト

試しに Discussion を作成してみると、、、

無事に Slack 通知が来ました!

image.png

最後に

GitHub の Slack App で対応してほしい、、

追記

2022/01/25

GitHub の Slack App で Discussions が一部サポートされたみたいです。
Discussion コメントはまだなので、今後に期待ですね。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3