diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4cb4fd0c5edbb3de63c7cc5949b6da9c0af0e55d..c6287f2377973f410e8b9d7b27a8783b62c08e42 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -310,7 +310,7 @@ build-documentation:
   stage: docs
   needs: []
   script:
-    - nox --session docs
+    - nox --session docs -- --fail-on-warnings
   tags:
     - docker
     - cuda11
diff --git a/noxfile.py b/noxfile.py
index 18b5335549c0b9c541fb3f8a47389f7387581423..1b882478ac18bfc634e117926c8a0c6b9b94fbc8 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -54,7 +54,7 @@ def install_cupy(
 def check_external_doc_dependencies(session: nox.Session):
     dot_args = ["dot", "--version"]
     try:
-        _ = subprocess.run(dot_args)
+        _ = subprocess.run(dot_args, capture_output=True)
     except FileNotFoundError:
         session.error(
             "Unable to build documentation: "
@@ -119,5 +119,16 @@ def docs(session: nox.Session):
     check_external_doc_dependencies(session)
     install_cupy(session, "12.3")
     editable_install(session, ["doc"])
+
+    env = {}
+
+    session_args = session.posargs
+    if "--fail-on-warnings" in session_args:
+        env["SPHINXOPTS"] = "-W --keep-going"
+
     session.chdir("docs")
-    session.run("make", "html", external=True, env={"SPHINXOPTS": "-W --keep-going"})
+
+    if "--clean" in session_args:
+        session.run("make", "clean", external=True)
+
+    session.run("make", "html", external=True, env=env)
diff --git a/pyproject.toml b/pyproject.toml
index c540ca1e9abef0d4a6ac9839027042483ea0451b..59e71b8db2d6156c25aebfcdeb88af5652dacc8e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -59,6 +59,7 @@ doc = [
     'sphinx_design',
     'myst-nb',
     'matplotlib',
+    'ipywidgets',
     'graphviz',
 ]
 testsuite = [