From 82d1f0dc81ff552d7bb5ae6e0e923f08fc5dae40 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 11:43:57 +0100 Subject: [PATCH 01/28] Add readthedocs configuration --- .readthedocs.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..f215e317ea --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,20 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3" + +sphinx: + configuration: docs/conf.py + +formats: + - pdf + +python: + install: + - requirements: docs/requirements.txt From 57e6f1020c01828f09a93287bd27c4166d324312 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 11:47:57 +0100 Subject: [PATCH 02/28] Move sphinx configuration and doc requirements --- docs/{build => }/conf.py | 0 docs/{build => }/requirements.txt | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename docs/{build => }/conf.py (100%) rename docs/{build => }/requirements.txt (100%) diff --git a/docs/build/conf.py b/docs/conf.py similarity index 100% rename from docs/build/conf.py rename to docs/conf.py diff --git a/docs/build/requirements.txt b/docs/requirements.txt similarity index 100% rename from docs/build/requirements.txt rename to docs/requirements.txt From 077db5d5afa7343d07232305c75574475e589151 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 11:53:56 +0100 Subject: [PATCH 03/28] Move static and template directories --- docs/{build => }/_static/favicon.ico | Bin docs/{build => }/_static/logo_turing_dark.png | Bin docs/{build => }/_static/logo_turing_light.png | Bin docs/{build => }/_static/overrides.css | 0 docs/{build => }/_static/toggle.js | 0 .../_templates/sidebar-section-navigation.html | 0 docs/{build => }/_templates/sidebar-versions.html | 0 docs/{build => }/_templates/sphinx-version.html | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename docs/{build => }/_static/favicon.ico (100%) rename docs/{build => }/_static/logo_turing_dark.png (100%) rename docs/{build => }/_static/logo_turing_light.png (100%) rename docs/{build => }/_static/overrides.css (100%) rename docs/{build => }/_static/toggle.js (100%) rename docs/{build => }/_templates/sidebar-section-navigation.html (100%) rename docs/{build => }/_templates/sidebar-versions.html (100%) rename docs/{build => }/_templates/sphinx-version.html (100%) diff --git a/docs/build/_static/favicon.ico b/docs/_static/favicon.ico similarity index 100% rename from docs/build/_static/favicon.ico rename to docs/_static/favicon.ico diff --git a/docs/build/_static/logo_turing_dark.png b/docs/_static/logo_turing_dark.png similarity index 100% rename from docs/build/_static/logo_turing_dark.png rename to docs/_static/logo_turing_dark.png diff --git a/docs/build/_static/logo_turing_light.png b/docs/_static/logo_turing_light.png similarity index 100% rename from docs/build/_static/logo_turing_light.png rename to docs/_static/logo_turing_light.png diff --git a/docs/build/_static/overrides.css b/docs/_static/overrides.css similarity index 100% rename from docs/build/_static/overrides.css rename to docs/_static/overrides.css diff --git a/docs/build/_static/toggle.js b/docs/_static/toggle.js similarity index 100% rename from docs/build/_static/toggle.js rename to docs/_static/toggle.js diff --git a/docs/build/_templates/sidebar-section-navigation.html b/docs/_templates/sidebar-section-navigation.html similarity index 100% rename from docs/build/_templates/sidebar-section-navigation.html rename to docs/_templates/sidebar-section-navigation.html diff --git a/docs/build/_templates/sidebar-versions.html b/docs/_templates/sidebar-versions.html similarity index 100% rename from docs/build/_templates/sidebar-versions.html rename to docs/_templates/sidebar-versions.html diff --git a/docs/build/_templates/sphinx-version.html b/docs/_templates/sphinx-version.html similarity index 100% rename from docs/build/_templates/sphinx-version.html rename to docs/_templates/sphinx-version.html From 1e4855e809801b14d39e0fa200aca8303d866b33 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 12:03:24 +0100 Subject: [PATCH 04/28] Remove rinoh --- docs/build/emoji_support.rts | 7 ------- docs/build/emoji_support.rtt | 5 ----- docs/conf.py | 25 ------------------------- docs/requirements.txt | 2 -- 4 files changed, 39 deletions(-) delete mode 100644 docs/build/emoji_support.rts delete mode 100644 docs/build/emoji_support.rtt diff --git a/docs/build/emoji_support.rts b/docs/build/emoji_support.rts deleted file mode 100644 index 739d5d729f..0000000000 --- a/docs/build/emoji_support.rts +++ /dev/null @@ -1,7 +0,0 @@ -[STYLESHEET] -name=Emoji Support -description=Small tweaks made to the Sphinx style sheet -base=sphinx - -[VARIABLES] -fallback_typeface=Symbola diff --git a/docs/build/emoji_support.rtt b/docs/build/emoji_support.rtt deleted file mode 100644 index 3c3e005513..0000000000 --- a/docs/build/emoji_support.rtt +++ /dev/null @@ -1,5 +0,0 @@ -[TEMPLATE_CONFIGURATION] -name = Emoji Support -template = article - -stylesheet = emoji_support.rts diff --git a/docs/conf.py b/docs/conf.py index 879ed237cf..d1d891775a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -92,7 +92,6 @@ # ones. extensions = [ "myst_parser", - "rinoh.frontend.sphinx", ] # Add any paths that contain templates here, relative to this directory. @@ -170,27 +169,3 @@ emoji_code: emoji.emojize(f":{emoji_code}:", language="alias") for emoji_code in emoji_codes } - -# -- Options for Rinoh ------------------------------------------------------- - -# List of documents to convert to PDF -rinoh_documents = [ - dict( - doc="roles/researcher/user_guide_guacamole", - target="pdf/data_safe_haven_user_guide_guacamole", - title="Data Safe Haven User Guide\nApache Guacamole", - subtitle=pdf_version_string, - date=current_commit_date, - author=author, - template="emoji_support.rtt", - ), - dict( - doc="roles/researcher/user_guide_msrds", - target="pdf/data_safe_haven_user_guide_msrds", - title="Data Safe Haven User Guide\nMicrosoft Remote Desktop", - subtitle=pdf_version_string, - date=current_commit_date, - author=author, - template="emoji_support.rtt", - ), -] diff --git a/docs/requirements.txt b/docs/requirements.txt index a6f3275d8b..6611eb4227 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -4,6 +4,4 @@ Jinja2==3.1.2 myst-parser==0.18.1 Pygments==2.14.0 pydata-sphinx-theme==0.12.0 -rinohtype==0.5.4 -rinoh-typeface-symbola==0.1.1 Sphinx==5.3.0 From b3f1aa2a71d55500621fac1fdbef1b17630576dc Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 13:53:50 +0100 Subject: [PATCH 05/28] Remove build directory --- docs/build/build_all_supported_versions.py | 173 --------------------- docs/build/meta/index.empty.md | 3 - docs/build/meta/index.html | 10 -- docs/build/run_act_build.sh | 68 -------- 4 files changed, 254 deletions(-) delete mode 100755 docs/build/build_all_supported_versions.py delete mode 100644 docs/build/meta/index.empty.md delete mode 100644 docs/build/meta/index.html delete mode 100755 docs/build/run_act_build.sh diff --git a/docs/build/build_all_supported_versions.py b/docs/build/build_all_supported_versions.py deleted file mode 100755 index dd2e565db2..0000000000 --- a/docs/build/build_all_supported_versions.py +++ /dev/null @@ -1,173 +0,0 @@ -#! /usr/bin/env python3 -import argparse -import emoji -import git -import os -import pathlib -import shutil -import subprocess -import sys -import tempfile - -# Set git repository details -development_branch = "develop" -earliest_supported_release = "v4.0.0" - -# --- Parse arguments --- -parser = argparse.ArgumentParser( - prog="python build_docs_all.py", - description="Build documentation for all supported versions", -) -parser.add_argument( - "-o", "--output-dir", help="Directory to store built documentation", required=True -) -parser.add_argument( - "-s", - "--skip-pdfs", - action="store_true", - help="Skip building PDFs (use only for faster testing)", -) -args = parser.parse_args() -skip_pdfs = args.skip_pdfs - -# Create output directory -combined_output_dir = pathlib.Path(args.output_dir).resolve() -if combined_output_dir.exists(): - shutil.rmtree(combined_output_dir) -combined_output_dir.mkdir(parents=True, exist_ok=True) - -# Necessary directories -temp_dir = tempfile.TemporaryDirectory() -build_dir = pathlib.Path(__file__).parent.resolve() -docs_dir = build_dir.parent -build_output_dir = docs_dir / "_output" -config_backup_dir = pathlib.Path(temp_dir.name) / "build_config" - -# Get git repository details -repo = git.Repo(search_parent_directories=True) -repo_name = repo.remotes.origin.url.split(".git")[0].split("/")[-1] - -# Load all release since earliest_supported_release -releases = sorted((t.name for t in repo.tags), reverse=True) -supported_versions = ( - releases[: releases.index(earliest_supported_release) + 1] - + [development_branch] -) -default_version = supported_versions[0] # Latest stable release -current_version = ( - [tag.name for tag in repo.tags if tag.commit == repo.head.commit] - + [branch.name for branch in repo.branches if branch.commit == repo.head.commit] - + [repo.head.commit] -)[0] # Tag or branch name or commit ID if no name is available - -# --- Ensure local repo is clean -- -if repo.is_dirty(untracked_files=True): - print( - "Repo is not clean. Run 'git status' and ensure repo is clean before rerunning this script." - ) - exit(1) - -# --- Backup documentastion build configuration --- -# Backup Sphinx docs build configuration from current branch to ensure -# consistent style and navigation elements for docs across all versions -# NOTE: copytree() requires the destination directory does not exist -# This is why we target a subfolder of the TemporaryDirectory we create -# earlier as the config backup directory -print(f"Backing up build config to: '{config_backup_dir}'") -shutil.copytree(build_dir, config_backup_dir) - -# --- Build docs for all supported versions --- -print(f"Building docs for all supported versions: {supported_versions}") -print(f"Default version: {default_version}") - - -# Flag to bypass Jekyll processing since this is a static html site -open(combined_output_dir / ".nojekyll", "w+").close() - -# Build docs for each branch -for version in supported_versions: - print(f"{emoji.emojize(':hourglass:', language='alias')} Generating docs for version '{version}'...") - - try: - # Checkout repo at this version - repo.git.checkout(version) - - # Restore Sphinx docs build configuration from backup for consistent style, - # clearing any existing build configuration directory content first. - if os.path.exists(build_dir): - shutil.rmtree(build_dir) - shutil.copytree(config_backup_dir, build_dir) - - # Use the first of these files that exists as the index: - # - index.md - # - README.md - # - DSG-user-documentation.md - # - An empty index.md - target = docs_dir / "index.md" - if target.is_file(): - # Use existing index file. Nothing to do. - pass - elif (source := docs_dir / "README.md").is_file(): - # Use docs README - shutil.move(source, target) - elif (source := docs_dir / "DSG-user-documentation.md").is_file(): - # Use docs DSG user documentation - shutil.move(source, target) - else: - # Use empty index file - shutil.copy(build_dir / "meta" / "index.empty.md", target) - - # Clean the output directory - subprocess.run( - ["make", "clean"], - cwd=docs_dir, - check=True, - ) - # Build docs for this version - build_commands = ["make", "html"] - if not skip_pdfs: - build_commands.append("pdf") - subprocess.run( - build_commands, - cwd=docs_dir, - check=True, - ) - # Store docs in the output directory - shutil.copytree(build_output_dir, combined_output_dir / version) - shutil.rmtree(build_output_dir) - - except subprocess.CalledProcessError: - print(f"Error encountered during build for version '{version}'") - raise - else: - print(f"{emoji.emojize(':sparkles:', language='alias')} Successfully built docs for version '{version}'") - finally: - # Revert any changes made to current branch - print(f"Reverting changes made to '{version}'") - repo.git.reset("--hard", "HEAD") - repo.git.clean("-fd") - -# Write top-level index file to redirect to default version of docs -with open(os.path.join(docs_dir, "build", "meta", "index.html"), "r") as file: - filedata = file.read() -filedata = filedata.replace("{{latest_stable}}", default_version) -with open(os.path.join(combined_output_dir, "index.html"), "w+") as file: - file.write(filedata) - -# -- Restore original branch and copy docs to specified output directory -- -print(f"Documentation builds complete for all versions: {supported_versions}") -# Checkout original branch -print(f"Restoring original '{current_version}' branch.") -repo.git.checkout(current_version) -temp_dir.cleanup() - -# Check that all versions have built -n_failures = 0 -for version in supported_versions: - if (combined_output_dir / version / "index.html").is_file(): - print(f"{emoji.emojize(':white_check_mark:', language='alias')} {version} documentation built successfully") - else: - print(f"{emoji.emojize(':x:', language='alias')} {version} documentation failed to build!") - n_failures += 1 - if n_failures: - sys.exit(1) diff --git a/docs/build/meta/index.empty.md b/docs/build/meta/index.empty.md deleted file mode 100644 index 989cf73460..0000000000 --- a/docs/build/meta/index.empty.md +++ /dev/null @@ -1,3 +0,0 @@ -# Safe Haven Documentation - -This release does not have any documentation diff --git a/docs/build/meta/index.html b/docs/build/meta/index.html deleted file mode 100644 index e8db9ab780..0000000000 --- a/docs/build/meta/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - Data Safe Haven Documentation - - - -

Please wait while you're redirected to our documentation.

- - \ No newline at end of file diff --git a/docs/build/run_act_build.sh b/docs/build/run_act_build.sh deleted file mode 100755 index 3546d96d63..0000000000 --- a/docs/build/run_act_build.sh +++ /dev/null @@ -1,68 +0,0 @@ -#! /bin/sh - -# Document usage for this script -usage() { - echo "usage: $(basename "$0") -d directory [-h] [-p port]" - echo " -d directory [required] specify directory where output should be stored" - echo " -h display help" - echo " -p port specify port to run webserver on [default: 8080]" - exit 1 -} - -# Read command line arguments, overriding defaults where necessary -target_directory="" -port="8080" -while getopts "d:hp:" option; do - case $option in - d) - target_directory=$OPTARG - ;; - h) - usage - ;; - p) - port=$OPTARG - ;; - \?) - echo "Invalid option: -$OPTARG" >&2 - ;; - esac -done - -# Check that target and output directories exist -target_directory="$(realpath "$target_directory")" -if [ -z "$target_directory" ]; then usage; fi -output_directory="${target_directory:?}/data-safe-haven" -mkdir -p "${output_directory}" - -# Check that output directory is empty -if [ "$(ls -A "$output_directory")" ]; then - while true; do - echo "$output_directory is not empty. Delete its contents? [y/n] " - read -r response - case $response in - [Yy]*) - rm -rf "${output_directory}" - break - ;; - [Nn]*) exit 0 ;; - *) echo "Please answer yes or no." ;; - esac - done -fi - -# Build docs with act -echo "Building docs" -act -j build_docs -C "$(git rev-parse --show-toplevel)" 2>/dev/null - -# Move the docs to a local directory -echo "Moving docs to target directory" -CONTAINER_ID=$(docker container ls -a | grep build-docs | cut -d ' ' -f 1) -echo "Starting container $(docker container start "$CONTAINER_ID")..." -DOCS_DIR=$(dirname "$(docker exec -it "$CONTAINER_ID" /bin/bash -c "find /tmp -type d -name develop")") -docker cp "${CONTAINER_ID}:${DOCS_DIR}/." "${output_directory}" -echo "Stopping container $(docker container stop "$CONTAINER_ID")" - -# Start a Python webserver in local directory -echo "Starting webserver at http://localhost:${port}" -python -m http.server --directory "${target_directory}" "$port" From 111389a1f536aa69d4762b12b2be7a3cca2a4b56 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 14:07:30 +0100 Subject: [PATCH 06/28] Remove pdf builds from Makefile --- docs/Makefile | 36 +++++++----------------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index d3b53ad27d..e96b72c7ae 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -6,37 +6,15 @@ SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = . -CONFIGDIR = build -TARGETDIR = _output +BUILDDIR = build -# Determine which PDFs to build -# If you want to add a PDF make the following changes -# - Add SOURCE and TARGET variables -# - Add TARGET to PDFTARGETS rule -# - Add a 'TARGET: SOURCE' rule -# - Edit conf.py if you want them to be downloadable -PDFTARGETDIR = $(TARGETDIR)/pdf - -# Put help first so that "make" without argument is like "make help". +# Put it first so that "make" without argument is like "make help". help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(TARGETDIR)" $(SPHINXOPTS) $(O) + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile -# 'all' will make HTML and PDFs -all: html pdf - -# Use rinoh (via Sphinx) to build PDFs from Markdown -pdf: - make rinoh - rm $(PDFTARGETDIR)/*.rtc - rm $(PDFTARGETDIR)/*.stylelog - -# Ensure that clean also removes the contents of $(PDFTARGETDIR) -clean: - rm -rf $(PDFTARGETDIR)/* - @$(SPHINXBUILD) -M clean "$(SOURCEDIR)" "$(TARGETDIR)" - -# Use Sphinx for other options. $(O) is meant as a shortcut for $(SPHINXOPTS). -.DEFAULT: Makefile - @$(SPHINXBUILD) -b $@ -c "$(CONFIGDIR)" "$(SOURCEDIR)" "$(TARGETDIR)" $(SPHINXOPTS) $(O) +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) From cc86c418415fea85f1007e1f5030565f6764b43e Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 14:10:40 +0100 Subject: [PATCH 07/28] Disable readthedocs pdf builds At least temporarily to safe time/cpu cycles. --- .readthedocs.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index f215e317ea..d29cf953e9 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -12,8 +12,8 @@ build: sphinx: configuration: docs/conf.py -formats: - - pdf +# formats: +# - pdf python: install: From 12e6cf596f7969af24fbc2caae5e6d4b428a6392 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 14:16:22 +0100 Subject: [PATCH 08/28] Move scriberia figure --- README.md | 2 +- docs/{static => _static}/scriberia_diagram.jpg | Bin docs/index.md | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename docs/{static => _static}/scriberia_diagram.jpg (100%) diff --git a/README.md b/README.md index acad65c38e..9090598d55 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Data Safe Haven cartoon by Scriberia for The Alan Turing Institute](docs/static/scriberia_diagram.jpg) +![Data Safe Haven cartoon by Scriberia for The Alan Turing Institute](docs/_static/scriberia_diagram.jpg) # :eyes: What is the Turing Data Safe Haven? diff --git a/docs/static/scriberia_diagram.jpg b/docs/_static/scriberia_diagram.jpg similarity index 100% rename from docs/static/scriberia_diagram.jpg rename to docs/_static/scriberia_diagram.jpg diff --git a/docs/index.md b/docs/index.md index 19caa8d65c..b048a58177 100644 --- a/docs/index.md +++ b/docs/index.md @@ -11,7 +11,7 @@ processes/index.md roles/index.md ``` -```{image} static/scriberia_diagram.jpg +```{image} _static/scriberia_diagram.jpg :alt: Data Safe Haven cartoon by Scriberia for The Alan Turing Institute :align: center ``` From c8369d993601fe1bdf5ca12b889231903c61ec7e Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 14:19:38 +0100 Subject: [PATCH 09/28] Move docs source to source dir --- .readthedocs.yaml | 2 +- docs/Makefile | 2 +- docs/{ => source}/_static/favicon.ico | Bin docs/{ => source}/_static/logo_turing_dark.png | Bin docs/{ => source}/_static/logo_turing_light.png | Bin docs/{ => source}/_static/overrides.css | 0 docs/{ => source}/_static/scriberia_diagram.jpg | Bin docs/{ => source}/_static/toggle.js | 0 .../_templates/sidebar-section-navigation.html | 0 docs/{ => source}/_templates/sidebar-versions.html | 0 docs/{ => source}/_templates/sphinx-version.html | 0 docs/{ => source}/conf.py | 0 docs/{ => source}/contributing/devops_gap.png | Bin .../contributing/example-conversation-in-issue.png | Bin docs/{ => source}/contributing/gitflow.svg | 0 docs/{ => source}/deployment/build_srd_image.md | 0 docs/{ => source}/deployment/deploy_shm.md | 0 docs/{ => source}/deployment/deploy_shm/AAD.png | Bin .../deploy_shm/aad_authentication_methods.png | Bin .../deployment/deploy_shm/aad_create_admin.png | Bin .../deployment/deploy_shm/aad_creation.png | Bin .../deployment/deploy_shm/aad_global_admin.png | Bin .../deployment/deploy_shm/aad_mfa_settings.png | Bin .../{ => source}/deployment/deploy_shm/aad_sspr.png | Bin .../deployment/deploy_shm/aad_tenant_id.png | Bin .../deploy_shm/catalina_authentication.png | Bin .../deployment/deploy_shm/certificate_details.png | Bin .../deployment/deploy_shm/dc_resource_groups.png | Bin .../deploy_shm/enable_password_writeback.png | Bin .../deployment/deploy_shm/nps_accounting.png | Bin .../deployment/deploy_shm/shm_subdomain_ns.png | Bin .../deployment/deploy_shm/vnet_resource_groups.png | Bin docs/{ => source}/deployment/deploy_sre.md | 0 .../guacamole_aad_app_registration_idtoken.png | Bin .../deploy_sre/guacamole_aad_idtoken_failure.png | Bin .../deployment/deploy_sre/guacamole_desktop.png | Bin .../deployment/deploy_sre/msrds_desktop.png | Bin .../deployment/deploy_sre/sre_subdomain_ns.png | Bin .../deployment/deploy_sre_apache_guacamole.md | 0 .../deployment/deploy_sre_microsoft_rds.md | 0 docs/{ => source}/deployment/index.md | 0 docs/{ => source}/deployment/security_checklist.md | 0 .../aad_additional_security_verification.png | Bin .../aad_mfa_approve_signin_request.png | Bin .../security_checklist/guacamole_srd_desktop.png | Bin .../security_checklist/login_no_mfa_guacamole.png | Bin .../security_checklist/login_no_mfa_msrds.png | Bin .../msrds_dashboard_with_apps.png | Bin .../security_checklist/msrds_failed_to_connect.png | Bin .../security_checklist/msrds_srd_desktop.png | Bin .../security_checklist/nsg_inbound_access.png | Bin .../security_checklist/nsg_outbound_access.png | Bin .../security_checklist/shmdc_website_deny.png | Bin .../security_checklist/shmdc_windows_update.png | Bin .../security_checklist/srd_installed_software.png | Bin .../deployment/security_checklist/srd_no_curl.png | Bin .../security_checklist/srd_no_internet.png | Bin .../security_checklist/srd_no_nslookup.png | Bin .../security_checklist/srd_no_ssh_by_fqdn.png | Bin .../security_checklist/srd_no_ssh_by_ip.png | Bin .../security_checklist/srd_pypi_tier2_allowed.png | Bin .../security_checklist/srd_pypi_tier2_denied.png | Bin .../security_checklist/srd_pypi_tier3_allowed.png | Bin .../security_checklist/srd_pypi_tier3_denied.png | Bin .../security_checklist/ssh_connection_fail.png | Bin .../deployment/snippets/00_symbols.partial.md | 0 .../deployment/snippets/01_prerequisites.partial.md | 0 .../deployment/snippets/02_configuration.partial.md | 0 .../snippets/03_01_remove_data.partial.md | 0 .../snippets/03_02_register_sre.partial.md | 0 .../deployment/snippets/04_01_sre_dns.partial.md | 0 .../deployment/snippets/04_02_manual_dns.partial.md | 0 .../snippets/04_03_deploy_vnet.partial.md | 0 .../snippets/05_storage_accounts.partial.md | 0 .../snippets/06_01_create_user_account.partial.md | 0 .../snippets/07_deploy_webapps.partial.md | 0 .../deployment/snippets/08_databases.partial.md | 0 .../deployment/snippets/09_single_srd.partial.md | 0 .../snippets/10_network_lockdown.partial.md | 0 .../snippets/11_configure_firewall.partial.md | 0 .../snippets/12_configure_monitoring.partial.md | 0 .../deployment/snippets/13_enable_backup.partial.md | 0 .../snippets/14_run_smoke_tests.partial.md | 0 .../deployment/snippets/user_csv_format.partial.md | 0 .../design/architecture/architecture_mirrors.png | Bin docs/{ => source}/design/architecture/index.md | 0 .../design/architecture/safe_haven_architecture.png | Bin .../design/architecture/shm_architecture.png | Bin .../{ => source}/design/architecture/shm_details.md | 0 .../design/architecture/sre_architecture.png | Bin .../{ => source}/design/architecture/sre_details.md | 0 docs/{ => source}/design/index.md | 0 docs/{ => source}/design/security/index.md | 0 docs/{ => source}/design/security/objectives.md | 0 .../design/security/reference_configuration.md | 0 .../design/security/sample_security_controls.png | Bin .../design/security/technical_controls.md | 0 docs/{ => source}/index.md | 0 docs/{ => source}/overview/index.md | 0 docs/{ => source}/overview/sensitivity_tiers.md | 0 docs/{ => source}/overview/what_is_dsh.md | 0 docs/{ => source}/overview/why_use_dsh.md | 0 docs/{ => source}/processes/data_access_controls.md | 0 docs/{ => source}/processes/data_classification.md | 0 docs/{ => source}/processes/data_egress.md | 0 docs/{ => source}/processes/data_handling.md | 0 docs/{ => source}/processes/data_ingress.md | 0 .../processes/data_transfer_protocol.md | 0 docs/{ => source}/processes/index.md | 0 .../processes/software_package_approval.md | 0 .../data_provider_representative/azcopy_warning.png | Bin .../azure_storage_explorer_connect.png | Bin .../azure_storage_explorer_container.png | Bin .../azure_storage_explorer_error.png | Bin .../roles/data_provider_representative/index.md | 0 docs/{ => source}/roles/index.md | 0 docs/{ => source}/roles/investigator/data_egress.md | 0 .../{ => source}/roles/investigator/data_ingress.md | 0 docs/{ => source}/roles/investigator/index.md | 0 docs/{ => source}/roles/programme_manager/index.md | 0 .../roles/project_manager/data_egress.md | 0 .../roles/project_manager/data_ingress.md | 0 docs/{ => source}/roles/project_manager/index.md | 0 .../roles/project_manager/project_lifecycle.md | 0 docs/{ => source}/roles/referee/index.md | 0 .../roles/researcher/available_software.md | 0 docs/{ => source}/roles/researcher/index.md | 0 .../researcher/snippets/01_introduction.partial.md | 0 .../researcher/snippets/02_account_setup.partial.md | 0 .../snippets/03_01_prerequisites.partial.md | 0 .../researcher/snippets/03_02_srd_login.partial.md | 0 .../researcher/snippets/04_using_srd.partial.md | 0 .../researcher/snippets/05_share_files.partial.md | 0 .../roles/researcher/snippets/06_cocalc.partial.md | 0 .../roles/researcher/snippets/07_gitlab.partial.md | 0 .../roles/researcher/snippets/08_codimd.partial.md | 0 .../researcher/snippets/10_databases.partial.md | 0 .../researcher/snippets/11_report_bugs.partial.md | 0 .../researcher/snippets/12_end_matter.partial.md | 0 .../roles/researcher/snippets/13_MFA.partial.md | 0 .../snippets/software_database.partial.md | 0 .../researcher/snippets/software_editors.partial.md | 0 .../snippets/software_languages.partial.md | 0 .../researcher/snippets/software_other.partial.md | 0 .../snippets/software_presentation.partial.md | 0 docs/{ => source}/roles/researcher/user_guide.md | 0 .../user_guide/access_desktop_applications.png | Bin .../researcher/user_guide/account_setup_captcha.png | Bin .../user_guide/account_setup_forgotten_password.png | Bin .../account_setup_mfa_add_authenticator_app.png | Bin ...t_setup_mfa_additional_security_verification.png | Bin .../account_setup_mfa_allow_notifications.png | Bin .../user_guide/account_setup_mfa_app_qrcode.png | Bin ...account_setup_mfa_authenticator_app_approved.png | Bin .../account_setup_mfa_authenticator_app_test.png | Bin .../account_setup_mfa_dashboard_phone_only.png | Bin .../account_setup_mfa_dashboard_two_methods.png | Bin ...account_setup_mfa_download_authenticator_app.png | Bin .../account_setup_mfa_registered_phone.png | Bin .../user_guide/account_setup_mfa_verified_phone.png | Bin .../account_setup_mfa_verifying_phone.png | Bin .../account_setup_more_information_required.png | Bin .../user_guide/account_setup_new_password.png | Bin .../account_setup_new_password_sign_in.png | Bin .../user_guide/account_setup_verify_phone.png | Bin .../user_guide/cocalc_account_creation.png | Bin .../roles/researcher/user_guide/cocalc_homepage.png | Bin .../user_guide/cocalc_security_warning.png | Bin .../researcher/user_guide/codimd_access_options.png | Bin .../roles/researcher/user_guide/codimd_logon.png | Bin .../researcher/user_guide/codimd_publishing.png | Bin .../researcher/user_guide/db_azure_data_studio.png | Bin .../researcher/user_guide/db_dbeaver_mssql.png | Bin .../user_guide/db_dbeaver_postgres_connection.png | Bin .../user_guide/db_dbeaver_postgres_ignore.png | Bin .../researcher/user_guide/gitlab_clone_url.png | Bin .../user_guide/gitlab_merge_request_details.png | Bin .../user_guide/gitlab_new_merge_request.png | Bin .../user_guide/gitlab_screenshot_login.png | Bin .../researcher/user_guide/guacamole_dashboard.png | Bin .../roles/researcher/user_guide/guacamole_mfa.png | Bin .../user_guide/logon_environment_guacamole.png | Bin .../user_guide/logon_environment_msrds.png | Bin .../roles/researcher/user_guide/msrds_dashboard.png | Bin .../user_guide/msrds_no_work_resources.png | Bin .../researcher/user_guide/msrds_srd_connection.png | Bin .../user_guide/msrds_srd_connection_failure.png | Bin .../researcher/user_guide/msrds_srd_rdc_screen.png | Bin .../user_guide/msrds_srd_security_fingerprint.png | Bin .../msrds_unexpected_certificate_error.png | Bin .../researcher/user_guide/srd_login_failure.png | Bin .../researcher/user_guide/srd_login_screen.png | Bin .../researcher/user_guide/srd_xfce_initial.png | Bin .../roles/researcher/user_guide_guacamole.md | 0 .../roles/researcher/user_guide_msrds.md | 0 .../administrator_guide/backup_instances_blobs.png | Bin .../administrator_guide/backup_instances_disks.png | Bin .../administrator_guide/backup_progress_disk_1.png | Bin .../administrator_guide/backup_progress_disk_2.png | Bin .../administrator_guide/backup_progress_disk_3.png | Bin .../administrator_guide/backup_restore_disk.png | Bin .../backup_select_containers_validate_blobs.png | Bin .../backup_select_restore_time_blobs.png | Bin .../backup_select_snapshot_validate_disks.png | Bin .../administrator_guide/backup_swap_disk_after.png | Bin .../administrator_guide/backup_swap_disk_before.png | Bin .../administrator_guide/connect_azure_storage.png | Bin .../internal_mirror_packages.png | Bin .../login_certificate_expiry.png | Bin .../administrator_guide/login_password_login.png | Bin .../administrator_guide/no_recent_connections.png | Bin .../administrator_guide/password_reset_failure.png | Bin .../administrator_guide/read_only_sas_token.png | Bin .../administrator_guide/srd_login_failure.png | Bin .../administrator_guide/srd_login_opening_port.png | Bin .../administrator_guide/srd_login_prompt.png | Bin docs/{ => source}/roles/system_manager/index.md | 0 .../roles/system_manager/manage_costs.md | 0 .../roles/system_manager/manage_data.md | 0 .../roles/system_manager/manage_deployments.md | 0 .../roles/system_manager/manage_users.md | 0 .../roles/system_manager/manage_webapps.md | 0 .../roles/system_manager/migrate_an_shm.md | 0 .../migrate_shm/aad_connection_failure.png | Bin .../system_manager/snippets/01_console.partial.md | 0 225 files changed, 2 insertions(+), 2 deletions(-) rename docs/{ => source}/_static/favicon.ico (100%) rename docs/{ => source}/_static/logo_turing_dark.png (100%) rename docs/{ => source}/_static/logo_turing_light.png (100%) rename docs/{ => source}/_static/overrides.css (100%) rename docs/{ => source}/_static/scriberia_diagram.jpg (100%) rename docs/{ => source}/_static/toggle.js (100%) rename docs/{ => source}/_templates/sidebar-section-navigation.html (100%) rename docs/{ => source}/_templates/sidebar-versions.html (100%) rename docs/{ => source}/_templates/sphinx-version.html (100%) rename docs/{ => source}/conf.py (100%) rename docs/{ => source}/contributing/devops_gap.png (100%) rename docs/{ => source}/contributing/example-conversation-in-issue.png (100%) rename docs/{ => source}/contributing/gitflow.svg (100%) rename docs/{ => source}/deployment/build_srd_image.md (100%) rename docs/{ => source}/deployment/deploy_shm.md (100%) rename docs/{ => source}/deployment/deploy_shm/AAD.png (100%) rename docs/{ => source}/deployment/deploy_shm/aad_authentication_methods.png (100%) rename docs/{ => source}/deployment/deploy_shm/aad_create_admin.png (100%) rename docs/{ => source}/deployment/deploy_shm/aad_creation.png (100%) rename docs/{ => source}/deployment/deploy_shm/aad_global_admin.png (100%) rename docs/{ => source}/deployment/deploy_shm/aad_mfa_settings.png (100%) rename docs/{ => source}/deployment/deploy_shm/aad_sspr.png (100%) rename docs/{ => source}/deployment/deploy_shm/aad_tenant_id.png (100%) rename docs/{ => source}/deployment/deploy_shm/catalina_authentication.png (100%) rename docs/{ => source}/deployment/deploy_shm/certificate_details.png (100%) rename docs/{ => source}/deployment/deploy_shm/dc_resource_groups.png (100%) rename docs/{ => source}/deployment/deploy_shm/enable_password_writeback.png (100%) rename docs/{ => source}/deployment/deploy_shm/nps_accounting.png (100%) rename docs/{ => source}/deployment/deploy_shm/shm_subdomain_ns.png (100%) rename docs/{ => source}/deployment/deploy_shm/vnet_resource_groups.png (100%) rename docs/{ => source}/deployment/deploy_sre.md (100%) rename docs/{ => source}/deployment/deploy_sre/guacamole_aad_app_registration_idtoken.png (100%) rename docs/{ => source}/deployment/deploy_sre/guacamole_aad_idtoken_failure.png (100%) rename docs/{ => source}/deployment/deploy_sre/guacamole_desktop.png (100%) rename docs/{ => source}/deployment/deploy_sre/msrds_desktop.png (100%) rename docs/{ => source}/deployment/deploy_sre/sre_subdomain_ns.png (100%) rename docs/{ => source}/deployment/deploy_sre_apache_guacamole.md (100%) rename docs/{ => source}/deployment/deploy_sre_microsoft_rds.md (100%) rename docs/{ => source}/deployment/index.md (100%) rename docs/{ => source}/deployment/security_checklist.md (100%) rename docs/{ => source}/deployment/security_checklist/aad_additional_security_verification.png (100%) rename docs/{ => source}/deployment/security_checklist/aad_mfa_approve_signin_request.png (100%) rename docs/{ => source}/deployment/security_checklist/guacamole_srd_desktop.png (100%) rename docs/{ => source}/deployment/security_checklist/login_no_mfa_guacamole.png (100%) rename docs/{ => source}/deployment/security_checklist/login_no_mfa_msrds.png (100%) rename docs/{ => source}/deployment/security_checklist/msrds_dashboard_with_apps.png (100%) rename docs/{ => source}/deployment/security_checklist/msrds_failed_to_connect.png (100%) rename docs/{ => source}/deployment/security_checklist/msrds_srd_desktop.png (100%) rename docs/{ => source}/deployment/security_checklist/nsg_inbound_access.png (100%) rename docs/{ => source}/deployment/security_checklist/nsg_outbound_access.png (100%) rename docs/{ => source}/deployment/security_checklist/shmdc_website_deny.png (100%) rename docs/{ => source}/deployment/security_checklist/shmdc_windows_update.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_installed_software.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_no_curl.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_no_internet.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_no_nslookup.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_no_ssh_by_fqdn.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_no_ssh_by_ip.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_pypi_tier2_allowed.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_pypi_tier2_denied.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_pypi_tier3_allowed.png (100%) rename docs/{ => source}/deployment/security_checklist/srd_pypi_tier3_denied.png (100%) rename docs/{ => source}/deployment/security_checklist/ssh_connection_fail.png (100%) rename docs/{ => source}/deployment/snippets/00_symbols.partial.md (100%) rename docs/{ => source}/deployment/snippets/01_prerequisites.partial.md (100%) rename docs/{ => source}/deployment/snippets/02_configuration.partial.md (100%) rename docs/{ => source}/deployment/snippets/03_01_remove_data.partial.md (100%) rename docs/{ => source}/deployment/snippets/03_02_register_sre.partial.md (100%) rename docs/{ => source}/deployment/snippets/04_01_sre_dns.partial.md (100%) rename docs/{ => source}/deployment/snippets/04_02_manual_dns.partial.md (100%) rename docs/{ => source}/deployment/snippets/04_03_deploy_vnet.partial.md (100%) rename docs/{ => source}/deployment/snippets/05_storage_accounts.partial.md (100%) rename docs/{ => source}/deployment/snippets/06_01_create_user_account.partial.md (100%) rename docs/{ => source}/deployment/snippets/07_deploy_webapps.partial.md (100%) rename docs/{ => source}/deployment/snippets/08_databases.partial.md (100%) rename docs/{ => source}/deployment/snippets/09_single_srd.partial.md (100%) rename docs/{ => source}/deployment/snippets/10_network_lockdown.partial.md (100%) rename docs/{ => source}/deployment/snippets/11_configure_firewall.partial.md (100%) rename docs/{ => source}/deployment/snippets/12_configure_monitoring.partial.md (100%) rename docs/{ => source}/deployment/snippets/13_enable_backup.partial.md (100%) rename docs/{ => source}/deployment/snippets/14_run_smoke_tests.partial.md (100%) rename docs/{ => source}/deployment/snippets/user_csv_format.partial.md (100%) rename docs/{ => source}/design/architecture/architecture_mirrors.png (100%) rename docs/{ => source}/design/architecture/index.md (100%) rename docs/{ => source}/design/architecture/safe_haven_architecture.png (100%) rename docs/{ => source}/design/architecture/shm_architecture.png (100%) rename docs/{ => source}/design/architecture/shm_details.md (100%) rename docs/{ => source}/design/architecture/sre_architecture.png (100%) rename docs/{ => source}/design/architecture/sre_details.md (100%) rename docs/{ => source}/design/index.md (100%) rename docs/{ => source}/design/security/index.md (100%) rename docs/{ => source}/design/security/objectives.md (100%) rename docs/{ => source}/design/security/reference_configuration.md (100%) rename docs/{ => source}/design/security/sample_security_controls.png (100%) rename docs/{ => source}/design/security/technical_controls.md (100%) rename docs/{ => source}/index.md (100%) rename docs/{ => source}/overview/index.md (100%) rename docs/{ => source}/overview/sensitivity_tiers.md (100%) rename docs/{ => source}/overview/what_is_dsh.md (100%) rename docs/{ => source}/overview/why_use_dsh.md (100%) rename docs/{ => source}/processes/data_access_controls.md (100%) rename docs/{ => source}/processes/data_classification.md (100%) rename docs/{ => source}/processes/data_egress.md (100%) rename docs/{ => source}/processes/data_handling.md (100%) rename docs/{ => source}/processes/data_ingress.md (100%) rename docs/{ => source}/processes/data_transfer_protocol.md (100%) rename docs/{ => source}/processes/index.md (100%) rename docs/{ => source}/processes/software_package_approval.md (100%) rename docs/{ => source}/roles/data_provider_representative/azcopy_warning.png (100%) rename docs/{ => source}/roles/data_provider_representative/azure_storage_explorer_connect.png (100%) rename docs/{ => source}/roles/data_provider_representative/azure_storage_explorer_container.png (100%) rename docs/{ => source}/roles/data_provider_representative/azure_storage_explorer_error.png (100%) rename docs/{ => source}/roles/data_provider_representative/index.md (100%) rename docs/{ => source}/roles/index.md (100%) rename docs/{ => source}/roles/investigator/data_egress.md (100%) rename docs/{ => source}/roles/investigator/data_ingress.md (100%) rename docs/{ => source}/roles/investigator/index.md (100%) rename docs/{ => source}/roles/programme_manager/index.md (100%) rename docs/{ => source}/roles/project_manager/data_egress.md (100%) rename docs/{ => source}/roles/project_manager/data_ingress.md (100%) rename docs/{ => source}/roles/project_manager/index.md (100%) rename docs/{ => source}/roles/project_manager/project_lifecycle.md (100%) rename docs/{ => source}/roles/referee/index.md (100%) rename docs/{ => source}/roles/researcher/available_software.md (100%) rename docs/{ => source}/roles/researcher/index.md (100%) rename docs/{ => source}/roles/researcher/snippets/01_introduction.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/02_account_setup.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/03_01_prerequisites.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/03_02_srd_login.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/04_using_srd.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/05_share_files.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/06_cocalc.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/07_gitlab.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/08_codimd.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/10_databases.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/11_report_bugs.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/12_end_matter.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/13_MFA.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/software_database.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/software_editors.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/software_languages.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/software_other.partial.md (100%) rename docs/{ => source}/roles/researcher/snippets/software_presentation.partial.md (100%) rename docs/{ => source}/roles/researcher/user_guide.md (100%) rename docs/{ => source}/roles/researcher/user_guide/access_desktop_applications.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_captcha.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_forgotten_password.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_add_authenticator_app.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_additional_security_verification.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_allow_notifications.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_app_qrcode.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_authenticator_app_approved.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_authenticator_app_test.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_dashboard_phone_only.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_dashboard_two_methods.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_download_authenticator_app.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_registered_phone.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_verified_phone.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_mfa_verifying_phone.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_more_information_required.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_new_password.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_new_password_sign_in.png (100%) rename docs/{ => source}/roles/researcher/user_guide/account_setup_verify_phone.png (100%) rename docs/{ => source}/roles/researcher/user_guide/cocalc_account_creation.png (100%) rename docs/{ => source}/roles/researcher/user_guide/cocalc_homepage.png (100%) rename docs/{ => source}/roles/researcher/user_guide/cocalc_security_warning.png (100%) rename docs/{ => source}/roles/researcher/user_guide/codimd_access_options.png (100%) rename docs/{ => source}/roles/researcher/user_guide/codimd_logon.png (100%) rename docs/{ => source}/roles/researcher/user_guide/codimd_publishing.png (100%) rename docs/{ => source}/roles/researcher/user_guide/db_azure_data_studio.png (100%) rename docs/{ => source}/roles/researcher/user_guide/db_dbeaver_mssql.png (100%) rename docs/{ => source}/roles/researcher/user_guide/db_dbeaver_postgres_connection.png (100%) rename docs/{ => source}/roles/researcher/user_guide/db_dbeaver_postgres_ignore.png (100%) rename docs/{ => source}/roles/researcher/user_guide/gitlab_clone_url.png (100%) rename docs/{ => source}/roles/researcher/user_guide/gitlab_merge_request_details.png (100%) rename docs/{ => source}/roles/researcher/user_guide/gitlab_new_merge_request.png (100%) rename docs/{ => source}/roles/researcher/user_guide/gitlab_screenshot_login.png (100%) rename docs/{ => source}/roles/researcher/user_guide/guacamole_dashboard.png (100%) rename docs/{ => source}/roles/researcher/user_guide/guacamole_mfa.png (100%) rename docs/{ => source}/roles/researcher/user_guide/logon_environment_guacamole.png (100%) rename docs/{ => source}/roles/researcher/user_guide/logon_environment_msrds.png (100%) rename docs/{ => source}/roles/researcher/user_guide/msrds_dashboard.png (100%) rename docs/{ => source}/roles/researcher/user_guide/msrds_no_work_resources.png (100%) rename docs/{ => source}/roles/researcher/user_guide/msrds_srd_connection.png (100%) rename docs/{ => source}/roles/researcher/user_guide/msrds_srd_connection_failure.png (100%) rename docs/{ => source}/roles/researcher/user_guide/msrds_srd_rdc_screen.png (100%) rename docs/{ => source}/roles/researcher/user_guide/msrds_srd_security_fingerprint.png (100%) rename docs/{ => source}/roles/researcher/user_guide/msrds_unexpected_certificate_error.png (100%) rename docs/{ => source}/roles/researcher/user_guide/srd_login_failure.png (100%) rename docs/{ => source}/roles/researcher/user_guide/srd_login_screen.png (100%) rename docs/{ => source}/roles/researcher/user_guide/srd_xfce_initial.png (100%) rename docs/{ => source}/roles/researcher/user_guide_guacamole.md (100%) rename docs/{ => source}/roles/researcher/user_guide_msrds.md (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_instances_blobs.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_instances_disks.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_progress_disk_1.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_progress_disk_2.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_progress_disk_3.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_restore_disk.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_select_containers_validate_blobs.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_select_restore_time_blobs.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_select_snapshot_validate_disks.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_swap_disk_after.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/backup_swap_disk_before.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/connect_azure_storage.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/internal_mirror_packages.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/login_certificate_expiry.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/login_password_login.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/no_recent_connections.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/password_reset_failure.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/read_only_sas_token.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/srd_login_failure.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/srd_login_opening_port.png (100%) rename docs/{ => source}/roles/system_manager/administrator_guide/srd_login_prompt.png (100%) rename docs/{ => source}/roles/system_manager/index.md (100%) rename docs/{ => source}/roles/system_manager/manage_costs.md (100%) rename docs/{ => source}/roles/system_manager/manage_data.md (100%) rename docs/{ => source}/roles/system_manager/manage_deployments.md (100%) rename docs/{ => source}/roles/system_manager/manage_users.md (100%) rename docs/{ => source}/roles/system_manager/manage_webapps.md (100%) rename docs/{ => source}/roles/system_manager/migrate_an_shm.md (100%) rename docs/{ => source}/roles/system_manager/migrate_shm/aad_connection_failure.png (100%) rename docs/{ => source}/roles/system_manager/snippets/01_console.partial.md (100%) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index d29cf953e9..f496f7b191 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -10,7 +10,7 @@ build: python: "3" sphinx: - configuration: docs/conf.py + configuration: docs/source/conf.py # formats: # - pdf diff --git a/docs/Makefile b/docs/Makefile index e96b72c7ae..a2cf542beb 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -5,7 +5,7 @@ # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build -SOURCEDIR = . +SOURCEDIR = source BUILDDIR = build # Put it first so that "make" without argument is like "make help". diff --git a/docs/_static/favicon.ico b/docs/source/_static/favicon.ico similarity index 100% rename from docs/_static/favicon.ico rename to docs/source/_static/favicon.ico diff --git a/docs/_static/logo_turing_dark.png b/docs/source/_static/logo_turing_dark.png similarity index 100% rename from docs/_static/logo_turing_dark.png rename to docs/source/_static/logo_turing_dark.png diff --git a/docs/_static/logo_turing_light.png b/docs/source/_static/logo_turing_light.png similarity index 100% rename from docs/_static/logo_turing_light.png rename to docs/source/_static/logo_turing_light.png diff --git a/docs/_static/overrides.css b/docs/source/_static/overrides.css similarity index 100% rename from docs/_static/overrides.css rename to docs/source/_static/overrides.css diff --git a/docs/_static/scriberia_diagram.jpg b/docs/source/_static/scriberia_diagram.jpg similarity index 100% rename from docs/_static/scriberia_diagram.jpg rename to docs/source/_static/scriberia_diagram.jpg diff --git a/docs/_static/toggle.js b/docs/source/_static/toggle.js similarity index 100% rename from docs/_static/toggle.js rename to docs/source/_static/toggle.js diff --git a/docs/_templates/sidebar-section-navigation.html b/docs/source/_templates/sidebar-section-navigation.html similarity index 100% rename from docs/_templates/sidebar-section-navigation.html rename to docs/source/_templates/sidebar-section-navigation.html diff --git a/docs/_templates/sidebar-versions.html b/docs/source/_templates/sidebar-versions.html similarity index 100% rename from docs/_templates/sidebar-versions.html rename to docs/source/_templates/sidebar-versions.html diff --git a/docs/_templates/sphinx-version.html b/docs/source/_templates/sphinx-version.html similarity index 100% rename from docs/_templates/sphinx-version.html rename to docs/source/_templates/sphinx-version.html diff --git a/docs/conf.py b/docs/source/conf.py similarity index 100% rename from docs/conf.py rename to docs/source/conf.py diff --git a/docs/contributing/devops_gap.png b/docs/source/contributing/devops_gap.png similarity index 100% rename from docs/contributing/devops_gap.png rename to docs/source/contributing/devops_gap.png diff --git a/docs/contributing/example-conversation-in-issue.png b/docs/source/contributing/example-conversation-in-issue.png similarity index 100% rename from docs/contributing/example-conversation-in-issue.png rename to docs/source/contributing/example-conversation-in-issue.png diff --git a/docs/contributing/gitflow.svg b/docs/source/contributing/gitflow.svg similarity index 100% rename from docs/contributing/gitflow.svg rename to docs/source/contributing/gitflow.svg diff --git a/docs/deployment/build_srd_image.md b/docs/source/deployment/build_srd_image.md similarity index 100% rename from docs/deployment/build_srd_image.md rename to docs/source/deployment/build_srd_image.md diff --git a/docs/deployment/deploy_shm.md b/docs/source/deployment/deploy_shm.md similarity index 100% rename from docs/deployment/deploy_shm.md rename to docs/source/deployment/deploy_shm.md diff --git a/docs/deployment/deploy_shm/AAD.png b/docs/source/deployment/deploy_shm/AAD.png similarity index 100% rename from docs/deployment/deploy_shm/AAD.png rename to docs/source/deployment/deploy_shm/AAD.png diff --git a/docs/deployment/deploy_shm/aad_authentication_methods.png b/docs/source/deployment/deploy_shm/aad_authentication_methods.png similarity index 100% rename from docs/deployment/deploy_shm/aad_authentication_methods.png rename to docs/source/deployment/deploy_shm/aad_authentication_methods.png diff --git a/docs/deployment/deploy_shm/aad_create_admin.png b/docs/source/deployment/deploy_shm/aad_create_admin.png similarity index 100% rename from docs/deployment/deploy_shm/aad_create_admin.png rename to docs/source/deployment/deploy_shm/aad_create_admin.png diff --git a/docs/deployment/deploy_shm/aad_creation.png b/docs/source/deployment/deploy_shm/aad_creation.png similarity index 100% rename from docs/deployment/deploy_shm/aad_creation.png rename to docs/source/deployment/deploy_shm/aad_creation.png diff --git a/docs/deployment/deploy_shm/aad_global_admin.png b/docs/source/deployment/deploy_shm/aad_global_admin.png similarity index 100% rename from docs/deployment/deploy_shm/aad_global_admin.png rename to docs/source/deployment/deploy_shm/aad_global_admin.png diff --git a/docs/deployment/deploy_shm/aad_mfa_settings.png b/docs/source/deployment/deploy_shm/aad_mfa_settings.png similarity index 100% rename from docs/deployment/deploy_shm/aad_mfa_settings.png rename to docs/source/deployment/deploy_shm/aad_mfa_settings.png diff --git a/docs/deployment/deploy_shm/aad_sspr.png b/docs/source/deployment/deploy_shm/aad_sspr.png similarity index 100% rename from docs/deployment/deploy_shm/aad_sspr.png rename to docs/source/deployment/deploy_shm/aad_sspr.png diff --git a/docs/deployment/deploy_shm/aad_tenant_id.png b/docs/source/deployment/deploy_shm/aad_tenant_id.png similarity index 100% rename from docs/deployment/deploy_shm/aad_tenant_id.png rename to docs/source/deployment/deploy_shm/aad_tenant_id.png diff --git a/docs/deployment/deploy_shm/catalina_authentication.png b/docs/source/deployment/deploy_shm/catalina_authentication.png similarity index 100% rename from docs/deployment/deploy_shm/catalina_authentication.png rename to docs/source/deployment/deploy_shm/catalina_authentication.png diff --git a/docs/deployment/deploy_shm/certificate_details.png b/docs/source/deployment/deploy_shm/certificate_details.png similarity index 100% rename from docs/deployment/deploy_shm/certificate_details.png rename to docs/source/deployment/deploy_shm/certificate_details.png diff --git a/docs/deployment/deploy_shm/dc_resource_groups.png b/docs/source/deployment/deploy_shm/dc_resource_groups.png similarity index 100% rename from docs/deployment/deploy_shm/dc_resource_groups.png rename to docs/source/deployment/deploy_shm/dc_resource_groups.png diff --git a/docs/deployment/deploy_shm/enable_password_writeback.png b/docs/source/deployment/deploy_shm/enable_password_writeback.png similarity index 100% rename from docs/deployment/deploy_shm/enable_password_writeback.png rename to docs/source/deployment/deploy_shm/enable_password_writeback.png diff --git a/docs/deployment/deploy_shm/nps_accounting.png b/docs/source/deployment/deploy_shm/nps_accounting.png similarity index 100% rename from docs/deployment/deploy_shm/nps_accounting.png rename to docs/source/deployment/deploy_shm/nps_accounting.png diff --git a/docs/deployment/deploy_shm/shm_subdomain_ns.png b/docs/source/deployment/deploy_shm/shm_subdomain_ns.png similarity index 100% rename from docs/deployment/deploy_shm/shm_subdomain_ns.png rename to docs/source/deployment/deploy_shm/shm_subdomain_ns.png diff --git a/docs/deployment/deploy_shm/vnet_resource_groups.png b/docs/source/deployment/deploy_shm/vnet_resource_groups.png similarity index 100% rename from docs/deployment/deploy_shm/vnet_resource_groups.png rename to docs/source/deployment/deploy_shm/vnet_resource_groups.png diff --git a/docs/deployment/deploy_sre.md b/docs/source/deployment/deploy_sre.md similarity index 100% rename from docs/deployment/deploy_sre.md rename to docs/source/deployment/deploy_sre.md diff --git a/docs/deployment/deploy_sre/guacamole_aad_app_registration_idtoken.png b/docs/source/deployment/deploy_sre/guacamole_aad_app_registration_idtoken.png similarity index 100% rename from docs/deployment/deploy_sre/guacamole_aad_app_registration_idtoken.png rename to docs/source/deployment/deploy_sre/guacamole_aad_app_registration_idtoken.png diff --git a/docs/deployment/deploy_sre/guacamole_aad_idtoken_failure.png b/docs/source/deployment/deploy_sre/guacamole_aad_idtoken_failure.png similarity index 100% rename from docs/deployment/deploy_sre/guacamole_aad_idtoken_failure.png rename to docs/source/deployment/deploy_sre/guacamole_aad_idtoken_failure.png diff --git a/docs/deployment/deploy_sre/guacamole_desktop.png b/docs/source/deployment/deploy_sre/guacamole_desktop.png similarity index 100% rename from docs/deployment/deploy_sre/guacamole_desktop.png rename to docs/source/deployment/deploy_sre/guacamole_desktop.png diff --git a/docs/deployment/deploy_sre/msrds_desktop.png b/docs/source/deployment/deploy_sre/msrds_desktop.png similarity index 100% rename from docs/deployment/deploy_sre/msrds_desktop.png rename to docs/source/deployment/deploy_sre/msrds_desktop.png diff --git a/docs/deployment/deploy_sre/sre_subdomain_ns.png b/docs/source/deployment/deploy_sre/sre_subdomain_ns.png similarity index 100% rename from docs/deployment/deploy_sre/sre_subdomain_ns.png rename to docs/source/deployment/deploy_sre/sre_subdomain_ns.png diff --git a/docs/deployment/deploy_sre_apache_guacamole.md b/docs/source/deployment/deploy_sre_apache_guacamole.md similarity index 100% rename from docs/deployment/deploy_sre_apache_guacamole.md rename to docs/source/deployment/deploy_sre_apache_guacamole.md diff --git a/docs/deployment/deploy_sre_microsoft_rds.md b/docs/source/deployment/deploy_sre_microsoft_rds.md similarity index 100% rename from docs/deployment/deploy_sre_microsoft_rds.md rename to docs/source/deployment/deploy_sre_microsoft_rds.md diff --git a/docs/deployment/index.md b/docs/source/deployment/index.md similarity index 100% rename from docs/deployment/index.md rename to docs/source/deployment/index.md diff --git a/docs/deployment/security_checklist.md b/docs/source/deployment/security_checklist.md similarity index 100% rename from docs/deployment/security_checklist.md rename to docs/source/deployment/security_checklist.md diff --git a/docs/deployment/security_checklist/aad_additional_security_verification.png b/docs/source/deployment/security_checklist/aad_additional_security_verification.png similarity index 100% rename from docs/deployment/security_checklist/aad_additional_security_verification.png rename to docs/source/deployment/security_checklist/aad_additional_security_verification.png diff --git a/docs/deployment/security_checklist/aad_mfa_approve_signin_request.png b/docs/source/deployment/security_checklist/aad_mfa_approve_signin_request.png similarity index 100% rename from docs/deployment/security_checklist/aad_mfa_approve_signin_request.png rename to docs/source/deployment/security_checklist/aad_mfa_approve_signin_request.png diff --git a/docs/deployment/security_checklist/guacamole_srd_desktop.png b/docs/source/deployment/security_checklist/guacamole_srd_desktop.png similarity index 100% rename from docs/deployment/security_checklist/guacamole_srd_desktop.png rename to docs/source/deployment/security_checklist/guacamole_srd_desktop.png diff --git a/docs/deployment/security_checklist/login_no_mfa_guacamole.png b/docs/source/deployment/security_checklist/login_no_mfa_guacamole.png similarity index 100% rename from docs/deployment/security_checklist/login_no_mfa_guacamole.png rename to docs/source/deployment/security_checklist/login_no_mfa_guacamole.png diff --git a/docs/deployment/security_checklist/login_no_mfa_msrds.png b/docs/source/deployment/security_checklist/login_no_mfa_msrds.png similarity index 100% rename from docs/deployment/security_checklist/login_no_mfa_msrds.png rename to docs/source/deployment/security_checklist/login_no_mfa_msrds.png diff --git a/docs/deployment/security_checklist/msrds_dashboard_with_apps.png b/docs/source/deployment/security_checklist/msrds_dashboard_with_apps.png similarity index 100% rename from docs/deployment/security_checklist/msrds_dashboard_with_apps.png rename to docs/source/deployment/security_checklist/msrds_dashboard_with_apps.png diff --git a/docs/deployment/security_checklist/msrds_failed_to_connect.png b/docs/source/deployment/security_checklist/msrds_failed_to_connect.png similarity index 100% rename from docs/deployment/security_checklist/msrds_failed_to_connect.png rename to docs/source/deployment/security_checklist/msrds_failed_to_connect.png diff --git a/docs/deployment/security_checklist/msrds_srd_desktop.png b/docs/source/deployment/security_checklist/msrds_srd_desktop.png similarity index 100% rename from docs/deployment/security_checklist/msrds_srd_desktop.png rename to docs/source/deployment/security_checklist/msrds_srd_desktop.png diff --git a/docs/deployment/security_checklist/nsg_inbound_access.png b/docs/source/deployment/security_checklist/nsg_inbound_access.png similarity index 100% rename from docs/deployment/security_checklist/nsg_inbound_access.png rename to docs/source/deployment/security_checklist/nsg_inbound_access.png diff --git a/docs/deployment/security_checklist/nsg_outbound_access.png b/docs/source/deployment/security_checklist/nsg_outbound_access.png similarity index 100% rename from docs/deployment/security_checklist/nsg_outbound_access.png rename to docs/source/deployment/security_checklist/nsg_outbound_access.png diff --git a/docs/deployment/security_checklist/shmdc_website_deny.png b/docs/source/deployment/security_checklist/shmdc_website_deny.png similarity index 100% rename from docs/deployment/security_checklist/shmdc_website_deny.png rename to docs/source/deployment/security_checklist/shmdc_website_deny.png diff --git a/docs/deployment/security_checklist/shmdc_windows_update.png b/docs/source/deployment/security_checklist/shmdc_windows_update.png similarity index 100% rename from docs/deployment/security_checklist/shmdc_windows_update.png rename to docs/source/deployment/security_checklist/shmdc_windows_update.png diff --git a/docs/deployment/security_checklist/srd_installed_software.png b/docs/source/deployment/security_checklist/srd_installed_software.png similarity index 100% rename from docs/deployment/security_checklist/srd_installed_software.png rename to docs/source/deployment/security_checklist/srd_installed_software.png diff --git a/docs/deployment/security_checklist/srd_no_curl.png b/docs/source/deployment/security_checklist/srd_no_curl.png similarity index 100% rename from docs/deployment/security_checklist/srd_no_curl.png rename to docs/source/deployment/security_checklist/srd_no_curl.png diff --git a/docs/deployment/security_checklist/srd_no_internet.png b/docs/source/deployment/security_checklist/srd_no_internet.png similarity index 100% rename from docs/deployment/security_checklist/srd_no_internet.png rename to docs/source/deployment/security_checklist/srd_no_internet.png diff --git a/docs/deployment/security_checklist/srd_no_nslookup.png b/docs/source/deployment/security_checklist/srd_no_nslookup.png similarity index 100% rename from docs/deployment/security_checklist/srd_no_nslookup.png rename to docs/source/deployment/security_checklist/srd_no_nslookup.png diff --git a/docs/deployment/security_checklist/srd_no_ssh_by_fqdn.png b/docs/source/deployment/security_checklist/srd_no_ssh_by_fqdn.png similarity index 100% rename from docs/deployment/security_checklist/srd_no_ssh_by_fqdn.png rename to docs/source/deployment/security_checklist/srd_no_ssh_by_fqdn.png diff --git a/docs/deployment/security_checklist/srd_no_ssh_by_ip.png b/docs/source/deployment/security_checklist/srd_no_ssh_by_ip.png similarity index 100% rename from docs/deployment/security_checklist/srd_no_ssh_by_ip.png rename to docs/source/deployment/security_checklist/srd_no_ssh_by_ip.png diff --git a/docs/deployment/security_checklist/srd_pypi_tier2_allowed.png b/docs/source/deployment/security_checklist/srd_pypi_tier2_allowed.png similarity index 100% rename from docs/deployment/security_checklist/srd_pypi_tier2_allowed.png rename to docs/source/deployment/security_checklist/srd_pypi_tier2_allowed.png diff --git a/docs/deployment/security_checklist/srd_pypi_tier2_denied.png b/docs/source/deployment/security_checklist/srd_pypi_tier2_denied.png similarity index 100% rename from docs/deployment/security_checklist/srd_pypi_tier2_denied.png rename to docs/source/deployment/security_checklist/srd_pypi_tier2_denied.png diff --git a/docs/deployment/security_checklist/srd_pypi_tier3_allowed.png b/docs/source/deployment/security_checklist/srd_pypi_tier3_allowed.png similarity index 100% rename from docs/deployment/security_checklist/srd_pypi_tier3_allowed.png rename to docs/source/deployment/security_checklist/srd_pypi_tier3_allowed.png diff --git a/docs/deployment/security_checklist/srd_pypi_tier3_denied.png b/docs/source/deployment/security_checklist/srd_pypi_tier3_denied.png similarity index 100% rename from docs/deployment/security_checklist/srd_pypi_tier3_denied.png rename to docs/source/deployment/security_checklist/srd_pypi_tier3_denied.png diff --git a/docs/deployment/security_checklist/ssh_connection_fail.png b/docs/source/deployment/security_checklist/ssh_connection_fail.png similarity index 100% rename from docs/deployment/security_checklist/ssh_connection_fail.png rename to docs/source/deployment/security_checklist/ssh_connection_fail.png diff --git a/docs/deployment/snippets/00_symbols.partial.md b/docs/source/deployment/snippets/00_symbols.partial.md similarity index 100% rename from docs/deployment/snippets/00_symbols.partial.md rename to docs/source/deployment/snippets/00_symbols.partial.md diff --git a/docs/deployment/snippets/01_prerequisites.partial.md b/docs/source/deployment/snippets/01_prerequisites.partial.md similarity index 100% rename from docs/deployment/snippets/01_prerequisites.partial.md rename to docs/source/deployment/snippets/01_prerequisites.partial.md diff --git a/docs/deployment/snippets/02_configuration.partial.md b/docs/source/deployment/snippets/02_configuration.partial.md similarity index 100% rename from docs/deployment/snippets/02_configuration.partial.md rename to docs/source/deployment/snippets/02_configuration.partial.md diff --git a/docs/deployment/snippets/03_01_remove_data.partial.md b/docs/source/deployment/snippets/03_01_remove_data.partial.md similarity index 100% rename from docs/deployment/snippets/03_01_remove_data.partial.md rename to docs/source/deployment/snippets/03_01_remove_data.partial.md diff --git a/docs/deployment/snippets/03_02_register_sre.partial.md b/docs/source/deployment/snippets/03_02_register_sre.partial.md similarity index 100% rename from docs/deployment/snippets/03_02_register_sre.partial.md rename to docs/source/deployment/snippets/03_02_register_sre.partial.md diff --git a/docs/deployment/snippets/04_01_sre_dns.partial.md b/docs/source/deployment/snippets/04_01_sre_dns.partial.md similarity index 100% rename from docs/deployment/snippets/04_01_sre_dns.partial.md rename to docs/source/deployment/snippets/04_01_sre_dns.partial.md diff --git a/docs/deployment/snippets/04_02_manual_dns.partial.md b/docs/source/deployment/snippets/04_02_manual_dns.partial.md similarity index 100% rename from docs/deployment/snippets/04_02_manual_dns.partial.md rename to docs/source/deployment/snippets/04_02_manual_dns.partial.md diff --git a/docs/deployment/snippets/04_03_deploy_vnet.partial.md b/docs/source/deployment/snippets/04_03_deploy_vnet.partial.md similarity index 100% rename from docs/deployment/snippets/04_03_deploy_vnet.partial.md rename to docs/source/deployment/snippets/04_03_deploy_vnet.partial.md diff --git a/docs/deployment/snippets/05_storage_accounts.partial.md b/docs/source/deployment/snippets/05_storage_accounts.partial.md similarity index 100% rename from docs/deployment/snippets/05_storage_accounts.partial.md rename to docs/source/deployment/snippets/05_storage_accounts.partial.md diff --git a/docs/deployment/snippets/06_01_create_user_account.partial.md b/docs/source/deployment/snippets/06_01_create_user_account.partial.md similarity index 100% rename from docs/deployment/snippets/06_01_create_user_account.partial.md rename to docs/source/deployment/snippets/06_01_create_user_account.partial.md diff --git a/docs/deployment/snippets/07_deploy_webapps.partial.md b/docs/source/deployment/snippets/07_deploy_webapps.partial.md similarity index 100% rename from docs/deployment/snippets/07_deploy_webapps.partial.md rename to docs/source/deployment/snippets/07_deploy_webapps.partial.md diff --git a/docs/deployment/snippets/08_databases.partial.md b/docs/source/deployment/snippets/08_databases.partial.md similarity index 100% rename from docs/deployment/snippets/08_databases.partial.md rename to docs/source/deployment/snippets/08_databases.partial.md diff --git a/docs/deployment/snippets/09_single_srd.partial.md b/docs/source/deployment/snippets/09_single_srd.partial.md similarity index 100% rename from docs/deployment/snippets/09_single_srd.partial.md rename to docs/source/deployment/snippets/09_single_srd.partial.md diff --git a/docs/deployment/snippets/10_network_lockdown.partial.md b/docs/source/deployment/snippets/10_network_lockdown.partial.md similarity index 100% rename from docs/deployment/snippets/10_network_lockdown.partial.md rename to docs/source/deployment/snippets/10_network_lockdown.partial.md diff --git a/docs/deployment/snippets/11_configure_firewall.partial.md b/docs/source/deployment/snippets/11_configure_firewall.partial.md similarity index 100% rename from docs/deployment/snippets/11_configure_firewall.partial.md rename to docs/source/deployment/snippets/11_configure_firewall.partial.md diff --git a/docs/deployment/snippets/12_configure_monitoring.partial.md b/docs/source/deployment/snippets/12_configure_monitoring.partial.md similarity index 100% rename from docs/deployment/snippets/12_configure_monitoring.partial.md rename to docs/source/deployment/snippets/12_configure_monitoring.partial.md diff --git a/docs/deployment/snippets/13_enable_backup.partial.md b/docs/source/deployment/snippets/13_enable_backup.partial.md similarity index 100% rename from docs/deployment/snippets/13_enable_backup.partial.md rename to docs/source/deployment/snippets/13_enable_backup.partial.md diff --git a/docs/deployment/snippets/14_run_smoke_tests.partial.md b/docs/source/deployment/snippets/14_run_smoke_tests.partial.md similarity index 100% rename from docs/deployment/snippets/14_run_smoke_tests.partial.md rename to docs/source/deployment/snippets/14_run_smoke_tests.partial.md diff --git a/docs/deployment/snippets/user_csv_format.partial.md b/docs/source/deployment/snippets/user_csv_format.partial.md similarity index 100% rename from docs/deployment/snippets/user_csv_format.partial.md rename to docs/source/deployment/snippets/user_csv_format.partial.md diff --git a/docs/design/architecture/architecture_mirrors.png b/docs/source/design/architecture/architecture_mirrors.png similarity index 100% rename from docs/design/architecture/architecture_mirrors.png rename to docs/source/design/architecture/architecture_mirrors.png diff --git a/docs/design/architecture/index.md b/docs/source/design/architecture/index.md similarity index 100% rename from docs/design/architecture/index.md rename to docs/source/design/architecture/index.md diff --git a/docs/design/architecture/safe_haven_architecture.png b/docs/source/design/architecture/safe_haven_architecture.png similarity index 100% rename from docs/design/architecture/safe_haven_architecture.png rename to docs/source/design/architecture/safe_haven_architecture.png diff --git a/docs/design/architecture/shm_architecture.png b/docs/source/design/architecture/shm_architecture.png similarity index 100% rename from docs/design/architecture/shm_architecture.png rename to docs/source/design/architecture/shm_architecture.png diff --git a/docs/design/architecture/shm_details.md b/docs/source/design/architecture/shm_details.md similarity index 100% rename from docs/design/architecture/shm_details.md rename to docs/source/design/architecture/shm_details.md diff --git a/docs/design/architecture/sre_architecture.png b/docs/source/design/architecture/sre_architecture.png similarity index 100% rename from docs/design/architecture/sre_architecture.png rename to docs/source/design/architecture/sre_architecture.png diff --git a/docs/design/architecture/sre_details.md b/docs/source/design/architecture/sre_details.md similarity index 100% rename from docs/design/architecture/sre_details.md rename to docs/source/design/architecture/sre_details.md diff --git a/docs/design/index.md b/docs/source/design/index.md similarity index 100% rename from docs/design/index.md rename to docs/source/design/index.md diff --git a/docs/design/security/index.md b/docs/source/design/security/index.md similarity index 100% rename from docs/design/security/index.md rename to docs/source/design/security/index.md diff --git a/docs/design/security/objectives.md b/docs/source/design/security/objectives.md similarity index 100% rename from docs/design/security/objectives.md rename to docs/source/design/security/objectives.md diff --git a/docs/design/security/reference_configuration.md b/docs/source/design/security/reference_configuration.md similarity index 100% rename from docs/design/security/reference_configuration.md rename to docs/source/design/security/reference_configuration.md diff --git a/docs/design/security/sample_security_controls.png b/docs/source/design/security/sample_security_controls.png similarity index 100% rename from docs/design/security/sample_security_controls.png rename to docs/source/design/security/sample_security_controls.png diff --git a/docs/design/security/technical_controls.md b/docs/source/design/security/technical_controls.md similarity index 100% rename from docs/design/security/technical_controls.md rename to docs/source/design/security/technical_controls.md diff --git a/docs/index.md b/docs/source/index.md similarity index 100% rename from docs/index.md rename to docs/source/index.md diff --git a/docs/overview/index.md b/docs/source/overview/index.md similarity index 100% rename from docs/overview/index.md rename to docs/source/overview/index.md diff --git a/docs/overview/sensitivity_tiers.md b/docs/source/overview/sensitivity_tiers.md similarity index 100% rename from docs/overview/sensitivity_tiers.md rename to docs/source/overview/sensitivity_tiers.md diff --git a/docs/overview/what_is_dsh.md b/docs/source/overview/what_is_dsh.md similarity index 100% rename from docs/overview/what_is_dsh.md rename to docs/source/overview/what_is_dsh.md diff --git a/docs/overview/why_use_dsh.md b/docs/source/overview/why_use_dsh.md similarity index 100% rename from docs/overview/why_use_dsh.md rename to docs/source/overview/why_use_dsh.md diff --git a/docs/processes/data_access_controls.md b/docs/source/processes/data_access_controls.md similarity index 100% rename from docs/processes/data_access_controls.md rename to docs/source/processes/data_access_controls.md diff --git a/docs/processes/data_classification.md b/docs/source/processes/data_classification.md similarity index 100% rename from docs/processes/data_classification.md rename to docs/source/processes/data_classification.md diff --git a/docs/processes/data_egress.md b/docs/source/processes/data_egress.md similarity index 100% rename from docs/processes/data_egress.md rename to docs/source/processes/data_egress.md diff --git a/docs/processes/data_handling.md b/docs/source/processes/data_handling.md similarity index 100% rename from docs/processes/data_handling.md rename to docs/source/processes/data_handling.md diff --git a/docs/processes/data_ingress.md b/docs/source/processes/data_ingress.md similarity index 100% rename from docs/processes/data_ingress.md rename to docs/source/processes/data_ingress.md diff --git a/docs/processes/data_transfer_protocol.md b/docs/source/processes/data_transfer_protocol.md similarity index 100% rename from docs/processes/data_transfer_protocol.md rename to docs/source/processes/data_transfer_protocol.md diff --git a/docs/processes/index.md b/docs/source/processes/index.md similarity index 100% rename from docs/processes/index.md rename to docs/source/processes/index.md diff --git a/docs/processes/software_package_approval.md b/docs/source/processes/software_package_approval.md similarity index 100% rename from docs/processes/software_package_approval.md rename to docs/source/processes/software_package_approval.md diff --git a/docs/roles/data_provider_representative/azcopy_warning.png b/docs/source/roles/data_provider_representative/azcopy_warning.png similarity index 100% rename from docs/roles/data_provider_representative/azcopy_warning.png rename to docs/source/roles/data_provider_representative/azcopy_warning.png diff --git a/docs/roles/data_provider_representative/azure_storage_explorer_connect.png b/docs/source/roles/data_provider_representative/azure_storage_explorer_connect.png similarity index 100% rename from docs/roles/data_provider_representative/azure_storage_explorer_connect.png rename to docs/source/roles/data_provider_representative/azure_storage_explorer_connect.png diff --git a/docs/roles/data_provider_representative/azure_storage_explorer_container.png b/docs/source/roles/data_provider_representative/azure_storage_explorer_container.png similarity index 100% rename from docs/roles/data_provider_representative/azure_storage_explorer_container.png rename to docs/source/roles/data_provider_representative/azure_storage_explorer_container.png diff --git a/docs/roles/data_provider_representative/azure_storage_explorer_error.png b/docs/source/roles/data_provider_representative/azure_storage_explorer_error.png similarity index 100% rename from docs/roles/data_provider_representative/azure_storage_explorer_error.png rename to docs/source/roles/data_provider_representative/azure_storage_explorer_error.png diff --git a/docs/roles/data_provider_representative/index.md b/docs/source/roles/data_provider_representative/index.md similarity index 100% rename from docs/roles/data_provider_representative/index.md rename to docs/source/roles/data_provider_representative/index.md diff --git a/docs/roles/index.md b/docs/source/roles/index.md similarity index 100% rename from docs/roles/index.md rename to docs/source/roles/index.md diff --git a/docs/roles/investigator/data_egress.md b/docs/source/roles/investigator/data_egress.md similarity index 100% rename from docs/roles/investigator/data_egress.md rename to docs/source/roles/investigator/data_egress.md diff --git a/docs/roles/investigator/data_ingress.md b/docs/source/roles/investigator/data_ingress.md similarity index 100% rename from docs/roles/investigator/data_ingress.md rename to docs/source/roles/investigator/data_ingress.md diff --git a/docs/roles/investigator/index.md b/docs/source/roles/investigator/index.md similarity index 100% rename from docs/roles/investigator/index.md rename to docs/source/roles/investigator/index.md diff --git a/docs/roles/programme_manager/index.md b/docs/source/roles/programme_manager/index.md similarity index 100% rename from docs/roles/programme_manager/index.md rename to docs/source/roles/programme_manager/index.md diff --git a/docs/roles/project_manager/data_egress.md b/docs/source/roles/project_manager/data_egress.md similarity index 100% rename from docs/roles/project_manager/data_egress.md rename to docs/source/roles/project_manager/data_egress.md diff --git a/docs/roles/project_manager/data_ingress.md b/docs/source/roles/project_manager/data_ingress.md similarity index 100% rename from docs/roles/project_manager/data_ingress.md rename to docs/source/roles/project_manager/data_ingress.md diff --git a/docs/roles/project_manager/index.md b/docs/source/roles/project_manager/index.md similarity index 100% rename from docs/roles/project_manager/index.md rename to docs/source/roles/project_manager/index.md diff --git a/docs/roles/project_manager/project_lifecycle.md b/docs/source/roles/project_manager/project_lifecycle.md similarity index 100% rename from docs/roles/project_manager/project_lifecycle.md rename to docs/source/roles/project_manager/project_lifecycle.md diff --git a/docs/roles/referee/index.md b/docs/source/roles/referee/index.md similarity index 100% rename from docs/roles/referee/index.md rename to docs/source/roles/referee/index.md diff --git a/docs/roles/researcher/available_software.md b/docs/source/roles/researcher/available_software.md similarity index 100% rename from docs/roles/researcher/available_software.md rename to docs/source/roles/researcher/available_software.md diff --git a/docs/roles/researcher/index.md b/docs/source/roles/researcher/index.md similarity index 100% rename from docs/roles/researcher/index.md rename to docs/source/roles/researcher/index.md diff --git a/docs/roles/researcher/snippets/01_introduction.partial.md b/docs/source/roles/researcher/snippets/01_introduction.partial.md similarity index 100% rename from docs/roles/researcher/snippets/01_introduction.partial.md rename to docs/source/roles/researcher/snippets/01_introduction.partial.md diff --git a/docs/roles/researcher/snippets/02_account_setup.partial.md b/docs/source/roles/researcher/snippets/02_account_setup.partial.md similarity index 100% rename from docs/roles/researcher/snippets/02_account_setup.partial.md rename to docs/source/roles/researcher/snippets/02_account_setup.partial.md diff --git a/docs/roles/researcher/snippets/03_01_prerequisites.partial.md b/docs/source/roles/researcher/snippets/03_01_prerequisites.partial.md similarity index 100% rename from docs/roles/researcher/snippets/03_01_prerequisites.partial.md rename to docs/source/roles/researcher/snippets/03_01_prerequisites.partial.md diff --git a/docs/roles/researcher/snippets/03_02_srd_login.partial.md b/docs/source/roles/researcher/snippets/03_02_srd_login.partial.md similarity index 100% rename from docs/roles/researcher/snippets/03_02_srd_login.partial.md rename to docs/source/roles/researcher/snippets/03_02_srd_login.partial.md diff --git a/docs/roles/researcher/snippets/04_using_srd.partial.md b/docs/source/roles/researcher/snippets/04_using_srd.partial.md similarity index 100% rename from docs/roles/researcher/snippets/04_using_srd.partial.md rename to docs/source/roles/researcher/snippets/04_using_srd.partial.md diff --git a/docs/roles/researcher/snippets/05_share_files.partial.md b/docs/source/roles/researcher/snippets/05_share_files.partial.md similarity index 100% rename from docs/roles/researcher/snippets/05_share_files.partial.md rename to docs/source/roles/researcher/snippets/05_share_files.partial.md diff --git a/docs/roles/researcher/snippets/06_cocalc.partial.md b/docs/source/roles/researcher/snippets/06_cocalc.partial.md similarity index 100% rename from docs/roles/researcher/snippets/06_cocalc.partial.md rename to docs/source/roles/researcher/snippets/06_cocalc.partial.md diff --git a/docs/roles/researcher/snippets/07_gitlab.partial.md b/docs/source/roles/researcher/snippets/07_gitlab.partial.md similarity index 100% rename from docs/roles/researcher/snippets/07_gitlab.partial.md rename to docs/source/roles/researcher/snippets/07_gitlab.partial.md diff --git a/docs/roles/researcher/snippets/08_codimd.partial.md b/docs/source/roles/researcher/snippets/08_codimd.partial.md similarity index 100% rename from docs/roles/researcher/snippets/08_codimd.partial.md rename to docs/source/roles/researcher/snippets/08_codimd.partial.md diff --git a/docs/roles/researcher/snippets/10_databases.partial.md b/docs/source/roles/researcher/snippets/10_databases.partial.md similarity index 100% rename from docs/roles/researcher/snippets/10_databases.partial.md rename to docs/source/roles/researcher/snippets/10_databases.partial.md diff --git a/docs/roles/researcher/snippets/11_report_bugs.partial.md b/docs/source/roles/researcher/snippets/11_report_bugs.partial.md similarity index 100% rename from docs/roles/researcher/snippets/11_report_bugs.partial.md rename to docs/source/roles/researcher/snippets/11_report_bugs.partial.md diff --git a/docs/roles/researcher/snippets/12_end_matter.partial.md b/docs/source/roles/researcher/snippets/12_end_matter.partial.md similarity index 100% rename from docs/roles/researcher/snippets/12_end_matter.partial.md rename to docs/source/roles/researcher/snippets/12_end_matter.partial.md diff --git a/docs/roles/researcher/snippets/13_MFA.partial.md b/docs/source/roles/researcher/snippets/13_MFA.partial.md similarity index 100% rename from docs/roles/researcher/snippets/13_MFA.partial.md rename to docs/source/roles/researcher/snippets/13_MFA.partial.md diff --git a/docs/roles/researcher/snippets/software_database.partial.md b/docs/source/roles/researcher/snippets/software_database.partial.md similarity index 100% rename from docs/roles/researcher/snippets/software_database.partial.md rename to docs/source/roles/researcher/snippets/software_database.partial.md diff --git a/docs/roles/researcher/snippets/software_editors.partial.md b/docs/source/roles/researcher/snippets/software_editors.partial.md similarity index 100% rename from docs/roles/researcher/snippets/software_editors.partial.md rename to docs/source/roles/researcher/snippets/software_editors.partial.md diff --git a/docs/roles/researcher/snippets/software_languages.partial.md b/docs/source/roles/researcher/snippets/software_languages.partial.md similarity index 100% rename from docs/roles/researcher/snippets/software_languages.partial.md rename to docs/source/roles/researcher/snippets/software_languages.partial.md diff --git a/docs/roles/researcher/snippets/software_other.partial.md b/docs/source/roles/researcher/snippets/software_other.partial.md similarity index 100% rename from docs/roles/researcher/snippets/software_other.partial.md rename to docs/source/roles/researcher/snippets/software_other.partial.md diff --git a/docs/roles/researcher/snippets/software_presentation.partial.md b/docs/source/roles/researcher/snippets/software_presentation.partial.md similarity index 100% rename from docs/roles/researcher/snippets/software_presentation.partial.md rename to docs/source/roles/researcher/snippets/software_presentation.partial.md diff --git a/docs/roles/researcher/user_guide.md b/docs/source/roles/researcher/user_guide.md similarity index 100% rename from docs/roles/researcher/user_guide.md rename to docs/source/roles/researcher/user_guide.md diff --git a/docs/roles/researcher/user_guide/access_desktop_applications.png b/docs/source/roles/researcher/user_guide/access_desktop_applications.png similarity index 100% rename from docs/roles/researcher/user_guide/access_desktop_applications.png rename to docs/source/roles/researcher/user_guide/access_desktop_applications.png diff --git a/docs/roles/researcher/user_guide/account_setup_captcha.png b/docs/source/roles/researcher/user_guide/account_setup_captcha.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_captcha.png rename to docs/source/roles/researcher/user_guide/account_setup_captcha.png diff --git a/docs/roles/researcher/user_guide/account_setup_forgotten_password.png b/docs/source/roles/researcher/user_guide/account_setup_forgotten_password.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_forgotten_password.png rename to docs/source/roles/researcher/user_guide/account_setup_forgotten_password.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_add_authenticator_app.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_add_authenticator_app.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_add_authenticator_app.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_add_authenticator_app.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_additional_security_verification.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_additional_security_verification.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_additional_security_verification.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_additional_security_verification.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_allow_notifications.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_allow_notifications.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_allow_notifications.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_allow_notifications.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_app_qrcode.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_app_qrcode.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_app_qrcode.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_app_qrcode.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_authenticator_app_approved.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_authenticator_app_approved.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_authenticator_app_approved.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_authenticator_app_approved.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_authenticator_app_test.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_authenticator_app_test.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_authenticator_app_test.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_authenticator_app_test.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_dashboard_phone_only.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_dashboard_phone_only.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_dashboard_phone_only.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_dashboard_phone_only.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_dashboard_two_methods.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_dashboard_two_methods.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_dashboard_two_methods.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_dashboard_two_methods.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_download_authenticator_app.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_download_authenticator_app.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_download_authenticator_app.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_download_authenticator_app.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_registered_phone.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_registered_phone.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_registered_phone.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_registered_phone.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_verified_phone.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_verified_phone.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_verified_phone.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_verified_phone.png diff --git a/docs/roles/researcher/user_guide/account_setup_mfa_verifying_phone.png b/docs/source/roles/researcher/user_guide/account_setup_mfa_verifying_phone.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_mfa_verifying_phone.png rename to docs/source/roles/researcher/user_guide/account_setup_mfa_verifying_phone.png diff --git a/docs/roles/researcher/user_guide/account_setup_more_information_required.png b/docs/source/roles/researcher/user_guide/account_setup_more_information_required.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_more_information_required.png rename to docs/source/roles/researcher/user_guide/account_setup_more_information_required.png diff --git a/docs/roles/researcher/user_guide/account_setup_new_password.png b/docs/source/roles/researcher/user_guide/account_setup_new_password.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_new_password.png rename to docs/source/roles/researcher/user_guide/account_setup_new_password.png diff --git a/docs/roles/researcher/user_guide/account_setup_new_password_sign_in.png b/docs/source/roles/researcher/user_guide/account_setup_new_password_sign_in.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_new_password_sign_in.png rename to docs/source/roles/researcher/user_guide/account_setup_new_password_sign_in.png diff --git a/docs/roles/researcher/user_guide/account_setup_verify_phone.png b/docs/source/roles/researcher/user_guide/account_setup_verify_phone.png similarity index 100% rename from docs/roles/researcher/user_guide/account_setup_verify_phone.png rename to docs/source/roles/researcher/user_guide/account_setup_verify_phone.png diff --git a/docs/roles/researcher/user_guide/cocalc_account_creation.png b/docs/source/roles/researcher/user_guide/cocalc_account_creation.png similarity index 100% rename from docs/roles/researcher/user_guide/cocalc_account_creation.png rename to docs/source/roles/researcher/user_guide/cocalc_account_creation.png diff --git a/docs/roles/researcher/user_guide/cocalc_homepage.png b/docs/source/roles/researcher/user_guide/cocalc_homepage.png similarity index 100% rename from docs/roles/researcher/user_guide/cocalc_homepage.png rename to docs/source/roles/researcher/user_guide/cocalc_homepage.png diff --git a/docs/roles/researcher/user_guide/cocalc_security_warning.png b/docs/source/roles/researcher/user_guide/cocalc_security_warning.png similarity index 100% rename from docs/roles/researcher/user_guide/cocalc_security_warning.png rename to docs/source/roles/researcher/user_guide/cocalc_security_warning.png diff --git a/docs/roles/researcher/user_guide/codimd_access_options.png b/docs/source/roles/researcher/user_guide/codimd_access_options.png similarity index 100% rename from docs/roles/researcher/user_guide/codimd_access_options.png rename to docs/source/roles/researcher/user_guide/codimd_access_options.png diff --git a/docs/roles/researcher/user_guide/codimd_logon.png b/docs/source/roles/researcher/user_guide/codimd_logon.png similarity index 100% rename from docs/roles/researcher/user_guide/codimd_logon.png rename to docs/source/roles/researcher/user_guide/codimd_logon.png diff --git a/docs/roles/researcher/user_guide/codimd_publishing.png b/docs/source/roles/researcher/user_guide/codimd_publishing.png similarity index 100% rename from docs/roles/researcher/user_guide/codimd_publishing.png rename to docs/source/roles/researcher/user_guide/codimd_publishing.png diff --git a/docs/roles/researcher/user_guide/db_azure_data_studio.png b/docs/source/roles/researcher/user_guide/db_azure_data_studio.png similarity index 100% rename from docs/roles/researcher/user_guide/db_azure_data_studio.png rename to docs/source/roles/researcher/user_guide/db_azure_data_studio.png diff --git a/docs/roles/researcher/user_guide/db_dbeaver_mssql.png b/docs/source/roles/researcher/user_guide/db_dbeaver_mssql.png similarity index 100% rename from docs/roles/researcher/user_guide/db_dbeaver_mssql.png rename to docs/source/roles/researcher/user_guide/db_dbeaver_mssql.png diff --git a/docs/roles/researcher/user_guide/db_dbeaver_postgres_connection.png b/docs/source/roles/researcher/user_guide/db_dbeaver_postgres_connection.png similarity index 100% rename from docs/roles/researcher/user_guide/db_dbeaver_postgres_connection.png rename to docs/source/roles/researcher/user_guide/db_dbeaver_postgres_connection.png diff --git a/docs/roles/researcher/user_guide/db_dbeaver_postgres_ignore.png b/docs/source/roles/researcher/user_guide/db_dbeaver_postgres_ignore.png similarity index 100% rename from docs/roles/researcher/user_guide/db_dbeaver_postgres_ignore.png rename to docs/source/roles/researcher/user_guide/db_dbeaver_postgres_ignore.png diff --git a/docs/roles/researcher/user_guide/gitlab_clone_url.png b/docs/source/roles/researcher/user_guide/gitlab_clone_url.png similarity index 100% rename from docs/roles/researcher/user_guide/gitlab_clone_url.png rename to docs/source/roles/researcher/user_guide/gitlab_clone_url.png diff --git a/docs/roles/researcher/user_guide/gitlab_merge_request_details.png b/docs/source/roles/researcher/user_guide/gitlab_merge_request_details.png similarity index 100% rename from docs/roles/researcher/user_guide/gitlab_merge_request_details.png rename to docs/source/roles/researcher/user_guide/gitlab_merge_request_details.png diff --git a/docs/roles/researcher/user_guide/gitlab_new_merge_request.png b/docs/source/roles/researcher/user_guide/gitlab_new_merge_request.png similarity index 100% rename from docs/roles/researcher/user_guide/gitlab_new_merge_request.png rename to docs/source/roles/researcher/user_guide/gitlab_new_merge_request.png diff --git a/docs/roles/researcher/user_guide/gitlab_screenshot_login.png b/docs/source/roles/researcher/user_guide/gitlab_screenshot_login.png similarity index 100% rename from docs/roles/researcher/user_guide/gitlab_screenshot_login.png rename to docs/source/roles/researcher/user_guide/gitlab_screenshot_login.png diff --git a/docs/roles/researcher/user_guide/guacamole_dashboard.png b/docs/source/roles/researcher/user_guide/guacamole_dashboard.png similarity index 100% rename from docs/roles/researcher/user_guide/guacamole_dashboard.png rename to docs/source/roles/researcher/user_guide/guacamole_dashboard.png diff --git a/docs/roles/researcher/user_guide/guacamole_mfa.png b/docs/source/roles/researcher/user_guide/guacamole_mfa.png similarity index 100% rename from docs/roles/researcher/user_guide/guacamole_mfa.png rename to docs/source/roles/researcher/user_guide/guacamole_mfa.png diff --git a/docs/roles/researcher/user_guide/logon_environment_guacamole.png b/docs/source/roles/researcher/user_guide/logon_environment_guacamole.png similarity index 100% rename from docs/roles/researcher/user_guide/logon_environment_guacamole.png rename to docs/source/roles/researcher/user_guide/logon_environment_guacamole.png diff --git a/docs/roles/researcher/user_guide/logon_environment_msrds.png b/docs/source/roles/researcher/user_guide/logon_environment_msrds.png similarity index 100% rename from docs/roles/researcher/user_guide/logon_environment_msrds.png rename to docs/source/roles/researcher/user_guide/logon_environment_msrds.png diff --git a/docs/roles/researcher/user_guide/msrds_dashboard.png b/docs/source/roles/researcher/user_guide/msrds_dashboard.png similarity index 100% rename from docs/roles/researcher/user_guide/msrds_dashboard.png rename to docs/source/roles/researcher/user_guide/msrds_dashboard.png diff --git a/docs/roles/researcher/user_guide/msrds_no_work_resources.png b/docs/source/roles/researcher/user_guide/msrds_no_work_resources.png similarity index 100% rename from docs/roles/researcher/user_guide/msrds_no_work_resources.png rename to docs/source/roles/researcher/user_guide/msrds_no_work_resources.png diff --git a/docs/roles/researcher/user_guide/msrds_srd_connection.png b/docs/source/roles/researcher/user_guide/msrds_srd_connection.png similarity index 100% rename from docs/roles/researcher/user_guide/msrds_srd_connection.png rename to docs/source/roles/researcher/user_guide/msrds_srd_connection.png diff --git a/docs/roles/researcher/user_guide/msrds_srd_connection_failure.png b/docs/source/roles/researcher/user_guide/msrds_srd_connection_failure.png similarity index 100% rename from docs/roles/researcher/user_guide/msrds_srd_connection_failure.png rename to docs/source/roles/researcher/user_guide/msrds_srd_connection_failure.png diff --git a/docs/roles/researcher/user_guide/msrds_srd_rdc_screen.png b/docs/source/roles/researcher/user_guide/msrds_srd_rdc_screen.png similarity index 100% rename from docs/roles/researcher/user_guide/msrds_srd_rdc_screen.png rename to docs/source/roles/researcher/user_guide/msrds_srd_rdc_screen.png diff --git a/docs/roles/researcher/user_guide/msrds_srd_security_fingerprint.png b/docs/source/roles/researcher/user_guide/msrds_srd_security_fingerprint.png similarity index 100% rename from docs/roles/researcher/user_guide/msrds_srd_security_fingerprint.png rename to docs/source/roles/researcher/user_guide/msrds_srd_security_fingerprint.png diff --git a/docs/roles/researcher/user_guide/msrds_unexpected_certificate_error.png b/docs/source/roles/researcher/user_guide/msrds_unexpected_certificate_error.png similarity index 100% rename from docs/roles/researcher/user_guide/msrds_unexpected_certificate_error.png rename to docs/source/roles/researcher/user_guide/msrds_unexpected_certificate_error.png diff --git a/docs/roles/researcher/user_guide/srd_login_failure.png b/docs/source/roles/researcher/user_guide/srd_login_failure.png similarity index 100% rename from docs/roles/researcher/user_guide/srd_login_failure.png rename to docs/source/roles/researcher/user_guide/srd_login_failure.png diff --git a/docs/roles/researcher/user_guide/srd_login_screen.png b/docs/source/roles/researcher/user_guide/srd_login_screen.png similarity index 100% rename from docs/roles/researcher/user_guide/srd_login_screen.png rename to docs/source/roles/researcher/user_guide/srd_login_screen.png diff --git a/docs/roles/researcher/user_guide/srd_xfce_initial.png b/docs/source/roles/researcher/user_guide/srd_xfce_initial.png similarity index 100% rename from docs/roles/researcher/user_guide/srd_xfce_initial.png rename to docs/source/roles/researcher/user_guide/srd_xfce_initial.png diff --git a/docs/roles/researcher/user_guide_guacamole.md b/docs/source/roles/researcher/user_guide_guacamole.md similarity index 100% rename from docs/roles/researcher/user_guide_guacamole.md rename to docs/source/roles/researcher/user_guide_guacamole.md diff --git a/docs/roles/researcher/user_guide_msrds.md b/docs/source/roles/researcher/user_guide_msrds.md similarity index 100% rename from docs/roles/researcher/user_guide_msrds.md rename to docs/source/roles/researcher/user_guide_msrds.md diff --git a/docs/roles/system_manager/administrator_guide/backup_instances_blobs.png b/docs/source/roles/system_manager/administrator_guide/backup_instances_blobs.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_instances_blobs.png rename to docs/source/roles/system_manager/administrator_guide/backup_instances_blobs.png diff --git a/docs/roles/system_manager/administrator_guide/backup_instances_disks.png b/docs/source/roles/system_manager/administrator_guide/backup_instances_disks.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_instances_disks.png rename to docs/source/roles/system_manager/administrator_guide/backup_instances_disks.png diff --git a/docs/roles/system_manager/administrator_guide/backup_progress_disk_1.png b/docs/source/roles/system_manager/administrator_guide/backup_progress_disk_1.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_progress_disk_1.png rename to docs/source/roles/system_manager/administrator_guide/backup_progress_disk_1.png diff --git a/docs/roles/system_manager/administrator_guide/backup_progress_disk_2.png b/docs/source/roles/system_manager/administrator_guide/backup_progress_disk_2.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_progress_disk_2.png rename to docs/source/roles/system_manager/administrator_guide/backup_progress_disk_2.png diff --git a/docs/roles/system_manager/administrator_guide/backup_progress_disk_3.png b/docs/source/roles/system_manager/administrator_guide/backup_progress_disk_3.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_progress_disk_3.png rename to docs/source/roles/system_manager/administrator_guide/backup_progress_disk_3.png diff --git a/docs/roles/system_manager/administrator_guide/backup_restore_disk.png b/docs/source/roles/system_manager/administrator_guide/backup_restore_disk.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_restore_disk.png rename to docs/source/roles/system_manager/administrator_guide/backup_restore_disk.png diff --git a/docs/roles/system_manager/administrator_guide/backup_select_containers_validate_blobs.png b/docs/source/roles/system_manager/administrator_guide/backup_select_containers_validate_blobs.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_select_containers_validate_blobs.png rename to docs/source/roles/system_manager/administrator_guide/backup_select_containers_validate_blobs.png diff --git a/docs/roles/system_manager/administrator_guide/backup_select_restore_time_blobs.png b/docs/source/roles/system_manager/administrator_guide/backup_select_restore_time_blobs.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_select_restore_time_blobs.png rename to docs/source/roles/system_manager/administrator_guide/backup_select_restore_time_blobs.png diff --git a/docs/roles/system_manager/administrator_guide/backup_select_snapshot_validate_disks.png b/docs/source/roles/system_manager/administrator_guide/backup_select_snapshot_validate_disks.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_select_snapshot_validate_disks.png rename to docs/source/roles/system_manager/administrator_guide/backup_select_snapshot_validate_disks.png diff --git a/docs/roles/system_manager/administrator_guide/backup_swap_disk_after.png b/docs/source/roles/system_manager/administrator_guide/backup_swap_disk_after.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_swap_disk_after.png rename to docs/source/roles/system_manager/administrator_guide/backup_swap_disk_after.png diff --git a/docs/roles/system_manager/administrator_guide/backup_swap_disk_before.png b/docs/source/roles/system_manager/administrator_guide/backup_swap_disk_before.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/backup_swap_disk_before.png rename to docs/source/roles/system_manager/administrator_guide/backup_swap_disk_before.png diff --git a/docs/roles/system_manager/administrator_guide/connect_azure_storage.png b/docs/source/roles/system_manager/administrator_guide/connect_azure_storage.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/connect_azure_storage.png rename to docs/source/roles/system_manager/administrator_guide/connect_azure_storage.png diff --git a/docs/roles/system_manager/administrator_guide/internal_mirror_packages.png b/docs/source/roles/system_manager/administrator_guide/internal_mirror_packages.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/internal_mirror_packages.png rename to docs/source/roles/system_manager/administrator_guide/internal_mirror_packages.png diff --git a/docs/roles/system_manager/administrator_guide/login_certificate_expiry.png b/docs/source/roles/system_manager/administrator_guide/login_certificate_expiry.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/login_certificate_expiry.png rename to docs/source/roles/system_manager/administrator_guide/login_certificate_expiry.png diff --git a/docs/roles/system_manager/administrator_guide/login_password_login.png b/docs/source/roles/system_manager/administrator_guide/login_password_login.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/login_password_login.png rename to docs/source/roles/system_manager/administrator_guide/login_password_login.png diff --git a/docs/roles/system_manager/administrator_guide/no_recent_connections.png b/docs/source/roles/system_manager/administrator_guide/no_recent_connections.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/no_recent_connections.png rename to docs/source/roles/system_manager/administrator_guide/no_recent_connections.png diff --git a/docs/roles/system_manager/administrator_guide/password_reset_failure.png b/docs/source/roles/system_manager/administrator_guide/password_reset_failure.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/password_reset_failure.png rename to docs/source/roles/system_manager/administrator_guide/password_reset_failure.png diff --git a/docs/roles/system_manager/administrator_guide/read_only_sas_token.png b/docs/source/roles/system_manager/administrator_guide/read_only_sas_token.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/read_only_sas_token.png rename to docs/source/roles/system_manager/administrator_guide/read_only_sas_token.png diff --git a/docs/roles/system_manager/administrator_guide/srd_login_failure.png b/docs/source/roles/system_manager/administrator_guide/srd_login_failure.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/srd_login_failure.png rename to docs/source/roles/system_manager/administrator_guide/srd_login_failure.png diff --git a/docs/roles/system_manager/administrator_guide/srd_login_opening_port.png b/docs/source/roles/system_manager/administrator_guide/srd_login_opening_port.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/srd_login_opening_port.png rename to docs/source/roles/system_manager/administrator_guide/srd_login_opening_port.png diff --git a/docs/roles/system_manager/administrator_guide/srd_login_prompt.png b/docs/source/roles/system_manager/administrator_guide/srd_login_prompt.png similarity index 100% rename from docs/roles/system_manager/administrator_guide/srd_login_prompt.png rename to docs/source/roles/system_manager/administrator_guide/srd_login_prompt.png diff --git a/docs/roles/system_manager/index.md b/docs/source/roles/system_manager/index.md similarity index 100% rename from docs/roles/system_manager/index.md rename to docs/source/roles/system_manager/index.md diff --git a/docs/roles/system_manager/manage_costs.md b/docs/source/roles/system_manager/manage_costs.md similarity index 100% rename from docs/roles/system_manager/manage_costs.md rename to docs/source/roles/system_manager/manage_costs.md diff --git a/docs/roles/system_manager/manage_data.md b/docs/source/roles/system_manager/manage_data.md similarity index 100% rename from docs/roles/system_manager/manage_data.md rename to docs/source/roles/system_manager/manage_data.md diff --git a/docs/roles/system_manager/manage_deployments.md b/docs/source/roles/system_manager/manage_deployments.md similarity index 100% rename from docs/roles/system_manager/manage_deployments.md rename to docs/source/roles/system_manager/manage_deployments.md diff --git a/docs/roles/system_manager/manage_users.md b/docs/source/roles/system_manager/manage_users.md similarity index 100% rename from docs/roles/system_manager/manage_users.md rename to docs/source/roles/system_manager/manage_users.md diff --git a/docs/roles/system_manager/manage_webapps.md b/docs/source/roles/system_manager/manage_webapps.md similarity index 100% rename from docs/roles/system_manager/manage_webapps.md rename to docs/source/roles/system_manager/manage_webapps.md diff --git a/docs/roles/system_manager/migrate_an_shm.md b/docs/source/roles/system_manager/migrate_an_shm.md similarity index 100% rename from docs/roles/system_manager/migrate_an_shm.md rename to docs/source/roles/system_manager/migrate_an_shm.md diff --git a/docs/roles/system_manager/migrate_shm/aad_connection_failure.png b/docs/source/roles/system_manager/migrate_shm/aad_connection_failure.png similarity index 100% rename from docs/roles/system_manager/migrate_shm/aad_connection_failure.png rename to docs/source/roles/system_manager/migrate_shm/aad_connection_failure.png diff --git a/docs/roles/system_manager/snippets/01_console.partial.md b/docs/source/roles/system_manager/snippets/01_console.partial.md similarity index 100% rename from docs/roles/system_manager/snippets/01_console.partial.md rename to docs/source/roles/system_manager/snippets/01_console.partial.md From b08992d583043fde65207a05b06db0d9c770fe3b Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 14:28:12 +0100 Subject: [PATCH 10/28] Clean Sphinx configuration --- docs/source/conf.py | 57 +++------------------------------------------ 1 file changed, 3 insertions(+), 54 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index d1d891775a..3c3e11d22c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -5,7 +5,6 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html import datetime import emoji -import git import os @@ -15,35 +14,10 @@ copyright = f"CC-BY-4.0 {datetime.date.today().year}, The Alan Turing Institute." author = "The Alan Turing Institute" development_branch = "develop" -earliest_supported_release = "v4.0.0" - - -# -- Git repository details -repo = git.Repo(search_parent_directories=True) -repo_name = repo.remotes.origin.url.split(".git")[0].split("/")[-1] -releases = sorted((t.name for t in repo.tags), reverse=True) -supported_versions = ( - releases[: releases.index(earliest_supported_release) + 1] - + [development_branch] -) -default_version = supported_versions[0] # Latest stable release -current_version = ( - [tag.name for tag in repo.tags if tag.commit == repo.head.commit] - + [branch.name for branch in repo.branches if branch.commit == repo.head.commit] - + [str(repo.head.commit)] -)[0] # Tag or branch name or commit ID if no name is available -current_commit_hash = repo.head.commit.hexsha -current_commit_date = repo.head.commit.authored_datetime.strftime(r"%d %b %Y") -del repo # all unpickleable objects must be deleted # -- Customisation ----------------------------------------------------------- -# Extracted repository variables -print(f"Supported versions: {supported_versions}") -print(f"Default version: {default_version}") -print(f"Current version: {current_version}") - # Construct list of emoji substitutions emoji_codes = set( [ @@ -59,25 +33,7 @@ # Set sidebar variables if "html_context" not in globals(): html_context = dict() -html_context["display_lower_left"] = True -html_context["default_version"] = default_version -html_context["current_version"] = current_version -html_context["versions"] = [ - (v, f"/{repo_name}/{v}/index.html") for v in supported_versions -] -# Downloadable PDFs -pdf_version_string = f"Version: {current_version} ({current_commit_hash})" -print(f"PDF version string: {pdf_version_string}") -html_context["downloads"] = [ - ( - "User guide (Apache Guacamole)", - f"/{repo_name}/{current_version}/pdf/data_safe_haven_user_guide_guacamole.pdf", - ), - ( - "User guide (Microsoft RDS)", - f"/{repo_name}/{current_version}/pdf/data_safe_haven_user_guide_msrds.pdf", - ), -] + # Add 'Edit on GitHub' link html_context["github_user"] = "alan-turing-institute" html_context["github_repo"] = "data-safe-haven" @@ -97,18 +53,11 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] + # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [ - "build", - "_output", - "Thumbs.db", - ".DS_Store", - "**/*.partial.md", -] - - +exclude_patterns = ["**/*.partial.md"] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for From 4ccb3f02aefcb603a102f3ba87bc90ea0d1afc41 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 14:33:49 +0100 Subject: [PATCH 11/28] Update requirements --- docs/requirements.txt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 6611eb4227..0aafa6408c 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,7 +1,4 @@ -emoji==2.2.0 -GitPython==3.1.30 -Jinja2==3.1.2 -myst-parser==0.18.1 -Pygments==2.14.0 -pydata-sphinx-theme==0.12.0 -Sphinx==5.3.0 +emoji~=2.2 +myst-parser~=1.0 +pydata-sphinx-theme~=0.13 +Sphinx~=6.2 From b0b8334ca75518540870a2204c95e2dc5ea751eb Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 14:43:24 +0100 Subject: [PATCH 12/28] Restore sidebar This seem to have broken after a theme update. --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3c3e11d22c..8643655e65 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -78,7 +78,7 @@ "image_light": "logo_turing_light.png", "image_dark": "logo_turing_dark.png", }, - "page_sidebar_items": ["edit-this-page", "sourcelink"], + "secondary_sidebar_items": ["page-toc", "edit-this-page", "sourcelink"], "use_edit_page_button": True, } From 5a6aad19df15bb3babb2265b97b7fc2f0c00f47f Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 15:00:39 +0100 Subject: [PATCH 13/28] Use default primary sidebar This results in a very similar appearance with better readthedocs integration. --- .../sidebar-section-navigation.html | 5 -- docs/source/_templates/sidebar-versions.html | 58 ------------------- docs/source/_templates/sphinx-version.html | 5 -- docs/source/conf.py | 10 ---- 4 files changed, 78 deletions(-) delete mode 100644 docs/source/_templates/sidebar-section-navigation.html delete mode 100644 docs/source/_templates/sidebar-versions.html delete mode 100644 docs/source/_templates/sphinx-version.html diff --git a/docs/source/_templates/sidebar-section-navigation.html b/docs/source/_templates/sidebar-section-navigation.html deleted file mode 100644 index 4b9cee0c3b..0000000000 --- a/docs/source/_templates/sidebar-section-navigation.html +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/docs/source/_templates/sidebar-versions.html b/docs/source/_templates/sidebar-versions.html deleted file mode 100644 index db2a496460..0000000000 --- a/docs/source/_templates/sidebar-versions.html +++ /dev/null @@ -1,58 +0,0 @@ -{% if READTHEDOCS or display_lower_left %} -
- - - Currently reading: {{ current_version }} - - -
- {% if languages|length >= 1 %} -
-
{{ _('Languages') }}
- {% for slug, url in languages %} - {% if slug == current_language %} {% endif %} -
{{ slug }}
- {% if slug == current_language %}
{% endif %} - {% endfor %} -
- {% endif %} - {% if versions|length >= 1 %} -
-
{{ _('Versions') }}
- {% for slug, url in versions %} - {% if slug == current_version %} {% endif %} -
{{ slug }}
- {% if slug == current_version %}
{% endif %} - {% endfor %} -
- {% endif %} - {% if READTHEDOCS %} -
-
{{ _('On Read the Docs') }}
-
- {{ _('Project Home') }} -
-
- {{ _('Builds') }} -
-
- {% endif %} -
-
- {% if downloads|length >= 1 %} -
- - - Download PDF resources - - -
-
- {% for type, url in downloads %} -
{{ type }}
- {% endfor %} -
-
-
- {% endif %} -{% endif %} \ No newline at end of file diff --git a/docs/source/_templates/sphinx-version.html b/docs/source/_templates/sphinx-version.html deleted file mode 100644 index c03f4af166..0000000000 --- a/docs/source/_templates/sphinx-version.html +++ /dev/null @@ -1,5 +0,0 @@ -

- {% trans sphinx_version=sphinx_version|e %}Created using Sphinx {{ sphinx_version }}.{% endtrans %} - {% trans %}Hosted by GitHub Pages.{% endtrans %} -
-

diff --git a/docs/source/conf.py b/docs/source/conf.py index 8643655e65..682faacaf7 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -82,16 +82,6 @@ "use_edit_page_button": True, } -# Set the left-hand sidebars -html_sidebars = { - "**": [ - "search-field.html", - "sidebar-section-navigation.html", - ] -} -if not os.getenv("DISABLE_VERSION_LINKS"): - html_sidebars["**"] += ["sidebar-versions.html"] - # Location of favicon html_favicon = "_static/favicon.ico" From 772d89dc1d3cfcd82e18c2c649a7c6e3ea9f3c58 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 15:22:42 +0100 Subject: [PATCH 14/28] Remove unused import --- docs/source/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 682faacaf7..ae41b78063 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -5,7 +5,6 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html import datetime import emoji -import os # -- Project information ----------------------------------------------------- From ca53abe97908b418bfe1dfe7174877d57ca18987 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 16:18:55 +0100 Subject: [PATCH 15/28] Improve docs reproducibility with pip-compile --- .readthedocs.yaml | 2 +- docs/requirements.in | 4 ++ docs/requirements.txt | 91 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 docs/requirements.in diff --git a/.readthedocs.yaml b/.readthedocs.yaml index f496f7b191..d169f2a365 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -7,7 +7,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3" + python: "3.11" sphinx: configuration: docs/source/conf.py diff --git a/docs/requirements.in b/docs/requirements.in new file mode 100644 index 0000000000..4a4c2761c8 --- /dev/null +++ b/docs/requirements.in @@ -0,0 +1,4 @@ +emoji==2.2.0 +myst-parser==1.0.0 +pydata-sphinx-theme==0.13.3 +Sphinx==6.2.1 diff --git a/docs/requirements.txt b/docs/requirements.txt index 0aafa6408c..6b5086a770 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,87 @@ -emoji~=2.2 -myst-parser~=1.0 -pydata-sphinx-theme~=0.13 -Sphinx~=6.2 +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile requirements.in +# +accessible-pygments==0.0.4 + # via pydata-sphinx-theme +alabaster==0.7.13 + # via sphinx +babel==2.12.1 + # via + # pydata-sphinx-theme + # sphinx +beautifulsoup4==4.12.2 + # via pydata-sphinx-theme +certifi==2022.12.7 + # via requests +charset-normalizer==3.1.0 + # via requests +docutils==0.19 + # via + # myst-parser + # pydata-sphinx-theme + # sphinx +emoji==2.2.0 + # via -r requirements.in +idna==3.4 + # via requests +imagesize==1.4.1 + # via sphinx +jinja2==3.1.2 + # via + # myst-parser + # sphinx +markdown-it-py==2.2.0 + # via + # mdit-py-plugins + # myst-parser +markupsafe==2.1.2 + # via jinja2 +mdit-py-plugins==0.3.5 + # via myst-parser +mdurl==0.1.2 + # via markdown-it-py +myst-parser==1.0.0 + # via -r requirements.in +packaging==23.1 + # via + # pydata-sphinx-theme + # sphinx +pydata-sphinx-theme==0.13.3 + # via -r requirements.in +pygments==2.15.1 + # via + # accessible-pygments + # pydata-sphinx-theme + # sphinx +pyyaml==6.0 + # via myst-parser +requests==2.29.0 + # via sphinx +snowballstemmer==2.2.0 + # via sphinx +soupsieve==2.4.1 + # via beautifulsoup4 +sphinx==6.2.1 + # via + # -r requirements.in + # myst-parser + # pydata-sphinx-theme +sphinxcontrib-applehelp==1.0.4 + # via sphinx +sphinxcontrib-devhelp==1.0.2 + # via sphinx +sphinxcontrib-htmlhelp==2.0.1 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.3 + # via sphinx +sphinxcontrib-serializinghtml==1.1.5 + # via sphinx +typing-extensions==4.5.0 + # via pydata-sphinx-theme +urllib3==1.26.15 + # via requests From 1394d7d7c5325bffc9e8d3920431bd488610f0d7 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 16:25:56 +0100 Subject: [PATCH 16/28] Fix indentation --- .readthedocs.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index d169f2a365..c45cfa7ae0 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -10,11 +10,11 @@ build: python: "3.11" sphinx: - configuration: docs/source/conf.py + configuration: docs/source/conf.py # formats: # - pdf python: - install: - - requirements: docs/requirements.txt + install: + - requirements: docs/requirements.txt From e78560a2d00b80e22a90825f1fccc548aa430b43 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Thu, 27 Apr 2023 16:29:19 +0100 Subject: [PATCH 17/28] Remove docs deployment workflow --- .github/workflows/build_docs.yaml | 77 ------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 .github/workflows/build_docs.yaml diff --git a/.github/workflows/build_docs.yaml b/.github/workflows/build_docs.yaml deleted file mode 100644 index 7f6416933c..0000000000 --- a/.github/workflows/build_docs.yaml +++ /dev/null @@ -1,77 +0,0 @@ ---- -name: Build documentation - -# Run workflow on pushes to matching branches -on: # yamllint disable-line rule:truthy - push: - branches: [develop, latest] - -# checkout needs 'contents:read' -# deploy needs 'contents:write' -permissions: - contents: write - -jobs: - build_docs: - runs-on: ubuntu-latest - steps: - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Setup Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.1.3 - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - name: Install required packages - run: | - sudo apt-get update - sudo apt-get install -y git - pip install -r docs/build/requirements.txt - - name: Create common directories - shell: bash - run: | - echo "OUTPUTDIR=$(mktemp -d)" >> $GITHUB_ENV - - name: Build all configured releases - shell: bash - run: | - python3 ./docs/build/build_all_supported_versions.py -o ${{env.OUTPUTDIR}} - - name: Install html-proofer - shell: bash - run: gem install html-proofer - - name: Run HTML proofer - shell: bash - run: | - # - allow links to "#" - # - rewrite the base URL - # - ignore links to: - # - the data-safe-haven repo (as it is private) - # - the data-classification-app repo (as it is private) - # - turing.ac.uk (as it requires a CAPTCHA) - htmlproofer ${{env.OUTPUTDIR}}/develop \ - --allow-hash-href \ - --enforce-https \ - --ignore-files "/_static/" \ - --ignore-status-codes "403,429,503" \ - --ignore-urls "/github.com\/alan-turing-institute\/data-classification-app/,/turing.ac.uk\//" \ - --swap-urls "^\/data-safe-haven:/.." - - - name: Deploy documentation to GitHub Pages - if: ${{ !env.ACT }} - uses: JamesIves/github-pages-deploy-action@ba1486788b0490a235422264426c45848eac35c6 # This commit corresponds to tag 4.4.1 - with: - branch: autodocs # The branch the action should deploy to. - folder: ${{env.OUTPUTDIR}} # The folder the action should deploy. - git-config-name: Deployment Bot # Name of the committer - git-config-email: deploy@github.com # Email of the committer - single-commit: true # Only keep one commit on the branch - - name: Finalise build if running locally - if: ${{ env.ACT }} - shell: bash - run: | - echo "Deliberately causing job to fail so that container is kept alive..." - exit 1 From af939752c5844383650518c3a8758543daf8a020 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Fri, 28 Apr 2023 15:36:43 +0100 Subject: [PATCH 18/28] Add documentation workflow This workflow has two jobs - Build documentation - Check links in built documentation The lint html job has been removed from the lint code workflow. html-proofer now only offer limited html linting and is mainly a link checker. --- .github/workflows/documentation.yaml | 56 ++++++++++++++++++++++++++++ .github/workflows/lint_code.yaml | 26 ------------- 2 files changed, 56 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/documentation.yaml diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml new file mode 100644 index 0000000000..8b6ce74f77 --- /dev/null +++ b/.github/workflows/documentation.yaml @@ -0,0 +1,56 @@ +--- +name: Documentation + +# Run workflow on pushes to matching branches +on: # yamllint disable-line rule:truthy + push: + branches: [develop] + pull_request: + branches: [develop] + +jobs: + build: + name: Build + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./docs/ + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Install dependencies + run: | + pip install -r requirements.txt + - name: Sphinx build + run: | + make html + + check_links: + name: Check links + runs-on: ubuntu-latest + needs: build + defaults: + run: + working-directory: ./docs/ + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Install dependencies + run: | + pip install -r requirements.txt + - name: Sphinx build + run: | + make html + - name: Link Checker + uses: lycheeverse/lychee-action@v1.7.0 + with: + args: --verbose --no-progress './docs/build/html/**/*.html' + fail: true # fail on broken links diff --git a/.github/workflows/lint_code.yaml b/.github/workflows/lint_code.yaml index e553a543bb..6b5815f172 100644 --- a/.github/workflows/lint_code.yaml +++ b/.github/workflows/lint_code.yaml @@ -9,32 +9,6 @@ on: # yamllint disable-line rule:truthy branches: [develop] jobs: - lint_html: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Get tags - run: git fetch --tags origin - - name: Install requirements - shell: bash - run: | - sudo gem install html-proofer -v 4.4.1 - pip install -r docs/build/requirements.txt - - name: Generate HTML documention - shell: bash - run: | - DISABLE_VERSION_LINKS=1 make -C docs html - - name: Lint HTML - shell: bash - run: | - htmlproofer docs/_output \ - --allow-missing-href=true \ - --enforce-https=true \ - --ignore-files "/_static/" \ - --ignore-status-codes "502,503" \ - --ignore-urls "/github.com\/alan-turing-institute\/data-classification-app/,/www.turing.ac.uk/,/data-safe-haven\/edit/" - lint_json: runs-on: ubuntu-latest steps: From ee66f2f34779908d9bbf1ecbbe2cbd8530557016 Mon Sep 17 00:00:00 2001 From: Jim Madge Date: Fri, 28 Apr 2023 16:03:18 +0100 Subject: [PATCH 19/28] Add lychee configuration file --- .github/workflows/documentation.yaml | 2 +- .lychee.toml | 118 +++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 .lychee.toml diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml index 8b6ce74f77..3413fc8c2f 100644 --- a/.github/workflows/documentation.yaml +++ b/.github/workflows/documentation.yaml @@ -52,5 +52,5 @@ jobs: - name: Link Checker uses: lycheeverse/lychee-action@v1.7.0 with: - args: --verbose --no-progress './docs/build/html/**/*.html' + args: --config='./.lychee.toml' --verbose --no-progress './docs/build/html/**/*.html' fail: true # fail on broken links diff --git a/.lychee.toml b/.lychee.toml new file mode 100644 index 0000000000..9f7d9348a8 --- /dev/null +++ b/.lychee.toml @@ -0,0 +1,118 @@ +############################# Display ############################# + +# Verbose program output +# Accepts log level: "error", "warn", "info", "debug", "trace" +verbose = "info" + +# Don't show interactive progress bar while checking links. +no_progress = false + +# Path to summary output file. +# output = ".config.dummy.report.md" + +############################# Cache ############################### + +# Enable link caching. This can be helpful to avoid checking the same links on +# multiple runs. +cache = true + +# Discard all cached requests older than this duration. +max_cache_age = "2d" + +############################# Runtime ############################# + +# Number of threads to utilize. +# Defaults to number of cores available to the system if omitted. +threads = 2 + +# Maximum number of allowed redirects. +max_redirects = 10 + +# Maximum number of allowed retries before a link is declared dead. +max_retries = 2 + +# Maximum number of concurrent link checks. +max_concurrency = 14 + +############################# Requests ############################ + +# User agent to send with each request. +user_agent = "curl/7.83. 1" + +# Website timeout from connect to response finished. +timeout = 20 + +# Minimum wait time in seconds between retries of failed requests. +retry_wait_time = 2 + +# Comma-separated list of accepted status codes for valid links. +accept = [200, 429] + +# Proceed for server connections considered insecure (invalid TLS). +insecure = false + +# Only test links with the given schemes (e.g. https). +# Omit to check links with any scheme. +# scheme = [ "https" ] + +# When links are available using HTTPS, treat HTTP links as errors. +require_https = true + +# Request method +method = "get" + +# Custom request headers +headers = [] + +# Remap URI matching pattern to different URI. +# remap = [ "https://example.com http://example.invalid" ] + +# Base URL or website root directory to check relative URLs. +# base = "https://example.com" + +# HTTP basic auth support. This will be the username and password passed to the +# authorization HTTP header. See +# +# basic_auth = "user:pwd" + +############################# Exclusions ########################## + +# Skip missing input files (default is to error if they don't exist). +skip_missing = false + +# Check links inside `` and `
` blocks as well as Markdown code
+# blocks.
+include_verbatim = false
+
+# Ignore case of paths when matching glob patterns.
+glob_ignore_case = false
+
+# Exclude URLs and mail addresses from checking (supports regex).
+# exclude = [ '.*\.github.com\.*' ]
+exclude = [
+  'github\.com',  # Requires authentication
+  'turing.ac.uk'  # DDOS protection
+]
+
+# Exclude these filesystem paths from getting checked.
+# exclude_path = ["file/path/to/Ignore", "./other/file/path/to/Ignore"]
+
+# URLs to check (supports regex). Has preference over all excludes.
+# include = [ 'gist\.github\.com.*' ]
+
+# Exclude all private IPs from checking.
+# Equivalent to setting `exclude_private`, `exclude_link_local`, and
+# `exclude_loopback` to true.
+exclude_all_private = false
+
+# Exclude private IP address ranges from checking.
+exclude_private = false
+
+# Exclude link-local IP address range from checking.
+exclude_link_local = false
+
+# Exclude loopback IP address range and localhost from checking.
+exclude_loopback = false
+
+# Exclude all mail addresses from checking.
+exclude_mail = false

From 32f89435869d9fab5bc13d5d5d7503adf1ac95f4 Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Tue, 2 May 2023 11:06:44 +0100
Subject: [PATCH 20/28] Add ipaddressguide.com to lychee exclude list

---
 .lychee.toml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/.lychee.toml b/.lychee.toml
index 9f7d9348a8..a9dd150318 100644
--- a/.lychee.toml
+++ b/.lychee.toml
@@ -90,8 +90,9 @@ glob_ignore_case = false
 # Exclude URLs and mail addresses from checking (supports regex).
 # exclude = [ '.*\.github.com\.*' ]
 exclude = [
-  'github\.com',  # Requires authentication
-  'turing.ac.uk'  # DDOS protection
+  'github\.com',  # Requires authentication (403)
+  'turing.ac.uk',  # DDOS protection
+  'ipaddressguide\.com' # 403
 ]
 
 # Exclude these filesystem paths from getting checked.

From f5e61fe29912656e6c07bf42a7c04bcb3d4fa118 Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Tue, 2 May 2023 11:19:37 +0100
Subject: [PATCH 21/28] Exclude template file from link checking

---
 .lychee.toml | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/.lychee.toml b/.lychee.toml
index a9dd150318..28e129ae95 100644
--- a/.lychee.toml
+++ b/.lychee.toml
@@ -17,7 +17,7 @@ no_progress = false
 cache = true
 
 # Discard all cached requests older than this duration.
-max_cache_age = "2d"
+max_cache_age = "1d"
 
 #############################  Runtime  #############################
 
@@ -97,6 +97,9 @@ exclude = [
 
 # Exclude these filesystem paths from getting checked.
 # exclude_path = ["file/path/to/Ignore", "./other/file/path/to/Ignore"]
+exclude_path = [
+  'docs/build/html/_static/webpack-macros.html'
+]
 
 # URLs to check (supports regex). Has preference over all excludes.
 # include = [ 'gist\.github\.com.*' ]

From 9964d3b558000bc216ee035badc75f11c12b213f Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Tue, 2 May 2023 11:20:22 +0100
Subject: [PATCH 22/28] Add lychee cache files to gitignore

---
 .gitignore | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index b42c59f1ca..d1e95b7d49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,4 +33,7 @@ docs/_output
 
 # Files produced during testing
 .mustache_config.json
-expanded.yaml
\ No newline at end of file
+expanded.yaml
+
+# Lychee cache
+.lycheecache

From 6db5cfbf1ea266f202983326dc5e838b539333eb Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Tue, 2 May 2023 11:26:30 +0100
Subject: [PATCH 23/28] Add opensource.org to lychee exclude list

Returns 403 in CI.
---
 .lychee.toml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/.lychee.toml b/.lychee.toml
index 28e129ae95..73893f32fe 100644
--- a/.lychee.toml
+++ b/.lychee.toml
@@ -91,8 +91,9 @@ glob_ignore_case = false
 # exclude = [ '.*\.github.com\.*' ]
 exclude = [
   'github\.com',  # Requires authentication (403)
-  'turing.ac.uk',  # DDOS protection
-  'ipaddressguide\.com' # 403
+  'turing\.ac\.uk',  # DDOS protection
+  'ipaddressguide\.com', # 403
+  'opensource\.org' # 403
 ]
 
 # Exclude these filesystem paths from getting checked.

From 6558096b4ee142b4a910edf7abc7024347674884 Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Wed, 3 May 2023 13:30:32 +0100
Subject: [PATCH 24/28] Remove unnecessary period

---
 docs/source/conf.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/source/conf.py b/docs/source/conf.py
index ae41b78063..c5c104760e 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -10,7 +10,7 @@
 # -- Project information -----------------------------------------------------
 
 project = "Data Safe Haven"
-copyright = f"CC-BY-4.0 {datetime.date.today().year}, The Alan Turing Institute."
+copyright = f"CC-BY-4.0 {datetime.date.today().year}, The Alan Turing Institute"
 author = "The Alan Turing Institute"
 development_branch = "develop"
 

From c36f984cd4ec85f00bfba40b96193932dd71ab3d Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Thu, 11 May 2023 13:52:03 +0100
Subject: [PATCH 25/28] Update CITATION.cff

---
 CITATION.cff | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CITATION.cff b/CITATION.cff
index e3ee508a7f..e8ec7a6760 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -1,7 +1,7 @@
 cff-version: 1.2.0
 message: "To acknowledge the data safe haven please use the citation and references below."
 title: "Turing Data Safe Haven"
-url: "https://alan-turing-institute.github.io/data-safe-haven/develop/index.html"
+url: "https://data-safe-haven.readthedocs.io"
 repository-code: "https://github.com/alan-turing-institute/data-safe-haven"
 authors:
   - given-names: James

From 8b81d1a6e3232a9f0e71d4862fb321b6a6c14ea3 Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Thu, 11 May 2023 13:59:53 +0100
Subject: [PATCH 26/28] Update documentation links in README

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 9090598d55..e97d4b4562 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ The **Turing Data Safe Haven** is an open-source framework for creating secure e
 It provides a set of scripts and templates that will allow you to deploy, administer and use your own secure environment.
 It was developed as part of the Alan Turing Institute's [Data Safe Havens in the Cloud](https://www.turing.ac.uk/research/research-projects/data-safe-havens-cloud) project.
 
-[![Docs](https://github.com/alan-turing-institute/data-safe-haven/actions/workflows/build_docs.yaml/badge.svg)](https://alan-turing-institute.github.io/data-safe-haven)
+[![Documentation](https://readthedocs.org/projects/data-safe-haven/badge/?version=latest)](https://data-safe-haven.readthedocs.io/en/latest/?badge=latest)
 [![Lint code](https://github.com/alan-turing-institute/data-safe-haven/actions/workflows/lint_code.yaml/badge.svg)](https://github.com/alan-turing-institute/data-safe-haven/actions/workflows/lint_code.yaml)
 [![Test code](https://github.com/alan-turing-institute/data-safe-haven/actions/workflows/test_code.yaml/badge.svg)](https://github.com/alan-turing-institute/data-safe-haven/actions/workflows/test_code.yaml)
 [![Latest version](https://img.shields.io/github/v/release/alan-turing-institute/data-safe-haven?style=flat&label=Latest&color=%234B78E6)](https://github.com/alan-turing-institute/data-safe-haven/releases)
@@ -16,7 +16,7 @@ It was developed as part of the Alan Turing Institute's [Data Safe Havens in the
 
 ## :family: Community & support
 
-- Visit the [Data Safe Haven website](https://alan-turing-institute.github.io/data-safe-haven) for full documentation and useful links.
+- Visit the [Data Safe Haven website](https://data-safe-haven.readthedocs.io) for full documentation and useful links.
 - Join our [Slack server](https://join.slack.com/t/turingdatasafehaven/shared_invite/zt-104oyd8wn-DyOufeaAQFiJDlG5dDGk~w) to ask questions, discuss features, and for general API chat.
 - Open a [discussion on GitHub](https://github.com/alan-turing-institute/data-safe-haven/discussions) for general questions, feature suggestions, and help with our deployment scripts.
 - Look through our [issues on GitHub](https://github.com/alan-turing-institute/data-safe-haven/issues) to see what we're working on and progress towards specific fixes.

From 75149a4bd1ac483c4aa7b380731b1064269a46f3 Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Thu, 11 May 2023 14:05:44 +0100
Subject: [PATCH 27/28] Update documentation link in contribution guide

---
 CONTRIBUTING.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 28112cca0f..ac21b0ba8c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -222,7 +222,7 @@ GitHub has a [nice introduction](https://docs.github.com/en/get-started/quicksta
 
 ### Making a change to the documentation
 
-The docs, including for older releases, are available [here](https://alan-turing-institute.github.io/data-safe-haven).
+The docs, including for older releases, are available [here](https://data-safe-haven.readthedocs.io).
 
 You should follow the same instructions as above to [make a change with a pull request](#making-a-change-with-a-pull-request) when editing the documentation.
 

From 62a59c8b79aab8dd7217898d06ce252f9dad6dcd Mon Sep 17 00:00:00 2001
From: Jim Madge 
Date: Mon, 15 May 2023 09:17:48 +0100
Subject: [PATCH 28/28] Remove unused javascript file

---
 docs/source/_static/toggle.js | 7 -------
 1 file changed, 7 deletions(-)
 delete mode 100644 docs/source/_static/toggle.js

diff --git a/docs/source/_static/toggle.js b/docs/source/_static/toggle.js
deleted file mode 100644
index c5b6e4fcba..0000000000
--- a/docs/source/_static/toggle.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Toggle the 'shift-up' class when rst-versions objects are clicked
-$(document).on("click", "[data-toggle='rst-versions']", function () {
-  $("[data-toggle='rst-versions']").toggleClass("shift-up");
-});
-$(document).on("click", "[data-toggle='rst-downloads']", function () {
-  $("[data-toggle='rst-downloads']").toggleClass("shift-up");
-});