Mergentle Reminder is a Slack bot that periodically checks configured GitLab projects and groups for opened merge requests, then sends a summary list of merge requests to review to the configured Slack channel.
The name "Mergentle Reminder" is a playful combination of the words "merge" and "gentle." The name emphasizes the purpose of the project, which is to gently remind the team to review open merge requests.
- Sends a summary list of merge requests to a Slack channel.
- Supports GitLab projects and groups.
- Filters out draft merge requests.
- Retrieves approvers and additional merge request information.
- Configurable with a YAML file or environment variables.
You can configure the Mergentle Reminder bot using a config.yaml file or by setting the environment variables.
Example config can be found in config.yaml.example.
In addition to the config.yaml file, the following environment variables can be set:
GITLAB_URL: The URL of your GitLab instance (defaults to https://gitlab.com).GITLAB_TOKEN: Your GitLab personal access token.SLACK_WEBHOOK_URL: The webhook URL for the Slack channel where the bot will send messages.PROJECTS: A comma-separated list of GitLab project IDs to check for merge requests.GROUPS: A comma-separated list of GitLab group IDs to check for merge requests.CONFIG_PATH(optional): The path to the config.yaml configuration file. Defaults to config.yaml.CRON_SCHEDULE(optional): The cron schedule for the bot to run. See Run mode and supported format.AUTHORS(optional): A comma-separated list of user IDs or usernames to filter merge requests by author.
Environment variables take precedence over the config.yaml file.
The bot can run in two modes: one-shot and cron.
When no CRON_SCHEDULE variable or cron_schedule config parameter specified, the bot will execute in one-shot mode.
In this mode, the bot will check for merge requests and send a message to the Slack channel once, then exit.
It is useful for testing or integrating with something like CI pipeline or Kubernetes CronJob.
When the cron schedule is specified, the bot will run in cron mode. In this mode, the bot will check for merge requests and send a message to the Slack channel according to the specified cron schedule. Well suited for running as as a container or daemon process.
Build the application:
go buildRun the application:
GITLAB_TOKEN=<your_gitlab_token> SLACK_WEBHOOK_URL=<your_slack_webhook_url> ./mergentle-reminderBuild the Docker image:
docker build -t your-dockerhub-username/mergentle-reminder:latest .Run the Docker container:
docker run -e GITLAB_TOKEN=<your_gitlab_token> -e SLACK_WEBHOOK_URL=<your_slack_webhook_url> -v $(pwd)/config.yaml:/config/config.yaml your-dockerhub-username/mergentle-reminder:latestCreate a configmap for the config.yaml file:
kubectl -n mergentle-reminder create configmap mergentle-reminder-config --from-file=config.yamlCreate a secret for the GitLab API token and Slack webhook URL:
kubectl -n mergentle-reminder create secret generic mergentle-reminder-secrets --from-literal=gitlab-token=<your_gitlab_token> --from-literal=slack-webhook-url=<your_slack_webhook_url>Edit schedule in k8s/cronjob.yaml to specify the desired schedule. Set to run every hour by default.
See the CronJob documentation for more information.
Make sure that the config does not include cron_schedule field, see
Apply the Kubernetes manifests:
kubectl apply -f k8s/The application will now run as a CronJob in your Kubernetes cluster, periodically sending reminders to the configured Slack channel.
It is possible to create a new job manually for testing purposes:
kubectl -n mergentle-reminder create job --from=cronjob/mergentle-reminder test-job
kubectl -n mergentle-reminder delete jobs/test-jobThis project can be deployed as a serverless AWS Lambda function using the AWS Cloud Development Kit (CDK).
-
Prerequisites:
-
Setup the CDK Project: Navigate to the
cdkdirectory and install the dependencies:cd cdk npm install -
Configure the Application: Create a
.envfile in thecdkdirectory by copying the example:cp .env.example .env
Edit the
.envfile and provide your actual secrets and configuration. -
Deploy to AWS: From the
cdkdirectory, run the following command to deploy the application to your AWS account:cdk deploy
The CDK will create a new Lambda function, an EventBridge rule to run it on a schedule, and configure the necessary environment variables.

