softdevteam / mattermost-github-integration

GitHub integration for Mattermost
Other
79 stars 50 forks source link

Github integration for Mattermost

Inspired by mattermost-integration-gitlab this program creates a server using flask that listens for incoming GitHub event webhooks. These are then processed, formatted, and eventually forwarded to Mattermost where they are displayed inside a specified channel.

Requirements

System requirements

Application requirements

All requirements can also be installed using the command

pip install -r requirements.txt

Installation and usage

  1. Clone the repository
  2. Within the mattermostgithub directory, copy config.template to config.py and edit it with your details. For example:
USERNAME = "Github"
ICON_URL = "yourdomain.org/github.png"
MATTERMOST_WEBHOOK_URLS = {
    'default' : ("yourdomain.org/hooks/hookid", "off-topic"),
    'teamname/repositoryname' : ("yourdomain.org/hooks/hookid2", "repository-channel-id"),
    'teamname' : ("yourdomain.org/hooks/hookid3", "town-square"),
    'teamname/unimportantrepo' : None,
}
GITHUB_IGNORE_ACTIONS = {
    "issues": ["labeled", "assigned"],
}
SECRET = 'secretkey'
SHOW_AVATARS = True
SERVER = {
    'hook': "/"
,   'address': "0.0.0.0"
,   'port': 5000
}

Test the server with python server.py. For deployment, please consider using WSGI (more details here). For example to run using Gunicorn, execute:

gunicorn -b 0.0.0.0:5000 mattermostgithub:app

Alternatively, a Dockerfile is provided to run using Docker (see below).

Webhooks

GitHub messages can be delegated to different Mattermost hooks. The order is as follows:

Repositories can be blacklisted by setting them to None instead of (url, channel).

Ignore actions

Specific Github events can be ignored by adding GITHUB_IGNORE_ACTIONS to config.py. In the example above labeled and assigned events for issues are ignored, while opened, closed, etc. events will continue to show up on Mattermost.

Server settings

The server is listening by default on address 0.0.0.0, port 5000, and using / as base route. Make sure to point your Github webhooks to http://yourdomain.org:5000/.

If you have a proxy/load-balancer in front of your machine, and do not want to expose port 5000 to the outside, change the SERVER['hook'] value and redirect it to this service. For example, if SERVER['hook'] is /hooks/github, your Github webhooks would be http://yourdomain.org/hooks/github.

Secret

The secret key that can be set when setting up the Github webhook. If you don't want to use a secret, set the field to None.

Deploying with Docker

To deploy with Docker, make sure you have Docker installed and run:

docker build --rm=true -t mm-github .
docker run --rm -v "$(pwd)":/home/app -w /home/app -p 5000:5000 -ti mm-github

If you want to run in background mode, change the option --rm for -d.

Supported Events

Not all Github events are forwarded to Mattermost. Currently supported events are:

All other events will report back to GitHub with 400 Not Implemented.

Known issues