特定のブランチへのプッシュをgithubからdiscordに通知をする方法


# はじめに
チーム開発をしていて特定のブランチへのプッシュをdiscordに通知したいなと思い、意外と面倒だったのでメモを残しておきます。
今回はmainとdevの２つのブランチを対象とします。
プルリクエストにも対応したものとなっているはずです。

# 方法
### Discord上の操作
githubからdiscordに通知を飛ばす方法自体は、@toshiponさんが丁寧に解説されているので、そちらを参照してください！
https://qiita.com/toshipon/items/2a1513b584650dcd81c1

### GitHub上の操作
- GitHub上でリポジトリのSettings＞（左のタブの）Secrets And variablesからRepository secretsに環境変数を追加
    - 今回は、Discordから発行されたのURLからWEBHOOK_IDとWEBHOOK_TOKENを作成する
- GitHub上で .github/workflows/ディレクトリを作る（ディレクトリの作成はnew files において「/」を入力することでできる）
- github actionを作る
    - 今回はdiscord.ymlを作成します
- Settings＞WebhooksにおいてDiscordのURLを設定する
- Let me select individual events.を選択し、Workflow jobs と　Workflow runs にチェックを付ける
    - ２つにチェックをつける必要があるかはわからないです
- Update Webhookをクリックして完了

### discord.ymlの内容

```yaml:.github/workflows/discord.yml

name: Discord Message Notify

on:
  push:
    branches: 
    - main
    - dev
  pull_request:
    branches:
    - main
    - dev

jobs:
  notify_discord_of_push:
    name: Get Commit Message
    runs-on: ubuntu-latest
    steps:
    - name: Check out repo's head branch
      uses: actions/checkout@v2.4.0
      with:
          ref: ${{ github.head_ref }} #For pull_request events, GITHUB_REF contains the merge branch (refs/pull/:prNumber/merge).
    - name: Get commit message
      run: |
        echo "Commit_Message=$(git log --pretty=oneline --all --abbrev-commit)" >> $GITHUB_ENV
    - name: Notify discord
      uses: appleboy/discord-action@0.0.3
      with:
        webhook_id: ${{ secrets.WEBHOOK_ID }}
        webhook_token: ${{ secrets.WEBHOOK_TOKEN }}
        color: "#48f442"
        username: "GitHub Bot"
        args: "${{ github.event_name }} by @${{ github.actor }} \nmessage: ${{ env.Commit_Message }}"

```

# 補足
[GitHub Actionsのドキュメント](https://docs.github.com/ja/actions)
<br>
```yml
- name: Check out repo's head branch
  uses: actions/checkout@v2.4.0
  with:
      ref: ${{ github.head_ref }} #For pull_request events, GITHUB_REF contains the merge branch (refs/pull/:prNumber/merge).
```
headブランチにチェックアウトします。
<br>
```yml
- name: Get commit message
  run: |
    echo "Commit_Message=$(git log --pretty=oneline --all --abbrev-commit)" >> $GITHUB_ENV
```
コミットメーセージを取得し、GITHUB_ENV 環境ファイルに書き込みます。
[環境変数を GITHUB_ENV に書き込む例](https://docs.github.com/ja/actions/using-workflows/workflow-commands-for-github-actions#example-of-writing-an-environment-variable-to-github_env)
<br>
```yml
- name: Notify discord
  uses: appleboy/discord-action@0.0.3
  with:
    webhook_id: ${{ secrets.WEBHOOK_ID }}
    webhook_token: ${{ secrets.WEBHOOK_TOKEN }}
    color: "#48f442"
    username: "GitHub Bot"
    args: "${{ github.event_name }} by @${{ github.actor }} \nmessage: ${{ env.Commit_Message }}"
```
DiscordのWebhookを使用してメッセージを送信します。
args: の部分でDiscordに送信するメッセージ内容を指定しています。
[appleboy/discord-actionのリポジトリ](https://github.com/appleboy/discord-action)を使用させていただきました。

# 例
以下のようなメッセージが通知されると思います
![スクリーンショット 2023-03-17 19.29.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3289319/424c6d9b-1cc1-c437-0d70-23358534e4d7.png)

# おわりに
```yml
 echo "Commit_Message=$(git log --pretty=oneline --all --abbrev-commit)" >> $GITHUB_ENV
```
の部分で時間がかかってしまいました。
runs-on: のところでubuntu-latestを設定しているため、Ubuntu環境でのコマンドを書けば良いのですが、書いたことがなかったため大変でした。
コマンドの勉強にもなったということで！

# 参考文献
https://zenn.dev/snowcait/articles/903d86d668fcb7