From a7391a6955c5ddc953556d231d4b0fe5e03c0a5c Mon Sep 17 00:00:00 2001
From: Nick Brown <nb745@cam.ac.uk>
Date: Tue, 4 Feb 2025 16:29:45 +0000
Subject: [PATCH 1/2] feat: Add libraries-tools top-level section & pages

---
 .gitignore                                  |  1 +
 docs/libraries-tools/gcp-terraform/index.md | 31 ++++++++++++
 docs/libraries-tools/git-ci-docker/index.md | 13 +++++
 docs/libraries-tools/index.md               |  7 +++
 docs/libraries-tools/python/index.md        | 53 +++++++++++++++++++++
 mkdocs.yml                                  |  8 ++++
 6 files changed, 113 insertions(+)
 create mode 100644 docs/libraries-tools/gcp-terraform/index.md
 create mode 100644 docs/libraries-tools/git-ci-docker/index.md
 create mode 100644 docs/libraries-tools/index.md
 create mode 100644 docs/libraries-tools/python/index.md

diff --git a/.gitignore b/.gitignore
index 6f20fe31..d8825222 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,4 @@ __pycache__/
 # build documentation
 public/
 docs/plantuml-diagrams/out/
+.aider*
diff --git a/docs/libraries-tools/gcp-terraform/index.md b/docs/libraries-tools/gcp-terraform/index.md
new file mode 100644
index 00000000..e0133b61
--- /dev/null
+++ b/docs/libraries-tools/gcp-terraform/index.md
@@ -0,0 +1,31 @@
+# GCP & Terraform
+
+Our adopted & recommended tools & services for Google Cloud Platform (GCP) and Terraform.
+
+## GCP Tools & Services
+
+<!-- markdownlint-disable MD013 -->
+| Title                                                           | Summary                                                  | Our Docs                                                                                                          |
+|-----------------------------------------------------------------|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
+| [Cloud Run](https://cloud.google.com/run)                       | Serverless container platform for stateless applications | [Reference](../../reference/cloud-platform/index.md), [Migration](../../explanations/gcp-cloud-run-app-module.md) |
+| [Cloud SQL](https://cloud.google.com/sql)                       | Fully managed relational database service                | [Backups](../../reference/cloud-platform/backups.md)                                                              |
+| [Cloud Storage](https://cloud.google.com/storage)               | Object storage service                                   | [Reference](../../reference/cloud-platform/index.md)                                                              |
+| [Cloud Load Balancing](https://cloud.google.com/load-balancing) | Scalable load distribution service                       | [Architecture](../../reference/standard-architecture-diagrams.md)                                                 |
+| [Cloud DNS](https://cloud.google.com/dns)                       | Managed DNS service                                      | [DNS Guide](../../reference/cloud-platform/dns.md)                                                                |
+| [Secret Manager](https://cloud.google.com/secret-manager)       | Secure secret storage service                            | [CI Access](../../howtos/gke-gitlab-runners/access-secrets-in-ci-jobs-using-impersonation.md)                     |
+| [Cloud Monitoring](https://cloud.google.com/monitoring)         | Infrastructure and application monitoring service        | [Reference](../../reference/cloud-platform/index.md)                                                              |
+| [Cloud Logging](https://cloud.google.com/logging)               | Centralized log management service                       | [Reference](../../reference/cloud-platform/index.md)                                                              |
+| [gcloud CLI](https://cloud.google.com/sdk/gcloud)               | Command-line interface for GCP services                  | [System Setup](../../howtos/prepare-your-system.md)                                                               |
+<!-- markdownlint-enable MD013 -->
+
+## Terraform & Infrastructure Tools
+
+<!-- markdownlint-disable MD013 -->
+| Title                                                                                          | Summary                                      | Our Docs                                                     |
+|------------------------------------------------------------------------------------------------|----------------------------------------------|--------------------------------------------------------------|
+| [Terraform](https://www.terraform.io/)                                                         | Infrastructure as Code tool                  | [Reference](../../reference/cloud-platform/index.md)         |
+| [terraform-provider-google](https://registry.terraform.io/providers/hashicorp/google/latest)   | Google Cloud Platform provider for Terraform | [Reference](../../reference/cloud-platform/index.md)         |
+| [terraform-provider-aws](https://registry.terraform.io/providers/hashicorp/aws/latest)         | Amazon Web Services provider for Terraform   | [AWS Guide](../../explanations/aws.md)                       |
+| [terraform-provider-azurerm](https://registry.terraform.io/providers/hashicorp/azurerm/latest) | Microsoft Azure provider for Terraform       | [Azure Guide](../../explanations/azure-and-entra-id-apps.md) |
+| [tflint](https://github.com/terraform-linters/tflint)                                          | Terraform linter                             | [Reference](../../reference/cloud-platform/index.md)         |
+<!-- markdownlint-enable MD013 -->
diff --git a/docs/libraries-tools/git-ci-docker/index.md b/docs/libraries-tools/git-ci-docker/index.md
new file mode 100644
index 00000000..dd9f0066
--- /dev/null
+++ b/docs/libraries-tools/git-ci-docker/index.md
@@ -0,0 +1,13 @@
+# Development Tools & Services
+
+Our adopted & recommended tools & services for Git, CI & Docker.
+
+<!-- markdownlint-disable MD013 -->
+| Title                                            | Summary                                        | Our Docs                                                 |
+|--------------------------------------------------|------------------------------------------------|----------------------------------------------------------|
+| [Docker](https://www.docker.com/)                | Container platform                             | [System Setup](../../howtos/prepare-your-system.md)      |
+| [GitLab CI/CD](https://docs.gitlab.com/ee/ci/)   | Continuous Integration and Deployment platform | [Tutorial](../../tutorials/creating-a-python-package.md) |
+| [GitLab Runner](https://docs.gitlab.com/runner/) | CI/CD job execution agent                      | [GKE Guide](../../explanations/gke-gitlab-runners.md)    |
+| [renovatebot](https://www.mend.io/renovate/)     | Automated dependency updates                   | [Guide](../../explanations/renovatebot.md)               |
+| [pre-commit](https://pre-commit.com/)            | Git hook framework                             | [Setup](../../howtos/setup-pre-commit-hooks.md)          |
+<!-- markdownlint-enable MD013 -->
diff --git a/docs/libraries-tools/index.md b/docs/libraries-tools/index.md
new file mode 100644
index 00000000..e5868512
--- /dev/null
+++ b/docs/libraries-tools/index.md
@@ -0,0 +1,7 @@
+# Libraries & Tools
+
+A collection of various libraries, snippets & tools which are:
+
+- Formative in our boilerplate projects and/or daily processes.
+- An in-house standard based on consensus over time.
+- Especially time-saving & useful!
diff --git a/docs/libraries-tools/python/index.md b/docs/libraries-tools/python/index.md
new file mode 100644
index 00000000..9bda1a13
--- /dev/null
+++ b/docs/libraries-tools/python/index.md
@@ -0,0 +1,53 @@
+# Python
+
+Our adopted & recommended Python libraries, snippets & tools.
+
+## Libraries
+
+<!-- markdownlint-disable MD013 -->
+| Title                                                                           | Summary                                                 | Our Docs                                                                                                                  |
+|---------------------------------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
+| [black](https://github.com/psf/black)                                           | Code formatter that enforces a consistent style         | [Setup](../../howtos/setup-pre-commit-hooks.md), [Tutorial](../../tutorials/creating-a-python-package.md)                 |
+| [coverage](https://coverage.readthedocs.io/)                                    | Tool for measuring code coverage of Python programs     | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [docopt](http://docopt.org/)                                                    | Command-line interface description language and parser  | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [faker](https://faker.readthedocs.io/)                                          | Library for generating fake data for testing            | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [flake8](https://flake8.pycqa.org/)                                             | Tool for style guide enforcement and linting            | [Setup](../../howtos/setup-pre-commit-hooks.md), [Tutorial](../../tutorials/creating-a-python-package.md)                 |
+| [furo](https://pradyunsg.me/furo/)                                              | Clean customizable Sphinx documentation theme           | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [geddit](https://gitlab.developers.cam.ac.uk/uis/devops/lib/geddit)             | UIS library for fetching data from URLs                 | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [isort](https://pycqa.github.io/isort/)                                         | Library for sorting Python imports                      | [Setup](../../howtos/setup-pre-commit-hooks.md), [Tutorial](../../tutorials/creating-a-python-package.md)                 |
+| [jsonpath-ng](https://github.com/h2non/jsonpath-ng)                             | Library for extracting data using JSONPath expressions  | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [mypy](https://mypy.readthedocs.io/)                                            | Static type checker for Python                          | [Setup](../../howtos/setup-pre-commit-hooks.md), [Tutorial](../../tutorials/creating-a-python-package.md)                 |
+| [pre-commit](https://pre-commit.com/)                                           | Framework for managing git pre-commit hooks             | [Setup](../../howtos/setup-pre-commit-hooks.md), [Tutorial](../../tutorials/creating-a-python-package.md)                 |
+| [PyYAML](https://pyyaml.org/)                                                   | YAML parser and emitter for Python                      | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [pytest](https://docs.pytest.org/)                                              | Testing framework                                       | [Tutorial](../../tutorials/creating-a-python-package.md), [Boilerplate](../../explanations/webapp-boilerplate.md#testing) |
+| [pytest-cov](https://pytest-cov.readthedocs.io/)                                | Coverage plugin for pytest                              | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [pytest-mock](https://pytest-mock.readthedocs.io/)                              | Thin-wrapper around mock package for pytest             | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [python-social-auth](https://python-social-auth.readthedocs.io/)                | Authentication framework for Python web frameworks      | [SSO Guide](../../howtos/configure-django-for-sso.md)                                                                     |
+| [sphinx](https://www.sphinx-doc.org/)                                           | Documentation generator                                 | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) | Type hints support for Sphinx                           | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [structlog](https://www.structlog.org/)                                         | Structured logging for Python                           | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+| [tox](https://tox.wiki/)                                                        | Test automation and virtual environment management tool | [Tutorial](../../tutorials/creating-a-python-package.md)                                                                  |
+<!-- markdownlint-enable MD013 -->
+
+## Snippets
+
+<!-- markdownlint-disable MD013 -->
+| Type       | Snippet                                                              | Summary                                   |
+|------------|----------------------------------------------------------------------|-------------------------------------------|
+| decorator  | [decorators](https://gitlab.developers.cam.ac.uk/-/snippets/340)     | neat multiple decorators in a single line |
+| decorator  | [threadsafe](https://gitlab.developers.cam.ac.uk/-/snippets/341)     | make a method or property thread-safe     |
+| datastruct | [dotdict](https://gitlab.developers.cam.ac.uk/-/snippets/343)        | dot-accessible dict                       |
+| datastruct | [threadsafedict](https://gitlab.developers.cam.ac.uk/-/snippets/342) | exemplifies how to use Generic typing     |
+<!-- markdownlint-enable MD013 -->
+
+## Tools
+
+<!-- markdownlint-disable MD013 -->
+| Title                                    | Summary                                                              | Our Docs                                                                                                                    |
+|------------------------------------------|----------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|
+| [copier](https://copier.readthedocs.io/) | Tool for rendering project templates                                 | [Create](../../howtos/copier-create.md), [Update](../../howtos/copier-update.md), [Migrate](../../howtos/copier-migrate.md) |
+| [pip](https://pip.pypa.io/)              | Package installer for Python                                         | [System Setup](../../howtos/prepare-your-system.md)                                                                         |
+| [pipx](https://pypa.github.io/pipx/)     | Tool to install and run Python applications in isolated environments | [System Setup](../../howtos/prepare-your-system.md)                                                                         |
+| [poetry](https://python-poetry.org/)     | Python dependency management and packaging tool                      | [Tutorial](../../tutorials/creating-a-python-package.md), [Boilerplate](../../explanations/webapp-boilerplate.md#poetry)    |
+| [poe](https://poethepoet.natn.io/)       | Task runner that works well with poetry                              | [Tutorial](../../tutorials/creating-a-python-package.md), [Boilerplate](../../explanations/webapp-boilerplate.md#poe)       |
+<!-- markdownlint-enable MD013 -->
diff --git a/mkdocs.yml b/mkdocs.yml
index 8c116994..5e88389a 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -274,6 +274,14 @@ nav:
           - services/lecture-capture-preferences.md
           - services/software-sales.md
           - services/tls-certificates.md
+  - "Libraries & Tools":
+      - libraries-tools/index.md
+      - "Git, CI & Docker":
+        - libraries-tools/git-ci-docker/index.md
+      - "GCP & Terraform":
+        - libraries-tools/gcp-terraform/index.md
+      - "Python":
+        - libraries-tools/python/index.md
 
 # Links for sufficiently with it people to submit changes.
 repo_url: "https://gitlab.developers.cam.ac.uk/uis/devops/docs/guidebook/"
-- 
GitLab


From c3661ad1fdbb9bba324d1b3832f825183dace0ed Mon Sep 17 00:00:00 2001
From: Nick Brown <nb745@cam.ac.uk>
Date: Tue, 4 Feb 2025 17:03:06 +0000
Subject: [PATCH 2/2] chore: Add gitlab-ci-local to libraries-tools page

---
 .gitignore                                  |  1 -
 docs/libraries-tools/git-ci-docker/index.md | 15 ++++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.gitignore b/.gitignore
index d8825222..6f20fe31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,4 +22,3 @@ __pycache__/
 # build documentation
 public/
 docs/plantuml-diagrams/out/
-.aider*
diff --git a/docs/libraries-tools/git-ci-docker/index.md b/docs/libraries-tools/git-ci-docker/index.md
index dd9f0066..66a5f807 100644
--- a/docs/libraries-tools/git-ci-docker/index.md
+++ b/docs/libraries-tools/git-ci-docker/index.md
@@ -3,11 +3,12 @@
 Our adopted & recommended tools & services for Git, CI & Docker.
 
 <!-- markdownlint-disable MD013 -->
-| Title                                            | Summary                                        | Our Docs                                                 |
-|--------------------------------------------------|------------------------------------------------|----------------------------------------------------------|
-| [Docker](https://www.docker.com/)                | Container platform                             | [System Setup](../../howtos/prepare-your-system.md)      |
-| [GitLab CI/CD](https://docs.gitlab.com/ee/ci/)   | Continuous Integration and Deployment platform | [Tutorial](../../tutorials/creating-a-python-package.md) |
-| [GitLab Runner](https://docs.gitlab.com/runner/) | CI/CD job execution agent                      | [GKE Guide](../../explanations/gke-gitlab-runners.md)    |
-| [renovatebot](https://www.mend.io/renovate/)     | Automated dependency updates                   | [Guide](../../explanations/renovatebot.md)               |
-| [pre-commit](https://pre-commit.com/)            | Git hook framework                             | [Setup](../../howtos/setup-pre-commit-hooks.md)          |
+| Title                                                         | Summary                                        | Our Docs                                                 |
+|---------------------------------------------------------------|------------------------------------------------|----------------------------------------------------------|
+| [Docker](https://www.docker.com/)                             | Container platform                             | [System Setup](../../howtos/prepare-your-system.md)      |
+| [GitLab CI/CD](https://docs.gitlab.com/ee/ci/)                | Continuous Integration and Deployment platform | [Tutorial](../../tutorials/creating-a-python-package.md) |
+| [GitLab CI Local](https://github.com/firecow/gitlab-ci-local) | Local debugging of GitLab pipelines.           |                                                          |
+| [GitLab Runner](https://docs.gitlab.com/runner/)              | CI/CD job execution agent                      | [GKE Guide](../../explanations/gke-gitlab-runners.md)    |
+| [renovatebot](https://www.mend.io/renovate/)                  | Automated dependency updates                   | [Guide](../../explanations/renovatebot.md)               |
+| [pre-commit](https://pre-commit.com/)                         | Git hook framework                             | [Setup](../../howtos/setup-pre-commit-hooks.md)          |
 <!-- markdownlint-enable MD013 -->
-- 
GitLab