文档测试
GitLab 文档与代码一起存储在项目中,并被当作代码一样对待。 为了保持文档的标准和质量,我们使用与代码类似的流程。
包含 Markdown (.md) 文件更改的合并请求会运行以下 CI/CD 作业:
docs-lint markdown:运行多种类型的测试,包括:- Vale:检查文档内容。
- markdownlint:检查 Markdown 结构。
lint-docs.sh脚本:其他测试
docs-lint links:检查文档套件中的 相对链接 是否有效。docs-lint mermaid:运行mermaidlint来检查无效的 Mermaid 图表。rubocop-docs:检查从.rb文件 到文档的链接。eslint-docs:检查从.js和.vue文件 到文档的链接。docs-lint redirects:检查没有 重定向 的已删除或重命名的文档文件。docs code_quality和code_quality cache:运行 代码质量 将 Vale 警告和错误添加到 MR 更改标签页(差异视图)。
一些文件是由脚本生成的。当源代码文件或文档文件在没有遵循正确流程的情况下更新时,CI/CD 作业会失败:
graphql-verify:当doc/api/graphql/reference/_index.md未按照 更新流程 更新时失败。docs-lint deprecations-and-removals:当doc/update/deprecations.md未按照 更新流程 更新时失败。
有关自动化文件的完整列表,请参阅 自动化页面。
lint-doc.sh 中的测试
/scripts/lint-doc.sh 中的测试
查找 Vale 和 markdownlint 无法测试的页面内容问题。
如果任何 lint-doc.sh 测试失败,docs-lint markdown 作业将失败:
- Curl (
curl) 命令 必须使用长格式选项 (--header) 而不是短选项,如-h。 - 文档页面 必须包含 front matter 指示页面的所有权。
CHANGELOG.md不得包含重复的版本。doc/目录中的文件不得具有可执行权限。- 文件名和目录必须:
- 使用
_index.md而不是README.md - 使用下划线而不是连字符。
- 使用小写。
- 使用
- 图片文件名必须 指定它们添加时的版本。
- Mermaid 图表必须能正确渲染,无错误。
Mermaid 图表检查
Mermaid 从代码构建图表和图表。
脚本 (scripts/lint/check_mermaid.mjs) 在 docs-lint mermaid 作业中运行,
适用于所有包含 Markdown 文件更改的合并请求。如果任何 Markdown 文件返回 Mermaid 语法错误,
脚本将返回错误。
要帮助调试您的 Mermaid 图表,请使用 Mermaid Live Editor。
docs-lint links 和其他作业中的测试
为了检查断开的链接,包含 Markdown (.md) 文件更改的合并请求会在其流水线中运行以下作业:
gitlab项目中的docs-lint links作业。例如:https://gitlab.com/gitlab-org/gitlab/-/jobs/7065686331。omnibus-gitlab项目中的docs-lint links作业。例如:https://gitlab.com/gitlab-org/omnibus-gitlab/-/jobs/7065337075。gitlab-operator项目中的docs-lint links作业。gitlab-runner项目中的docs:lint markdown作业,包括链接检查。例如: https://gitlab.com/gitlab-org/gitlab-runner/-/jobs/7056674997。charts/gitlab项目中的check_docs_links作业。例如: https://gitlab.com/gitlab-org/charts/gitlab/-/jobs/7066011619。
这些作业检查链接,包括锚点链接,并报告任何问题。任何需要网络连接的链接都会被跳过。
翻译文档的测试
为确保我们所有翻译内容的质量,我们为多语言文档实现了测试。这些测试与英语版本使用的测试类似,
但在 /doc-locale/ 或 /docs-locale/ 目录中的国际化内容上运行。
| 项目 | 英文目录 | 翻译目录 | 检查作业 |
|---|---|---|---|
| GitLab | /doc |
/doc-locale |
docs-i18n-lint markdown |
| GitLab Runner | /docs |
/docs-locale |
docs:lint i18n markdown |
| Linux 包 | /doc |
/doc-locale |
docs-lint-i18n markdown docs-lint-i18n content |
| Charts | /doc |
/doc-locale |
check_docs_i18n_content check_docs_i18n_markdown |
| Operator | /doc |
/doc-locale |
docs-i18n-lint content docs-i18n-lint markdown |
孤立翻译文件的路径验证
如果 /doc-locale 中的翻译文件没有对应的英文源文件,docs-i18n-lint paths 作业将失败。该作业在以下情况下运行:
/doc-locale中的文件被修改- 路径验证脚本被更改
当检测到孤立翻译文件时,本地化团队成员会处理必要的删除。英文回退内容在新翻译可用之前提供覆盖。
安装文档检查工具
为了帮助遵守 文档风格指南,并 改进添加到文档中的内容,请安装文档检查工具 并将它们与您的代码编辑器集成。至少安装 markdownlint 和 Vale 以匹配构建流水线中运行的检查。这两个工具都可以 与您的代码编辑器集成。
在本地运行文档测试
类似于 在本地预览您的更改,您也可以在 本地计算机上运行文档测试。这有以下优势:
- 加速反馈循环。您可以在分支中了解任何更改问题, 而无需等待 CI/CD 流水线运行。
- 降低成本。在本地运行测试比在 GitLab 使用的 云基础设施上运行测试更便宜。
重要的是要:
- 保持工具更新,并 匹配我们在 CI/CD 流水线中使用的版本。
- 以与 CI/CD 流水线中相同的方式运行检查器、文档链接测试和 UI 链接测试。使用我们在 CI/CD 流水线中使用的配置很重要,这可能不同于工具的默认配置。
在本地运行 Vale、markdownlint 或链接检查
安装和配置说明适用于:
- markdownlint。
- Vale。
- Lychee 和 UI 链接检查器。
在本地运行 lint-doc.sh
使用 Rake 任务在本地运行 lint-doc.sh 测试。
先决条件:
- 您已:
- 在计算机上 安装了必需的检查工具。
- 安装了可用的 Docker 或
containerd,以使用预安装了这些工具的镜像。
-
进入您的
gitlab目录。 -
运行:
rake lint:markdown
要指定您想要运行检查检查的单个文件或目录,请运行:
MD_DOC_PATH=path/to/my_doc.md rake lint:markdown输出应类似于:
=> 正在以 <user> 身份对 /path/to/gitlab 中的文档进行检查...
=> 检查 cURL 短选项...
=> 检查 CHANGELOG.md 重复条目...
=> 检查 /path/to/gitlab/doc 的可执行权限...
=> 检查新的 README.md 文件...
=> 检查 Markdown 风格...
=> 检查文体...
✔ 1 个文件中 0 个错误、0 个警告和 0 个建议。
✔ 检查通过更新检查器配置
Vale 和 markdownlint 配置在每个项目中都处于源代码控制下, 因此更新必须单独提交到每个项目。
gitlab 项目中的配置应被视为事实来源,
所有更新应首先在那里进行。
定期,在 gitlab 项目中对 Vale 和 markdownlint 配置所做的更改
应同步到其他项目。在每个 支持的项目 中:
-
创建一个新分支。在分支名前添加
docs-或在末尾添加-docs。一些项目使用此 约定来限制运行的作业。 -
从
gitlab项目复制配置文件。例如,在项目根目录中运行:# 复制 markdownlint 配置文件 cp ../gitlab/.markdownlint-cli2.yaml . # 删除现有的 Vale 配置,以防某些规则已从 GitLab 项目中删除 rm -r docs/.vale/gitlab # 复制 gitlab_base Vale 配置文件,用于文档存储在 'docs' 目录的项目 cp -r ../gitlab/doc/.vale/gitlab_base docs/.vale -
如果更新
gitlab-runner、gitlab-omnibus、charts/gitlab或gitlab-operator,还要从gitlab项目复制gitlab-docsVale 配置。例如,在项目根目录中运行:# 复制 gitlab-docs Vale 配置文件,用于文档存储在 'docs' 目录的项目 cp -r ../gitlab/doc/.vale/gitlab_docs docs/.vale -
审阅为
.markdownlint-cli2.yaml创建的差异。例如,运行:git diff .markdownlint-cli2.yaml -
删除任何不需要的更改。例如,
customRules仅在gitlab项目中使用。 -
审阅为 Vale 配置创建的差异。例如,运行:
git diff docs -
删除对
RelativeLinks.yml的不需要的更改。此规则特定于每个项目。 -
删除任何
.tmpl文件。这些文件仅在gitlab项目中使用。 -
运行
markdownlint-cli2检查是否有违反新规则的情况。例如:markdownlint-cli2 docs/**/*.md -
运行 Vale 检查是否有违反新规则的情况。例如:
vale --minAlertLevel error docs -
将更改提交到新分支。一些项目要求 使用约定式提交,因此在提交前请检查项目的贡献信息。
-
提交合并请求以供审查。
更新检查镜像
检查测试使用来自 docs-gitlab-com 容器注册表 的镜像在 CI/CD 流水线中运行。
如果发布了新版本的依赖项(如 Vale 的新版本),我们应该 更新镜像以使用新版本。然后,我们可以更新我们每个文档项目中的 配置文件以指向新镜像。
要更新检查镜像:
- 在
docs-gitlab-com中,打开合并请求以更新.gitlab-ci.yml以使用新工具 版本。示例 MR - 合并后,启动
Build docker images pipeline (Manual)计划流水线。 - 转到您启动的流水线,等待相关的
test:image作业完成, 例如test:image:docs-lint-markdown。如果该作业:- 通过,启动相关的
image:作业,例如image:docs-lint-markdown。 - 失败,审阅测试作业日志并开始排查问题。镜像配置 可能需要一些手动调整才能与更新的依赖项一起工作。
- 通过,启动相关的
image:作业通过后,检查作业日志中新镜像的名称。 示例作业输出- 验证新镜像是否已添加到容器注册表。
- 打开合并请求以更新这些配置文件以指向新镜像。
对于使用
markdownlint、vale或lychee的作业:gitlab:.gitlab/ci/docs.gitlab-ci.yml, 更新.docs-markdown-lint-image:部分中的image。scripts/lint-doc.sh, 更新run_locally_or_in_container()部分中的registry_url值。
gitlab-runner:.gitlab/ci/_common.gitlab-ci.yml, 更新DOCS_LINT_IMAGE变量的值。omnibus-gitlab:gitlab-ci-config/variables.yml, 更新DOCS_LINT_IMAGE变量的值。charts/gitlab:.gitlab-ci.yml, 更新DOCS_LINT_IMAGE变量的值。cloud-native/gitlab-operator:.gitlab-ci.yml更新DOCS_LINT_IMAGE变量的值。gitlab-development-kit:.gitlab-ci.yml更新DOCS_LINT_IMAGE变量的值。
- 在每个合并请求中:
- 包含一个小文档更新以触发使用该镜像的作业。
- 检查相关作业输出以确认使用了更新的镜像进行测试。
- 将合并请求分配给任何技术作者进行审查和合并。
配置 pre-push 钩子
Git pre-push 钩子 允许 Git 用户:
- 在推送分支之前运行测试或其他流程。
- 如果这些测试失败,避免推送分支。
Lefthook 是一个 Git 钩子管理器。它使配置、
安装和删除 Git 钩子更简单。其配置在
gitlab 项目的
lefthook.yml
文件中可用。
要为文档检查设置 Lefthook,请参阅 使用 Lefthook 进行提交前和推送前静态分析。
要在提交或推送时显示 Vale 错误,请参阅 在提交或推送时显示 Vale 警告。
在文档上禁用检查
一些(但不是全部)检查可以在文档文件上禁用:
- Vale 测试可以禁用 用于文件的全部或部分。
markdownlint测试可以禁用 用于文件的全部或部分。
CI/CD 流水线中使用的工具版本
您应该使用与我们在 CI/CD 流水线中使用的检查器版本相同的版本,以获得与我们使用的检查规则的最大兼容性。
要匹配 markdownlint-cli2 和 vale 在 GitLab 项目中使用的版本,请参阅:
- 对于使用
asdf管理的项目,项目中的.tool-versions文件。例如,gitlab项目中的.tool-versions文件。 - 构建
image:docs-lint-markdownDocker 镜像时 使用的版本(请参阅variables:部分) 以包含这些工具用于 CI/CD。
这两个位置中设置的版本应该相同。
| 工具 | 版本 | 命令 | 其他信息 |
|---|---|---|---|
markdownlint-cli2 |
最新 | yarn global add markdownlint-cli2 |
无。 |
markdownlint-cli2 |
特定 | yarn global add markdownlint-cli2@0.8.1 |
@ 表示特定版本,此示例将工具更新到版本 0.8.1。 |
Vale(使用 asdf) |
特定 | asdf install |
安装项目中 .tool-versions 文件中设置的 Vale 版本。 |
| Vale(其他) | 特定 | 不适用 | 二进制文件可以 直接下载。 |
Vale(使用 brew) |
最新 | brew update && brew upgrade vale |
此命令仅适用于 macOS。 |
支持的项目
有关我们在 CI/CD 流水线中运行的每个测试的具体信息,请参阅相关项目中这些测试的配置:
- https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/docs.gitlab-ci.yml
- https://gitlab.com/gitlab-org/gitlab-runner/-/blob/main/.gitlab/ci/docs.gitlab-ci.yml
- https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/gitlab-ci-config/gitlab-com.yml
- https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/.gitlab-ci.yml
- https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/blob/master/.gitlab-ci.yml
我们还在这些项目中运行一些文档测试:
- GitLab CLI: https://gitlab.com/gitlab-org/cli/-/blob/main/.gitlab-ci.yml
- GitLab Development Kit: https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/.gitlab/ci/test.gitlab-ci.yml
- Gitaly: https://gitlab.com/gitlab-org/gitaly/-/blob/master/.gitlab-ci.yml
- GitLab Duo Plugin for JetBrains: https://gitlab.com/gitlab-org/editor-extensions/gitlab-jetbrains-plugin/-/blob/main/.gitlab-ci.yml
- GitLab Workflow extension for VS Code: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/.gitlab-ci.yml
- GitLab Plugin for Neovim: https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim/-/blob/main/.gitlab-ci.yml
- GitLab Language Server: https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/blob/main/.gitlab-ci.yml
- GitLab Extension for Visual Studio: https://gitlab.com/gitlab-org/editor-extensions/gitlab-visual-studio-extension/-/blob/main/.gitlab-ci.yml
- AI gateway: https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/blob/main/.gitlab/ci/lint.gitlab-ci.yml
- Prompt Library: https://gitlab.com/gitlab-org/modelops/ai-model-validation-and-research/ai-evaluation/prompt-library/-/blob/main/.gitlab-ci.yml
- GitLab Container Registry: https://gitlab.com/gitlab-org/container-registry/-/blob/master/.gitlab/ci/validate.yml