From 1e76f560eb31208da4a0a2d09aacfb52f188a3e4 Mon Sep 17 00:00:00 2001 From: Piotr Icikowski Date: Fri, 27 Jan 2023 15:34:10 +0100 Subject: [PATCH] docs(init): create initial documentation pages --- docs/hooks/links.py | 2 +- docs/mkdocs.yml | 19 ++++++- docs/sources/assets/css/cards.css | 66 ++++++++++++++++++++++++ docs/sources/assets/css/extra.css | 20 ++++++- docs/sources/assets/img/logo-inv.png | Bin 0 -> 33935 bytes docs/sources/examples/index.md | 4 ++ docs/sources/index.md | 9 ++-- docs/sources/installation/binaries.md | 63 ++++++++++++++++++++++ docs/sources/installation/docker.md | 3 ++ docs/sources/installation/index.md | 32 +++++++++++- docs/sources/installation/kubernetes.md | 3 ++ docs/sources/usage/admin/index.md | 45 ++++++++++++++++ docs/sources/usage/admin/payloads.md | 3 ++ docs/sources/usage/admin/routes.md | 3 ++ docs/sources/usage/admin/status.md | 3 ++ docs/sources/usage/config/index.md | 25 +++++++++ docs/sources/usage/config/tls.md | 3 ++ docs/sources/usage/config/vars.md | 3 ++ docs/sources/usage/health.md | 3 ++ docs/sources/usage/index.md | 33 +++++++++++- 20 files changed, 334 insertions(+), 8 deletions(-) create mode 100644 docs/sources/assets/css/cards.css create mode 100644 docs/sources/assets/img/logo-inv.png create mode 100644 docs/sources/installation/binaries.md create mode 100644 docs/sources/installation/docker.md create mode 100644 docs/sources/installation/kubernetes.md create mode 100644 docs/sources/usage/admin/index.md create mode 100644 docs/sources/usage/admin/payloads.md create mode 100644 docs/sources/usage/admin/routes.md create mode 100644 docs/sources/usage/admin/status.md create mode 100644 docs/sources/usage/config/index.md create mode 100644 docs/sources/usage/config/tls.md create mode 100644 docs/sources/usage/config/vars.md create mode 100644 docs/sources/usage/health.md diff --git a/docs/hooks/links.py b/docs/hooks/links.py index 654179d..a44db49 100644 --- a/docs/hooks/links.py +++ b/docs/hooks/links.py @@ -4,5 +4,5 @@ def on_page_markdown(markdown: str, **kwargs): links = [el[0] for el in re.findall(r"((? ul { + display: flex !important; + align-items: stretch; + align-content: stretch; + flex-flow: row wrap; + gap: 0.5rem; + margin-left: 0 !important; +} + +.cards.cols-1 > ul > li { + flex-basis: 100%; +} + +.cards.cols-2 > ul > li { + flex-basis: calc(50% - 0.25rem); +} + +.cards.cols-3 > ul > li { + flex-basis: calc(33.3333333% - 0.3333333rem); +} + +.cards.cols-4 > ul > li { + flex-basis: calc(25% - 0.375rem); +} + +@media screen and (max-width: 980px) { + .cards.cols-2 > ul > li { flex-basis: 100%; } + .cards.cols-3 > ul > li { flex-basis: 100%; } + .cards.cols-4 > ul > li { flex-basis: 100%; } +} + +.cards > ul > li { + display: flex; + flex-direction: column; + margin: 0 !important; + box-sizing: border-box; + padding: 0.5rem; + border: .05rem solid var(--md-default-fg-color--lightest); + border-radius: .1rem; + margin: 0; + padding: .8rem; + transition: border .25s, box-shadow .25s; +} + +.cards > ul > li:hover { + border-color: #0000; + box-shadow: var(--md-shadow-z2); +} + +.cards > ul > li > * { + margin: 0.5em 0; +} + +.cards > ul > li > :first-child { + padding-top: 0; + margin-top: 0; +} + +.cards > ul > li > :last-child { + padding-bottom: 0; + margin-bottom: 0; +} + +.cards > ul > li > :nth-child(3) { + flex-grow: 100; +} diff --git a/docs/sources/assets/css/extra.css b/docs/sources/assets/css/extra.css index 04c2adc..21e16d8 100644 --- a/docs/sources/assets/css/extra.css +++ b/docs/sources/assets/css/extra.css @@ -3,6 +3,24 @@ --md-primary-fg-color--light: #547AA5; --md-primary-fg-color--dark: #22223B; - --md-accent-fg-color: #FED766; + --md-accent-fg-color: #CBAC52; --md-accent-fg-color--transparent: rgba(254, 215, 102, 0.1); } + +p { + hyphens: auto; + text-align: justify; +} + +@media screen and (max-width: 980px) { + .smallImg { + max-width: 20% !important; + } +} + +@media screen and (min-width: 981px) { + .smallImg { + max-width: 10% !important; + } +} + diff --git a/docs/sources/assets/img/logo-inv.png b/docs/sources/assets/img/logo-inv.png new file mode 100644 index 0000000000000000000000000000000000000000..39fd426865aa7e80b6087b34528d1e8649aa9c62 GIT binary patch literal 33935 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 To be developed diff --git a/docs/sources/index.md b/docs/sources/index.md index a0c42d7..ed76db4 100644 --- a/docs/sources/index.md +++ b/docs/sources/index.md @@ -5,6 +5,9 @@ hide: ["navigation"] # GoosyMock +![GoosyMock icon](assets/img/logo.png#only-light){ align=right .smallImg } +![GoosyMock icon](assets/img/logo-inv.png#only-dark){ align=right .smallImg } + **GoosyMock** is a configurable test service for mocking HTTP responses, featuring SSL support, dedicated administration API and custom payloads (binary files that can be served on particular routes). It's also prepared @@ -32,6 +35,6 @@ code from scratch. - [X] Running in rootless mode - [X] Kubernetes support - [X] Helm chart available - - [X] Image running as non-root - - [X] All settings can be configured via chart values - - [X] Support Ingress controllers + - [X] Rootless container image + - [X] All settings configurable via chart values + - [X] Support for Ingress controllers diff --git a/docs/sources/installation/binaries.md b/docs/sources/installation/binaries.md new file mode 100644 index 0000000..2be1ebc --- /dev/null +++ b/docs/sources/installation/binaries.md @@ -0,0 +1,63 @@ +--- +title: Binaries +--- + +# Running **GoosyMock** from binaries + +## Downloading pre-built binaries + +**GoosyMock** offers pre-build binaries for following operating systems and +architectures: + +| Operating system | OS codename | Architectures | +|-|-|-| +| Linux | `linux` | `amd64`, `386`, `arm`, `arm64`, `ppc64le` | +| Windows | `windows` | `amd64`, `386` | +| MacOS | `darwin` | `arm64` | + +Properly named binaries are attached as release assets and can be downloaded +from [*Releases* page on GitHub](https://github.com/Icikowski/GoosyMock/releases/latest). + +## Building binaries manually + +!!! info "Prerequisites" + - **Git** 2.34+ + - **Go** 1.19+ + - **Taskfile** 3.17+ + +### Cloning the repository + +=== "Clone via HTTPS" + + ```bash + git clone https://github.com/Icikowski/GoosyMock.git + ``` + +=== "Clone via SSH" + + ```bash + git clone git@github.com:Icikowski/GoosyMock.git + ``` + +### Building the sources + +!!! tip "Using _Taskfile_" + This project utilizes _[Taskfile](https://taskfile.dev)_ for build + automatization. If you are willing to use `task` command for building + binaries, please install _Taskfile_ as described in + [official documentation](https://taskfile.dev/installation). + +Binary will be built for current OS & architecture and placed in +`target/binaries` directory. + +=== "Building static binary" + + ```bash + task build:static + ``` + +=== "Building dynamic binary" + + ```bash + task build:dynamic + ``` diff --git a/docs/sources/installation/docker.md b/docs/sources/installation/docker.md new file mode 100644 index 0000000..abdb9da --- /dev/null +++ b/docs/sources/installation/docker.md @@ -0,0 +1,3 @@ +--- +title: Docker +--- diff --git a/docs/sources/installation/index.md b/docs/sources/installation/index.md index b6aa4f0..66fff2b 100644 --- a/docs/sources/installation/index.md +++ b/docs/sources/installation/index.md @@ -1,3 +1,33 @@ +--- +title: Installation +--- + # Installation Guide -> To be developed +
+ +- :material-file-multiple:{ .lg .middle } **Binaries** + + --- + + Download or build **GoosyMock** binaries for direct use and jump start the adventure. + + [:material-arrow-right: Binaries](binaries.md) + +- :material-docker:{ .lg .middle } **Docker container image** + + --- + + Start **GoosyMock** starting Docker container and jump right into the action. + + [:material-arrow-right: Docker](docker.md) + +- :material-kubernetes:{ .lg .middle } **Kubernetes (via Helm)** + + --- + + Deploy **GoosyMock** instance on your Kubernetes cluster and don't worry about maintenance. + + [:material-arrow-right: Kubernetes (via Helm)](kubernetes.md) + +
diff --git a/docs/sources/installation/kubernetes.md b/docs/sources/installation/kubernetes.md new file mode 100644 index 0000000..ad33575 --- /dev/null +++ b/docs/sources/installation/kubernetes.md @@ -0,0 +1,3 @@ +--- +title: Kubernetes (via Helm) +--- diff --git a/docs/sources/usage/admin/index.md b/docs/sources/usage/admin/index.md new file mode 100644 index 0000000..4191c14 --- /dev/null +++ b/docs/sources/usage/admin/index.md @@ -0,0 +1,45 @@ +--- +title: Admin API +--- + +# Admin API Guide + +
+ +- :simple-openapiinitiative:{ .lg .middle } **OpenAPI Specification** + + --- + + Check the OpenAPI Specification of **GoosyMock**'s Admin API. + + + [:material-arrow-right: OpenAPI Specification](https://elements-demo.stoplight.io/?spec=https://raw.githubusercontent.com/Icikowski/GoosyMock/main/api/spec_adminapi.yaml) + +
+ +
+ +- :material-list-status:{ .lg .middle } **Status** + + --- + + Check the documentation for `/` endpoint. + + [:material-arrow-right: Status](status.md) + +- :material-router:{ .lg .middle } **Routes** + + --- + + Check the documentation for `/routes` endpoint. + + [:material-arrow-right: Routes](routes.md) + +- :material-file-star:{ .lg .middle } **Payloads** + + --- + + Check the documentation for `/payloads` endpoint. + + [:material-arrow-right: Payloads](payloads.md) +
diff --git a/docs/sources/usage/admin/payloads.md b/docs/sources/usage/admin/payloads.md new file mode 100644 index 0000000..53d8811 --- /dev/null +++ b/docs/sources/usage/admin/payloads.md @@ -0,0 +1,3 @@ +--- +title: Payloads endpoint +--- diff --git a/docs/sources/usage/admin/routes.md b/docs/sources/usage/admin/routes.md new file mode 100644 index 0000000..65e2395 --- /dev/null +++ b/docs/sources/usage/admin/routes.md @@ -0,0 +1,3 @@ +--- +title: Routes endpoint +--- diff --git a/docs/sources/usage/admin/status.md b/docs/sources/usage/admin/status.md new file mode 100644 index 0000000..57b7364 --- /dev/null +++ b/docs/sources/usage/admin/status.md @@ -0,0 +1,3 @@ +--- +title: Status endpoint +--- diff --git a/docs/sources/usage/config/index.md b/docs/sources/usage/config/index.md new file mode 100644 index 0000000..3ae8896 --- /dev/null +++ b/docs/sources/usage/config/index.md @@ -0,0 +1,25 @@ +--- +title: Configuration +--- + +# Configuration Guide + +
+ +- :material-code-braces:{ .lg .middle } **Configuration variables** + + --- + + Learn about environment variables used for **GoosyMock**'s configuration. + + [:material-arrow-right: Configuration variables](vars.md) + +- :material-lock:{ .lg .middle } **TLS configuration** + + --- + + Deep dive into **GoosyMock**'s TLS & SSL configuration. + + [:material-arrow-right: TLS configuration](tls.md) + +
diff --git a/docs/sources/usage/config/tls.md b/docs/sources/usage/config/tls.md new file mode 100644 index 0000000..943199a --- /dev/null +++ b/docs/sources/usage/config/tls.md @@ -0,0 +1,3 @@ +--- +title: TLS configuration +--- diff --git a/docs/sources/usage/config/vars.md b/docs/sources/usage/config/vars.md new file mode 100644 index 0000000..9c7aead --- /dev/null +++ b/docs/sources/usage/config/vars.md @@ -0,0 +1,3 @@ +--- +title: Configuration variables +--- diff --git a/docs/sources/usage/health.md b/docs/sources/usage/health.md new file mode 100644 index 0000000..8f73292 --- /dev/null +++ b/docs/sources/usage/health.md @@ -0,0 +1,3 @@ +--- +title: Health probes +--- diff --git a/docs/sources/usage/index.md b/docs/sources/usage/index.md index 051ae9c..db32f47 100644 --- a/docs/sources/usage/index.md +++ b/docs/sources/usage/index.md @@ -1,3 +1,34 @@ +--- +title: Usage +--- + # Usage Guide -> To be developed +
+ +- :material-cog:{ .lg .middle } **Configuration** + + --- + + Learn about **GoosyMock**'s configuration options and instructions. + + [:material-arrow-right: Configuration](config/index.md) + +- :material-code-json:{ .lg .middle } **Admin API** + + --- + + Get familiar with **GoosyMock** management by declarative configuration and + administration endpoints. + + [:material-arrow-right: Docker](admin/index.md) + +- :material-cloud-check-outline:{ .lg .middle } **Liveness & readiness probes** + + --- + + Check how **GoosyMock** indicates it's health status. + + [:material-arrow-right: Liveness & readiness probes](health.md) + +