diff --git a/bob/devtools/graph.py b/bob/devtools/graph.py
index cb8d4819900356385053e0eac3ad274b7621a652..c7fe00912ed1ce94c78e7663d316c1248e11be47 100644
--- a/bob/devtools/graph.py
+++ b/bob/devtools/graph.py
@@ -1,6 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
+"""Utilities for calculating package dependencies and drawing graphs"""
+
 import os
 import re
 import glob
@@ -179,8 +181,11 @@ def compute_adjencence_matrix(
             elif p.startswith("batl"):
                 return "/".join(("batl", p))
             else:
-                logger.warning("Do not know how to recurse to package %s "
-                        "(to which group does it belong?) - skipping...", p)
+                logger.warning(
+                    "Do not know how to recurse to package %s "
+                    "(to which group does it belong?) - skipping...",
+                    p,
+                )
                 return None
 
         all_recurse = set([_add_default_group(k) for k in all_recurse])
@@ -189,8 +194,9 @@ def compute_adjencence_matrix(
 
         # do not recurse for packages we already know
         all_recurse -= set(current.keys())
-        logger.info("Recursing over the following packages: %s",
-                ", ".join(all_recurse))
+        logger.info(
+            "Recursing over the following packages: %s", ", ".join(all_recurse)
+        )
 
         for dep in all_recurse:
             dep_adjmtx = compute_adjencence_matrix(
diff --git a/bob/devtools/scripts/graph.py b/bob/devtools/scripts/graph.py
index 922ecaa83b8f87407f09bcdf96af0dabcc7a758a..65b5e198b9afe56a2707abc97ec2242cfdfe7e5b 100644
--- a/bob/devtools/scripts/graph.py
+++ b/bob/devtools/scripts/graph.py
@@ -28,12 +28,18 @@ logger = get_logger(__name__)
     epilog="""
 Examples:
 
-  1. Draws the graph of a package
+  1. Calculates and draws the graph of a package:
 
-     $ bdt gitlab graph -vv bob/bob.learn.linear
+     $ bdt gitlab graph bob/bob.blitz
 
-  2.
+  2. Calculates and draws only the runtime dependencies of a package
 
+     $ bdt gitlab graph bob/bob.blitz --deptypes=run
+
+  3. Calculates run and test dependencies of package, but only draws a subset
+     defined by a regular expression
+
+     $ bdt gitlab graph beat/beat.editor --deptypes=run --deptypes=test --whitelist='^beat\.(editor|cmdline).*$'
 
 """
 )
diff --git a/conda/meta.yaml b/conda/meta.yaml
index 838772de640254d1c2241400fb250a8ebc3aaad2..d2180739fc08655244d21259c2bf0bf530806595 100644
--- a/conda/meta.yaml
+++ b/conda/meta.yaml
@@ -106,6 +106,7 @@ test:
     - bdt gitlab process-pipelines --help
     - bdt gitlab get-pipelines --help
     - bdt gitlab graph --help
+    - bdt gitlab graph -vv bob/bob.blitz -d run
     - sphinx-build -aEW ${PREFIX}/share/doc/{{ name }}/doc sphinx
     - if [ -n "${CI_PROJECT_DIR}" ]; then mv sphinx "${CI_PROJECT_DIR}/"; fi
 
diff --git a/doc/api.rst b/doc/api.rst
index 4b9a776a4b77535cb563ff196b1b6bd1c0aa8d2b..3132a59ac2f33da4ac8032eea12f4d23eb98aef4 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -14,6 +14,8 @@
    bob.devtools.bootstrap
    bob.devtools.build
    bob.devtools.mirror
+   bob.devtools.deploy
+   bob.devtools.graph
    bob.devtools.webdav3.client
 
 
@@ -34,8 +36,12 @@ Detailed Information
 
 .. automodule:: bob.devtools.build
 
+.. automodule:: bob.devtools.mirror
+
 .. automodule:: bob.devtools.deploy
 
+.. automodule:: bob.devtools.graph
+
 
 WebDAV Python Client
 --------------------