SlackにGithub Actionsのステータスを通知する

# 概要

- SlackにGithub　Actionsのステータスを通知する方法を簡単にまとめる。

# 前提

- Slackのワークスペースにてチャンネルを作る権限を持っていること。
- SlackのワークスペースにAppを追加する権限を持っていること。
- すでに正常動作するGithub Actionsのワークフローのyamlファイルが存在すること。

# 方法

1. Slack側の準備
    1. 通知先のチャンネルを作成する。
    1. Slackのサイドバーの「アプリを追加する」をクリックする。
    1. 検索窓で「Incoming WebHooks」と入力し「追加」をクリックする。

        ![App_-_DokuPro_-_Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/a620223a-9683-cdb7-8772-5568b5705c5d.png)

    1. ブラウザが立ち上がるのでワークスペースが間違えていないことを確認して「Slackに追加」をクリックする。

        ![Incoming_Webhook___Slack_App_ディレクトリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/81e9c1f4-82ca-4d4d-c7eb-a07958df6f7f.png)

    1. 「チャンネルを選択」で先に作ったチャンネルを指定、「Incomming WebHookインテグレーションの追加」をクリックする　。

        ![Incoming_Webhook___DokuPro_Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e2b74337-0d38-51ca-55f2-96063e267312.png)

    1. Webhook URLをコピーしてメモしておく。

        ![Incoming_Webhook___Slack_App_ディレクトリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/f8133ad1-eef9-a050-1f8f-f8e612ebb306.png)

    1. 同じ画面の下の方に行くと「例」があるのでこれをコピーしてターミナルなどに貼り付けて実行すると先のチャンネルに例の投稿が行われる。

    ![Incoming_Webhook___Slack_App_ディレクトリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/21f76de3-a509-8118-4801-2281d1493b2b.png)

1. Githubの設定
    1. Githubの当該のリポジトリに移動する。
    1. 当該のリポジトリの「Setting」をクリックする。
    1. サイドバーの「Secrets and variables」をクリックする。
    1. 「Actions」をクリックする。
    1. 「New repository secret」をクリックする。

        ![Actions_secrets.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/0cda07c5-aa08-b889-a132-a326e8589118.png)

    1. 「Name」を`SLACK_WEBHOOK_URL`として、「Secret」をSlackのWebhook URLに設定して「Add secret」をクリックする。

        ![Actions_secrets.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/b07e62df-557a-679f-ea3b-9607596a1df7.png)
        
1. ワークフローファイルの修正
    1. すでに下記のようなワークフローのyamlが記載されていたとする。

        ```yaml
        name: 'do php-cs-fixer'
        
        on:
          pull_request:
            types: [opened, reopened, synchronize]
          
        jobs:
          do_php-cs-fixer:
            runs-on: ubuntu-latest
            steps:
              - uses: actions/checkout@v3
              - name: init
                run: make use_actions_init
              - name: lint-check
                run: make use_actions_lint_all_fix_plan
        ```

    1. 下記のように当該のワークフローを修正する。

        ```yaml
        name: 'do php-cs-fixer'
        
        on:
          pull_request:
            types: [opened, reopened, synchronize]
          
        jobs:
          do_php-cs-fixer:
            runs-on: ubuntu-latest
            steps:
              - uses: actions/checkout@v3
              - name: init
                run: make use_actions_init
              - name: lint-check
                run: make use_actions_lint_all_fix_plan
              - name: Notify Slack
                if: always()
                uses: rtCamp/action-slack-notify@v2
                env:
                  SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
                  SLACK_COLOR: ${{ job.status }}
                  SLACK_MESSAGE: 'do php-cs-fixer ${{
                    job.status }} :white_check_mark: or :x:'
                  SLACK_USERNAME: Github Actions
                  SLACK_ICON_EMOJI: ':octocat:'
        ```

1. あとは当該のActionsが終わったら通知が発行される。
1. 下記のように通知が行われる。

    ![Cursor_と_02_notice_git_hub_actions_-_DokuPro_-_1_個の新しいアイテム_-_Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/ba555207-852d-22ac-b218-032eec586185.png)

1. ちなみにワークフローのステータスを取得している`job.status`の部分の説明は下記に記載されている。

https://docs.github.com/ja/actions/learn-github-actions/contexts#job-context