summaryrefslogtreecommitdiff
path: root/doc/development/documentation
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-09-20 13:18:24 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-09-20 13:18:24 +0000
commit0653e08efd039a5905f3fa4f6e9cef9f5d2f799c (patch)
tree4dcc884cf6d81db44adae4aa99f8ec1233a41f55 /doc/development/documentation
parent744144d28e3e7fddc117924fef88de5d9674fe4c (diff)
downloadgitlab-ce-0653e08efd039a5905f3fa4f6e9cef9f5d2f799c.tar.gz
Add latest changes from gitlab-org/gitlab@14-3-stable-eev14.3.0-rc42
Diffstat (limited to 'doc/development/documentation')
-rw-r--r--doc/development/documentation/feature_flags.md27
-rw-r--r--doc/development/documentation/index.md203
-rw-r--r--doc/development/documentation/redirects.md155
-rw-r--r--doc/development/documentation/review_apps.md101
-rw-r--r--doc/development/documentation/site_architecture/index.md11
-rw-r--r--doc/development/documentation/styleguide/index.md204
-rw-r--r--doc/development/documentation/styleguide/word_list.md348
-rw-r--r--doc/development/documentation/testing.md34
8 files changed, 644 insertions, 439 deletions
diff --git a/doc/development/documentation/feature_flags.md b/doc/development/documentation/feature_flags.md
index b0fa6c3428c..5a4d365ed20 100644
--- a/doc/development/documentation/feature_flags.md
+++ b/doc/development/documentation/feature_flags.md
@@ -67,10 +67,12 @@ When the state of a flag changes (for example, disabled by default to enabled by
Possible version history entries are:
```markdown
-> - [Enabled on GitLab.com](issue-link) in GitLab X.X and is ready for production use.
-> - [Enabled on GitLab.com](issue-link) in GitLab X.X and is ready for production use. Available to GitLab.com administrators only.
-> - [Enabled with <flag name> flag](issue-link) for self-managed GitLab in GitLab X.X and is ready for production use.
-> - [Feature flag <flag name> removed](issue-line) in GitLab X.X.
+> - [Introduced](issue-link) in GitLab X.X. [Deployed behind the <flag name> flag](../../administration/feature_flags.md), disabled by default.
+> - [Enabled on GitLab.com](issue-link) in GitLab X.X.
+> - [Enabled on GitLab.com](issue-link) in GitLab X.X. Available to GitLab.com administrators only.
+> - [Enabled on self-managed](issue-link) in GitLab X.X.
+> - [Feature flag <flag name> removed](issue-link) in GitLab X.X.
+> - [Generally available](issue-link) in GitLab X.X.
```
## Feature flag documentation examples
@@ -78,7 +80,7 @@ Possible version history entries are:
The following examples show the progression of a feature flag.
```markdown
-> Introduced in GitLab 13.7.
+> Introduced in GitLab 13.7. [Deployed behind the `forti_token_cloud` flag](../../administration/feature_flags.md), disabled by default.
FLAG:
On self-managed GitLab, by default this feature is not available. To make it available,
@@ -86,11 +88,11 @@ ask an administrator to [enable the `forti_token_cloud` flag](../administration/
The feature is not ready for production use.
```
-If it were to be updated in the future to enable its use in production, you can update the version history:
+When the feature is enabled in production, you can update the version history:
```markdown
-> - Introduced in GitLab 13.7.
-> - [Enabled with `forti_token_cloud` flag](https://gitlab.com/issue/etc) for self-managed GitLab in GitLab X.X and ready for production use.
+> - Introduced in GitLab 13.7. [Deployed behind the `forti_token_cloud` flag](../../administration/feature_flags.md), disabled by default.
+> - [Enabled on self-managed](https://gitlab.com/issue/etc) GitLab 13.8.
FLAG:
On self-managed GitLab, by default this feature is available. To hide the feature per user,
@@ -100,8 +102,9 @@ ask an administrator to [disable the `forti_token_cloud` flag](../administration
And, when the feature is done and fully available to all users:
```markdown
-> - Introduced in GitLab 13.7.
-> - [Enabled on GitLab.com](https://gitlab.com/issue/etc) in GitLab X.X and is ready for production use.
-> - [Enabled with `forti_token_cloud` flag](https://gitlab.com/issue/etc) for self-managed GitLab in GitLab X.X and is ready for production use.
-> - [Feature flag `forti_token_cloud`](https://gitlab.com/issue/etc) removed in GitLab X.X.
+> - Introduced in GitLab 13.7. [Deployed behind the `forti_token_cloud` flag](../../administration/feature_flags.md), disabled by default.
+> - [Enabled on self-managed](https://gitlab.com/issue/etc) GitLab 13.8.
+> - [Enabled on GitLab.com](https://gitlab.com/issue/etc) in GitLab 13.9.
+> - [Feature flag `forti_token_cloud`](https://gitlab.com/issue/etc) removed in GitLab 14.0.
+> - [Generally available](issue-link) in GitLab 14.0.
```
diff --git a/doc/development/documentation/index.md b/doc/development/documentation/index.md
index 59a1b8c7b99..a597ea512c6 100644
--- a/doc/development/documentation/index.md
+++ b/doc/development/documentation/index.md
@@ -131,10 +131,10 @@ The following metadata should be added when a page is moved to another location:
- `redirect_to`: The relative path and filename (with an `.md` extension) of the
location to which visitors should be redirected for a moved page.
- [Learn more](#move-or-rename-a-page).
+ [Learn more](redirects.md).
- `disqus_identifier`: Identifier for Disqus commenting system. Used to keep
comments with a page that's been moved to a new URL.
- [Learn more](#redirections-for-pages-with-disqus-comments).
+ [Learn more](redirects.md#redirections-for-pages-with-disqus-comments).
### Comments metadata
@@ -156,133 +156,7 @@ Nanoc layout), which is displayed at the top of the page if defined.
## Move or rename a page
-Moving or renaming a document is the same as changing its location. Be sure to
-assign a technical writer to any merge request that renames or moves a page.
-Technical Writers can help with any questions and can review your change.
-
-When moving or renaming a page, you must redirect browsers to the new page.
-This ensures users find the new page, and have the opportunity to update their
-bookmarks.
-
-There are two types of redirects:
-
-- Redirect codes added into the documentation files themselves, for users who
- view the docs in `/help` on self-managed instances. For example,
- [`/help` on GitLab.com](https://gitlab.com/help).
-- [GitLab Pages redirects](../../user/project/pages/redirects.md),
- for users who view the docs on [`docs.gitlab.com`](https://docs.gitlab.com).
-
-The Technical Writing team manages the [process](https://gitlab.com/gitlab-org/technical-writing/-/blob/main/.gitlab/issue_templates/tw-monthly-tasks.md)
-to regularly update the [`redirects.yaml`](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/content/_data/redirects.yaml)
-file.
-
-To add a redirect:
-
-1. In the repository (`gitlab`, `gitlab-runner`, `omnibus-gitlab`, or `charts`),
- create a new documentation file. Don't delete the old one. The easiest
- way is to copy it. For example:
-
- ```shell
- cp doc/user/search/old_file.md doc/api/new_file.md
- ```
-
-1. Add the redirect code to the old documentation file by running the
- following Rake task. The first argument is the path of the old file,
- and the second argument is the path of the new file:
-
- - To redirect to a page in the same project, use relative paths and
- the `.md` extension. Both old and new paths start from the same location.
- In the following example, both paths are relative to `doc/`:
-
- ```shell
- bundle exec rake "gitlab:docs:redirect[doc/user/search/old_file.md, doc/api/new_file.md]"
- ```
-
- - To redirect to a page in a different project or site, use the full URL (with `https://`) :
-
- ```shell
- bundle exec rake "gitlab:docs:redirect[doc/user/search/old_file.md, https://example.com]"
- ```
-
- Alternatively, you can omit the arguments and be asked to enter their values:
-
- ```shell
- bundle exec rake gitlab:docs:redirect
- ```
-
- If you don't want to use the Rake task, you can use the following template.
- However, the file paths must be relative to the `doc` or `docs` directory.
-
- Replace the value of `redirect_to` with the new file path and `YYYY-MM-DD`
- with the date the file should be removed.
-
- Redirect files that link to docs in internal documentation projects
- are removed after three months. Redirect files that link to external sites are
- removed after one year:
-
- ```markdown
- ---
- redirect_to: '../newpath/to/file/index.md'
- remove_date: 'YYYY-MM-DD'
- ---
-
- This document was moved to [another location](../path/to/file/index.md).
-
- <!-- This redirect file can be deleted after <YYYY-MM-DD>. -->
- <!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
- ```
-
-1. If the documentation page being moved has any Disqus comments, follow the steps
- described in [Redirections for pages with Disqus comments](#redirections-for-pages-with-disqus-comments).
-1. Open a merge request with your changes. If a documentation page
- you're removing includes images that aren't used
- with any other documentation pages, be sure to use your merge request to delete
- those images from the repository.
-1. Assign the merge request to a technical writer for review and merge.
-1. Search for links to the old documentation file. You must find and update all
- links that point to the old documentation file:
-
- - In <https://gitlab.com/gitlab-com/www-gitlab-com>, search for full URLs:
- `grep -r "docs.gitlab.com/ee/path/to/file.html" .`
- - In <https://gitlab.com/gitlab-org/gitlab-docs/-/tree/master/content/_data>,
- search the navigation bar configuration files for the path with `.html`:
- `grep -r "path/to/file.html" .`
- - In any of the four internal projects, search for links in the docs
- and codebase. Search for all variations, including full URL and just the path.
- For example, go to the root directory of the `gitlab` project and run:
-
- ```shell
- grep -r "docs.gitlab.com/ee/path/to/file.html" .
- grep -r "path/to/file.html" .
- grep -r "path/to/file.md" .
- grep -r "path/to/file" .
- ```
-
- You may need to try variations of relative links, such as `../path/to/file` or
- `../file` to find every case.
-
-### Redirections for pages with Disqus comments
-
-If the documentation page being relocated already has Disqus comments,
-we need to preserve the Disqus thread.
-
-Disqus uses an identifier per page, and for <https://docs.gitlab.com>, the page identifier
-is configured to be the page URL. Therefore, when we change the document location,
-we need to preserve the old URL as the same Disqus identifier.
-
-To do that, add to the front matter the variable `disqus_identifier`,
-using the old URL as value. For example, let's say we moved the document
-available under `https://docs.gitlab.com/my-old-location/README.html` to a new location,
-`https://docs.gitlab.com/my-new-location/index.html`.
-
-Into the **new document** front matter, we add the following information. You must
-include the filename in the `disqus_identifier` URL, even if it's `index.html` or `README.html`.
-
-```yaml
----
-disqus_identifier: 'https://docs.gitlab.com/my-old-location/README.html'
----
-```
+See [redirects](redirects.md).
## Merge requests for GitLab documentation
@@ -405,76 +279,7 @@ on how the left-side navigation menu is built and updated.
## Previewing the changes live
-NOTE:
-To preview your changes to documentation locally, follow this
-[development guide](https://gitlab.com/gitlab-org/gitlab-docs/blob/main/README.md#development-when-contributing-to-gitlab-documentation) or [these instructions for GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/gitlab_docs.md).
-
-The live preview is currently enabled for the following projects:
-
-- [`gitlab`](https://gitlab.com/gitlab-org/gitlab)
-- [`omnibus-gitlab`](https://gitlab.com/gitlab-org/omnibus-gitlab)
-- [`gitlab-runner`](https://gitlab.com/gitlab-org/gitlab-runner)
-
-If your merge request has docs changes, you can use the manual `review-docs-deploy` job
-to deploy the docs review app for your merge request.
-
-![Manual trigger a docs build](img/manual_build_docs.png)
-
-You must push a branch to those repositories, as it doesn't work for forks.
-
-The `review-docs-deploy*` job:
-
-1. Triggers a cross project pipeline and build the docs site with your changes.
-
-In case the review app URL returns 404, this means that either the site is not
-yet deployed, or something went wrong with the remote pipeline. Give it a few
-minutes and it should appear online, otherwise you can check the status of the
-remote pipeline from the link in the merge request's job output.
-If the pipeline failed or got stuck, drop a line in the `#docs` chat channel.
-
-NOTE:
-Someone with no merge rights to the GitLab projects (think of forks from
-contributors) cannot run the manual job. In that case, you can
-ask someone from the GitLab team who has the permissions to do that for you.
-
-### Troubleshooting review apps
-
-In case the review app URL returns 404, follow these steps to debug:
-
-1. **Did you follow the URL from the merge request widget?** If yes, then check if
- the link is the same as the one in the job output.
-1. **Did you follow the URL from the job output?** If yes, then it means that
- either the site is not yet deployed or something went wrong with the remote
- pipeline. Give it a few minutes and it should appear online, otherwise you
- can check the status of the remote pipeline from the link in the job output.
- If the pipeline failed or got stuck, drop a line in the `#docs` chat channel.
-
-### Technical aspects
-
-If you want to know the in-depth details, here's what's really happening:
-
-1. You manually run the `review-docs-deploy` job in a merge request.
-1. The job runs the [`scripts/trigger-build`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/scripts/trigger-build)
- script with the `docs deploy` flag, which triggers the "Triggered from `gitlab-org/gitlab` 'review-docs-deploy' job"
- pipeline trigger in the `gitlab-org/gitlab-docs` project for the `$DOCS_BRANCH` (defaults to `main`).
-1. The preview URL is shown both at the job output and in the merge request
- widget. You also get the link to the remote pipeline.
-1. In the `gitlab-org/gitlab-docs` project, the pipeline is created and it
- [skips the test jobs](https://gitlab.com/gitlab-org/gitlab-docs/blob/8d5d5c750c602a835614b02f9db42ead1c4b2f5e/.gitlab-ci.yml#L50-55)
- to lower the build time.
-1. Once the docs site is built, the HTML files are uploaded as artifacts.
-1. A specific runner tied only to the docs project, runs the Review App job
- that downloads the artifacts and uses `rsync` to transfer the files over
- to a location where NGINX serves them.
-
-The following GitLab features are used among others:
-
-- [Manual jobs](../../ci/jobs/job_control.md#create-a-job-that-must-be-run-manually)
-- [Multi project pipelines](../../ci/pipelines/multi_project_pipelines.md)
-- [Review Apps](../../ci/review_apps/index.md)
-- [Artifacts](../../ci/yaml/index.md#artifacts)
-- [Specific runner](../../ci/runners/runners_scope.md#prevent-a-specific-runner-from-being-enabled-for-other-projects)
-- [Pipelines for merge requests](../../ci/pipelines/merge_request_pipelines.md)
+See how you can use review apps to [preview your changes live](review_apps.md).
## Testing
diff --git a/doc/development/documentation/redirects.md b/doc/development/documentation/redirects.md
new file mode 100644
index 00000000000..eb6878f5870
--- /dev/null
+++ b/doc/development/documentation/redirects.md
@@ -0,0 +1,155 @@
+---
+stage: none
+group: Documentation Guidelines
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+description: Learn how to contribute to GitLab Documentation.
+---
+
+<!---
+ The clean_redirects Rake task in the gitlab-docs repository manually
+ excludes this file. If the line containing remove_date is moved to a new
+ document, update the Rake task with the new location.
+
+ https://gitlab.com/gitlab-org/gitlab-docs/-/blob/1979f985708d64558bb487fbe9ed5273729c01b7/Rakefile#L306
+--->
+
+# Redirects in GitLab documentation
+
+Moving or renaming a document is the same as changing its location. Be sure
+to assign a technical writer to any merge request that renames or moves a page.
+Technical Writers can help with any questions and can review your change.
+
+When moving or renaming a page, you must redirect browsers to the new page.
+This ensures users find the new page, and have the opportunity to update their
+bookmarks.
+
+There are two types of redirects:
+
+- Redirect added into the documentation files themselves, for users who
+ view the docs in `/help` on self-managed instances. For example,
+ [`/help` on GitLab.com](https://gitlab.com/help).
+- [GitLab Pages redirects](../../user/project/pages/redirects.md),
+ for users who view the docs on [`docs.gitlab.com`](https://docs.gitlab.com).
+
+ The Technical Writing team manages the [process](https://gitlab.com/gitlab-org/technical-writing/-/blob/main/.gitlab/issue_templates/tw-monthly-tasks.md)
+ to regularly update and [clean up the redirects](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/raketasks.md#clean-up-redirects).
+ If you're a contributor, you may add a new redirect, but you don't need to delete
+ the old ones. This process is automatic and handled by the Technical
+ Writing team.
+
+NOTE:
+If the old page you're renaming doesn't exist in a stable branch, skip the
+following steps and ask a Technical Writer to add the redirect in
+[`redirects.yaml`](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/content/_data/redirects.yaml).
+For example, if you add a new page on the 3rd of the month and then rename it before it gets
+added in the stable branch on the 18th, the old page will never be part of the internal `/help`.
+In that case, you can jump straight to the
+[Pages redirect](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/maintenance.md#pages-redirects).
+
+To add a redirect:
+
+1. In the repository (`gitlab`, `gitlab-runner`, `omnibus-gitlab`, or `charts`),
+ create a new documentation file. Don't delete the old one. The easiest
+ way is to copy it. For example:
+
+ ```shell
+ cp doc/user/search/old_file.md doc/api/new_file.md
+ ```
+
+1. Add the redirect code to the old documentation file by running the
+ following Rake task. The first argument is the path of the old file,
+ and the second argument is the path of the new file:
+
+ - To redirect to a page in the same project, use relative paths and
+ the `.md` extension. Both old and new paths start from the same location.
+ In the following example, both paths are relative to `doc/`:
+
+ ```shell
+ bundle exec rake "gitlab:docs:redirect[doc/user/search/old_file.md, doc/api/new_file.md]"
+ ```
+
+ - To redirect to a page in a different project or site, use the full URL (with `https://`) :
+
+ ```shell
+ bundle exec rake "gitlab:docs:redirect[doc/user/search/old_file.md, https://example.com]"
+ ```
+
+ Alternatively, you can omit the arguments and be asked to enter their values:
+
+ ```shell
+ bundle exec rake gitlab:docs:redirect
+ ```
+
+ If you don't want to use the Rake task, you can use the following template.
+ However, the file paths must be relative to the `doc` or `docs` directory.
+
+ Replace the value of `redirect_to` with the new file path and `YYYY-MM-DD`
+ with the date the file should be removed.
+
+ Redirect files that link to docs in internal documentation projects
+ are removed after three months. Redirect files that link to external sites are
+ removed after one year:
+
+ ```markdown
+ ---
+ redirect_to: '../newpath/to/file/index.md'
+ remove_date: 'YYYY-MM-DD'
+ ---
+
+ This document was moved to [another location](../path/to/file/index.md).
+
+ <!-- This redirect file can be deleted after <YYYY-MM-DD>. -->
+ <!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
+ ```
+
+1. If the documentation page being moved has any Disqus comments, follow the steps
+ described in [Redirections for pages with Disqus comments](#redirections-for-pages-with-disqus-comments).
+1. Open a merge request with your changes. If a documentation page
+ you're removing includes images that aren't used
+ with any other documentation pages, be sure to use your merge request to delete
+ those images from the repository.
+1. Assign the merge request to a technical writer for review and merge.
+1. Search for links to the old documentation file. You must find and update all
+ links that point to the old documentation file:
+
+ - In <https://gitlab.com/gitlab-com/www-gitlab-com>, search for full URLs:
+ `grep -r "docs.gitlab.com/ee/path/to/file.html" .`
+ - In <https://gitlab.com/gitlab-org/gitlab-docs/-/tree/master/content/_data>,
+ search the navigation bar configuration files for the path with `.html`:
+ `grep -r "path/to/file.html" .`
+ - In any of the four internal projects, search for links in the docs
+ and codebase. Search for all variations, including full URL and just the path.
+ For example, go to the root directory of the `gitlab` project and run:
+
+ ```shell
+ grep -r "docs.gitlab.com/ee/path/to/file.html" .
+ grep -r "path/to/file.html" .
+ grep -r "path/to/file.md" .
+ grep -r "path/to/file" .
+ ```
+
+ You may need to try variations of relative links, such as `../path/to/file` or
+ `../file` to find every case.
+
+## Redirections for pages with Disqus comments
+
+If the documentation page being relocated already has Disqus comments,
+we need to preserve the Disqus thread.
+
+Disqus uses an identifier per page, and for <https://docs.gitlab.com>, the page identifier
+is configured to be the page URL. Therefore, when we change the document location,
+we need to preserve the old URL as the same Disqus identifier.
+
+To do that, add to the front matter the variable `disqus_identifier`,
+using the old URL as value. For example, let's say we moved the document
+available under `https://docs.gitlab.com/my-old-location/README.html` to a new location,
+`https://docs.gitlab.com/my-new-location/index.html`.
+
+Into the **new document** front matter, we add the following information. You must
+include the filename in the `disqus_identifier` URL, even if it's `index.html` or `README.html`.
+
+```yaml
+---
+disqus_identifier: 'https://docs.gitlab.com/my-old-location/README.html'
+---
+```
diff --git a/doc/development/documentation/review_apps.md b/doc/development/documentation/review_apps.md
new file mode 100644
index 00000000000..2b8c412f165
--- /dev/null
+++ b/doc/development/documentation/review_apps.md
@@ -0,0 +1,101 @@
+---
+stage: none
+group: Documentation Guidelines
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+description: Learn how documentation review apps work.
+---
+
+# Documentation review apps
+
+If you're a GitLab team member and your merge request contains documentation changes, you can use a review app to preview
+how they would look if they were deployed to the [GitLab Docs site](https://docs.gitlab.com).
+
+Review apps are enabled for the following projects:
+
+- [GitLab](https://gitlab.com/gitlab-org/gitlab)
+- [Omnibus GitLab](https://gitlab.com/gitlab-org/omnibus-gitlab)
+- [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner)
+- [GitLab Charts](https://gitlab.com/gitlab-org/charts/gitlab)
+
+Alternatively, check the [`gitlab-docs` development guide](https://gitlab.com/gitlab-org/gitlab-docs/blob/main/README.md#development-when-contributing-to-gitlab-documentation)
+or [the GDK documentation](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/gitlab_docs.md)
+to render and preview the documentation locally.
+
+## How to trigger a review app
+
+If a merge request has documentation changes, use the `review-docs-deploy` manual job
+to deploy the documentation review app for your merge request.
+
+![Manual trigger a documentation review app](img/manual_build_docs.png)
+
+The `review-docs-deploy*` job triggers a cross project pipeline and builds the
+docs site with your changes. When the pipeline finishes, the review app URL
+appears in the merge request widget. Use it to navigate to your changes.
+
+You must have the Developer role in the project. Users without the Developer role, such
+as external contributors, cannot run the manual job. In that case, ask someone from
+the GitLab team to run the job.
+
+## Technical aspects
+
+If you want to know the in-depth details, here's what's really happening:
+
+1. You manually run the `review-docs-deploy` job in a merge request.
+1. The job runs the [`scripts/trigger-build`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/scripts/trigger-build)
+ script with the `docs deploy` flag, which triggers the "Triggered from `gitlab-org/gitlab` 'review-docs-deploy' job"
+ pipeline trigger in the `gitlab-org/gitlab-docs` project for the `$DOCS_BRANCH` (defaults to `main`).
+1. The preview URL is shown both at the job output and in the merge request
+ widget. You also get the link to the remote pipeline.
+1. In the `gitlab-org/gitlab-docs` project, the pipeline is created and it
+ [skips the test jobs](https://gitlab.com/gitlab-org/gitlab-docs/blob/8d5d5c750c602a835614b02f9db42ead1c4b2f5e/.gitlab-ci.yml#L50-55)
+ to lower the build time.
+1. Once the docs site is built, the HTML files are uploaded as artifacts.
+1. A specific runner tied only to the docs project, runs the Review App job
+ that downloads the artifacts and uses `rsync` to transfer the files over
+ to a location where NGINX serves them.
+
+The following GitLab features are used among others:
+
+- [Manual jobs](../../ci/jobs/job_control.md#create-a-job-that-must-be-run-manually)
+- [Multi project pipelines](../../ci/pipelines/multi_project_pipelines.md)
+- [Review Apps](../../ci/review_apps/index.md)
+- [Artifacts](../../ci/yaml/index.md#artifacts)
+- [Specific runner](../../ci/runners/runners_scope.md#prevent-a-specific-runner-from-being-enabled-for-other-projects)
+- [Pipelines for merge requests](../../ci/pipelines/merge_request_pipelines.md)
+
+## Troubleshooting review apps
+
+### Review app returns a 404 error
+
+If the review app URL returns a 404 error, either the site is not
+yet deployed, or something went wrong with the remote pipeline. You can:
+
+- Wait a few minutes and it should appear online.
+- Check the manual job's log and verify the URL. If the URL is different, try the
+ one from the job log.
+- Check the status of the remote pipeline from the link in the merge request's job output.
+ If the pipeline failed or got stuck, GitLab team members can ask for help in the `#docs`
+ chat channel. Contributors can ping a technical writer in the merge request.
+
+### Not enough disk space
+
+Sometimes the review app server is full and there is no more disk space. Each review
+app takes about 570MB of disk space.
+
+A cron job to remove review apps older than 20 days runs hourly,
+but the disk space still occasionally fills up. To manually free up more space,
+a GitLab technical writing team member can:
+
+1. Navigate to the [`gitlab-docs` schedules page](https://gitlab.com/gitlab-org/gitlab-docs/-/pipeline_schedules).
+1. Select the play button for the `Remove old review apps from review app server`
+ schedule. By default, this cleans up review apps older than 14 days.
+1. Navigate to the [pipelines page](https://gitlab.com/gitlab-org/gitlab-docs/-/pipelines)
+ and start the manual job called `clean-pages`.
+
+If the job says no review apps were found in that period, edit the `CLEAN_REVIEW_APPS_DAYS`
+variable in the schedule, and repeat the process above. Gradually decrease the variable
+until the free disk space reaches an acceptable amount (for example, 3GB).
+Remember to set it to 14 again when you're done.
+
+There's an issue to [migrate from the DigitalOcean server to GCP buckets](https://gitlab.com/gitlab-org/gitlab-docs/-/issues/735)),
+which should solve the disk space problem.
diff --git a/doc/development/documentation/site_architecture/index.md b/doc/development/documentation/site_architecture/index.md
index 046de5c6d86..cd69154217c 100644
--- a/doc/development/documentation/site_architecture/index.md
+++ b/doc/development/documentation/site_architecture/index.md
@@ -33,7 +33,6 @@ from where content is sourced, the `gitlab-docs` project, and the published outp
D --> E
E -- Build pipeline --> F
F[docs.gitlab.com]
- G[/ce/]
H[/ee/]
I[/runner/]
J[/omnibus/]
@@ -42,7 +41,6 @@ from where content is sourced, the `gitlab-docs` project, and the published outp
F --> I
F --> J
F --> K
- H -- symlink --> G
```
GitLab docs content isn't kept in the `gitlab-docs` repository.
@@ -54,15 +52,6 @@ product, and all together are pulled to generate the docs website:
- [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/-/tree/main/docs)
- [GitLab Chart](https://gitlab.com/charts/gitlab/tree/master/doc)
-NOTE:
-In September 2019, we [moved towards a single codebase](https://gitlab.com/gitlab-org/gitlab/-/issues/2952),
-as such the docs for CE and EE are now identical. For historical reasons and
-in order not to break any existing links throughout the internet, we still
-maintain the CE docs (`https://docs.gitlab.com/ce/`), although it is hidden
-from the website, and is now a symlink to the EE docs. When
-[Support wildcard redirects](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/500) is resolved,
-we can remove this completely.
-
## Assets
To provide an optimized site structure, design, and a search-engine friendly
diff --git a/doc/development/documentation/styleguide/index.md b/doc/development/documentation/styleguide/index.md
index 4e548179b9e..2cbecc91b20 100644
--- a/doc/development/documentation/styleguide/index.md
+++ b/doc/development/documentation/styleguide/index.md
@@ -420,6 +420,11 @@ Some contractions, however, should be avoided:
| Requests to localhost are not allowed. | Requests to localhost aren't allowed. |
| Specified URL cannot be used. | Specified URL can't be used. |
+### Acronyms
+
+If you use an acronym, spell it out on first use on a page. You do not need to spell it out more than once on a page.
+When possible, try to avoid acronyms in headings.
+
## Text
- [Write in Markdown](#markdown).
@@ -438,8 +443,21 @@ Some contractions, however, should be avoided:
- List item 2
```
+### Comments
+
+To embed comments within Markdown, use standard HTML comments that are not rendered
+when published. Example:
+
+```html
+<!-- This is a comment that is not rendered -->
+```
+
### Emphasis
+Use **bold** rather than italic to provide emphasis. GitLab uses a sans-serif font and italic text does not stand out as much as it would in a serif font. For details, see [Butterick's Practical Typography guide on bold or italic](https://practicaltypography.com/bold-or-italic.html).
+
+You can use italics when you are introducing a term for the first time. Otherwise, use bold.
+
- Use double asterisks (`**`) to mark a word or text in bold (`**bold**`).
- Use underscore (`_`) for text in italics (`_italic_`).
- Use greater than (`>`) for blockquotes.
@@ -460,6 +478,7 @@ Follow these guidelines for punctuation:
| Use serial commas (Oxford commas) before the final **and** or **or** in a list of three or more items. (Tested in [`OxfordComma.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/OxfordComma.yml).) | You can create new issues, merge requests, and milestones. |
| Always add a space before and after dashes when using it in a sentence (for replacing a comma, for example). | You should try this - or not. |
| When a colon is part of a sentence, always use lowercase after the colon. | Linked issues: a way to create a relationship between issues. |
+| Do not use typographer's quotes. Use straight quotes instead. (Tested in [`NonStandardQuotes.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/NonStandardQuotes.yml).) | "It's the questions we can't answer that teach us the most"---Patrick Rothfuss |
<!-- vale gitlab.Repetition = YES -->
@@ -751,6 +770,7 @@ Valid for Markdown content only, not for front matter entries:
For other punctuation rules, refer to the
[Pajamas Design System Punctuation section](https://design.gitlab.com/content/punctuation/).
+This is overridden by the [documentation-specific punctuation rules](#punctuation).
## Headings
@@ -1003,9 +1023,23 @@ document to ensure it links to the most recent version of the file.
## Navigation
-When documenting navigation through the user interface, use these terms and styles.
+When documenting how to navigate through the GitLab UI:
+
+- Always use location, then action.
+ - `From the **Visibility** list,` (location) `select **Public**.` (action)
+- Be brief and specific. For example:
+ - Avoid: `Select **Save** for the changes to take effect.`
+ - Use instead: `Select **Save**.`
+- When selecting from high-level UI elements, use the word **on**.
+ - Avoid: `From the left sidebar...` or `In the left sidebar...`
+ - Use instead: `On the left sidebar...`
+- If a step must include a reason, start the step with it.
+ - Avoid: `Select the link in the merge request to view the changes.`
+ - Use instead: `To view the changes, select the link in the merge request.`
+- If a step is optional, start the step with the word `Optional` followed by a period.
+ - `1. Optional. Enter a name for the dog.`
-### What to call the menus
+### Names for menus
Use these terms when referring to the main GitLab user interface
elements:
@@ -1017,9 +1051,14 @@ elements:
- **Right sidebar**: This is the navigation sidebar on the right of the user
interface, specific to the open issue, merge request, or epic.
-### How to document the menus
+### Names for UI elements
-To be consistent, use this format when you write about UI navigation.
+UI elements, like button and checkbox names, should be **bold**.
+Guidance for each individual UI element is in [the word list](word_list.md).
+
+### How to write navigation task steps
+
+To be consistent, use this format when you write navigation steps in a task topic.
1. On the top bar, select **Menu > Projects** and find your project.
1. On the left sidebar, select **Settings > CI/CD**.
@@ -1034,20 +1073,27 @@ Another example:
An Admin Area example:
```markdown
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the top bar, select **Menu > Admin**.
```
-This text renders this output:
+To select your avatar:
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
+```markdown
+1. On the top bar, in the top right corner, select your avatar.
+```
## Images
Images, including screenshots, can help a reader better understand a concept.
-However, they can be hard to maintain, and should be used sparingly.
+However, they should be used sparingly because:
-Before including an image in the documentation, ensure it provides value to the
-reader.
+- They tend to become out-of-date.
+- They are difficult and expensive to localize.
+- They cannot be read by screen readers.
+
+If you do include an image in the documentation, ensure it provides value.
+Don't use `lorem ipsum` text. Try to replicate how the feature would be
+used in a real-world scenario, and [use realistic text](#fake-user-information).
### Capture the image
@@ -1106,7 +1152,7 @@ known tool is [`pngquant`](https://pngquant.org/), which is cross-platform and
open source. Install it by visiting the official website and following the
instructions for your OS.
-GitLab has a [Rake task](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/tasks/pngquant.rake)
+GitLab has a [Ruby script](https://gitlab.com/gitlab-org/gitlab/-/blob/master/bin/pngquant)
that you can use to automate the process. In the root directory of your local
copy of `https://gitlab.com/gitlab-org/gitlab`, run in a terminal:
@@ -1114,19 +1160,26 @@ copy of `https://gitlab.com/gitlab-org/gitlab`, run in a terminal:
been compressed:
```shell
- bundle exec rake pngquant:lint
+ bin/pngquant lint
```
- Compress all documentation PNG images using `pngquant`:
```shell
- bundle exec rake pngquant:compress
+ bin/pngquant compress
+ ```
+
+- Compress specific files:
+
+ ```shell
+ bin/pngquant compress doc/user/img/award_emoji_select.png doc/user/img/markdown_logo.png
```
-The only caveat is that the task runs on all images under `doc/`, not only the
-ones you might have included in a merge request. In that case, you can run the
-compress task and only commit the images that are relevant to your merge
-request.
+- Compress all PNG files in a specific directory:
+
+ ```shell
+ bin/pngquant compress doc/user/img
+ ```
## Videos
@@ -1288,64 +1341,22 @@ For a complete reference on code blocks, see the [Kramdown guide](https://about.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-docs/-/issues/384) in GitLab 12.7.
You can use icons from the [GitLab SVG library](https://gitlab-org.gitlab.io/gitlab-svgs/)
-directly in the documentation.
-
-This way, you can achieve a consistent look when writing about interacting with
-GitLab user interface elements.
-
-Usage examples:
-
-- Icon with default size (16px): `**{icon-name}**`
+directly in the documentation. For example, `**{tanuki}**` renders as: **{tanuki}**.
- Example: `**{tanuki}**` renders as: **{tanuki}**.
-- Icon with custom size: `**{icon-name, size}**`
+In most cases, you should avoid using the icons in text.
+However, you can use an icon when hover text is the only
+available way to describe a UI element. For example, **Delete** or **Edit** buttons
+often have hover text only.
- Available sizes (in pixels): 8, 10, 12, 14, 16, 18, 24, 32, 48, and 72
+When you do use an icon, start with the hover text and follow it with the SVG reference in parentheses.
- Example: `**{tanuki, 24}**` renders as: **{tanuki, 24}**.
-- Icon with custom size and class: `**{icon-name, size, class-name}**`.
+- Avoid: `Select **{pencil}** **Edit**.` This generates as: Select **{pencil}** **Edit**.
+- Use instead: `Select **Edit** (**{pencil}**).` This generates as: Select **Edit** (**{pencil}**).
- You can access any class available to this element in GitLab documentation CSS.
+Do not use words to describe the icon:
- Example with `float-right`, a
- [Bootstrap utility class](https://getbootstrap.com/docs/4.4/utilities/float/):
- `**{tanuki, 32, float-right}**` renders as: **{tanuki, 32, float-right}**
-
-### When to use icons
-
-Icons should be used sparingly, and only in ways that aid and do not hinder the
-readability of the text.
-
-For example, this Markdown adds little to the accompanying text:
-
-```markdown
-1. Go to **{home}** **Project information > Details**.
-```
-
-1. Go to **{home}** **Project information > Details**.
-
-However, these tables might help the reader connect the text to the user
-interface:
-
-```markdown
-| Section | Description |
-|:-------------------------|:----------------------------------------------------------------------------------------------------------------------------|
-| **{overview}** Overview | View your GitLab Dashboard, and administer projects, users, groups, jobs, runners, and Gitaly servers. |
-| **{monitor}** Monitoring | View GitLab system information, and information on background jobs, logs, health checks, requests profiles, and audit events. |
-| **{messages}** Messages | Send and manage broadcast messages for your users. |
-```
-
-| Section | Description |
-|:-------------------------|:----------------------------------------------------------------------------------------------------------------------------|
-| **{overview}** Overview | View your GitLab Dashboard, and administer projects, users, groups, jobs, runners, and Gitaly servers. |
-| **{monitor}** Monitoring | View GitLab system information, and information on background jobs, logs, health checks, requests profiles, and audit events. |
-| **{messages}** Messages | Send and manage broadcast messages for your users. |
-
-Use an icon when you find yourself having to describe an interface element. For
-example:
-
-- Do: Select the Admin Area icon ( **{admin}** ).
-- Don't: Select the Admin Area icon (the wrench icon).
+- Avoid: `Select **Erase job log** (the trash icon).`
+- Use instead: `Select **Erase job log** (**{remove}**).` This generates as: Select **Erase job log** (**{remove}**).
## Alert boxes
@@ -1456,27 +1467,9 @@ Follow these styles when you're describing user interface elements in an
application:
- For elements with a visible label, use that label in bold with matching case.
- For example, `the **Cancel** button`.
+ For example, `Select **Cancel**`.
- For elements with a tooltip or hover label, use that label in bold with
- matching case. For example, `the **Add status emoji** button`.
-
-### Verbs for UI elements
-
-Use these verbs for specific uses with user interface
-elements:
-
-| Recommended | Used for | Replaces |
-|:--------------------|:--------------------------------------|:----------------------|
-| select | buttons, links, menu items, dropdowns | click, press, hit |
-| select or clear | checkboxes | enable, click, press |
-| expand | expandable sections | open |
-| turn on or turn off | toggles | flip, enable, disable |
-
-### Other Verbs
-
-| Recommended | Used for | Replaces |
-|:------------|:--------------------------------|:----------------------|
-| go to | making a browser go to location | navigate to, open |
+ matching case. For example, `Select **Add status emoji**`.
## GitLab versions
@@ -1504,10 +1497,6 @@ tagged and released set of documentation for your installed version:
When a feature is added or updated, you can include its version information
either as a **Version history** item or as an inline text reference.
-Version text shouldn't include information about the tier in which the feature
-is available. This information is provided by the [product badge](#product-tier-badges)
-displayed for the page or feature.
-
#### Version text in the **Version History**
If all content in a section is related, add version text after the header for
@@ -1523,6 +1512,10 @@ the section. The version information must:
- Whenever possible, include a link to the completed issue, merge request, or epic
that introduced the feature. An issue is preferred over a merge request, and
a merge request is preferred over an epic.
+- Do not include information about the tier, unless documenting a tier change
+ (for example, `Feature X [moved](issue-link) to Premium in GitLab 19.2`).
+- Do not link to the pricing page.
+ The tier is provided by the [product badge](#product-tier-badges) on the heading.
```markdown
## Feature name
@@ -1647,37 +1640,24 @@ When names change, it is more complicated to search or grep text that has line b
### Product tier badges
-Tier badges are displayed as orange text next to a heading. For example:
+Tier badges are displayed as orange text next to a heading. These badges link to the GitLab
+pricing page. For example:
![Tier badge](img/tier_badge.png)
You must assign a tier badge:
-- To [all H1 topic headings](#product-tier-badges-on-headings).
+- To all H1 topic headings.
- To topic headings that don't apply to the same tier as the H1.
-- To [sections of a topic](#product-tier-badges-on-other-content),
- if they apply to a tier other than what applies to the H1.
-
-#### Product tier badges on headings
-To add a tier badge to a heading, add the relevant [tier badge](#available-product-tier-badges)
+To add a tier badge to a heading, add the relevant tier badge
after the heading text. For example:
```markdown
# Heading title **(FREE)**
```
-#### Product tier badges on other content
-
-In paragraphs, list names, and table cells, an information icon displays when you
-add a tier badge. More verbose information displays when a user points to the icon:
-
-- `**(FREE)**` displays as **(FREE)**
-- `**(FREE SELF)**` displays as **(FREE SELF)**
-- `**(FREE SAAS)**` displays as **(FREE SAAS)**
-
-The `**(FREE)**` generates a `span` element to trigger the
-badges and tooltips (`<span class="badge-trigger free">`).
+Do not add tier badges inline with other text. The single source of truth for a feature should be the heading where the functionality is described.
#### Available product tier badges
diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md
index 9e921bb30f0..eafe0e7a1c2 100644
--- a/doc/development/documentation/styleguide/word_list.md
+++ b/doc/development/documentation/styleguide/word_list.md
@@ -17,15 +17,17 @@ For guidance not on this page, we defer to these style guides:
<!-- vale off -->
<!-- markdownlint-disable -->
-## @mention
+## `@mention`
-Try to avoid. Say "mention" instead, and consider linking to the
+Try to avoid **`@mention`**. Say **mention** instead, and consider linking to the
[mentions topic](../../../user/project/issues/issue_data_and_actions.md#mentions).
-Don't use `code formatting`.
+Don't use backticks.
## above
-Try to avoid extra words when referring to an example or table in a documentation page, but if required, use **previously** instead.
+Try to avoid using **above** when referring to an example or table in a documentation page. If required, use **previous** instead. For example:
+
+- In the previous example, the dog had fleas.
## admin, admin area
@@ -33,55 +35,111 @@ Use **administration**, **administrator**, **administer**, or **Admin Area** ins
## allow, enable
-Try to avoid, unless you are talking about security-related features. For example:
+Try to avoid **allow** and **enable**, unless you are talking about security-related features. For example:
-- Avoid: This feature allows you to create a pipeline.
-- Use instead: Use this feature to create a pipeline.
+- Do: Use this feature to create a pipeline.
+- Do not: This feature allows you to create a pipeline.
This phrasing is more active and is from the user perspective, rather than the person who implemented the feature.
[View details in the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/allow-allows).
## Alpha
-Uppercase. For example: **The XYZ feature is in Alpha.** or **This Alpha release is ready to test.**
+Use uppercase for **Alpha**. For example: **The XYZ feature is in Alpha.** or **This Alpha release is ready to test.**
You might also want to link to [this section](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga)
in the handbook when writing about Alpha features.
## and/or
-Instead of **and/or**, use or or rewrite the sentence to spell out both options.
+Instead of **and/or**, use **or** or rewrite the sentence to spell out both options.
+
+## area
+
+Use [**section**](#section) instead of **area**. The only exception is [the Admin Area](#admin-admin-area).
## below
-Try to avoid extra words when referring to an example or table in a documentation page, but if required, use **following** instead.
+Try to avoid **below** when referring to an example or table in a documentation page. If required, use **following** instead. For example:
+
+- In the following example, the dog has fleas.
## Beta
-Uppercase. For example: **The XYZ feature is in Beta.** or **This Beta release is ready to test.**
+Use uppercase for **Beta**. For example: **The XYZ feature is in Beta.** or **This Beta release is ready to test.**
You might also want to link to [this section](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga)
in the handbook when writing about Beta features.
## blacklist
-Do not use. Another option is **denylist**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
+Do not use **blacklist**. Another option is **denylist**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
## board
Use lowercase for **boards**, **issue boards**, and **epic boards**.
+## box
+
+Use **text box** to refer to the UI field. Do not use **field** or **box**. For example:
+
+- In the **Variable name** text box, enter `my text`.
+
+## button
+
+Don't use a descriptor with **button**.
+
+- Do: Select **Run pipelines**.
+- Do not: Select the **Run pipelines** button.
+
+## cannot, can not
+
+Use **cannot** instead of **can not**. You can also use **can't**.
+
+See also [contractions](index.md#contractions).
+
## checkbox
-One word, **checkbox**. Do not use **check box**.
+Use one word for **checkbox**. Do not use **check box**.
+
+You **select** (not **check** or **enable**) and **clear** (not **deselect** or **disable**) checkboxes.
+For example:
+
+- Select the **Protect environment** checkbox.
+- Clear the **Protect environment** checkbox.
+
+If you must refer to the checkbox, you can say it is selected or cleared. For example:
+
+- Ensure the **Protect environment** checkbox is cleared.
+- Ensure the **Protect environment** checkbox is selected.
## CI/CD
-Always uppercase. No need to spell out on first use.
+CI/CD is always uppercase. No need to spell it out on first use.
+
+## click
+
+Do not use **click**. Instead, use **select** with buttons, links, menu items, and lists.
+**Select** applies to more devices, while **click** is more specific to a mouse.
+
+## collapse
+
+Use **collapse** instead of **close** when you are talking about expanding or collapsing a section in the UI.
+
+## confirmation dialog
+
+Use **confirmation dialog** to describe the dialog box that asks you to confirm your action. For example:
+
+- On the confirmation dialog, select **OK**.
## currently
-Do not use when talking about the product or its features. The documentation describes the product as it is today. ([Vale](../testing.md#vale) rule: [`CurrentStatus.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/CurrentStatus.yml))
+Do not use **currently** when talking about the product or its features. The documentation describes the product as it is today.
+([Vale](../testing.md#vale) rule: [`CurrentStatus.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/CurrentStatus.yml))
+
+## deploy board
+
+Use lowercase for **deploy board**.
## Developer
@@ -92,26 +150,35 @@ When writing about the Developer role:
- Do not use the phrase, **if you are a developer** to mean someone who is assigned the Developer
role. Instead, write it out. For example, **if you are assigned the Developer role**.
- To describe a situation where the Developer role is the minimum required:
- - Avoid: **the Developer role or higher**
- - Use instead: **at least the Developer role**
+ - Avoid: the Developer role or higher
+ - Use instead: at least the Developer role
Do not use **Developer permissions**. A user who is assigned the Developer role has a set of associated permissions.
## disable
-See [the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/disable-disabled) for guidance.
+See [the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/disable-disabled) for guidance on **disable**.
Use **inactive** or **off** instead. ([Vale](../testing.md#vale) rule: [`InclusionAbleism.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionAbleism.yml))
+## dropdown list
+
+Use **dropdown list** to refer to the UI element. Do not use **dropdown** without **list** after it.
+Do not use **drop-down** (hyphenated), **dropdown menu**, or other variants.
+
+For example:
+
+- From the **Visibility** dropdown list, select **Public**.
+
## earlier
-Use when talking about version numbers.
+Use **earlier** when talking about version numbers.
-- Avoid: In GitLab 14.1 and lower.
-- Use instead: In GitLab 14.1 and earlier.
+- Do: In GitLab 14.1 and earlier.
+- Do not: In GitLab 14.1 and lower.
## easily
-Do not use. If the user doesn't find the process to be easy, we lose their trust.
+Do not use **easily**. If the user doesn't find the process to be easy, we lose their trust.
## e.g.
@@ -119,60 +186,75 @@ Do not use Latin abbreviations. Use **for example**, **such as**, **for instance
## email
-Do not use **e-mail** with a hyphen. When plural, use **emails** or **email messages**.
+Do not use **e-mail** with a hyphen. When plural, use **emails** or **email messages**. ([Vale](../testing.md#vale) rule: [`SubstitutionSuggestions.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/SubstitutionSuggestions.yml))
## enable
-See [the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/e/enable-enables) for guidance.
+See [the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/e/enable-enables) for guidance on **enable**.
Use **active** or **on** instead. ([Vale](../testing.md#vale) rule: [`InclusionAbleism.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionAbleism.yml))
+## enter
+
+Use **enter** instead of **type** when talking about putting values into text boxes.
+
## epic
-Lowercase.
+Use lowercase for **epic**.
## epic board
-Lowercase.
+Use lowercase for **epic board**.
## etc.
-Try to avoid. Be as specific as you can. Do not use **and so on** as a replacement.
+Try to avoid **etc.**. Be as specific as you can. Do not use **and so on** as a replacement.
-- Avoid: You can update objects, like merge requests, issues, etc.
-- Use instead: You can update objects, like merge requests and issues.
+- Do: You can update objects, like merge requests and issues.
+- Do not: You can update objects, like merge requests, issues, etc.
+
+## expand
+
+Use **expand** instead of **open** when you are talking about expanding or collapsing a section in the UI.
+
+## field
+
+Use **box** instead of **field** or **text box**.
+
+- Avoid: In the **Variable name** field, enter `my text`.
+- Use instead: In the **Variable name** box, enter `my text`.
## foo
-Do not use in product documentation. You can use it in our API and contributor documentation, but try to use a clearer and more meaningful example instead.
+Do not use **foo** in product documentation. You can use it in our API and contributor documentation, but try to use a clearer and more meaningful example instead.
## future tense
-When possible, use present tense instead. For example, use `after you execute this command, GitLab displays the result` instead of `after you execute this command, GitLab will display the result`. ([Vale](../testing.md#vale) rule: [`FutureTense.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/FutureTense.yml))
+When possible, use present tense instead of future tense. For example, use **after you execute this command, GitLab displays the result** instead of **after you execute this command, GitLab will display the result**. ([Vale](../testing.md#vale) rule: [`FutureTense.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/FutureTense.yml))
## Geo
-Title case.
+Use title case for **Geo**.
## GitLab
-Do not make possessive (GitLab's). This guidance follows [GitLab Trademark Guidelines](https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/trademark-guidelines/).
+Do not make **GitLab** possessive (GitLab's). This guidance follows [GitLab Trademark Guidelines](https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/trademark-guidelines/).
## GitLab.com
-Refers to the GitLab instance managed by GitLab itself.
+**GitLab.com** refers to the GitLab instance managed by GitLab itself.
## GitLab SaaS
-Refers to the product license that provides access to GitLab.com. Does not refer to the
+**GitLab SaaS** refers to the product license that provides access to GitLab.com. It does not refer to the
GitLab instance managed by GitLab itself.
## GitLab Runner
-Title case. This is the product you install. See also [runners](#runner-runners) and [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/233529).
+Use title case for **GitLab Runner**. This is the product you install. See also [runners](#runner-runners) and [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/233529).
## GitLab self-managed
-Refers to the product license for GitLab instances managed by customers themselves.
+Use **GitLab self-managed** to refer to the product license for GitLab instances managed by customers themselves.
## Guest
@@ -183,25 +265,32 @@ When writing about the Guest role:
- Do not use the phrase, **if you are a guest** to mean someone who is assigned the Guest
role. Instead, write it out. For example, **if you are assigned the Guest role**.
- To describe a situation where the Guest role is the minimum required:
- - Avoid: **the Guest role or higher**
- - Use instead: **at least the Guest role**
+ - Avoid: the Guest role or higher
+ - Use instead: at least the Guest role
Do not use **Guest permissions**. A user who is assigned the Guest role has a set of associated permissions.
## handy
-Do not use. If the user doesn't find the feature or process to be handy, we lose their trust.
+Do not use **handy**. If the user doesn't find the feature or process to be handy, we lose their trust. ([Vale](../testing.md#vale) rule: [`Simplicity.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/Simplicity.yml))
## high availability, HA
-Do not use. Instead, direct readers to the GitLab [reference architectures](../../../administration/reference_architectures/index.md) for information about configuring GitLab for handling greater amounts of users.
+Do not use **high availability** or **HA**. Instead, direct readers to the GitLab [reference architectures](../../../administration/reference_architectures/index.md) for information about configuring GitLab for handling greater amounts of users.
## higher
-Do not use when talking about version numbers.
+Do not use **higher** when talking about version numbers.
-- Avoid: In GitLab 14.1 and higher.
-- Use instead: In GitLab 14.1 and later.
+- Do: In GitLab 14.1 and later.
+- Do not: In GitLab 14.1 and higher.
+
+## hit
+
+Don't use **hit** to mean **press**.
+
+- Avoid: Hit the **ENTER** button.
+- Use instead: Press **ENTER**.
## I
@@ -213,19 +302,19 @@ Do not use Latin abbreviations. Use **that is** instead. ([Vale](../testing.md#v
## in order to
-Do not use. Use **to** instead. ([Vale](../testing.md#vale) rule: [`Wordy.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/Wordy.yml))
+Do not use **in order to**. Use **to** instead. ([Vale](../testing.md#vale) rule: [`Wordy.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/Wordy.yml))
## issue
-Lowercase.
+Use lowercase for **issue**.
## issue board
-Lowercase.
+Use lowercase for **issue board**.
## issue weights
-Lowercase.
+Use lowercase for **issue weights**.
## job
@@ -235,21 +324,26 @@ If you want to use **CI** with the word **job**, use **CI/CD job** rather than *
## later
-Use when talking about version numbers.
+Use **later** when talking about version numbers.
- Avoid: In GitLab 14.1 and higher.
- Use instead: In GitLab 14.1 and later.
+## list
+
+Do not use **list** when referring to a [**dropdown list**](#dropdown-list).
+Use the full phrase **dropdown list** instead.
+
## log in, log on
-Do not use. Use [sign in](#sign-in) instead. If the user interface has **Log in**, you can use it.
+Do not use **log in** or **log on**. Use [sign in](#sign-in) instead. If the user interface has **Log in**, you can use it.
## lower
-Do not use when talking about version numbers.
+Do not use **lower** when talking about version numbers.
-- Avoid: In GitLab 14.1 and lower.
-- Use instead: In GitLab 14.1 and earlier.
+- Do: In GitLab 14.1 and earlier.
+- Do not: In GitLab 14.1 and lower.
## Maintainer
@@ -260,22 +354,22 @@ When writing about the Maintainer role:
- Do not use the phrase, **if you are a maintainer** to mean someone who is assigned the Maintainer
role. Instead, write it out. For example, **if you are assigned the Maintainer role**.
- To describe a situation where the Maintainer role is the minimum required:
- - Avoid: **the Maintainer role or higher**
- - Use instead: **at least the Maintainer role**
+ - Avoid: the Maintainer role or higher
+ - Use instead: at least the Maintainer role
Do not use **Maintainer permissions**. A user who is assigned the Maintainer role has a set of associated permissions.
## mankind
-Do not use. Use **people** or **humanity** instead. ([Vale](../testing.md#vale) rule: [`InclusionGender.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionGender.yml))
+Do not use **mankind**. Use **people** or **humanity** instead. ([Vale](../testing.md#vale) rule: [`InclusionGender.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionGender.yml))
## manpower
-Do not use. Use words like **workforce** or **GitLab team members**. ([Vale](../testing.md#vale) rule: [`InclusionGender.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionGender.yml))
+Do not use **manpower**. Use words like **workforce** or **GitLab team members**. ([Vale](../testing.md#vale) rule: [`InclusionGender.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionGender.yml))
## master
-Do not use. Options are **primary** or **main**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
+Do not use **master**. Options are **primary** or **main**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
## may, might
@@ -287,18 +381,25 @@ Do not use first-person singular. Use **you**, **we**, or **us** instead. ([Vale
## merge requests
-Lowercase. If you use **MR** as the acronym, spell it out on first use.
+Use lowercase for **merge requests**. If you use **MR** as the acronym, spell it out on first use.
## milestones
-Lowercase.
+Use lowercase for **milestones**.
+
+## navigate
+
+Do not use **navigate**. Use **go** instead. For example:
+
+- Go to this webpage.
+- Open a terminal and go to the `runner` directory.
## need to, should
-Try to avoid. If something is required, use **must**.
+Try to avoid **needs to**, because it's wordy. Avoid **should** when you can be more specific. If something is required, use **must**.
-- Avoid: You need to set the variable.
-- Use instead: You must set the variable. Or: Set the variable.
+- Do: You must set the variable. Or: Set the variable.
+- Do not: You need to set the variable.
**Should** is acceptable for recommended actions or items, or in cases where an event may not
happen. For example:
@@ -310,10 +411,10 @@ happen. For example:
## note that
-Do not use.
+Do not use **note that** because it's wordy.
-- Avoid: Note that you can change the settings.
-- Use instead: You can change the settings.
+- Do: You can change the settings.
+- Do not: Note that you can change the settings.
## Owner
@@ -328,15 +429,21 @@ Do not use **Owner permissions**. A user who is assigned the Owner role has a se
## permissions
-Do not use roles and permissions interchangeably. Each user is assigned a role. Each role includes a set of permissions.
+Do not use **roles** and **permissions** interchangeably. Each user is assigned a role. Each role includes a set of permissions.
## please
-Do not use. For details, see the [Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/please).
+Do not use **please**. For details, see the [Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/p/please).
+
+## press
+
+Use **press** when talking about keyboard keys. For example:
+
+- To stop the command, press <kbd>Control</kbd>+<kbd>C</kbd>.
## profanity
-Do not use. Doing so may negatively affect other users and contributors, which is contrary to the GitLab value of [Diversity, Inclusion, and Belonging](https://about.gitlab.com/handbook/values/#diversity-inclusion).
+Do not use profanity. Doing so may negatively affect other users and contributors, which is contrary to the GitLab value of [Diversity, Inclusion, and Belonging](https://about.gitlab.com/handbook/values/#diversity-inclusion).
## Reporter
@@ -347,30 +454,48 @@ When writing about the Reporter role:
- Do not use the phrase, **if you are a reporter** to mean someone who is assigned the Reporter
role. Instead, write it out. For example, **if you are assigned the Reporter role**.
- To describe a situation where the Reporter role is the minimum required:
- - Avoid: **the Reporter role or higher**
- - Use instead: **at least the Reporter role**
+ - Avoid: the Reporter role or higher
+ - Use instead: at least the Reporter role
Do not use **Reporter permissions**. A user who is assigned the Reporter role has a set of associated permissions.
## Repository Mirroring
-Title case.
+Use title case for **Repository Mirroring**.
## roles
-Do not use roles and permissions interchangeably. Each user is assigned a role. Each role includes a set of permissions.
+Do not use **roles** and **permissions** interchangeably. Each user is assigned a role. Each role includes a set of permissions.
## runner, runners
-Lowercase. These are the agents that run CI/CD jobs. See also [GitLab Runner](#gitlab-runner) and [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/233529).
+Use lowercase for **runners**. These are the agents that run CI/CD jobs. See also [GitLab Runner](#gitlab-runner) and [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/233529).
## sanity check
-Do not use. Use **check for completeness** instead. ([Vale](../testing.md#vale) rule: [`InclusionAbleism.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionAbleism.yml))
+Do not use **sanity check**. Use **check for completeness** instead. ([Vale](../testing.md#vale) rule: [`InclusionAbleism.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionAbleism.yml))
## scalability
-Do not use when talking about increasing GitLab performance for additional users. The words scale or scaling are sometimes acceptable, but references to increasing GitLab performance for additional users should direct readers to the GitLab [reference architectures](../../../administration/reference_architectures/index.md) page.
+Do not use **scalability** when talking about increasing GitLab performance for additional users. The words scale or scaling
+are sometimes acceptable, but references to increasing GitLab performance for additional users should direct readers
+to the GitLab [reference architectures](../../../administration/reference_architectures/index.md) page.
+
+## section
+
+Use **section** to describe an area on a page. For example, if a page has lines that separate the UI
+into separate areas, refer to these areas as sections.
+
+We often think of expandable/collapsible areas as **sections**. When you refer to expanding
+or collapsing a section, don't include the word **section**.
+
+- Do: Expand **Auto DevOps**.
+- Do not: Expand the **Auto DevOps** section.
+
+## select
+
+Use **select** with buttons, links, menu items, and lists. **Select** applies to more devices,
+while **click** is more specific to a mouse.
## setup, set up
@@ -381,13 +506,13 @@ Use **setup** as a noun, and **set up** as a verb. For example:
## sign in
-Use instead of **sign on** or **log on** or **log in**. If the user interface has different words, use those.
+Use **sign in** instead of **sign on** or **log on** or **log in**. If the user interface has different words, use those.
You can use **single sign-on**.
## simply, simple
-Do not use. If the user doesn't find the process to be simple, we lose their trust.
+Do not use **simply** or **simple**. If the user doesn't find the process to be simple, we lose their trust. ([Vale](../testing.md#vale) rule: [`Simplicity.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/Simplicity.yml))
## slashes
@@ -395,34 +520,38 @@ Instead of **and/or**, use **or** or re-write the sentence. This rule also appli
## slave
-Do not use. Another option is **secondary**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
+Do not use **slave**. Another option is **secondary**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
## subgroup
-Use instead of **sub-group**.
+Use **subgroup** (no hyphen) instead of **sub-group**. ([Vale](../testing.md#vale) rule: [`SubstitutionSuggestions.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/SubstitutionSuggestions.yml))
## that
-Do not use when describing a noun. For example:
+Do not use **that** when describing a noun. For example:
-- Avoid: The file **that** you save...
-- Use instead: The file you save...
+- Do: The file you save...
+- Do not: The file **that** you save...
See also [this, these, that, those](#this-these-that-those).
## terminal
-Lowercase. For example:
+Use lowercase for **terminal**. For example:
- Open a terminal.
- From a terminal, run the `docker login` command.
+## text box
+
+Use **text box** instead of **field** or **box** when referring to the UI element.
+
## there is, there are
-Try to avoid. These phrases hide the subject.
+Try to avoid **there is** and **there are**. These phrases hide the subject.
-- Avoid: There are holes in the bucket.
-- Use instead: The bucket has holes.
+- Do: The bucket has holes.
+- Do not: There are holes in the bucket.
## they
@@ -434,37 +563,48 @@ a gender-neutral pronoun.
Always follow these words with a noun. For example:
-- Avoid: **This** improves performance.
-- Use instead: **This setting** improves performance.
+- Do: **This setting** improves performance.
+- Do not: **This** improves performance.
-- Avoid: **These** are the best.
-- Use instead: **These pants** are the best.
+- Do: **These pants** are the best.
+- Do not: **These** are the best.
-- Avoid: **That** is the one you are looking for.
-- Use instead: **That Jedi** is the one you are looking for.
+- Do: **That droid** is the one you are looking for.
+- Do not: **That** is the one you are looking for.
-- Avoid: **Those** need to be configured.
-- Use instead: **Those settings** need to be configured. (Or even better, **Configure those settings.**)
+- Do: **Those settings** need to be configured. (Or even better, **Configure those settings.**)
+- Do not: **Those** need to be configured.
## to-do item
-Use lowercase. ([Vale](../testing.md#vale) rule: [`ToDo.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ToDo.yml))
+Use lowercase and hyphenate **to-do** item. ([Vale](../testing.md#vale) rule: [`ToDo.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ToDo.yml))
## To-Do List
-Use title case. ([Vale](../testing.md#vale) rule: [`ToDo.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ToDo.yml))
+Use title case for **To-Do List**. ([Vale](../testing.md#vale) rule: [`ToDo.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ToDo.yml))
+
+## toggle
+
+You **turn on** or **turn off** a toggle. For example:
+
+- Turn on the **blah** toggle.
+
+## type
+
+Do not use **type** if you can avoid it. Use **enter** instead.
## useful
-Do not use. If the user doesn't find the process to be useful, we lose their trust.
+Do not use **useful**. If the user doesn't find the process to be useful, we lose their trust. ([Vale](../testing.md#vale) rule: [`Simplicity.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/Simplicity.yml))
## utilize
-Do not use. Use **use** instead. It's more succinct and easier for non-native English speakers to understand.
+Do not use **utilize**. Use **use** instead. It's more succinct and easier for non-native English speakers to understand.
+([Vale](../testing.md#vale) rule: [`SubstitutionSuggestions.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/SubstitutionSuggestions.yml))
## Value Stream Analytics
-Title case.
+Use title case for **Value Stream Analytics**.
## via
@@ -474,14 +614,14 @@ Do not use Latin abbreviations. Use **with**, **through**, or **by using** inste
Try to avoid **we** and focus instead on how the user can accomplish something in GitLab.
-- Avoid: We created a feature for you to add widgets.
-- Instead, use: Use widgets when you have work you want to organize.
+- Do: Use widgets when you have work you want to organize.
+- Do not: We created a feature for you to add widgets.
-One exception: You can use **we recommend** instead of **it is recommended** or **GitLab recommends**.
+One exception: You can use **we recommend** instead of **it is recommended** or **GitLab recommends**. ([Vale](../testing.md#vale) rule: [`SubstitutionSuggestions.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/SubstitutionSuggestions.yml))
## whitelist
-Do not use. Another option is **allowlist**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
+Do not use **whitelist**. Another option is **allowlist**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
<!-- vale on -->
<!-- markdownlint-enable -->
diff --git a/doc/development/documentation/testing.md b/doc/development/documentation/testing.md
index 2ade6c1e71d..dfa2f3ed55a 100644
--- a/doc/development/documentation/testing.md
+++ b/doc/development/documentation/testing.md
@@ -228,7 +228,7 @@ guidelines:
In [`ReadingLevel.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ReadingLevel.yml),
we have implemented
-[the Flesch-Kincaid grade level test](https://readable.com/blog/the-flesch-reading-ease-and-flesch-kincaid-grade-level/)
+[the Flesch-Kincaid grade level test](https://readable.com/readability/flesch-reading-ease-flesch-kincaid-grade-level/)
to determine the readability of our documentation.
As a general guideline, the lower the score, the more readable the documentation.
@@ -319,6 +319,38 @@ To configure Vale in your editor, install one of the following as appropriate:
cases, `vale` should work. To find the location, run `which vale` in a terminal.
- Vim [ALE plugin](https://github.com/dense-analysis/ale).
+- Emacs [Flycheck extension](https://github.com/flycheck/flycheck).
+ This requires some configuration:
+
+ - `Flycheck` supports `markdownlint-cli` out of the box, but you must point it
+ to the `.markdownlint.yml` at the base of the project directory. A `.dir-locals.el`
+ file can accomplish this:
+
+ ```lisp
+ ;; Place this code in a file called `.dir-locals.el` at the root of the gitlab project.
+ ((markdown-mode . ((flycheck-markdown-markdownlint-cli-config . ".markdownlint.yml"))))
+
+ ```
+
+ - A minimal configuration for Flycheck to work with Vale could look like this:
+
+ ```lisp
+ (flycheck-define-checker vale
+ "A checker for prose"
+ :command ("vale" "--output" "line" "--no-wrap"
+ source)
+ :standard-input nil
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column ":" (id (one-or-more (not (any ":")))) ":" (message) line-end))
+ :modes (markdown-mode org-mode text-mode)
+ :next-checkers ((t . markdown-markdownlint-cli))
+ )
+
+ (add-to-list 'flycheck-checkers 'vale)
+ ```
+
+ In this setup the `markdownlint` checker is set as a "next" checker from the defined `vale` checker.
+ Enabling this custom Vale checker provides error linting from both Vale and markdownlint.
We don't use [Vale Server](https://errata-ai.github.io/vale/#using-vale-with-a-text-editor-or-another-third-party-application).