Notify Bot : Github Action + Workflow
Tags: actionshackathon21, github, actions, javascript
Published: 2021-12-07 23:19:32


### My Workflow
[Note]: # (Please make sure the project links to the appropriate GitHub Actions repository, and includes [an open source license](https://choosealicense.com/) and README.)

#### Motivation for Building building this Github Action :
If you are Open Source Maintainer or Contributor or a developer working with team which has huge number of members then you have definitely used Slack at one point. And as a developer we even used Github. 
Since I m Open Source Contributor and Maintainer many a times I have to find issues and take help regarding those from community members to solve that issue or direct the beginner contributor to proper issue . And mostly I have communicate and collaborate with other maintainer and contributors on Slack so I thought building this action which will surely save time of Maintainers and contributors .

#### Features:
1. Greet - When contributor of the project creates pull request a "Thank you" greet is send .
2. Issue Notification - When someone creates new issue few context like issue title, issue creator/contributor username and link to the github issue is shared on Slack channel.
3. Issue Notification - When someone creates pull request few context like issue title, pull request creator/contributor username and link to the github issue is shared on Slack channel.

#### What will this github action do? If I use it in my github project!!
- If you are maintainer of project this github action will surely save your time . And let help newbie contributors effectively and discuss them about the following issue on slack. You can direct new contributors to the good first issue and direct them properly.

#### Submission Category: 
Maintainer Must-Haves


#### Yaml File or Link to Code:
{% github StarTrooper08/Notify-Bot %} 


#### How to get and configure Tokens :
To use this action + workflow we need 3 Tokens/API keys/Security keys:
They are as following:
1. Github Token : You don't need worry about this token since it will be automatically configured by Github.
2. Tenor gif Token: 
- Go ahead and visit the [tenor gif developer portal](https://tenor.com/gifapi/documentation) and sign up with gmail and get your free api key.
- After getting your Tenor Token you can go to your github repository where you want to setup this action then go to settings of that repository .
- Search for 'secrets' option. And then click on new repository secrets.
- Give it a name and paste the token(eg.name: TENOR_TOKEN value: copied token from tenor gif portal).
3. Slack App Token:
- Go to [Slack App portal](https://api.slack.com/apps) and click on 'Create an App'
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y30epf7blbxmbbs7viuj.JPG)

- After clicking on 'create an app' you will be asked whether you want to start from scratch or from app manifest we will go for 'from scratch option' 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/166sknhw588v82vxbme8.JPG)

- Then one popup will arise asking for app name and to use it in which slack workspace.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ge7re1p417kgzuwhedkl.JPG)

- Now search for Review scopes something like this option. Click on that button.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j8on84j6xd8nv6itgpl2.JPG)

- And add 2 scopes. Shown in the figure below.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwqaztuzrvqyl54ibebd.JPG)

- You will see OAuth and Permissions option in the left side bar. Go to that option and scroll little down and click on  'install to workspace' to the workspace(workspace which we selected at the start)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vcdq8k5xbw4hv1wtok0p.JPG)

- Allow the App to join the workspace.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aisyc72kjvks73d56aa8.JPG)

- After this above step you will see your slack app token copy it and store it in repository secrets similar to tenor token.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ei5utel6vroemt2flga.JPG)

- Lastly invite your app into the slack channel you want.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31m53id9jx9njl82dz6a.JPG)

#### How to setup this action + workflow on our repository:
- After the configuring the token stuff you are just few steps away.
- Create `.github/workflows/my_action.yml` directory.
- After that paste this yml code into `my_action.yml` file.

```
name: Notify Bot

on:
  pull_request:
      branches: [ master , main ] 
      types: [opened,closed]
  issues:
      types: [opened]
  

jobs:
  Greet:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: StarTrooper08/Notify-Bot
        with:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
          TENOR_TOKEN: ${{secrets.TENOR_TOKEN}}
          

  notifyPR:
    
    runs-on: ubuntu-latest
    steps:
    - name: Notify slack about PR
      env:
        SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
      uses: abinoda/slack-action@master
      with:
        args: '{\"channel\":\"channel_id\",\"blocks\":[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Github Pull Request:* ${{ github.event.pull_request.title }}\"}},{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Contributor Github Username:* ${{ github.event.pull_request.user.login }}\n*Request State:* ${{ github.event.pull_request.state }}\"}},{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"<${{ github.event.pull_request.html_url }}|View Pull Request>\"}}]}'


  notifyissue:
    
    runs-on: ubuntu-latest
 
    steps:
    - name: Notify slack about issue
      env:
        SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
      uses: abinoda/slack-action@master
      with:
        args: '{\"channel\":\"channel_id\",\"blocks\":[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Github Issue:* ${{ github.event.issue.title }}\"}},{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Contributor Github Username:* ${{ github.event.issue.user.login }}\n*Issue State:* ${{ github.event.issue.state }}\"}},{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"<${{ github.event.issue.html_url }}|View Issue>\"}}]}'

```

> **Note:** Wherever I have written `channel_id` in `args` of the `notifyissue` and `notifyPR` jobs in my_action.yml file put the id of the channel where you have install your slack app. You will get the channel id in the link of slack workspace
`https://app.slack.com/client/[workspace ID]/[channel ID]`


Congrats You have Successfully added the Github Workflow🎉🚀.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n528erea22378vtio15w.png)
Now you can create new pull request and issue and see the Magic happening ✨!!!

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fog938ybi3qxkvvw450n.png)