A Node.js server for GitHub app to assist external contributors and save maintainers' time
- When an external contributor (not the internal team) raises a PR, post a comment to sign CLA and label PR
Pending CLA
- On signing CLA, remove
Pending CLA
label from all the PRs of that user. Never ask that user to sign the CLA on any of our repo in future - On
rudder-transformer
PR merge, post a comment to raise PR inintegrations-config
- On
integrations-config
PR merge, psot a comment to join Slack's product-releases channel to get notified when that integration goes live - On
integrations-config
PR merge, post a comment to raise PR inrudder-docs
- List of open PRs by external contributors
- Node.js 20 or higher
- A GitHub App subscribed to Pull Request events and with the following permissions:
- Pull requests: Read & write
- Metadata: Read-only
- Your GitHub App Webhook must be configured to receive events at a URL that is accessible from the internet.
- (Only for local development) A tunnel to expose your local server to the internet (e.g. smee, ngrok or cloudflared)
- Clone this repository.
- Create a
.env
file similar to.env.example
and set actual values. If you are using GitHub Enterprise Server, also include aENTERPRISE_HOSTNAME
variable and set the value to the name of your GitHub Enterprise Server instance. - Install dependencies with
npm install
. - Start the server with
npm run server
. - Ensure your server is reachable from the internet.
- If you're using
smee
, runsmee -u <smee_url> -t http://localhost:3000/api/webhook
.
- If you're using
- Ensure your GitHub App includes at least one repository on its installations.
- Register a GitHub app for your GitHub organization. Make sure to activate the webhook with webhook url
https://YOUR_WEBSITE/api/webhook
in your app with a secret. Enable Permissions & Events as you may need, at minimum pull_request and issue related events should be enabled. - Install your GitHub app in all the repos where you need this app.
- Clone this repo OR download the
build/docker-compose.yml
to install via dockerhub image - Update
docker-compose.yml
environment variables with the details received from the step 2
To convert GitHub App's private key to base64, use this command -
openssl base64 -in /path/to/original-private-key.pem -out ./base64EncodedKey.txt -A
- Run
docker-componse build
to build the service - Run
docker-compose up
to create and start the container - Test by visiting
http://localhost:3000
OR whateverWEBSITE_ADDRESS
environment variable you've configured
With your server running, you can now create a pull request on any repository that
your app can access. GitHub will emit a pull_request.opened
event and will deliver
the corresponding Webhook payload to your server.
The server in this example listens for pull_request.opened
events and acts on
them by creating a comment on the pull request, with the message in message.md
,
using the octokit.js rest methods.
To keep things simple, this example reads the GITHUB_APP_PRIVATE_KEY
from the
environment. A more secure and recommended approach is to use a secrets management system
like Vault, or one offered
by major cloud providers:
Azure Key Vault,
AWS Secrets Manager,
Google Secret Manager,
etc.