Gorrabot is a bot made to automate checks and processes in the development process.

Overview

Gorrabot is a Gitlab bot made to automate checks and processes in the Faraday development.

Features

Check that the CHANGELOG is modified

By default, merge requests MUST create a .md file inside the CHANGELOG/<current_version> folder. We do this because it is easier to write changelog messages after finishing working on the change than before releasing a new version. In the latter, we could easily forget what we did and write a lower quality changelog message.

When somebody publishes a ready to merge MR that didn't touch the changelog, gorrabot automaticaly sets it to WIP (work in process). Then the MR's author is required to touch the changelog, push a new commit and resolve the WIP status from the gitlab web.

Alternatively, if the MR's author doesn't consider useful to add a changelog entry for that change (e.g. when fixing typos or doing small refactors), he/she can add the no-changelog label to the merge request and this check won't be performed to it.

Issue state changing based on MR status

Get the issue related to a merge request by inspecting its source branch name (e.g tkt_community_1234_some_description). Then, when the status of the MR is updated, also update the labels and status of the related issue.

Gorrabot also adds a Closes #1234 text in the description, so GitLab closes the related issue when the MR is merged. Also, when a user sees the issue details he/she will have a link to its corresponding merge request.

Example actions (see the code of sync_related_issue app.py for the exact list):

  • Created WIP MR -> Label issue as accepted
  • Pending merge/approbal MR -> Label issue as test
  • Merged MR -> Close issue and delete status labels (accepted, test)
  • Closed MR -> Delete status labels (set to new)

Sometimes this actions aren't desired, like for example when an issue requires multiple merge requests to be considered as fixed. In this case, you can add the multiple-merge-requests label to the issue and its status and labels won't be modified by gorrabot.

Merge request field completion based on its issue

If a merge request doesn't have an assigned user, derive it from the assigned user of its related issue. Do the same with the MR's milestone.

Branch naming nomenclature check

If the source branch of a merge request doesn't match our nomenclature, note that in a comment. The merge request won't be set to WIP because of this, it is just a warning to avoid doing this the next time.

Merge request title check

When creating a merge request from the gitlab web, by default it derives its title from the source branch name. This is useful in many projects, but in Faraday it can be annoying because of our branch naming conventions.

For example, it wouldn't be useful to have a merge request titled Tkt community 1234 some description. A more concise title would be more helpful. If we wanted, we could know the related issue and target version just by looking at the source and target branches of the MR.

Like with the previous feature, this check will just leave a comment in the merge request if doesn't pass, so the user could avoid this the next time. There is no need to set it to WIP.

Automatic creation of upper versions MRs

When a community feature MR also needs changes in professional, the suggested way to proceed is to create a branch of professional/dev with both the changes of the community MR and the specific changes to professional. Then, open another merge request with target branch professional/dev.

Creating another merge request for the professional feature is tedious, so when the user pushes the professional branch, Gorrabot will detect this is an "upper version MR". Then, it will create a new MR with the same content as the community MR, but with a (professional edition) added in the title to properly differentiate both MRs.

The same thing happens when a professional branch conflicts with upper branches (if exists).

Gorrabot will also notify the user the MR was created. And when the community MR is merged, it will notify the user who merged it so they don't forget about merging the upper version MR too.

Check and report by slack

Gorrabot checks the status of the projects, and give a summary of:

  • Staled MR (both WIP and non-WIP) not update in a given amount of time
  • The accepted issues are less than a boundary
  • There is no issue waiting for a decision.

And gives each developer a summary of undesirable behaviour. Moreover, it gives a summary of the team to the REPORT users.

Staled MR and accepted issues

Based on the default concept of gitlab, this value is obtained by the gitlab API.

Waiting for decision issues

When the waiting-decision label is set in a issue, gorrabot will parse its description and look for a line starting with the prefix WFD: . After that prefix, there should be a comma-separated list of gitlab or slack users, whom decision is expected to resolve the issue.

In the case of gitlab users, you should reference them with an @, as the common gitlab behaviour. In the case of slack users, based on slack API, you should use the email username. E.g. for [email protected] the id is uname not User Name, or any other display name.

Summary of special labels

  • no-changelog: Use this when the merge request consists of a really small check that shouldn't be reflected on the RELEASE.md file See this for more documentation about this
  • multiple-merge-requests: The only label that must be applied to issues instead of merge requests. Avoid gorrabot changing the status and labels of issues labeled with this. See this for more information
  • sacate-la-gorra: A wildcard label that totally disables gorrabot on that merge request. THIS ISN'T RECOMMENDED, SO THINK TWICE WHEN USING THIS
  • waiting-decision: This issue needs a decision be taken before be resolved. See this for more information.

Design goals

Avoid state

To simplify deployment and avoid having to do data migrations, it makes sense to not use a database in this project. Most things can be achieved this way.

For example, lets take the Branch nomenclature check feature. I don't want gorrabot to make a comment each time the merge request is modified, so I need a way to avoid duplicating this kind of comment.

The traditional way to solve this would be to store in a database the merge requests where this comment has already been made. I instead check for the comments of the MR. If there exists a comment similar to what gorrabot wants to comment, return without commenting. When done this way, I don't need to store anything in a database, just use the Gitlab information.

This has some small drawbacks also. For example, if I want to change the text of the comment to something new and a merge request has already a comment with the old version text, there will be two similar comments with different text.

I think this behavior is acceptable for what we're doing, and doing big architecture changes just to fix this kind of things doesn't bring much benefits. Sacrificing simplicity is bad.

Don't replace a CI

The goal of this project is to help us with some things related to our development process, not to our code base itself. For this things, having a continuous integration seems to be a better choice.

Owner
Faraday
Collaborative Penetration Test and Vulnerability Management Platform. We provide specialized services in offensive security.
Faraday
Covid19 API. (Currently Scrapes: worldometers)

Covid19-API An opensource Covid19 API (currently uses worldometer only) Output Examples Covid19 Every Country Data Request URL your-ip/api/all Resp

Amresh Prasad Sinha 14 Oct 03, 2022
This is a discord bot, which tells you food recipes.

Discord Chef Bot You have a friend, familiy or other group / channel where the topic is the food? You cannot really decide what's for Saturday lunch?

2 Apr 25, 2022
Discord Bot Personnal Server - Ha-Neul

Haneul Bot, it's a discord for help me on my personnal discord, she do a lot of boring and repetitive stain. You can use on your own server if you want, you just need to find a host for the programm

Maxvyr 1 Feb 03, 2022
A python library for creating Slack slash commands using AWS Lambda Functions

slashbot Slashbot makes it easy to create slash commands using AWS Lambda functions. These can be handy for creating a secure way to execute automated

Eric Brassell 17 Oct 21, 2022
Quickly visualize docker networks with graphviz.

Docker Network Graph Visualize the relationship between Docker networks and containers as a neat graphviz graph. Example Usage usage: docker-net-graph

Leo Verto 43 Dec 12, 2022
Telegram Userbot to steram youtube live or Youtube vido in telegram vc by help of pytgcalls

TGVCVidioPlayerUB Telegram Userbot to steram youtube live or youtube vidio in telegram vc by help of pytgcalls Commands = Vidio Playing 🎧 stream :

Achu biju 3 Oct 28, 2022
Create a roles overview page for all Ansible roles/playbooks in Gitlab

ansible-create-roles-overview Overview The script ./create_roles_overview.py queries a Gitlab API for Ansible roles and playbooks. It will iterate ove

2 Oct 11, 2021
Role Discord Members (by username) from File

Role Discord Members (by username) from File Bot Setup Navigate to https://discord.com/developers/applications Create a new application Navigate to th

Dylan Orrell 3 Jan 06, 2022
Data portal client and server for NMDC.

NMDC Server and Client Portal Getting started with Docker install ldc install submodules via git submodule update --init --recursive In order to popul

National Microbiome Data Collaborative 7 Dec 14, 2022
A bot to playing music in telegram vcg

Idzeroid Music|| Idzeroid Music adalah sebuah repository music bot telegram untuk memainkan suara di voice chat group anda. Fyi This repo im using for

idzeroid 1 Oct 26, 2021
A small discord bot to interface with python-discord's snekbox.

A small discord bot to interface with python-discord's snekbox.

Hassan Abouelela 0 Oct 05, 2021
Python script to harvest tweets with the Twitter API V2 Academic Research Product Track

Tweet harvester Python script to scrape, collect, and/or harvest tweets with the Twitter API V2 Academic Research Product Track. Important note: In or

Thomas Frissen 2 Nov 11, 2021
A simple Discord Mass Dm with Scraper

Python-Mass-DM A simple Discord Mass Dm with Scraper If Member Scraper in Taliban.py doesn't work. You can DM me cuz that scraper is for tokens that g

RyanzSantos 4 Sep 02, 2022
The Easy-to-use Dialogue Response Selection Toolkit for Researchers

Easy-to-use toolkit for retrieval-based Chatbot Our released data can be found at this link. Make sure the following steps are adopted to use our code

GMFTBY 32 Nov 13, 2022
An API that uses NLP and AI to let you predict possible diseases and symptoms based on a prompt of what you're feeling.

Disease detection API for MediSearch An API that uses NLP and AI to let you predict possible diseases and symptoms based on a prompt of what you're fe

Sebastian Ponce 1 Jan 15, 2022
An Amazon Product Scraper built using scapy module of python

Amazon Product Scraper This is an Amazon Product Scraper built using scapy module of python Features it scrape various things Product Title Product Im

Sudhanshu Jha 1 Dec 13, 2021
Add Reactions to your Channel Posts!

• Shaaak - Post Reaction Bot Simple and Minimalistic telegram bot to add Reactions and Comments to your Channel Posts! - What's Unique About it?

Harsh Raj 4 Jan 31, 2022
Python JIRA Library is the easiest way to automate JIRA. Support for py27 was dropped on 2019-10-14, do not raise bugs related to it.

Jira Python Library This library eases the use of the Jira REST API from Python and it has been used in production for years. As this is an open-sourc

PyContribs 1.7k Jan 06, 2023
This software's intent is to automate all activities related to manage Axie Infinity Scholars. It is specially aimed to mangers with large scholar roasters.

Axie Scholars Utilities This software's intent is to automate all activities related to manage Scholars. It is specially aimed to mangers with large s

Ferran Marin 153 Nov 16, 2022
Construindo API's robustas utilizando Python

🐂 Construindo API's robustas utilizando Python Neste tutorial vamos aprender a construir API's utilizando Python e FastAPI, integrá-las a serviços ex

luizalabs 296 Dec 13, 2022