diff --git a/bob/devtools/build.py b/bob/devtools/build.py
index 852c4cf89ebfa69e32864391f9d1f3f065a67c7e..5b8f99582b8c578181f21495331e8b61130ac420 100644
--- a/bob/devtools/build.py
+++ b/bob/devtools/build.py
@@ -4,20 +4,20 @@
 """Tools for self-building and other utilities."""
 
 
-import os
-import re
-import sys
-import json
-import glob
+import contextlib
 import copy
+import distutils.version
+import glob
+import json
 import logging
+import os
 import platform
+import re
 import subprocess
-import contextlib
-import distutils.version
+import sys
 
-import yaml
 import conda_build.api
+import yaml
 
 logger = logging.getLogger(__name__)
 
@@ -98,13 +98,11 @@ def next_build_number(channel_url, basename):
     (reversed) build-number.
     """
 
-    from conda.exports import fetch_index
     from conda.core.index import calculate_channel_urls
+    from conda.exports import fetch_index
 
     # get the channel index
-    channel_urls = calculate_channel_urls(
-        [channel_url], prepend=False, use_local=False
-    )
+    channel_urls = calculate_channel_urls([channel_url], prepend=False, use_local=False)
     logger.debug("Downloading channel index from %s", channel_urls)
     index = fetch_index(channel_urls=channel_urls)
 
@@ -115,8 +113,7 @@ def next_build_number(channel_url, basename):
         name, version, build = basename[:-6].rsplit("-", 2)
     else:
         raise RuntimeError(
-            "Package name %s does not end in either "
-            ".tar.bz2 or .conda" % (basename,)
+            "Package name %s does not end in either " ".tar.bz2 or .conda" % (basename,)
         )
 
     # remove the build number as we're looking for the next value
@@ -204,9 +201,7 @@ def make_conda_config(config, python, append_file, condarc_options):
         #    appropriate platform-specific subdir (e.g. win-64)
         if os.path.isdir(url):
             if not os.path.isabs(url):
-                url = os.path.normpath(
-                    os.path.abspath(os.path.join(os.getcwd(), url))
-                )
+                url = os.path.normpath(os.path.abspath(os.path.join(os.getcwd(), url)))
             with root_logger_protection():
                 url = url_path(url)
         retval.channel_urls.append(url)
@@ -264,8 +259,7 @@ def exists_on_channel(channel_url, basename):
             name, version, build = name[:-8].rsplit("-", 2)
         else:
             raise RuntimeError(
-                "Package name %s does not end in either "
-                ".tar.bz2 or .conda" % (name,)
+                "Package name %s does not end in either " ".tar.bz2 or .conda" % (name,)
             )
 
         # remove the build number as we're looking for the next value
@@ -313,11 +307,7 @@ def parse_dependencies(recipe_dir, config):
         + ["ipython"]  # for ipdb
         # Also add anaconda compilers to make sure source installed packages are
         # compiled properly
-        + [
-            "clangxx_osx-64"
-            if platform.system() == "Darwin"
-            else "gxx_linux-64"
-        ]
+        + ["clangxx_osx-64" if platform.system() == "Darwin" else "gxx_linux-64"]
     )
     # by last, packages required for local dev
 
@@ -452,8 +442,7 @@ def get_docserver_setup(public, stable, server, intranet, group):
     if (not public) and (not intranet):
         raise RuntimeError(
             "You cannot request for private channels and set"
-            " intranet=False (server=%s) - these are conflicting options"
-            % server
+            " intranet=False (server=%s) - these are conflicting options" % server
         )
 
     entries = []
@@ -477,9 +466,7 @@ def get_docserver_setup(public, stable, server, intranet, group):
                 server + prefix + "/docs/" + group + "/%(name)s/stable/",
             ]
         else:
-            entries += [
-                server + prefix + "/docs/" + group + "/%(name)s/master/"
-            ]
+            entries += [server + prefix + "/docs/" + group + "/%(name)s/master/"]
 
     return "|".join(entries)
 
@@ -516,8 +503,7 @@ def check_version(workdir, envtag):
                 '"version.txt" indicates version is a '
                 'pre-release (v%s) - but environment provided tag "%s", '
                 "which indicates this is a **stable** build. "
-                "Have you created the tag using ``bdt release``?"
-                % (version, envtag)
+                "Have you created the tag using ``bdt release``?" % (version, envtag)
             )
     else:  # it is a stable build
         if envtag is None:
@@ -570,10 +556,7 @@ def git_clean_build(runner, verbose):
     if not verbose:
         flags += "q"
 
-    runner(
-        ["git", "clean", flags]
-        + ["--exclude=%s" % k for k in exclude_from_cleanup]
-    )
+    runner(["git", "clean", flags] + ["--exclude=%s" % k for k in exclude_from_cleanup])
 
 
 def base_build(
@@ -630,24 +613,18 @@ def base_build(
         "\n  - ".join(condarc_options["channels"]),
     )
     logger.info("Merging conda configuration files...")
-    conda_config = make_conda_config(
-        conda_build_config, None, None, condarc_options
-    )
+    conda_config = make_conda_config(conda_build_config, None, None, condarc_options)
 
     metadata = get_rendered_metadata(recipe_dir, conda_config)
     arch = conda_arch()
 
     # checks we should actually build this recipe
     if should_skip_build(metadata):
-        logger.warn(
-            'Skipping UNSUPPORTED build of "%s" on %s', recipe_dir, arch
-        )
+        logger.warn('Skipping UNSUPPORTED build of "%s" on %s', recipe_dir, arch)
         return
 
     paths = get_output_path(metadata, conda_config)
-    urls = [
-        exists_on_channel(upload_channel, os.path.basename(k)) for k in paths
-    ]
+    urls = [exists_on_channel(upload_channel, os.path.basename(k)) for k in paths]
 
     if all(urls):
         logger.info(
@@ -676,9 +653,7 @@ if __name__ == "__main__":
 
     import argparse
 
-    parser = argparse.ArgumentParser(
-        description="Builds bob.devtools on the CI"
-    )
+    parser = argparse.ArgumentParser(description="Builds bob.devtools on the CI")
     parser.add_argument(
         "-g",
         "--group",
@@ -697,8 +672,7 @@ if __name__ == "__main__":
         default=os.environ.get(
             "CONDA_ROOT", os.path.realpath(os.path.join(os.curdir, "miniconda"))
         ),
-        help="The location where we should install miniconda "
-        "[default: %(default)s]",
+        help="The location where we should install miniconda " "[default: %(default)s]",
     )
     parser.add_argument(
         "-V",
@@ -778,9 +752,7 @@ if __name__ == "__main__":
     bootstrap.set_environment("BOB_PACKAGE_VERSION", version)
 
     # create the build configuration
-    conda_build_config = os.path.join(
-        args.work_dir, "conda", "conda_build_config.yaml"
-    )
+    conda_build_config = os.path.join(args.work_dir, "conda", "conda_build_config.yaml")
     recipe_append = os.path.join(args.work_dir, "data", "recipe_append.yaml")
 
     condarc = os.path.join(args.conda_root, "condarc")
@@ -844,8 +816,7 @@ if __name__ == "__main__":
             "typically means this build is running on a shared builder and "
             "the file ~/.conda/environments.txt is polluted with other "
             "environment paths.  To fix, empty that file and set its mode "
-            "to read-only for all."
-            % (path, os.path.join(args.conda_root, "conda-bld"))
+            "to read-only for all." % (path, os.path.join(args.conda_root, "conda-bld"))
         )
 
     # retrieve the current build number(s) for this build
diff --git a/bob/devtools/changelog.py b/bob/devtools/changelog.py
index 9ec044eb049c06e936319b039b682c32e9aa4654..abaa3967fd4058fd9e1d1a9fe531157973f99f9d 100644
--- a/bob/devtools/changelog.py
+++ b/bob/devtools/changelog.py
@@ -32,7 +32,9 @@ def _sort_tags(tags, reverse):
     """Sorts gitlab tag objects using their ``committed_date`` attribute."""
 
     return sorted(
-        tags, key=lambda x: parse_date(x.commit["committed_date"]), reverse=reverse,
+        tags,
+        key=lambda x: parse_date(x.commit["committed_date"]),
+        reverse=reverse,
     )
 
 
@@ -253,7 +255,10 @@ def get_changes_since(gitpkg, since):
     mrs = list(
         reversed(
             gitpkg.mergerequests.list(
-                state="merged", updated_after=since, order_by="updated_at", all=True,
+                state="merged",
+                updated_after=since,
+                order_by="updated_at",
+                all=True,
             )
         )
     )
diff --git a/bob/devtools/ci.py b/bob/devtools/ci.py
index 4a15fb443c63991b28821f099e5a1cb59d17e94e..30098d40eae818c7be064e60743b8c56395eb90b 100644
--- a/bob/devtools/ci.py
+++ b/bob/devtools/ci.py
@@ -230,9 +230,10 @@ def cleanup(dry_run, username, password, includes):
 
     """
 
-    from .deploy import _setup_webdav_client
-    from .constants import WEBDAV_PATHS, SERVER
+    from .constants import SERVER
+    from .constants import WEBDAV_PATHS
     from .dav import remove_old_beta_packages
+    from .deploy import _setup_webdav_client
 
     for public in (True, False):
 
diff --git a/bob/devtools/config.py b/bob/devtools/config.py
index 84282d3d282b30588337e83b962ec63f3f346304..6f1992eeee11778d08b956c6438790782d1d6452 100644
--- a/bob/devtools/config.py
+++ b/bob/devtools/config.py
@@ -4,8 +4,8 @@
 """Reads and treats configuration files"""
 
 
-import os
 import configparser
+import os
 
 
 def read_config():
diff --git a/bob/devtools/data/conda_build_config.yaml b/bob/devtools/data/conda_build_config.yaml
index 38a4910e7494c42b8c48413768498091a4a07b5b..1cdf2185112051b9207a8679e9b03974290dca33 100644
--- a/bob/devtools/data/conda_build_config.yaml
+++ b/bob/devtools/data/conda_build_config.yaml
@@ -17,8 +17,6 @@ c_compiler_version:        # [linux or osx]
 cxx_compiler_version:      # [linux or osx]
   - 7.3.0                  # [linux]
   - 10                     # [osx]
-fortran_compiler_version:  # [linux]
-  - 7.3.0                  # [linux]
 clang_variant:
   - clang
 
diff --git a/bob/devtools/dav.py b/bob/devtools/dav.py
index 3e3d83bc3df8838fc04d8f6f52269c23897a69fe..f29f8fc89d60069cdce87fdcf31383111a802ff7 100644
--- a/bob/devtools/dav.py
+++ b/bob/devtools/dav.py
@@ -1,9 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-import configparser
 import hashlib
-import os
 import pathlib
 import re
 
@@ -34,9 +32,9 @@ def _get_config():
             or "password" not in data["webdav"]
         ):
             raise KeyError(
-                f'If the configuration file {k} contains a "webdav" '
-                f"section, it should contain 3 variables defined inside: "
-                f'"server", "username", "password".'
+                'If the configuration file contains a "webdav" '
+                "section, it should contain 3 variables defined inside: "
+                '"server", "username", "password".'
             )
     else:
         # ask the user for the information, in case nothing available
diff --git a/bob/devtools/deploy.py b/bob/devtools/deploy.py
index 14fef895c5a86ab81dd1be02d92a48c2dd02a076..18122396344bd46493ddcb63c6c10cf6fc2e86cf 100644
--- a/bob/devtools/deploy.py
+++ b/bob/devtools/deploy.py
@@ -84,7 +84,16 @@ def deploy_conda_package(
 
 
 def deploy_documentation(
-    path, package, stable, latest, public, branch, tag, username, password, dry_run,
+    path,
+    package,
+    stable,
+    latest,
+    public,
+    branch,
+    tag,
+    username,
+    password,
+    dry_run,
 ):
     """Deploys sphinx documentation to the appropriate webdav locations.
 
diff --git a/bob/devtools/graph.py b/bob/devtools/graph.py
index d3aa2fde5bed8a4f7498a8e613a201a66d056351..0b61ce30f5203b64db5b537f2523cd99619eb3ce 100644
--- a/bob/devtools/graph.py
+++ b/bob/devtools/graph.py
@@ -259,7 +259,8 @@ def generate_graph(adjacence_matrix, deptypes, whitelist):
     for package, values in adjacence_matrix.items():
         if not whitelist_compiled.match(values["name"]):
             logger.debug(
-                "Skipping main package %s (did not match whitelist)", values["name"],
+                "Skipping main package %s (did not match whitelist)",
+                values["name"],
             )
             continue
         name = values["name"] + "\n" + values["version"] + "\n" + values["build_string"]
diff --git a/bob/devtools/log.py b/bob/devtools/log.py
index 8e55848371cb742b68a33e151648e99b1301bea1..b43a2a709fb0e8501d32f1f022e17e5c05f46480 100644
--- a/bob/devtools/log.py
+++ b/bob/devtools/log.py
@@ -3,9 +3,9 @@
 
 """Logging utilities."""
 
+import logging
 import os
 import sys
-import logging
 
 import click
 import termcolor
diff --git a/bob/devtools/release.py b/bob/devtools/release.py
index 0565a8a88b33be8548113e62997895a048a777a6..f606620f2caa81b7148fb8fdf0d613d3dbcdab76 100644
--- a/bob/devtools/release.py
+++ b/bob/devtools/release.py
@@ -35,10 +35,11 @@ def download_path(package, path, output=None, ref="master"):
         directory
       ref: the name of the git reference (branch, tag or commit hash) to use
     """
-    from io import BytesIO
     import tarfile
     import tempfile
 
+    from io import BytesIO
+
     output = output or os.path.realpath(os.curdir)
 
     logger.debug(
@@ -188,7 +189,8 @@ def get_parsed_tag(gitpkg, tag):
             raise ValueError(
                 "The latest tag name {0} in package {1} has "
                 "unknown format".format(
-                    "v" + latest_tag_name, gitpkg.attributes["path_with_namespace"],
+                    "v" + latest_tag_name,
+                    gitpkg.attributes["path_with_namespace"],
                 )
             )
 
@@ -444,7 +446,9 @@ def wait_for_pipeline_to_finish(gitpkg, pipeline_id, dry_run=False):
         raise ValueError(
             "Pipeline {0} of project {1} exited with "
             'undesired status "{2}". Release is not possible.'.format(
-                pipeline_id, gitpkg.attributes["path_with_namespace"], pipeline.status,
+                pipeline_id,
+                gitpkg.attributes["path_with_namespace"],
+                pipeline.status,
             )
         )
 
diff --git a/bob/devtools/scripts/alternative_nightlies.py b/bob/devtools/scripts/alternative_nightlies.py
index 3726479b9a2f0c8b9ef098c54b498705dfa6b6fe..2e536f31f03a06ebb3c84f8bba079ed78ecb4f2e 100644
--- a/bob/devtools/scripts/alternative_nightlies.py
+++ b/bob/devtools/scripts/alternative_nightlies.py
@@ -24,7 +24,8 @@ Examples:
     nargs=1,
 )
 @click.argument(
-    "variables", nargs=-1,
+    "variables",
+    nargs=-1,
 )
 @verbosity_option()
 @bdt.raise_on_error
diff --git a/bob/devtools/scripts/badges.py b/bob/devtools/scripts/badges.py
index f5940eee5ca6060af70461c759fccde1b10094a6..fa0d04969a95f2dddf0e82e510bb79330c97ae87 100644
--- a/bob/devtools/scripts/badges.py
+++ b/bob/devtools/scripts/badges.py
@@ -160,7 +160,7 @@ def badges(package, update_readme, dry_run, server):
         # creates all stock badges, preserve positions
         info = dict(zip(("group", "name"), package.split("/", 1)))
         if not server:
-            server = f"https://www.idiap.ch/software/{group}"
+            server = f"https://www.idiap.ch/software/{info['group']}"
         info["idiap_server"] = server[:-1] if server.endswith("/") else server
         for position, badge in enumerate(PROJECT_BADGES):
             data = dict([(k, v.format(**info)) for (k, v) in badge.items()])
diff --git a/bob/devtools/scripts/bdt.py b/bob/devtools/scripts/bdt.py
index 979d34442c1b82d3cef28bd322ad94869c5be27e..220cb93252c52fbdd43ff1994fa98487b4c54abe 100644
--- a/bob/devtools/scripts/bdt.py
+++ b/bob/devtools/scripts/bdt.py
@@ -60,13 +60,14 @@ if "LC_ALL" not in os.environ:
 
 @with_plugins(pkg_resources.iter_entry_points("bdt.cli"))
 @click.group(
-    cls=AliasedGroup, context_settings=dict(help_option_names=["-?", "-h", "--help"]),
+    cls=AliasedGroup,
+    context_settings=dict(help_option_names=["-?", "-h", "--help"]),
 )
 def main():
     """Bob Development Tools - see available commands below"""
 
-    from ..constants import CACERT
     from ..bootstrap import set_environment
+    from ..constants import CACERT
 
     # certificate setup: required for gitlab API interaction
     set_environment("SSL_CERT_FILE", CACERT, os.environ)
diff --git a/bob/devtools/scripts/build.py b/bob/devtools/scripts/build.py
index d436c5931bb39fecb083c43a423ff34d28fe79fa..e7e557547bb424ac24943f236d03e82fa468c88b 100644
--- a/bob/devtools/scripts/build.py
+++ b/bob/devtools/scripts/build.py
@@ -18,8 +18,8 @@ from ..build import get_parsed_recipe
 from ..build import get_rendered_metadata
 from ..build import make_conda_config
 from ..build import next_build_number
-from ..build import should_skip_build
 from ..build import root_logger_protection
+from ..build import should_skip_build
 from ..constants import BASE_CONDARC
 from ..constants import CONDA_BUILD_CONFIG
 from ..constants import CONDA_RECIPE_APPEND
@@ -214,9 +214,7 @@ def build(
     prefix = get_env_directory(os.environ["CONDA_EXE"], "base")
     condarc_options["croot"] = os.path.join(prefix, "conda-bld")
 
-    conda_config = make_conda_config(
-        config, python, append_file, condarc_options
-    )
+    conda_config = make_conda_config(config, python, append_file, condarc_options)
 
     set_environment("MATPLOTLIBRC", MATPLOTLIB_RCDIR)
 
@@ -253,9 +251,7 @@ def build(
 
         # checks if we should actually build this recipe
         if should_skip_build(metadata):
-            logger.info(
-                "Skipping UNSUPPORTED build of %s for %s", recipe_dir, arch
-            )
+            logger.info("Skipping UNSUPPORTED build of %s for %s", recipe_dir, arch)
             continue
 
         rendered_recipe = get_parsed_recipe(metadata)
@@ -266,9 +262,7 @@ def build(
         path = get_output_path(metadata, conda_config)[0]
 
         # gets the next build number
-        build_number, _ = next_build_number(
-            upload_channel, os.path.basename(path)
-        )
+        build_number, _ = next_build_number(upload_channel, os.path.basename(path))
 
         logger.info(
             "Building %s-%s-py%s (build: %d) for %s",
@@ -284,9 +278,7 @@ def build(
             # get it right
             set_environment("BOB_BUILD_NUMBER", str(build_number))
             with root_logger_protection():
-                paths = conda_build.api.build(
-                    d, config=conda_config, notest=no_test
-                )
+                paths = conda_build.api.build(d, config=conda_config, notest=no_test)
             # if you get to this point, the package was successfully rebuilt
             # set environment to signal caller we may dispose of it
             os.environ["BDT_BUILD"] = ":".join(paths)
diff --git a/bob/devtools/scripts/caupdate.py b/bob/devtools/scripts/caupdate.py
index e274d5254fff429f39000a4778911bee73fe9685..e3ba10550b5c2c04672b4e695cbb45679104b93f 100644
--- a/bob/devtools/scripts/caupdate.py
+++ b/bob/devtools/scripts/caupdate.py
@@ -32,7 +32,10 @@ def caupdate():
     """
 
     import requests
-    from ..constants import CACERT, CACERT_URL, IDIAP_ROOT_CA
+
+    from ..constants import CACERT
+    from ..constants import CACERT_URL
+    from ..constants import IDIAP_ROOT_CA
 
     logger.info("Retrieving %s...", CACERT_URL)
     r = requests.get(CACERT_URL, allow_redirects=True)
diff --git a/bob/devtools/scripts/changelog.py b/bob/devtools/scripts/changelog.py
index 538caa00a9a38fee17a3234afac9bc3b2f8b2921..bc560a08f07439d124d161e03135a2affd253510 100644
--- a/bob/devtools/scripts/changelog.py
+++ b/bob/devtools/scripts/changelog.py
@@ -97,17 +97,15 @@ def changelog(target, changelog, group, mode, since):
     starting date is not passed, we'll use the date of the last tagged value or
     the date of the first commit, if no tags are available in the package.
     """
+    import datetime
     import os
     import sys
-    import datetime
 
-    from ..changelog import (
-        get_last_tag_date,
-        write_tags_with_commits,
-        parse_date,
-        get_changes_since,
-        get_last_tag,
-    )
+    from ..changelog import get_changes_since
+    from ..changelog import get_last_tag
+    from ..changelog import get_last_tag_date
+    from ..changelog import parse_date
+    from ..changelog import write_tags_with_commits
     from ..release import get_gitlab_instance
 
     gl = get_gitlab_instance()
diff --git a/bob/devtools/scripts/create.py b/bob/devtools/scripts/create.py
index 0ae47da83249ad0b68b780026c8012731f7204d9..91de856e508720aad915d389d3f3ee91eae0dc2d 100644
--- a/bob/devtools/scripts/create.py
+++ b/bob/devtools/scripts/create.py
@@ -7,12 +7,12 @@ import sys
 import click
 import yaml
 
-from ..config import read_config
-from ..bootstrap import set_environment
 from ..bootstrap import run_cmdline
+from ..bootstrap import set_environment
 from ..build import conda_create
 from ..build import make_conda_config
 from ..build import parse_dependencies
+from ..config import read_config
 from ..constants import BASE_CONDARC
 from ..constants import CONDA_BUILD_CONFIG
 from ..constants import CONDA_RECIPE_APPEND
@@ -95,8 +95,7 @@ Examples:
     "--python",
     default=("%d.%d" % sys.version_info[:2]),
     show_default=True,
-    help="Version of python to build the "
-    "environment for [default: %(default)s]",
+    help="Version of python to build the " "environment for [default: %(default)s]",
 )
 @click.option(
     "-o",
@@ -265,17 +264,13 @@ def create(
         "\n  - ".join(condarc_options["channels"]),
     )
 
-    conda_config = make_conda_config(
-        config, python, append_file, condarc_options
-    )
+    conda_config = make_conda_config(config, python, append_file, condarc_options)
     deps = parse_dependencies(recipe_dir, conda_config)
     # when creating a local development environment, remove the always_yes
     # option
 
     del condarc_options["always_yes"]
-    conda_create(
-        conda, name, overwrite, condarc_options, deps, dry_run, use_local
-    )
+    conda_create(conda, name, overwrite, condarc_options, deps, dry_run, use_local)
 
     # part 2: pip-install everything listed in pip-extras
     # mix-in stuff from ~/.bdtrc and command-line
diff --git a/bob/devtools/scripts/graph.py b/bob/devtools/scripts/graph.py
index 28d189c6a85836d747ebdd8a4b6fc349c6901b8d..9c18d1a86499dd05ce8817722d8bbd674d545147 100644
--- a/bob/devtools/scripts/graph.py
+++ b/bob/devtools/scripts/graph.py
@@ -54,7 +54,9 @@ Examples:
     help="Version of python to build the environment for",
 )
 @click.option(
-    "-r", "--condarc", help="Use custom conda configuration file instead of our own",
+    "-r",
+    "--condarc",
+    help="Use custom conda configuration file instead of our own",
 )
 @click.option(
     "-m",
@@ -103,7 +105,11 @@ Examples:
     help="Use this flag to indicate the graph will be running on the CI",
 )
 @click.option(
-    "-n", "--name", show_default=True, default="graph", help="set the graph name",
+    "-n",
+    "--name",
+    show_default=True,
+    default="graph",
+    help="set the graph name",
 )
 @click.option(
     "-f",
diff --git a/bob/devtools/scripts/jobs.py b/bob/devtools/scripts/jobs.py
index 8c31b00e222d524d0f58ddd891f070691ca56198..34d679bce61e954636ef2566374282c38c6e44d0 100644
--- a/bob/devtools/scripts/jobs.py
+++ b/bob/devtools/scripts/jobs.py
@@ -65,7 +65,11 @@ def jobs(name, status):
         jobs = runner.jobs.list(all=True, status=status)
         echo_normal(
             "Runner %s (id=%d) -- %d running"
-            % (runner.attributes["description"], runner.attributes["id"], len(jobs),)
+            % (
+                runner.attributes["description"],
+                runner.attributes["id"],
+                len(jobs),
+            )
         )
         for k in jobs:
             echo_info(
diff --git a/bob/devtools/scripts/mirror.py b/bob/devtools/scripts/mirror.py
index bd08b58293141d763aadec2998fb8306940ed2d5..f8ac0b00320e9d420f93d5efc4fdf3d399b28370 100644
--- a/bob/devtools/scripts/mirror.py
+++ b/bob/devtools/scripts/mirror.py
@@ -38,7 +38,8 @@ Examples:
     """
 )
 @click.argument(
-    "channel-url", required=True,
+    "channel-url",
+    required=True,
 )
 @click.argument(
     "dest-dir",
diff --git a/bob/devtools/scripts/rebuild.py b/bob/devtools/scripts/rebuild.py
index 92457ca747430ffbf1f38d01f7215912f3681d4e..e653af0bb3d56e5ca7e4c71edeb25be2a51e105a 100644
--- a/bob/devtools/scripts/rebuild.py
+++ b/bob/devtools/scripts/rebuild.py
@@ -19,8 +19,8 @@ from ..build import get_parsed_recipe
 from ..build import get_rendered_metadata
 from ..build import make_conda_config
 from ..build import next_build_number
-from ..build import should_skip_build
 from ..build import root_logger_protection
+from ..build import should_skip_build
 from ..constants import BASE_CONDARC
 from ..constants import CONDA_BUILD_CONFIG
 from ..constants import CONDA_RECIPE_APPEND
@@ -62,7 +62,9 @@ Examples:
     help="Version of python to build the environment for",
 )
 @click.option(
-    "-r", "--condarc", help="Use custom conda configuration file instead of our own",
+    "-r",
+    "--condarc",
+    help="Use custom conda configuration file instead of our own",
 )
 @click.option(
     "-m",
@@ -176,7 +178,11 @@ def rebuild(
 
     # get potential channel upload and other auxiliary channels
     channels, upload_channel = get_channels(
-        public=(not private), stable=stable, server=server, intranet=ci, group=group,
+        public=(not private),
+        stable=stable,
+        server=server,
+        intranet=ci,
+        group=group,
     )
 
     if condarc is not None:
@@ -209,7 +215,11 @@ def rebuild(
     # and derived documentation building via Sphinx)
     set_environment("DOCSERVER", server)
     doc_urls = get_docserver_setup(
-        public=(not private), stable=stable, server=server, intranet=ci, group=group,
+        public=(not private),
+        stable=stable,
+        server=server,
+        intranet=ci,
+        group=group,
     )
     set_environment("BOB_DOCUMENTATION_SERVER", doc_urls)
 
@@ -242,7 +252,9 @@ def rebuild(
         path = get_output_path(metadata, conda_config)[0]
 
         # Get the latest build number
-        build_number, existing = next_build_number(upload_channel, os.path.basename(path))
+        build_number, existing = next_build_number(
+            upload_channel, os.path.basename(path)
+        )
 
         should_build = True
 
diff --git a/bob/devtools/scripts/runners.py b/bob/devtools/scripts/runners.py
index 5b64b4b2a7e19ff4a78684506958ad189f91cdfe..8eee83f811af54b37e715f677eca0506abdbaa11 100644
--- a/bob/devtools/scripts/runners.py
+++ b/bob/devtools/scripts/runners.py
@@ -1,13 +1,12 @@
 #!/usr/bin/env python
 
 import os
+
 import click
-from click_plugins import with_plugins
-import pkg_resources
 
+from ..log import echo_normal
 from ..log import get_logger
 from ..log import verbosity_option
-from ..log import echo_normal
 from ..release import get_gitlab_instance
 from . import bdt
 
@@ -18,9 +17,7 @@ def _get_runner_from_description(gl, descr):
 
     # search for the runner to affect
     the_runner = [
-        k
-        for k in gl.runners.list(all=True)
-        if k.attributes["description"] == descr
+        k for k in gl.runners.list(all=True) if k.attributes["description"] == descr
     ]
     if not the_runner:
         raise RuntimeError("Cannot find runner with description = %s", descr)
@@ -81,9 +78,7 @@ def _get_projects_from_runner(gl, runner):
     packages = []
     for k, proj in enumerate(the_runner.projects):
         packages.append(_get_project(gl, proj["id"]))
-        logger.debug(
-            "Got data from project %d/%d", k + 1, len(the_runner.projects)
-        )
+        logger.debug("Got data from project %d/%d", k + 1, len(the_runner.projects))
     return packages
 
 
@@ -96,9 +91,7 @@ def _get_projects_from_file(gl, filename):
         logger.info("Loaded %d entries from file %s", len(lines), filename)
         for k, proj in enumerate(lines):
             packages.append(_get_project(gl, proj))
-            logger.debug(
-                "Got data from project %d/%d", k + 1, len(lines)
-            )
+            logger.debug("Got data from project %d/%d", k + 1, len(lines))
     return packages
 
 
diff --git a/bob/devtools/scripts/test.py b/bob/devtools/scripts/test.py
index 076d6d9b0f43ad9d5cafd45db9ae28acc57b5a29..58e3b3a324b776d5a205fe888389f764cfe17a31 100644
--- a/bob/devtools/scripts/test.py
+++ b/bob/devtools/scripts/test.py
@@ -49,7 +49,9 @@ Examples:
     nargs=-1,
 )
 @click.option(
-    "-r", "--condarc", help="Use custom conda configuration file instead of our own",
+    "-r",
+    "--condarc",
+    help="Use custom conda configuration file instead of our own",
 )
 @click.option(
     "-m",
@@ -187,7 +189,11 @@ def test(
     # and derived documentation building via Sphinx)
     set_environment("DOCSERVER", server)
     doc_urls = get_docserver_setup(
-        public=(not private), stable=stable, server=server, intranet=ci, group=group,
+        public=(not private),
+        stable=stable,
+        server=server,
+        intranet=ci,
+        group=group,
     )
     set_environment("BOB_DOCUMENTATION_SERVER", doc_urls)
 
diff --git a/bob/devtools/scripts/update_bob.py b/bob/devtools/scripts/update_bob.py
index 889381dcb07ad8e4156f7dfa14e1489687a9792a..e1eb0fe29ed2f614ef18715af5073f2b80a9db3e 100644
--- a/bob/devtools/scripts/update_bob.py
+++ b/bob/devtools/scripts/update_bob.py
@@ -23,11 +23,13 @@ Examples:
 @verbosity_option()
 @bdt.raise_on_error
 def update_bob(stable):
-    """Updates the Bob meta package with new packages.
-    """
+    """Updates the Bob meta package with new packages."""
     import tempfile
+
     from ..ci import read_packages
-    from ..release import get_gitlab_instance, download_path, get_latest_tag_name
+    from ..release import download_path
+    from ..release import get_gitlab_instance
+    from ..release import get_latest_tag_name
 
     gl = get_gitlab_instance()
 
diff --git a/bob/devtools/webdav3/client.py b/bob/devtools/webdav3/client.py
index 51fc57a4ee6abebd3471d87e9c2bb16cf242b100..8d08cb8394039f7e082234ac801bad5fa6bbe3d2 100644
--- a/bob/devtools/webdav3/client.py
+++ b/bob/devtools/webdav3/client.py
@@ -30,9 +30,11 @@ logger = get_logger(__name__)
 
 
 try:
-    from urllib.parse import unquote, urlsplit
+    from urllib.parse import unquote
+    from urllib.parse import urlsplit
 except ImportError:
     from urllib import unquote
+
     from urlparse import urlsplit
 
 __version__ = "0.2"
@@ -366,11 +368,15 @@ class Client(object):
         urn = Urn(remote_path)
         if self.is_dir(urn.path()):
             self.download_directory(
-                local_path=local_path, remote_path=remote_path, progress=progress,
+                local_path=local_path,
+                remote_path=remote_path,
+                progress=progress,
             )
         else:
             self.download_file(
-                local_path=local_path, remote_path=remote_path, progress=progress,
+                local_path=local_path,
+                remote_path=remote_path,
+                progress=progress,
             )
 
     def download_directory(self, remote_path, local_path, progress=None):
@@ -397,7 +403,9 @@ class Client(object):
             )
             _local_path = os.path.join(local_path, resource_name)
             self.download(
-                local_path=_local_path, remote_path=_remote_path, progress=progress,
+                local_path=_local_path,
+                remote_path=_remote_path,
+                progress=progress,
             )
 
     @wrap_connection_error
@@ -481,7 +489,9 @@ class Client(object):
         """
         if os.path.isdir(local_path):
             self.upload_directory(
-                local_path=local_path, remote_path=remote_path, progress=progress,
+                local_path=local_path,
+                remote_path=remote_path,
+                progress=progress,
             )
         else:
             self.upload_file(local_path=local_path, remote_path=remote_path)
@@ -516,7 +526,9 @@ class Client(object):
             )
             _local_path = os.path.join(local_path, resource_name)
             self.upload(
-                local_path=_local_path, remote_path=_remote_path, progress=progress,
+                local_path=_local_path,
+                remote_path=_remote_path,
+                progress=progress,
             )
 
     @wrap_connection_error
@@ -603,7 +615,9 @@ class Client(object):
             path=self.get_full_path(urn_to)
         )
         self.execute_request(
-            action="copy", path=urn_from.quote(), headers_ext=[header_destination],
+            action="copy",
+            path=urn_from.quote(),
+            headers_ext=[header_destination],
         )
 
     @wrap_connection_error
@@ -886,7 +900,9 @@ class Resource(object):
 
     def read_async(self, local_path, callback=None):
         return self.client.upload_async(
-            local_path=local_path, remote_path=self.urn.path(), callback=callback,
+            local_path=local_path,
+            remote_path=self.urn.path(),
+            callback=callback,
         )
 
     def write_to(self, buff):
@@ -899,7 +915,9 @@ class Resource(object):
 
     def write_async(self, local_path, callback=None):
         return self.client.download_async(
-            local_path=local_path, remote_path=self.urn.path(), callback=callback,
+            local_path=local_path,
+            remote_path=self.urn.path(),
+            callback=callback,
         )
 
     def publish(self):
diff --git a/bob/devtools/webdav3/urn.py b/bob/devtools/webdav3/urn.py
index d822bdb08c266ab1a17807abe9f06c6d689ecfa9..342f8afc0fcac1f72dd54efb135439c0af0ddc87 100644
--- a/bob/devtools/webdav3/urn.py
+++ b/bob/devtools/webdav3/urn.py
@@ -1,5 +1,7 @@
 try:
-    from urllib.parse import unquote, quote, urlsplit
+    from urllib.parse import quote
+    from urllib.parse import unquote
+    from urllib.parse import urlsplit
 except ImportError:
     from urllib import unquote, quote
     from urlparse import urlsplit
diff --git a/deps/repodata-patches/show_diff.py b/deps/repodata-patches/show_diff.py
index d85ff3796b1b933ff088862ad4d3f1c1579db2cd..4141682a261ba6dc836ea95d3160e8a5e81f123e 100755
--- a/deps/repodata-patches/show_diff.py
+++ b/deps/repodata-patches/show_diff.py
@@ -7,7 +7,6 @@ import os
 import urllib
 
 from conda_build.index import _apply_instructions
-
 from gen_patch_json import BASE_URL
 from gen_patch_json import SUBDIRS
 from gen_patch_json import gen_new_index_and_patch_instructions
diff --git a/version.txt b/version.txt
index 868d7b27226d928488858c586826bc859393fe0b..ac54c0b9afedd1d236b2da0e956ad4fe33770a55 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-3.2.1b0
\ No newline at end of file
+3.2.1b0