https://github.com/lfilho/bitbucket-slack-pr-hook
Receive Pull Requests notifications from BitBucket and send them to Slack.
https://github.com/lfilho/bitbucket-slack-pr-hook
Last synced: about 2 months ago
JSON representation
Receive Pull Requests notifications from BitBucket and send them to Slack.
- Host: GitHub
- URL: https://github.com/lfilho/bitbucket-slack-pr-hook
- Owner: lfilho
- License: mit
- Created: 2014-09-26T17:06:41.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2021-09-02T05:59:36.000Z (almost 4 years ago)
- Last Synced: 2025-04-13T11:53:34.333Z (about 2 months ago)
- Language: JavaScript
- Homepage:
- Size: 65.4 KB
- Stars: 63
- Watchers: 3
- Forks: 22
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
bitbucket-slack-pr-hook
=======================[](https://travis-ci.org/lfilho/bitbucket-slack-pr-hook)
Receive Pull Requests notifications from Bitbucket and send them to Slack.
## Features
As for 2014-09-26 we support all BitBucket's action types:
* created
* updated
* approve
* unapprove
* declined
* merged
* comment_created
* comment_deleted
* comment_updatedSee Bitbucket's official docs: [Pull Request POST hook management](https://confluence.atlassian.com/display/BITBUCKET/Pull+Request+POST+hook+management)
## Caveats
Bitbucket does not provide all necessary data in actions responses. For example, for a `comment_*` action we don't have the PR number, link nor name.
So all we can do is something like "Comment posted for *a* PR" and then the snippet of the comment. But currently there's no way to know where did this comment came from.## Requirements
* [Bitbucket](https://bitbucket.org/) repository with admin rights
* [Slack](https://slack.com/) Incoming Webhook Url: Get your Slack token from your "integrations" page
* [Node.js](http://nodejs.org/) **OR** [Docker](https://www.docker.com/)## Optional Features
### Mention reviewers
If you want to automatically notify the PR reviewers, you can set to `true` the environment variable `MENTION_REVIEWERS`.
It will assume that the Bitbucket username will be the same in Slack. If not, the user could add a "highlight word" in their preferences for their username used in Bitbucket.
## Configuration
The configuration variables are set with environment variables and/or using `.env` file (environment variable takes preference over `.env` file if found).
Environment Variable | Required | Description | Example
---------------------- | -------- | ----------- | ---------
SLACK_WEBHOOK | Y | The incoming hook url found on your Slack team's integration page | https://hooks.slack.com/services/XX/XXX/XXXX
SLACK_USERNAME | N | Username of the Slack bot. If not set, bot will default to integration settings. | BitbucketNotification
SLACK_CHANNEL | N | Channel to post notifications on. If not set, bot will default to integration settings. | RepositoryUpdate
MENTION_REVIEWERS | N | Set to true if you want to mention reviewers in slack channel | false
HEX_INFO | N | Hex color of updated, and created | #3498db
HEX_DANGER | N | Hex color of declined | #e74c3c
HEX_WARNING | N | Hex color of unapprove, comment: created, comment: deleted, and comment: updated | #f1c40f
HEX_SUCCESS | N | Hex color of merge, and approve | #2ecc71If you want to use `.env` file, copy the `example.env` as `.env` and modify it as needed.
Your configuration would look like the example below:```
PORT=5000
SLACK_WEBHOOK=https://hooks.slack.com/services/A123ka9/A123910a9d8/mkas929199sad83lmk7h
SLACK_USERNAME=AwesomeBot
SLACK_CHANNEL=Repository
HEX_SUCCESS=#2ecc71
HEX_DANGER=#e74c3c
```Note: Setting the `SLACK_USERNAME` or `SLACK_CHANNEL` will override the settings set on the incoming webhook integration page. If you want your team to edit any of these settings without redeploying, do not add them to your `.env` file.
**Important**: if you're going to use a `.env` file AND using Docker, edit it before building the Dockerfile.
When running the service in Docker container, the config values can be provided as parameters:
```
# Starts Docker container in daemonized mode
docker run -e PORT=5000 -e SLACK_TOKEN=123123 \
-e SLACK_DOMAIN=company -e SLACK_CHANNEL=channel \
-p 5000:5000 -d bitbucket-slack-pr-hook
```## Automated Installation
[](https://cloud.docker.com/stack/deploy/)
[](https://heroku.com/deploy)## Manual Installation
- [Local Infrastructure or Cloud Services](#local-infrastructure-or-cloud-services)
- [Docker](#docker)### Local Infrastructure or Cloud Services
1. Set up a server address in your local infrastructure that will serve this application (eg: `slackapi.mycompany.com` or `slackapi.heroku.com`)
2. Clone/download this repo to your chosen server
3. Configure your application according to the "Configuration" section above
4. Install NodeJS if you don't have it
5. Run `npm install` in the app's root folder**Important note**: make sure you don't have any firewall blocking the incoming TCP port (default is PORT 5000 as defined in the "Configuration" section above)
### Docker
Service can also be installed & deployed using [Docker](https://www.docker.com/) containers,
which makes it easy to setup the environment without worrying about the requirements.1. Clone/download this repo
2. Install Docker (using system packages in Linux, in Windows or Mac OS X you can use [Boot2docker](http://boot2docker.io/))
3. Start Docker service (or `boot2docker up`)
4. Build the Docker image:# Alternatively: npm run build-container
docker build -t bitbucket-slack-pr-hook .5. Start container with appropriate `-e` config parameters:
docker run -e PORT=5000 -e SLACK_WEBHOOK=webhookurl \
-p 5000:5000 -d bitbucket-slack-pr-hook6. Ensure the container is running (you should also be able to access the service using web browser: `http://:5000/`).
**Note:** In Linux the `` is `localhost`, with Boot2docker use the IP reported by the command: `boot2docker ip`
## Setting up the Bitbucket Repository
1. In your main Bitbucket repository, go to Settings > Hooks and create a new `Pull Request POST` hook
2. Set up the URL as `http://:{/}`.
* `` is your host FQDN or its IP address
* `` is either 5000 or any other you defined in the configuration section
* `` is an optional Slack channel where you want to receive this specific notifications - if it's not defined here it will use the one you defined in Configuration -section.## Activate
### Via plain node
1. Run `npm start` (or `node server.js`) to fire up the application (you can do `node server.js &` to run it as a daemon in your Linux box)
### Via Docker
1. Run `npm run build-container` to build the container
2. Run `npm run start-container` to start the container and the server inside it
3. When needed, you can use `npm run stop-container` and `npm run reload-container`## Credits
This repo was inspired by: https://github.com/kfr2/bitbucket-pull-request-connector