User Tools

Site Tools


gitlab:tips:api

This is an old revision of the document!


GitLab provides a powerful API that lets you automate a lot of things.

Get the list of users registered in GitLab

This first example is really easy and uses the 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 = "<your-private-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"]

Send an email to the members of a GitLab group

Again, this is pretty easy. We will need to use the resources Groups and Users.

In order to send the email to the members of the GitLab group, we will use the [[http://www.mutt.org/ | Mutt] email client.

The Mutt command will look like this:

$ mutt -s "The subject" `./get_recipents.py <group-id> /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;
  • the list of recipients (members of the GitLab groups). 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 required list of recipients. Below you will find a script you can use:

#! /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 = "<your-private-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)
            EMAILS.append(user["email"])
gitlab/tips/api.1453843566.txt.gz · Last modified: 2016/01/26 22:26 by cedric