DEV Community

Nahuel Segovia
Nahuel Segovia

Posted on • Updated on

Gitlabnotifications, my new package to handle Gitlab web hooks events as notifications

I have been working in a library that allows you to receive Gitlab web hook events as notifications.

How to install?

npm install express
npm install gitlabnotifications
Enter fullscreen mode Exit fullscreen mode

Basic configuration

If you need to send notifications only one platform at time, just delete its configuration lines

const { GitlabNotifications } = require('gitlabnotifications');
const express = require('express');

const app = express()
app.use(express.json());
app.listen(3000, function () {
});


const sendNotificationsTo = {
    configuration: [
      {
        telegram: {
          token: 'your_telegram_token',
          chat_id: 'your_chat_id',
        },
      },
      {
        slack: {
          workspace_id: 'your_workspace_id',
          channel_id: 'your_slack_channel_id',
          token: 'your_slack_app_token',
        },
      },
    ],
  };

const myMiddleware = (req, res) => {
 /*Your custom middleware has to return true if everything it's okay
  and return false if isn't */
  return true;
}

const gitlabNotificationsService = new GitlabNotifications(
  ['/gitlab-webhook'], //Webhooks urls directions previously configured in Gitlab
  false, //Set in true if you want to send custom notification messages
  null, // Custom messages (if needed)
  sendNotificationsTo,
  app, //Your express instance
  myMiddleware
);


gitlabNotificationsService.connection()

Enter fullscreen mode Exit fullscreen mode

How to use custom notifications messages?

For more information about to get events values you can visit the official gitlab web hooks documentation
https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html

You can declare an object that contains all custom message handlers like this.


const customMessages = {
  pushMessage: (eventData) => `Custom push message: ${eventData.user_username} pushed to ${eventData.project.name}`,
  issueMessage: (eventData) => `Custom issue message: ${eventData.user.username} created an issue in ${eventData.project.name}`,
  commentMessage: (eventData) => `Custom comment message: ${eventData.user.username} commented on something`,
  tagMessage: (eventData) => `Custom tag message: A new tag ${eventData.ref} was created in ${eventData.project.name}`,
  mergeRequestMessage: (eventData) => `Custom merge request message: ${eventData.user.username} created a merge request in ${eventData.project.name}`,
  issueTaskMessage: (eventData) => `Custom task message: ${eventData.user.username} created a merge request in ${eventData.project.name}`,
};

const gitlabNotificationsService = new GitlabNotifications(
  ['/gitlab-webhook'], 
  true, //Set in true if you want to send custom notification messages
  customMessages, // Custom messages (if needed)
  sendNotificationsTo,
  app, //Your express instance
  myMiddleware
);

gitlabNotificationsService.connection()

Enter fullscreen mode Exit fullscreen mode

Image description

Top comments (2)

Collapse
 
bcouetil profile image
Benoit COUETIL 💫

Hey ! Thanks for sharing.

Could you explain what it does exactly, as an introduction, and how it is different than mails and notifications of mail app ?

Collapse
 
nahuelsegovia profile image
Nahuel Segovia

Hey! Sorry for the delay.
This package allows you to handle different webhooks as notifications.

I wrote it because, in my previous work, we needed to know when someone creates and merges requests in our GitLab server instance, but we needed to receive these notifications on Slack or Telegram, so I decided to integrate webhooks actions with those platforms.

Then I added more functionalities like comments notifications, tag creation notifications, issues, and push notifications.

I will update it with some changes probably this month :)