GitLab provides [[http://doc.gitlab.com/ce/api/ | a powerful API]] that lets you interact programmatically with a GitLab instance in order to automate a lot of things.
This tutorial presents how to use the API of GitLab with [[https://www.python.org | Python]]. Of course you can use your favorite language.
> For the examples below we will use the instance https://gitlab.example.org. Of course you can use https://gitlab.com.
====== Get the list of users registered in GitLab ======
This first example is fairly easy and takes advantage of the [[http://doc.gitlab.com/ce/api/users.html | Users resource]].
#! /usr/bin/env python
#-*- coding: utf-8 -*-
import requests
import json
# your private token can be found here:
# https://gitlab.example.org/profile/account
TOKEN = ""
r = requests.get("https://gitlab.example.org/api/v3/users?per_page=100&private_token="+TOKEN)
if r.status_code == 200:
users = json.loads(r.content)
for user in users:
print user["username"], user["email"]
The //requests// library is used to query the API and the //json// library is used to parse the result received from the server. Here the result is simply a list of users.
====== Send an email to the members of a GitLab group ======
Again, this is pretty easy. We will need the [[http://doc.gitlab.com/ce/api/groups.html | Groups]] resource and the [[http://doc.gitlab.com/ce/api/users.html | Users]] resource.
In order to send the email, we will simply use the [[http://www.mutt.org/ | Mutt]] email client.
The Mutt command will look like this:
$ mutt -s "The subject" `./get_recipents.py /dev/null` < message.txt
As you can see, Mutt needs three parameters:
* the subject of the email. Will be given in parameter;
* the message to be sent. Will be given through a Unix pipeline (//message.txt//);
* the list of recipients (members of the GitLab group). Will be given in parameter as the result of a Python script.
As you can expect, the Python script will use the API of GitLab in order to get the list of recipients.
Below you will find a working script:
#! /usr/bin/env python
#-*- coding: utf-8 -*-
import requests
import json
# your private token can be found here:
# https://gitlab.example.org/profile/account
TOKEN = ""
GROUP_ID = 21
EMAILS = []
r = requests.get("https://gitlab.example.org/api/v3/groups/" + str(GROUP_ID) + "/members?private_token=" + TOKEN)
if r.status_code == 200:
members = json.loads(r.content)
for member in members:
r = requests.get("https://gitlab.example.org/api/v3/users/" + str(member["id"]) + "?private_token=" + TOKEN)
if r.status_code == 200:
user = json.loads(r.content)
if user["state"] == "active":
EMAILS.append(user["email"])
A first request to the //Groups// resource returns the list of members in the group. The ''for'' loop iterates through these members in order to get their email.
Only active users (//user["state"] == "active"//) will receive the email.