From 58a5b3591922a68820afa23a05cd89bf51b41f69 Mon Sep 17 00:00:00 2001 From: Grant Orndorff Date: Wed, 31 May 2023 15:02:27 -0400 Subject: [PATCH] docs: add mermaid plugin and replace image Fixes: #2559 --- docs-requirements.txt | 1 + docs/conf.py | 1 + docs/explanations/cves_and_usns_explained.md | 22 ++++++++++++++++++- docs/images/usn-related.png | Bin 20188 -> 0 bytes 4 files changed, 23 insertions(+), 1 deletion(-) delete mode 100644 docs/images/usn-related.png diff --git a/docs-requirements.txt b/docs-requirements.txt index a2de834770..9a69d2bc63 100644 --- a/docs-requirements.txt +++ b/docs-requirements.txt @@ -5,3 +5,4 @@ sphinx==5.1.1 sphinx_autobuild sphinx_copybutton sphinx_design +sphinxcontrib-mermaid diff --git a/docs/conf.py b/docs/conf.py index 36b1089269..067822ed7c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -32,6 +32,7 @@ "myst_parser", "sphinx_copybutton", "sphinx_design", + "sphinxcontrib.mermaid", ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/explanations/cves_and_usns_explained.md b/docs/explanations/cves_and_usns_explained.md index 272c1d883b..fca33be30f 100644 --- a/docs/explanations/cves_and_usns_explained.md +++ b/docs/explanations/cves_and_usns_explained.md @@ -33,7 +33,27 @@ A USN is composed of different CVEs. If the same CVE appears on multiple USNs, w In the following image, we can see a visual representation of that concept, where USN-789 and USN-321 are related USNs because both are affected by CVE-2: -![Related USN example](../images/usn-related.png) +```{mermaid} +graph TD; + %% nodes + usn1[USN-123] + usn2[USN-456] + usn3[USN-789] + usn4[USN-321] + usn5[USN-654] + cve1((CVE-1)) + cve2((CVE-2)) + cve3((CVE-3)) + + %% arrows + usn1-->cve1 + usn1-->cve2 + usn1-->cve3 + cve1-->usn2 + cve2-->usn3 + cve2-->usn4 + cve3-->usn5 +``` A real example can be seen in [USN-5573-1](https://ubuntu.com/security/notices/USN-5573-1). diff --git a/docs/images/usn-related.png b/docs/images/usn-related.png deleted file mode 100644 index 9db73c0ffb2abd9583d4f7b40fdb1b83bdde99ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20188 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