Contributing to Docs
Contributing to the docs.layer5.io Website
Welcome to the GitHub repository for Layer5’s documentation website!
The docs website is hosted at https://docs.layer5.io.
We use Hugo with the google/docsy theme for styling and site structure, and Netlify to manage the deployment of the site.
Quickstart
Here’s a quick guide to updating the docs:
Fork the layer5io/docs repository on GitHub.
Make your changes and send a pull request (PR).
If you’re not yet ready for a review, add “WIP” to the PR name to indicate it’s a work in progress. Alternatively, you use the
/hold
prow command in a comment to mark the PR as not ready for merge.Wait for the automated PR workflow to do some checks. When it’s ready, you should see a comment like this:
deploy/netlify — Deploy preview ready!
Click Details to the right of “Deploy preview ready” to see a preview of your updates.
Continue updating your doc and pushing your changes until you’re happy with the content.
When you’re ready for a review, add a comment to the PR, remove any holds or “WIP” markers, and assign a reviewer/approver. See the Layer5 contributor guide.
If you need more help with the GitHub workflow, follow this guide to a standard GitHub workflow.
Local development
This section will show you how to develop the website locally, by running a local Hugo server.
Install Hugo
To install Hugo, follow the instructions for your system type.
NOTE: we recommend that you use Hugo version 0.119.0
, as this is currently the version we deploy to Netlify.
For example, using homebrew to install hugo on macOS or linux:
# WARNING: this may install a newer version than `0.119.0`
brew install hugo
Install Node Packages
If you plan to make changes to the site styling, you need to install some node libraries as well. (See the Docsy setup guide for more information)
You can install the same versions we use in Netlify (defined in package.json
) with the following command:
npm install -D
Run local hugo server
Follow the usual GitHub workflow of forking the repository on GitHub and then cloning your fork to your local machine.
Fork the layer5io/docs repository in the GitHub UI.
Clone your fork locally:
git clone git@github.com:<your-github-username>/docs.git cd website/
Initialize the Docsy submodule:
git submodule update --init --recursive
Install Docsy dependencies:
# NOTE: ensure you have node 18 installed (cd themes/docsy/ && npm install)
Start your local Hugo server:
hugo server -D
You can access your website at http://localhost:1313/
Useful docs
- User guide for the Docsy theme
- Hugo installation guide
- Hugo basic usage
- Hugo site directory structure
- hugo server reference
Menu structure
The site theme has one Hugo menu (main
), which defines the top navigation bar. You can find and adjust the definition
of the menu in the site configuration file.
The left-hand navigation panel is defined by the directory structure under the docs
directory.
A weight
property in the front matter of each page determines the position of the page relative to the others in the same directory.
The lower the weight, the earlier the page appears in the section.
Here is an example _index.md
file:
+++
title = "Getting Started with Layer5"
description = "Overview"
weight = 1
+++
Docsy Theme
We use the Docsy theme for the website.
The theme files are managed with a git submodule in the themes/docsy
directory.
Do not change these files, they are not actually inside this repo, but are part of the google/docsy repo.
To update referenced docsy commit, run the following command at the root of the repo:
# for example, to update docsy to v0.6.0
# WARNING: updating the docsy version will require you to update our overrides
# check under: `layouts/partials` and `assets/scss`
git -C themes/docsy fetch --tags
git -C themes/docsy checkout tags/v0.6.0
Documentation style guide
For guidance on writing effective documentation, see the style guide for the Layer5 docs.
Styling your content
The theme holds its styles in the assets/scss
directory.
Do not change these files, they are not actually inside this repo, but are part of the google/docsy repo.
You can override the default styles and add new ones:
In general, put your files in the project directory structure under
website
rather than in the theme directory. Use the same file name as the theme does, and put the file in the same relative position. Hugo looks first at the file in the main project directories, if present, then at the files under the theme directory. For example, the Layer5 website’slayouts/partials/navbar.html
overrides the theme’slayouts/partials/navbar.html
You can update the Layer5 website’s project variables in the
_variables_project.scss
file. Values in that file override the Docsy variables. You can also use_variables_project.scss
to specify your own values for any of the default Bootstrap 4 variables.Custom styles
_styles_project
file
Styling of images:
To see some examples of styled images, take a look at the OAuth setup page in the Layer5 docs. Search for
.png
in the page source.For more help, see the guide to Bootstrap image styling.
Also see the Bootstrap utilities, such as borders.
The site’s front page:
See the page source.
The CSS styles are in the project variables file.
The page uses the cover block defined by the theme.
The page also uses the linkdown block.
Using Hugo shortcodes
Sometimes it’s useful to define a snippet of information in one place and reuse it wherever we need it. For example, we want to be able to refer to the minimum version of various frameworks/libraries throughout the docs, without causing a maintenance nightmare.
For this purpose, we use Hugo’s “shortcodes”. Shortcodes are similar to Django variables. You define a shortcode in a file, then use a specific markup to invoke the shortcode in the docs. That markup is replaced by the content of the shortcode file when the page is built.
To create a shortcode:
Add an HTML file in the
/docs/layouts/shortcodes/
directory. The file name must be short and meaningful, as it determines the shortcode you and others use in the docs.For the file content, add the text and HTML markup that should replace the shortcode markup when the web page is built.
To use a shortcode in a document, wrap the name of the shortcode in braces and percent signs like this:
{ {% shortcode-name %}}
The shortcode name is the file name minus the .html
file extension.
Example: The following shortcode defines the minimum required version of Kubernetes:
File name of the shortcode:
kubernetes-min-version.html
Content of the shortcode:
1.8
Usage in a document:
You need Kubernetes version 1.28 or later.
Useful Hugo docs:
Versioning of the docs
For each stable release, we create a new branch for the relevant documentation. For example, the documentation for the v0.2 stable release is maintained in the v0.2-branch. Each branch has a corresponding Netlify website that automatically syncs each merged PR.
The versioned sites follow this convention:
docs.layer5.io
always points to the current master branchmaster.docs.layer5.io
always points to GitHub headvXXX-YYY.docs.layer5.io
points to the release at vXXX.YYY-branch
We also hook up each version to the dropdown on the website menu bar. For information on how to update the website to a new version, see the Layer5 release guide.
Whenever any documents reference any source code, you should use the version shortcode in the links, like so:
https://github.com/layer5io/docs/blob/master/scripts/gke/deploy.sh
This ensures that all the links in a versioned webpage point to the correct branch.
Recent Discussions on Kanvas
- Oct 14 | Explore Meshery's Published Relationship Design Examples by Awani Alero
- Oct 03 | Design Review RFC: Kanvas Empty State Enhancement by Lee Calcote
- Jul 19 | [For Discussion] Visual indication of semantically vs non-semantically meaningful Meshery components by Lee Calcote
- Jun 07 | What are the conditions for a "System is unhealthy" warning? by James
- May 30 | Looking for a meshmate to help with first PR by Faisal Imtiyaz123
- Feb 28 | For Discussion: Capturing potential, but unrealized Relationships in Design Snapshots by Lee Calcote
- Feb 12 | Hint on Scaling & Verifying Cronjob in Playground by Sandra Ashipala
- Sep 28 | Trying to add screenshots of Containerd & Curiefense integration by Raman Thakur