From bb53918a285d1114e80d5cb754c0fbb7a53abc1b Mon Sep 17 00:00:00 2001
From: luckyasme <807254037@qq.com>
Date: Mon, 10 Mar 2025 15:59:47 +0800
Subject: [PATCH 1/6] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96nginx=E8=BD=AC?=
=?UTF-8?q?=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
deploy/nginx/nginx.conf | 34 ++--------------------------------
1 file changed, 2 insertions(+), 32 deletions(-)
diff --git a/deploy/nginx/nginx.conf b/deploy/nginx/nginx.conf
index 9f753b7..290634b 100644
--- a/deploy/nginx/nginx.conf
+++ b/deploy/nginx/nginx.conf
@@ -165,44 +165,14 @@ http {
# proxy_pass https://dsapi.osinfra.cn/;
}
- location ^~ /zh/docs/24.03_LTS_SP1/css/ {
+ location ^~ /docs/24.03_LTS_SP1/ {
proxy_set_header X-Forwarded-For $http_x_real_ip;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_ssl_protocols TLSv1.3;
proxy_ssl_verify off;
- proxy_pass http://openeuler-docs-website-stable2-24-03-lts-sp1.openeuler-website-docs:8080/css/;
- }
-
- location ^~ /zh/docs/24.03_LTS_SP1/fonts/ {
- proxy_set_header X-Forwarded-For $http_x_real_ip;
- proxy_http_version 1.1;
- proxy_set_header Connection "";
- proxy_ssl_protocols TLSv1.3;
- proxy_ssl_verify off;
-
- proxy_pass http://openeuler-docs-website-stable2-24-03-lts-sp1.openeuler-website-docs:8080/fonts/;
- }
-
- location ^~ /zh/docs/24.03_LTS_SP1/img/ {
- proxy_set_header X-Forwarded-For $http_x_real_ip;
- proxy_http_version 1.1;
- proxy_set_header Connection "";
- proxy_ssl_protocols TLSv1.3;
- proxy_ssl_verify off;
-
- proxy_pass http://openeuler-docs-website-stable2-24-03-lts-sp1.openeuler-website-docs:8080/img/;
- }
-
- location ^~ /zh/docs/24.03_LTS_SP1/js/ {
- proxy_set_header X-Forwarded-For $http_x_real_ip;
- proxy_http_version 1.1;
- proxy_set_header Connection "";
- proxy_ssl_protocols TLSv1.3;
- proxy_ssl_verify off;
-
- proxy_pass http://openeuler-docs-website-stable2-24-03-lts-sp1.openeuler-website-docs:8080/js/;
+ proxy_pass http://openeuler-docs-website-stable2-24-03-lts-sp1.openeuler-website-docs:8080/;
}
location ^~ /zh/docs/24.03_LTS_SP1/ {
--
Gitee
From 9dd433bcbbc85c4601d57a8b79d5f987470d974c Mon Sep 17 00:00:00 2001
From: luckyasme <807254037@qq.com>
Date: Tue, 11 Mar 2025 09:21:54 +0800
Subject: [PATCH 2/6] =?UTF-8?q?docs:=20=E4=BC=98=E5=8C=96=E8=B4=A1?=
=?UTF-8?q?=E7=8C=AE=E6=8C=87=E5=8D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/.vitepress/src/config/home.ts | 2 +-
...55\346\263\225\345\217\202\350\200\203.md" | 140 ------
docs/zh/Contribute/_menu.md | 24 +-
docs/zh/Contribute/ci_rules.md | 83 ++++
docs/zh/Contribute/contribution_process.md | 230 ++++------
.../directory_structure_introductory.md | 425 +++++++++++++-----
.../documentation_writing_specifications.md | 356 ++++++++++++---
...3\344\273\223\346\200\273\350\247\210.png" | Bin 0 -> 190670 bytes
.../zh/Contribute/markdownlint_rules.md | 2 +-
.../zh/Contribute/markdownlint_tools.md | 0
.../public_sys-resources/icon-caution.gif | Bin 0 -> 580 bytes
.../public_sys-resources/icon-danger.gif | Bin 0 -> 580 bytes
.../public_sys-resources/icon-note.gif | Bin 0 -> 394 bytes
.../public_sys-resources/icon-notice.gif | Bin 0 -> 406 bytes
.../public_sys-resources/icon-tip.gif | Bin 0 -> 253 bytes
.../public_sys-resources/icon-warning.gif | Bin 0 -> 580 bytes
...31\344\275\234\350\247\204\350\214\203.md" | 302 -------------
17 files changed, 792 insertions(+), 772 deletions(-)
delete mode 100644 "docs/zh/Contribute/MarkDown\345\270\270\347\224\250\350\257\255\346\263\225\345\217\202\350\200\203.md"
create mode 100644 docs/zh/Contribute/ci_rules.md
create mode 100644 "docs/zh/Contribute/figures/\346\226\207\346\241\243\344\273\223\346\200\273\350\247\210.png"
rename "docs/zh/Contribute/markdownlint\346\243\200\346\237\245\350\247\204\345\210\231.md" => docs/zh/Contribute/markdownlint_rules.md (99%)
rename "docs/zh/Contribute/markdownlint\351\224\231\350\257\257\344\277\256\345\244\215\345\267\245\345\205\267.md" => docs/zh/Contribute/markdownlint_tools.md (100%)
create mode 100644 docs/zh/Contribute/public_sys-resources/icon-caution.gif
create mode 100644 docs/zh/Contribute/public_sys-resources/icon-danger.gif
create mode 100644 docs/zh/Contribute/public_sys-resources/icon-note.gif
create mode 100644 docs/zh/Contribute/public_sys-resources/icon-notice.gif
create mode 100644 docs/zh/Contribute/public_sys-resources/icon-tip.gif
create mode 100644 docs/zh/Contribute/public_sys-resources/icon-warning.gif
delete mode 100644 "docs/zh/Contribute/\345\206\231\344\275\234\350\247\204\350\214\203.md"
diff --git a/docs/.vitepress/src/config/home.ts b/docs/.vitepress/src/config/home.ts
index 6fd5010..c0f8a33 100644
--- a/docs/.vitepress/src/config/home.ts
+++ b/docs/.vitepress/src/config/home.ts
@@ -79,7 +79,7 @@ export const cardList = [
},
title: '贡献指南',
desc: '参与文档贡献的方式',
- href: '/zh/Contribute/contribution_process.html',
+ href: '/zh/Contribute/directory_structure_introductory.html',
},
];
diff --git "a/docs/zh/Contribute/MarkDown\345\270\270\347\224\250\350\257\255\346\263\225\345\217\202\350\200\203.md" "b/docs/zh/Contribute/MarkDown\345\270\270\347\224\250\350\257\255\346\263\225\345\217\202\350\200\203.md"
deleted file mode 100644
index 365c438..0000000
--- "a/docs/zh/Contribute/MarkDown\345\270\270\347\224\250\350\257\255\346\263\225\345\217\202\350\200\203.md"
+++ /dev/null
@@ -1,140 +0,0 @@
-# MarkDown常用语法参考
-
-## 标题
-
-使用\#号标记:使用 \# 号可表示 1-6 级标题,一级标题对应一个 \# 号,二级标题对应两个 \# 号,以此类推。
-
-```
-# 一级标题
-## 二级标题
-### 三级标题
-#### 四级标题
-##### 五级标题
-###### 六级标题
-```
-
-## 字体
-
-- 斜体:使用一个星号(\*)表示斜体。
-
- ```
- *斜体文本*
- ```
-
-- 粗体:使用两个星号(\*\*)表示粗体。
-
- ```
- **粗体文本**
- ```
-
-- 粗斜体:使用3个星号(\*\*\*)表示粗斜体。
-
- ```
- ***粗斜体文本***
- ```
-
-
-## 列表
-
-- 无序列表:无序列表使用星号(**\***)、加号(**+**)或是减号(**-**)作为列表标记,这些标记后面要添加一个空格,然后再填写内容。同一个无序列表,建议使用同一个符号。
-
- ```
- * 第一项
- * 第二项
- * 第三项
-
- + 第一项
- + 第二项
- + 第三项
-
-
- - 第一项
- - 第二项
- - 第三项
- ```
-
-
-- 有序列表:有序列表使用数字并加上 **.** 号来表示。
-
- ```
- 1. 第一项
- 2. 第二项
- 3. 第三项
- ```
-
-
-- 嵌套列表:列表嵌套只需在子列表中的选项前面添加四个空格即可。
-
- ```
- 1. 第一项:
- - 第一项嵌套的第一个元素
- - 第一项嵌套的第二个元素
- 2. 第二项:
- - 第二项嵌套的第一个元素
- - 第二项嵌套的第二个元素
- ```
-
-
-## 引用
-
-Markdown 区块引用是在段落开头使用 **\>** 符号 ,然后后面紧跟一个**空格**符号。
-
-```
-> 说明:
-```
-
-## 代码
-
-- 行间代码:如果是段落上的一个函数或片段的代码可以用反引号把它包起来(**\`**)。
-
-```
-`printf()` 函数
-```
-
-- 代码块:可以用 **\`\`\`** 包裹一段代码。
-
-```
-```
-select * from table;
-```
-```
-
-## 链接
-
-链接使用方法如下:
-
-```
-[链接名称](链接地址)
-```
-
-## 图片
-
-图片使用方法如下:
-
-```
-
-
-
-```
-
-- 开头一个感叹号 (!)。
-- 接着一个方括号,里面放上图片的替代文字。
-- 接着一个普通括号,里面放上图片的网址,最后还可以用引号包住并加上选择性的 'title' 属性的文字。
-
-## 表格
-
-Markdown 制作表格使用 **|** 来分隔不同的单元格,使用 **-** 来分隔表头和其他行。语法格式如下:
-
-```
-| 表头 | 表头 |
-| ---- | ---- |
-| 单元格 | 单元格 |
-| 单元格 | 单元格 |
-```
-
-我们可以设置表格的对齐方式:
-
-- -: 设置内容和标题栏居右对齐。
-- :- 设置内容和标题栏居左对齐。
-- :-: 设置内容和标题栏居中对齐。
-
diff --git a/docs/zh/Contribute/_menu.md b/docs/zh/Contribute/_menu.md
index d57839b..15a81c3 100644
--- a/docs/zh/Contribute/_menu.md
+++ b/docs/zh/Contribute/_menu.md
@@ -2,24 +2,14 @@
label: '贡献指南'
ismanual: 'Y'
children:
- - label: '文档贡献指导'
- children:
- - label: '文档开发流程'
- href: './contribution_process.md'
- - label: '文档仓库目录结构说明'
- href: './directory_structure_introductory.md'
- - label: 'menu文件写作规范'
- href: './menu_specifications.md'
- - label: '英文文档贡献指导'
- href: './english_doc_contribute.md'
- - label: '文档写作规范'
+ - label: '概述'
+ href: './directory_structure_introductory.md'
+ - label: '快速入门'
+ href: './contribution_process.md'
+ - label: '教程'
children:
- label: '文档写作规范'
href: './documentation_writing_specifications.md'
- - label: 'MarkDown常用语法参考'
- href: './MarkDown常用语法参考.md'
- - label: 'markdownlint检查规则'
- href: './markdownlint检查规则.md'
- - label: 'markdownlint错误修复工具'
- href: './markdownlint错误修复工具.md'
+ - label: '文档发布流水线门禁'
+ href: './ci_rules.md'
---
\ No newline at end of file
diff --git a/docs/zh/Contribute/ci_rules.md b/docs/zh/Contribute/ci_rules.md
new file mode 100644
index 0000000..4d59ad3
--- /dev/null
+++ b/docs/zh/Contribute/ci_rules.md
@@ -0,0 +1,83 @@
+# 文档开发流水线门禁
+
+## markdownlint
+
+markdownlint 是一款检查 markdown 文件格式的工具。markdownlint规则介绍及本仓规则设置,请参考[检查规则](./markdownlint_rules.md)。可使用[工具](./markdownlint_tools.md)对markdownlint 进行批量修复。
+
+> 说明:
+> 开发者需要确保提交的文档已修复所有markdownlint错误,否则CI门禁报错,将无法合入。
+
+## 标签闭合
+
+链接、表格等内容元素建议使用markdown语法书写。如果需要使用HTML样式,请确保标签闭合。
+
+错误示例
+
+ ```yaml
+
+
+ Header 1
+ | Header 2 |
+
+ Data 1 |
+ | Data 2 |
+
+ ```
+
+正确示例
+
+ ```yaml
+
+
+ Header 1 |
+ Header 2 |
+
+
+ Data 1 |
+ Data 2 |
+
+
+ ```
+
+> 说明:开发者需要确保提交的文档中HTML 标签已全部闭合,否则CI门禁报错,将无法合入。
+
+## 引用链接
+
+图片、网站、手册链接请检查路径地址是否正确。
+
+反例
+
+- 失效的网站链接
+
+ ```text
+ [错误官网](https://doc.openeuler.org/zh/)
+ ```
+
+- 错误的相对路径
+
+ ```text
+ [写作规范](../写作规范.md)
+ ```
+
+
+正例
+
+- 网站链接
+
+ ```text
+ [错误官网](https://docs.openeuler.org/zh/)
+ ```
+
+- 相对路径
+
+ ```text
+ [写作规范](./contribute/写作规范.md)
+ ```
+
+>说明:开发者需要确保提交的文档中链接有效,否则CI门禁报错,将无法合入。
+
+## 静态检查
+
+新增文档时,为了能在openEuler 文档官网展示,需要在_menu.md文件增加对应文档位置。
+
+>说明:开发者需要确保提交新增文档同步提交了_menu.md文件修改,否则CI门禁报错,将无法合入。
diff --git a/docs/zh/Contribute/contribution_process.md b/docs/zh/Contribute/contribution_process.md
index d283502..8fc3b42 100644
--- a/docs/zh/Contribute/contribution_process.md
+++ b/docs/zh/Contribute/contribution_process.md
@@ -1,69 +1,51 @@
-# 文档开发流程
+# 快速入门
## 概述
-本文档围绕新增文档,修改文档,删除文档三个场景,为开发者明确文档开发流程。本文档中的示例均以中文文档为例,英文文档逻辑类似。
+本文档围绕新增文档,修改文档,删除文档三个任务场景,为开发者明确文档开发流程。开发需要具备以下经验和技能:
-若需了解更详细的文档开发规范,请参考[文档仓库目录结构说明](./directory_structure_introductory.md),[menu文件写作规范](./menu_specifications.md)。英文文档贡献指导请详见[英文文档贡献指导](./english_doc_contribute.md)。若需使用 Git 提交 PR 以及 issue 的具体指导,请详见[openEuler开源社区贡献指南](./openEuler开源社区贡献指南.md)。
+- 了解 Git 基本操作
+- 了解 markdown 写作规范
+- 了解 openEuler 文档仓组织结构
## 新增文档
-### 文档发布在文档中心
+若开发者希望在服务器场景下新增《升级指南》,可参考以下操作步骤:
-1. 克隆文档仓到本地
+1. 创建存放文件夹
- 要新增文档,开发者需要先明确存放相关内容的文档仓库是哪个。一般来讲,要确定新增内容该合并到哪个仓库,可以先看相关特性由哪个sig组负责维护,对应的sig组名-docs,就是存放新增内容的仓库。例如,《OpenStack用户指南》存放在 [openstack-docs](https://gitee.com/openeuler/openstack-docs) 仓。
+ 确定《升级指南》的[存放位置](./directory_structure_introductory.md#文档存放地址),在此处新建一个文件夹,用于存放该指南下所有的`.md`文件。
- 如果是与系统安装升级或管理员指南相关的内容,属于通用配置,在 [docs](https://gitee.com/openeuler/docs) 仓统一维护。
-
-2. 在合适的目录下新建文档
-
- 文档仓克隆完成后,要先在仓库里找到合适的目录,然后在该目录下新增文档。具体目录可根据该新增文档在文档中心呈现的目录层级来找。
-
- 例如,如果开发者想在《安装指南》中新增一个章节介绍多种安装方式,则需要在 [docs](https://gitee.com/openeuler/docs) 仓的 [Server > InstallationUpgrade > Installation](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/InstallationUpgrade/Installation) 目录下新建 `Installation-Modes.md`。因为《安装指南》相关内容属于通用文档,因此在docs仓统一进行维护。并且《安装指南》呈现在文档中心的服务器场景(Server)下的安装升级(InstallationUpgrade)类别下。
-
- 
- 
-
- 如果开发者想在《OpenStack用户指南》中新增一个章节介绍devstack,则需要在 [openstack-docs](https://gitee.com/openeuler/openstack-docs) 仓里新建 `devstack.md`。因为 OpenStack 相关特性是由 openstack SIG 维护,并且 openstack-docs 仓库仅维护一本手册,所以无需在细分目录。
-
- 
-
- 如果开发者不只是想在现有手册中新增一个章节,而是想新增一本完整的手册,则需要新建一个文件夹用来存放该手册下所有的章节。例如,如果开发者想在服务器场景(Server)下的安装升级(InstallationUpgrade)类别下,新增《升级指南》,则需要在 [docs](https://gitee.com/openeuler/docs) 仓的 [Server > InstallationUpgrade](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/InstallationUpgrade/) 目录下新建 `Upgrade`。
-
- 
- 
+ ```text
+ ├─docs
+ | ├─en
+ | └─zh
+ | └─Server
+ | └─InstallationUpgrade
+ | ├─Installation
+ | └─Upgrade
+ | ├─openEuler_22.03_LTS_upgrade_and_downgrade.md
+ | └─_menu.md
+ ```
-3. 关联章节至对应手册
+2. 生成`_menu.md`文件
- 新建文档后,为确保新增章节能正确显示,需在`_menu.md`文件里添加对该文档的引用。例如,开发者在 [openstack-docs](https://gitee.com/openeuler/openstack-docs) 仓里新建`devstack.md`后,需要在 [_menu.md](https://gitee.com/openeuler/openstack-docs/blob/openEuler-25.03/docs/zh/_menu.md) 中添加对`devstack.md`文档的引用。该`_menu.md`通常在新增文档的同级目录下存放。
+ 在步骤 1 所创建的文件夹中,新建一个`_menu.md`文件,以维护手册内各章节的展示逻辑。
```yaml
---
- label: 'OpenStack 用户手册'
+ label: '升级指南'
+ ismanual: 'Y'
+ description: '升级 openEuler 操作系统'
children:
- - label: '安装指导'
- children:
- - label: 'devstack'
- href: './install/devstack.md'
- - label: 'antelope'
- href: './install/antelope.md'
- - label: '操作及管理指导'
- children:
- - label: '安全指南'
- href: './security/security-guide.md'
+ - label: '升降级指导'
+ href: './openEuler_22.03_LTS_upgrade_and_downgrade.md'
---
```
- 如果开发者不只是想在现有手册中新增一个章节,而是想新增一本完整的手册,则需要为该手册创建一个`_menu.md`文件。
-
-4. 关联手册至对应场景
-
- 如果是新增一本完整手册的场景,除了上述步骤,还需要在对应场景的`_menu.md`文件中添加对手册的引用。换句话说,当开发者创建了新手册的`_menu.md`文件后,必须把这个文件的引用,添加到某个场景的`_menu.md`文件中,这样才能让新手册在相应场景中得以展示。
-
- 下面给出两个示例进行说明,示例一:
+3. 关联手册至对应场景
- 如果开发者想在服务器场景下新增《升级指南》,则需要对 [docs](https://gitee.com/openeuler/docs) 仓 Server 目录下的 [_menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Server/_menu.md) 文件进行修改:
+ 在服务器场景的 [_menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Server/_menu.md) 文件中,添加对《升级指南》的引用。
```yaml
---
@@ -82,131 +64,73 @@
---
```
- 如果开发者想在虚拟化场景下新增《OpenStack用户指南》,则需要对 [docs](https://gitee.com/openeuler/docs) 仓 Virtualization 目录下的 [_menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Virtualization/_menu.md) 文件进行修改:
-
- ```yaml
- ---
- label: '虚拟化'
- children:
- - label: '虚拟化平台'
- children:
- - reference: './Virtualization/_menu.md'
- - reference: './StratoVirt/_menu.md'
- - reference: 'https://gitee.com/openeuler/openstack-docs/blob/openEuler-25.03/docs/zh/_menu.md'
- ---
- ```
-
-5. 发布在文档中心
-
- 提交文档修改的 PR 后,doc SIG maintainer和各特性 SIG maintainer 会进行检视。只有当他们都审核通过,PR 才能合入。每晚8点至10点系统会自动构建,构建完成后,修改内容就会在官网显示。
-
-### 文档不在文档中心发布
-
-如果开发者所创作的文档内容,暂时不适合推广或尚不成熟,目前无需发布在文档中心,也可先提交至 [docs](https://gitee.com/openeuler/docs) 仓的 [archive](https://gitee.com/openeuler/docs/tree/25.03/archive) 目录中。等到需要发布时,再将其移至合适的目录。这类文档同样需要遵循写作规范。
-
-> 注意:提交至 archive 目录的文档,按计划未来会发布到文档中心,若长时间无人维护,将会被清理。
-
## 修改文档
文档修改分为以下三种情况:
-- 若需对现有文档内容进行修改,则需要找到文档的存放位置,并对其内容进行相应调整。
-- 若需对手册内各章节的目录结构进行修改,则需要找到对应手册的`_menu.md`,并对其内容进行相应调整。
-- 若需对文档中心各场景下的呈现结构进行修改,则需要找到对应场景的`_menu.md`,并对其内容进行相应调整。
-
-关于如何找到文档和`_menu.md`文件的存放位置,在[新增文档](#新增文档)章节有比较详细的介绍。
+1. 现有文档内容修改:找到文档的[存放位置](./directory_structure_introductory.md#文档存放地址),并对其内容进行相应调整。
-下面给出两个示例进行说明,示例一:
+2. 手册章节目录结构调整:找到手册的`_menu.md`文件并修改。
-
+ 如果开发者要删除《OpenStack用户指南》中的 devstack 章节,首先要删除此章节对应的`.md`文件([devstack.md](https://gitee.com/openeuler/openstack-docs/blob/openEuler-25.03/docs/zh/install/devstack.md)),并在《OpenStack用户指南》的 [_menu.md](https://gitee.com/openeuler/openstack-docs/blob/openEuler-25.03/docs/zh/_menu.md) 下,删除对`devstack.md`文档的引用:
-如图所示,当前《安装指南》的章节设置中,“安装在服务器”作为首个章节显示。若开发者希望将“安装在树莓派”置于“安装在服务器”之上,需找到《安装指南》对应的 [menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Server/InstallationUpgrade/Installation/_menu.md) 文件,并对其进行修改:
-
-```yaml
----
-label: '安装指南'
-ismanual: 'Y'
-description: '安装 openEuler 操作系统'
-children:
- - label: '安装在树莓派'
- href: './install-pi.md'
- children:
- - label: '安装准备'
- href: './Installation-Preparations1.md'
- - label: '安装在服务器'
- href: './install-server.md'
+ ```yaml
+ ---
+ label: 'OpenStack 用户手册'
children:
- - label: '安装准备'
- href: './installation-preparations.md'
----
-```
-
-示例二:
+ - label: '安装指导'
+ children:
+ - label: 'devstack'
+ href: './install/devstack.md'
+ - label: 'antelope'markdown
+ href: './install/antelope.md'
+ ---
+ ```
-
+3. 手册在文档中心呈现位置修改:找到场景的`_menu.md`并修改。
-如图所示,当前在服务器场景下,《安装指南》显示在《升级指南》之前。若开发者希望将《升级指南》调整至前面显示,需找到服务器场景对应的 [menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Server/_menu.md) 文件并加以修改:
+ 在服务器场景下,若开发者希望将《升级指南》调整至《安装指南》前面显示,需找到服务器场景的 [menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Server/_menu.md) 文件并加以修改:
-```yaml
----
-label: '服务器'
-children:
- - label: '快速入门'
- children:
- - reference: './Quickstart/Quickstart/_menu.md'
- - label: '安装升级'
- children:
- - reference: './InstallationUpgrade/Upgrade/_menu.md'
- - reference: './InstallationUpgrade/Installation/_menu.md'
- - label: '系统管理'
+ ```yaml
+ ---
+ label: '服务器'
children:
- - reference: './Administration/Administrator/_menu.md'
- - reference: './Administration/sysMaster/_menu.md'
- - reference: './Administration/CompaCommand/_menu.md'
----
-```
+ - label: '快速入门'
+ children:
+ - reference: './Quickstart/Quickstart/_menu.md'
+ - label: '安装升级'
+ children:
+ - reference: './InstallationUpgrade/Upgrade/_menu.md'
+ - reference: './InstallationUpgrade/Installation/_menu.md'
+ - label: '系统管理'
+ children:
+ - reference: './Administration/Administrator/_menu.md'
+ - reference: './Administration/sysMaster/_menu.md'
+ - reference: './Administration/CompaCommand/_menu.md'
+ ---
+ ```
## 删除文档
-删除文档的操作步骤如下:
-
-1. 首先,确定想要删除的文档存放在何处,找到后将其删除。
-2. 接着,找到对应手册的`_menu.md`文件,在其中去掉对已删除章节的引用。
-3. 若开发者不只删除某本手册中的部分章节,而是要删除一整本手册,除上述操作外,还需找到对应场景的`_menu.md`文件,在里面删除对手册的引用。
+若开发者希望在虚拟化场景下删除《虚拟化用户指南》,可参考以下操作步骤:
-关于如何找到文档和`_menu`文件的存放位置,在[新增文档](#新增文档)章节有比较详细的介绍。
+1. 首先,确定想要删除手册的[存放位置](./directory_structure_introductory.md#文档存放地址),将其删除。
-下面给出示例进行说明:
+2. 在虚拟化场景的 [_menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Virtualization/_menu.md) 文件中,删除对《OpenStack 用户手册》的引用。
-
+ ```yaml
+ ---
+ label: '虚拟化'
+ children:
+ - label: '虚拟化平台'
+ children:
+ - reference: './VirtualizationPlatform/Virtualization/_menu.md'
+ - reference: './VirtualizationPlatform/StratoVirt/_menu.md'
+ ---
+ ```
-如图所示,当前在虚拟化场景中,《OpenStack用户指南》设有专门章节对 devstack 进行介绍。
+## 文档暂不在文档中心发布
-如果开发者要删除《OpenStack用户指南》中的 devstack 章节,首先要删除此章节对应的`.md`文件([devstack.md](https://gitee.com/openeuler/openstack-docs/blob/openEuler-25.03/docs/zh/install/devstack.md)),并在《OpenStack用户指南》的 [_menu.md](https://gitee.com/openeuler/openstack-docs/blob/openEuler-25.03/docs/zh/_menu.md) 下,删除对`devstack.md`文档的引用:
+如果开发者所创作的文档内容,暂时不适合推广或尚不成熟,目前无需发布在文档中心,可在文档仓的 [archive](https://gitee.com/openeuler/docs/tree/25.03/archive) 目录中进行增删改。等到需要发布时,再将其移至合适的目录,注意这类文档同样需要遵循写作规范。
-```yaml
----
-label: 'OpenStack 用户手册'
-children:
- - label: '安装指导'
- children:
- - label: 'devstack'
- href: './install/devstack.md'
- - label: 'antelope'markdown
- href: './install/antelope.md'
----
-```
-
-如果开发者要将《OpenStack用户指南》全部删除,除了要删除与该手册相关的全部`.md`文件外,还需要在虚拟化场景的 [_menu.md](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/Virtualization/_menu.md) 文件中,删除对《OpenStack 用户手册》的引用。
-
-```yaml
----
-label: '虚拟化'
-children:
- - label: '虚拟化平台'
- children:
- - reference: './VirtualizationPlatform/Virtualization/_menu.md'
- - reference: './VirtualizationPlatform/StratoVirt/_menu.md'
- - reference: 'https://gitee.com/openeuler/openstack-docs/blob/openEuler-25.03/docs/zh/_menu.md'
----
-```
+> 注意:提交至 archive 目录的文档,按计划未来会发布到文档中心,若长时间无人维护,将会被清理。
diff --git a/docs/zh/Contribute/directory_structure_introductory.md b/docs/zh/Contribute/directory_structure_introductory.md
index 283dd1e..cbf7f21 100644
--- a/docs/zh/Contribute/directory_structure_introductory.md
+++ b/docs/zh/Contribute/directory_structure_introductory.md
@@ -1,16 +1,109 @@
-# 文档仓目录结构
+# 概述
-## 概述
+## 介绍
-在 openEuler/docs 仓和 openEuler/SIG组名-docs 仓中,docs 目录内存放的内容将展示于官网,其目录结构依据官网呈现的目录层级进行设置。docs 目录下设有 zh 和 en 两个子目录,分别用于存放中文和英文文档。接下来,我们以中文目录为例进行说明,英文目录的结构和操作逻辑与之相同。
+openEuler的文档仓库包含 openEuler/docs 仓以及 openEuler/各SIG组名-docs 仓。基础特性文档,如发行说明、管理员指南等,均在 docs 仓集中维护。而增量特性文档,例如 A-Tune 用户指南、oeAware 用户指南等,则依据特性所属的 SIG 组,分别存放在各 SIG 组的 docs 仓内。
-在文档仓中,除docs目录外,还设有Archive目录,该目录专门用于存放无需在官网展示的存档文档。
+
-## 场景
+在文档仓中,docs 目录下的内容会展示于官网,其下设有 zh 和 en 两个子目录,分别用以存放中文文档与英文文档,文档目录结构严格参照官网呈现的目录层级规划设置。此外,文档仓还设有archive目录,用来存放暂不适合推广,或尚不成熟的文档。待文档完善且满足发布需求时,再将其移至 docs 目录,以便在官网展示。
-文档中心有五个业务场景,服务器、虚拟化、云原生、边缘计算和嵌入式,分别对应 docs 仓内 docs/zh 目录下的 Server、Virtualization、Cloud、EdgeComputing 和 Embedded 子目录,工具模块对应 Tools 子目录。
+```text
+├─archive
+├─docs
+│ ├─en
+│ └─zh
+```
+
+## 文档存放地址
+
+| 场景| 类别 | 手册 | 存放地址 |
+|----|---------|-------|-------|
+| 服务器 | 发行说明 | 发行说明 | [docs/zh/Server/Releasenotes/Releasenotes](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Releasenotes/Releasenotes) |
+| | 快速入门 | 快速入门 | [docs/zh/Server/Quickstart/Quickstart](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Quickstart/Quickstart) |
+| | 安装升级 | 安装指南 | [docs/zh/Server/InstallationUpgrade/Installation](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/InstallationUpgrade/Installation) |
+| | | 升级指南 | [docs/zh/Server/InstallationUpgrade/Upgrade](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/InstallationUpgrade/Upgrade) |
+| | 系统运维 | A-Ops用户指南 | [docs/zh/Server/Maintenance/A-Ops](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/A-Ops) |
+| | | gala用户指南 | [docs/zh/Server/Maintenance/Gala](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/Gala) |
+| | | sysmonitor用户指南 | [docs/zh/Server/Maintenance/sysmonitor](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/sysmonitor) |
+| | | 内核热升级指南 | [docs/zh/Server/Maintenance/KernelLiveUpgrade](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/KernelLiveUpgrade) |
+| | | SysCare用户指南| [docs/zh/Server/Maintenance/SysCare](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/SysCare) |
+| | | 常用技能 | [docs/zh/Server/Maintenance/CommonSkills](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/CommonSkills) |
+| | | 常用定位定界工具 | [docs/zh/Server/Maintenance/CommonTools](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/CommonTools) |
+| | | 故障应急处理 | [docs/zh/Server/Maintenance/Troubleshooting](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/Troubleshooting) |
+| | 安全 | 安全加固指南 | [docs/zh/Server/Security/SecHarden](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/SecHarden) |
+| | | 可信计算 | [docs/zh/Server/Security/TrustedComputing](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/TrustedComputing) |
+| | | secGear开发指南 | [docs/zh/Server/Security/secGear](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/secGear) |
+| | | CVE-ease设计指南 | [docs/zh/Server/Security/CVE-ease](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/CVE-ease) |
+| | | 证书签名 | [docs/zh/Server/Security/CertSignature](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/CertSignature) |
+| | | SBOM用户指南 | [docs/zh/Server/Security/Sbom](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/Sbom) |
+| | | 国密 | [docs/zh/Server/Security/ShangMi](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/ShangMi) |
+| | 内存与存储 | 配置和管理逻辑卷 | [docs/zh/Server/MemoryandStorage/lvm](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/MemoryandStorage/lvm) |
+| | | etmem用户指南 | [docs/zh/Server/MemoryandStorage/etmem](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/MemoryandStorage/etmem) |
+| | | GMEM用户指南 | [docs/zh/Server/MemoryandStorage/GMEM](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/MemoryandStorage/GMEM) |
+| | | HSAK开发指南 | [docs/zh/Server/MemoryandStorage/HSAK](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/MemoryandStorage/HSAK) |
+| | 网络 | 配置网络 | [docs/zh/Server/Network/NetworConfig](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Network/NetworConfig) |
+| | | Gazelle用户指南 | [docs/zh/Server/Network/Gazelle](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Network/Gazelle) |
+| | 性能调优 | 系统资源与性能 | [docs/zh/Server/Performance/Overall/systemResource](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Performance/Overall/systemResource) |
+| | | oeAware用户指南 | [docs/zh/Server/Performance/TuningFramework/oeAware](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Performance/TuningFramework/oeAware) |
+| | | sysBoost用户指南 | [docs/zh/Server/Performance/CPUOptimization/sysBoost](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Performance/CPUOptimization/sysBoost) |
+| | | 使用KAE加速引擎 | [docs/zh/Server/Performance/CPUOptimization/KAE](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Performance/CPUOptimization/KAE) |
+| | | A-Tune用户指南 | [docs/zh/Server/Performance/SystemOptimization/A-Tune](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Performance/SystemOptimization/A-Tune) |
+| | 应用开发 | 应用开发指南 | [docs/zh/Server/Development/ApplicationDev](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Development/ApplicationDev) |
+| | | GCC用户指南 | [docs/zh/Server/Development/GCC](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Development/GCC) |
+| | HA高可用 | HA用户指南 | [docs/zh/Server/HighAvailability/HA](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/HighAvailability/HA) |
+| | 多样性算力 | 直连聚合用户指南| [docs/zh/Server/DiversifiedComputing/DPUOffload](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/DiversifiedComputing/DPUOffload) |
+| | | DPU-OS | [docs/zh/Server/DiversifiedComputing/DPU-OS](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/DiversifiedComputing/DPU-OS) |
+| 虚拟化 | 虚拟化平台 | 虚拟化用户指南 | [docs/zh/Virtualization/VirtualizationPlatform/Virtualization](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Virtualization/VirtualizationPlatform/Virtualization) |
+| | | StratoVirt用户指南 | [docs/zh/Virtualization/VirtualizationPlatform/StratoVirt](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Virtualization/VirtualizationPlatform/StratoVirt) |
+| | | OpenStack用户手册 | [openstack-docs/docs/zh](https://gitee.com/openeuler/openstack-docs/tree/openEuler-25.03/docs/zh)|
+| 云原生 | 容器引擎 | iSula容器引擎 | [docs/zh/Cloud/ContainerEngine/iSulaContainerEngine](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ContainerEngine/iSulaContainerEngine) |
+| | | Docker容器 | [docs/zh/Cloud/ContainerEngine/DockerEngine](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ContainerEngine/DockerEngine) |
+| | 容器形态 | 安全容器 | [docs/zh/Cloud/ContainerForm/SecureContainer](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ContainerForm/SecureContainer) |
+| | | 系统容器 | [docs/zh/Cloud/ContainerForm/SystemContainer](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ContainerForm/SystemContainer) |
+| | 容器运行时 | Kuasar多沙箱容器运行时 | [docs/zh/Cloud/ContainerRuntime/Kuasar](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ContainerRuntime/Kuasar) |
+| | 容器镜像构建工具 | 容器镜像构建 | [docs/zh/Cloud/ImageBuilder/isula-build](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ImageBuilder/isula-build) |
+| | 云原生操作系统 | 容器OS升级用户指南 | [docs/zh/Cloud/KubeOS/KubeOS](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/KubeOS/KubeOS) |
+| | 云底座操作系统 | NestOS用户指南 | [docs/zh/Cloud/NestOS/NestOS](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/NestOS/NestOS) |
+| | 混合部署 | 云原生混合部署rubik用户指南 | [docs/zh/Cloud/HybridDeployment/rubik](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/HybridDeployment/rubik) |
+| | | oncn-bwm用户指南 | [docs/zh/Cloud/HybridDeployment/oncn-bwm](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/HybridDeployment/oncn-bwm)|
+| | 集群部署 | Kubernetes集群部署指南 | [docs/zh/Cloud/ClusterDeployment/Kubernetes](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ClusterDeployment/Kubernetes) |
+| | | iSulad+k8s集群部署指南 | [docs/zh/Cloud/ClusterDeployment/iSulad+k8s](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/ClusterDeployment/iSulad+k8s) |
+| | 服务网格 | Kmesh用户指南 | [docs/zh/Cloud/Kmesh/Kmesh](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Cloud/Kmesh/Kmesh) |
+| 边缘计算 | | KubeEdge部署指南 | [docs/zh/EdgeComputing/KubeEdge](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/EdgeComputing/KubeEdge) |
+| | | K3s部署指南 | [docs/zh/EdgeComputing/K3s](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/EdgeComputing/K3s) |
+| 嵌入式 | | openEuler Embedded用户指南 | [yocto-meta-openeuler/docs](https://gitee.com/openeuler/yocto-meta-openeuler/tree/master/docs) |
+| | | UniProton用户指南 | [docs/zh/Embedded/UniProton](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Embedded/UniProton) |
+| 社区工具 | 镜像构建 | isocut使用指南 | [docs/zh/Tools/CommunityTools/ImageCustom/isocut](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/CommunityTools/ImageCustom/isocut) |
+| | | imageTailor使用指南 | [docs/zh/Tools/CommunityTools/ImageCustom/imageTailor](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/CommunityTools/ImageCustom/imageTailor) |
+| | 编译 | GCC用户指南 | [docs/zh/Server/Development/GCC](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Development/GCC) |
+| | 性能优化 | A-Tune用户指南 | [docs/zh/Server/Performance/SystemOptimization/A-Tune](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Performance/SystemOptimization/A-Tune) |
+| | | oeAware用户指南 | [docs/zh/Server/Performance/TuningFramework/oeAware](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Performance/TuningFramework/oeAware) |
+| | 迁移 | Migration-tools用户指南 | [docs/zh/Tools/CommunityTools/Migration/migration-tools](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/CommunityTools/Migration/migration-tools) |
+| | 虚拟化 | EulerLauncher用户指南 | [docs/zh/Tools/CommunityTools/Virtualization/EulerLauncher](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/CommunityTools/Virtualization/EulerLauncher) |
+| | epkg软件包 | epkg包管理器使用指南 | [docs/zh/Tools/CommunityTools/epkg](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/CommunityTools/epkg) |
+| | | autopkg用户指南 | [docs/zh/Tools/CommunityTools/epkg/autopkg](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/CommunityTools/epkg/autopkg) |
+| 社区服务 | 源码管理 | patch-tracking | [docs/zh/Tools/DevOps/CodeManage/patch-tracking](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/DevOps/CodeManage/patch-tracking) |
+| | 包管理 | pkgship | [docs/zh/Tools/DevOps/packageManage/pkgship](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/DevOps/packageManage/pkgship) |
+| AI | | openEuler Copilot System | [docs/zh/Tools/AI/openEuler_Copilot_System](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/AI/openEuler_Copilot_System) |
+| | | AI大模型服务镜像使用指南 | [docs/zh/Tools/AI/AI_Large_Model_Service_Images_Userguide](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/AI/AI_Large_Model_Service_Images_Userguide) |
+| | | AI容器镜像用户指南 | [docs/zh/Tools/AI/AI_Container_Image_Userguide](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/AI/AI_Container_Image_Userguide) |
+| 图形桌面使用 | | Gnome用户指南 | [docs/zh/Tools/desktop/Gnome](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/desktop/Gnome) |
+| | | UKUI用户指南 | [docs/zh/Tools/desktop/UKUI](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/desktop/UKUI) |
+| | | DDE用户指南 | [docs/zh/Tools/desktop/DDE](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/desktop/DDE) |
+| | | Kiran用户指南 | [docs/zh/Tools/desktop/Kiran](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/desktop/Kiran) |
+| 云原生工具 | | CTinspector用户指南 | [docs/zh/Tools/Cloud/CTinspector](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/Cloud/CTinspector) |
+| | | CPDS用户指南 | [docs/zh/Tools/Cloud/CPDS](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/Cloud/CPDS) |
+| | | PilotGo用户指南 | [docs/zh/Tools/Cloud/PilotGo](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Tools/Cloud/PilotGo) |
+| 系统运维 | 热补丁制作 | SysCare用户指南 | [docs/zh/Server/Maintenance/SysCare](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/SysCare) |
+| | 系统监控 | sysmonitor用户指南 | [docs/zh/Server/Maintenance/sysmonitor](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Maintenance/sysmonitor) |
+| 安全 | | secGear开发指南 | [docs/zh/Server/Security/secGear](https://gitee.com/openeuler/docs/tree/25.03/docs/zh/Server/Security/secGear) |
+
+## 文档仓目录结构说明
+
+### 场景
-
+文档中心有五个业务场景,服务器、虚拟化、云原生、边缘计算和嵌入式,分别对应 docs 仓内 docs/zh 目录下的 Server、Virtualization、Cloud、EdgeComputing 和 Embedded 子目录,工具模块对应 Tools 子目录。
docs仓场景相关目录结构示例如下:
@@ -19,15 +112,15 @@ docs仓场景相关目录结构示例如下:
├─docs
│ ├─en
│ └─zh
-│ ├─Cloud
-│ ├─EdgeComputing
-│ ├─Embedded
-│ ├─Server
-│ ├─Tools
-│ └─Virtualization
+│ ├─Cloud
+│ ├─EdgeComputing
+│ ├─Embedded
+│ ├─Server
+│ ├─Tools
+│ └─Virtualization
```
-工具模块下的子模块包括社区工具、DevOps、AI、图形桌面使用、云原生、系统运维和安全,分别对应 docs/zh/Tools 目录下的 CommunityTools、DevOps、AI、desktop、Cloud、Maintenance 和 Security 子目录。
+工具模块下的子模块包括社区工具、DevOps、AI、图形桌面使用、云原生、系统运维和安全,分别对应 Tools 目录下的 CommunityTools、DevOps、AI、desktop、Cloud、Maintenance 和 Security 子目录。
docs仓工具相关目录结构示例如下:
@@ -35,26 +128,24 @@ docs仓工具相关目录结构示例如下:
├─docs
│ ├─en
│ └─zh
-│ ├─Cloud
-│ ├─EdgeComputing
-│ ├─Embedded
-│ ├─Server
-│ ├─Tools
-│ │ ├─AI
-│ │ ├─Cloud
-│ │ ├─CommunityTools
-│ │ ├─desktop
-│ │ ├─DevOps
-│ │ ├─Maintenance
-│ │ └─Security
-│ └─Virtualization
+│ ├─Cloud
+│ ├─EdgeComputing
+│ ├─Embedded
+│ ├─Server
+│ ├─Tools
+│ │ ├─AI
+│ │ ├─Cloud
+│ │ ├─CommunityTools
+│ │ ├─desktop
+│ │ ├─DevOps
+│ │ ├─Maintenance
+│ │ └─Security
+│ └─Virtualization
```
-## 一级目录
-
-各业务场景下均有具体的目录划分。就服务器场景而言,其进一步细分为发行说明、快速入门、安装升级、系统管理、系统运维等子目录,分别对应 Server/Releasenotes、Server/Quickstart、Server/InstallationUpgrade、Server/Administration 和 Server/Maintenance。
+### 类别
-
+各业务场景下均有具体的类别划分。就服务器场景而言,其进一步细分为发行说明、快速入门、安装升级、系统管理、系统运维等子目录。
docs仓服务器场景目录结构示例如下:
@@ -62,32 +153,30 @@ docs仓服务器场景目录结构示例如下:
├─docs
│ ├─en
│ └─zh
-│ ├─Cloud
-│ ├─EdgeComputing
-│ ├─Embedded
-│ ├─Server
-│ │ ├─Administration
-│ │ ├─Development
-│ │ ├─DiversifiedComputing
-│ │ ├─HighAvailability
-│ │ ├─InstallationUpgrade
-│ │ ├─Maintenance
-│ │ ├─MemoryandStorage
-│ │ ├─Network
-│ │ ├─Performance
-│ │ ├─Quickstart
-│ │ ├─Releasenotes
-| | ├─Security
-│ │ └─_menu.md
-│ ├─Tools
-│ └─Virtualization
+│ ├─Cloud
+│ ├─EdgeComputing
+│ ├─Embedded
+│ ├─Server
+│ │ ├─Administration
+│ │ ├─Development
+│ │ ├─DiversifiedComputing
+│ │ ├─HighAvailability
+│ │ ├─InstallationUpgrade
+│ │ ├─Maintenance
+│ │ ├─MemoryandStorage
+│ │ ├─Network
+│ │ ├─Performance
+│ │ ├─Quickstart
+│ │ ├─Releasenotes
+| | ├─Security
+│ │ └─_menu.md
+│ ├─Tools
+│ └─Virtualization
```
-## 手册
-
-每个一级目录下存放手册或继续设置二级目录。以服务器场景中的系统运维目录为例,其中包含八本手册,每本手册分别对应一个目录。
+### 手册
-
+每个类别下存放手册或继续设置二级目录。以服务器场景中的系统运维目录为例,其中包含八本手册,每本手册分别对应一个目录。
服务器下系统运维的目录结构示例如下:
@@ -95,16 +184,16 @@ docs仓服务器场景目录结构示例如下:
├─docs
│ ├─en
│ └─zh
-│ ├─Cloud
-│ ├─EdgeComputing
-│ ├─Embedded
-│ ├─Server
-│ │ ├─Administration
-│ │ ├─Development
-│ │ ├─DiversifiedComputing
-│ │ ├─HighAvailability
-│ │ ├─InstallationUpgrade
-│ │ ├─Maintenance
+│ ├─Cloud
+│ ├─EdgeComputing
+│ ├─Embedded
+│ ├─Server
+│ │ ├─Administration
+│ │ ├─Development
+│ │ ├─DiversifiedComputing
+│ │ ├─HighAvailability
+│ │ ├─InstallationUpgrade
+│ │ ├─Maintenance
│ │ │ ├─A-Ops
│ │ │ ├─CommonSkills
│ │ │ ├─CommonTools
@@ -113,40 +202,37 @@ docs仓服务器场景目录结构示例如下:
│ │ │ ├─SysCare
│ │ │ ├─sysmonitor
│ │ │ └─Troubleshooting
-│ │ ├─MemoryandStorage
-│ │ ├─Network
-│ │ ├─Performance
-│ │ ├─Quickstart
-│ │ ├─Releasenotes
-| | ├─Security
+│ │ ├─MemoryandStorage
+│ │ ├─Network
+│ │ ├─Performance
+│ │ ├─Quickstart
+│ │ ├─Releasenotes
+| | ├─Security
│ │ └─_menu.md
-│ ├─Tools
-│ └─Virtualization
+│ ├─Tools
+│ └─Virtualization
```
以服务器场景中的性能调优目录为例,其下进一步划分出二级目录,分别为概述、CPU调优、系统调优、调优框架。
-
-
服务器下性能调优的目录结构示例如下:
```text
├─docs
│ ├─en
│ └─zh
-│ ├─Cloud
-│ ├─EdgeComputing
-│ ├─Embedded
-│ ├─Server
-│ │ ├─Administration
-│ │ ├─Development
-│ │ ├─DiversifiedComputing
-│ │ ├─HighAvailability
-│ │ ├─InstallationUpgrade
-│ │ ├─Maintenance
-│ │ ├─MemoryandStorage
-│ │ ├─Network
-│ │ ├─Performance
+│ ├─Cloud
+│ ├─EdgeComputing
+│ ├─Embedded
+│ ├─Server
+│ │ ├─Administration
+│ │ ├─Development
+│ │ ├─DiversifiedComputing
+│ │ ├─HighAvailability
+│ │ ├─InstallationUpgrade
+│ │ ├─MemoryandStorage
+│ │ ├─Network
+│ │ ├─Performance
│ │ │ ├─CPUOptimization
│ │ │ │ ├─KAE
│ │ │ │ └─sysBoost
@@ -156,23 +242,162 @@ docs仓服务器场景目录结构示例如下:
│ │ │ │ └─A-Tune
│ │ │ └─TuningFramework
│ │ │ └─oeAware
-│ │ ├─Quickstart
-│ │ ├─Releasenotes
-| | ├─Security
+│ │ ├─Quickstart
+│ │ ├─Releasenotes
+| | ├─Security
│ │ └─_menu.md
-│ ├─Tools
-│ └─Virtualization
+│ ├─Tools
+│ └─Virtualization
```
-## 文档
+每本手册包含一个或多个`.md`文件及一个`_menu.md`文件。例如,《内核热升级指南》手册中包括三篇文档,包括安装与部署、使用方法、常用问题与解决办法。
-文档及其 _menu.md 文件放在手册目录下。例如,《内核热升级指南》手册中包括三篇文档,存放在 Server/Maintenance/KernelLiveUpgrade 目录下,包括安装与部署、使用方法、常用问题与解决办法。
+```text
+├─docs
+│ ├─en
+│ └─zh
+│ ├─Cloud
+│ ├─EdgeComputing
+│ ├─Embedded
+│ ├─Server
+│ │ ├─Administration
+│ │ ├─Development
+│ │ ├─DiversifiedComputing
+│ │ ├─HighAvailability
+│ │ ├─InstallationUpgrade
+│ │ ├─Maintenance
+│ │ │ ├─A-Ops
+│ │ │ ├─CommonSkills
+│ │ │ ├─CommonTools
+│ │ │ ├─Gala
+│ │ │ ├─KernelLiveUpgrade
+│ | │ │ ├─installation-and-deployment.md
+│ | │ │ ├─how-to-run.md
+│ | │ │ ├─common-problems-and-solutions.md
+│ | │ │ └─_menu.md
+│ │ │ ├─SysCare
+│ │ │ ├─sysmonitor
+│ │ │ └─Troubleshooting
+│ │ ├─MemoryandStorage
+│ │ ├─Network
+│ │ ├─Performance
+│ │ ├─Quickstart
+│ │ ├─Releasenotes
+| | ├─Security
+│ │ └─_menu.md
+│ ├─Tools
+│ └─Virtualization
+```
+
+## _menu 文件格式
+
+### 手册的 _menu 文件
+
+每本手册都需要维护一个`_menu.md`配置文件来维护该本手册中各章节间的逻辑关系。
-
+《内核热升级指南》手册的`_menu.md`文件示例如下:
-- 安装与部署,对应路径 /KernelLiveUpgrade/installation-and-deployment.md
-- 使用方法,对应路径 /KernelLiveUpgrade/how-to-run.md
-- 常用问题,对应路径 /KernelLiveUpgrade/common-problems-and-solutions.md
-- _menu.md 文件,对应路径 /KernelLiveUpgrade/_menu.md
+```yaml
+---
+label: '内核热升级指南'
+description: '使用用户态自动化工具快速重启内核和程序热迁移实现内核热替换特性'
+children:
+ - label: '安装与部署'
+ href: './installation-and-deployment.md'
+ - label: '使用方法'
+ href: './how-to-run.md'
+ - label: '常见问题与解决方法'
+ href: './common-problems-and-solutions.md'
+---
+```
+
+- 顶层 label 指定手册名为“内核热升级指南”。
+- description 指定该手册的简介说明。
+- children 下配置手册中的文档信息:
+ - children 下的 label 指定文档名称。
+ - children 下的 href 指定文档地址(建议使用相对路径)。
+
+### 场景的 _menu 文件
+
+不仅每本手册需维护对应的`_menu.md`文件,各业务场景目录下同样要维护`_menu.md`文件。以服务器场景为例,其`_menu.md`文件示例如下:
+
+```yaml
+---
+label: '服务器'
+children:
+ - label: '发行说明'
+ children:
+ - reference: './Releasenotes/Releasenotes/_menu.md'
+ - label: '快速入门'
+ children:
+ - reference: './Quickstart/Quickstart/_menu.md'
+ - label: '安装升级'
+ children:
+ - reference: './InstallationUpgrade/Installation/_menu.md'
+ - reference: './InstallationUpgrade/Upgrade/_menu.md'
+ - label: '系统管理'
+ children:
+ - reference: './Administration/Administrator/_menu.md'
+ - reference: './Administration/sysMaster/_menu.md'
+ - reference: './Administration/CompaCommand/_menu.md'
+ - label: '系统运维'
+ children:
+ - reference: './Maintenance/A-Ops/_menu.md'
+ - reference: './Maintenance/Gala/_menu.md'
+ - reference: './Maintenance/sysmonitor/_menu.md'
+ - reference: './Maintenance/KernelLiveUpgrade/_menu.md'
+ - reference: './Maintenance/SysCare/_menu.md'
+ - reference: './Maintenance/CommonSkills/_menu.md'
+ - reference: './Maintenance/CommonTools/_menu.md'
+ - reference: './Maintenance/Troubleshooting/_menu.md'
+ - label: '安全'
+ children:
+ - reference: './Security/SecHarden/_menu.md'
+ - reference: './Security/TrustedComputing/_menu.md'
+ - reference: './Security/secGear/_menu.md'
+ - reference: './Security/CVE-ease/_menu.md'
+ - reference: './Security/CertSignature/_menu.md'
+ - reference: './Security/Sbom/_menu.md'
+ - reference: './Security/ShangMi/_menu.md'
+ - label: '内存与存储'
+ children:
+ - reference: './MemoryandStorage/lvm/_menu.md'
+ - reference: './MemoryandStorage/etmem/_menu.md'
+ - reference: './MemoryandStorage/GMEM/_menu.md'
+ - reference: './MemoryandStorage/HSAK/_menu.md'
+ - label: '网络'
+ children:
+ - reference: './Network/NetworConfig/_menu.md'
+ - reference: './Network/Gazelle/_menu.md'
+ - label: '性能调优'
+ children:
+ - label: '概述'
+ children:
+ - reference: './systemResource/_menu.md'
+ - label: '调优框架'
+ children:
+ - reference: './oeAware/_menu.md'
+ - label: 'CPU调优'
+ children:
+ - reference: './sysBoost/_menu.md'
+ - reference: './KAE/_menu.md'
+ - label: '系统调优'
+ children:
+ - reference: './A-Tune/_menu.md'
+ - label: '应用开发'
+ children:
+ - reference: './Development/ApplicationDev/_menu.md'
+ - reference: './Development/GCC/_menu.md'
+ - label: 'HA高可用'
+ children:
+ - reference: './HighAvailability/HA/_menu.md'
+ - label: '多样性算力'
+ children:
+ - reference: './DiversifiedComputing/DPUOffload/_menu.md'
+ - reference: './DiversifiedComputing/DPU-OS/_menu.md'
+---
+```
-`_menu.md`文件相关规范请详见[menu文件写作规范](./menu_specifications.md)。
+- 顶层 label 指定场景名,例子中展示的是服务器场景。
+- 服务器 children 下的 label 对应服务器场景下的一级目录,如发行说明、快速入门、安装升级、系统管理等。
+- 每个一级目录 children 下的 reference 表明引用,您可以使用该字段引用该目录下各本手册的`_menu.md`文件或二级目录,从而形成一个完整的“菜单树”。
diff --git a/docs/zh/Contribute/documentation_writing_specifications.md b/docs/zh/Contribute/documentation_writing_specifications.md
index 1107ada..63c2911 100644
--- a/docs/zh/Contribute/documentation_writing_specifications.md
+++ b/docs/zh/Contribute/documentation_writing_specifications.md
@@ -1,89 +1,329 @@
-# 文档写作规范
+# 写作规范
-## 写作规范
+## 文档结构
-文档结构、内容元素、语言风格书写请参考[写作规范](./写作规范.md)。
+特性手册内容一般包括概述、背景介绍、操作类文档(安装与部署、使用指南)、常见问题和附录,开发者可以根据项目实际情况增加或删减。
+以[A-Tune 项目为例](https://docs.openeuler.org/zh/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html),可以参考如下内容:
-## 流水线门禁
+### 概述
-### Markdownlint
+一句话介绍特性定义与功能。
-markdownlint 是一款检查 Markdown 文件格式的工具。markdownlint规则介绍及本仓规则设置,请参考[检查规则](./markdownlint检查规则.md)。可使用[工具](./markdownlint错误修复工具.md)对markdownlint 进行批量修复。
+【举例】
-> 说明:
-> 开发者需要确保提交的文档已修复所有markdownlint错误,否则CI门禁报错,将无法合入。
+```markdown
+本文档介绍openEuler系统性能自优化软件A-Tune的安装部署和使用方法,以指导开发者快速了解并使用A-Tune。
+```
-### 标签闭合
+### 背景介绍
-链接、表格等内容元素建议使用markdown语法书写。如果需要使用HTML样式,请确保标签闭合。
+背景介绍类文档写明特性背景与简介、架构说明等。常见文档标题:`认识xxx`。
-错误示例
+### 操作类文档
- ```yaml
-
-
- Header 1
- | Header 2 |
-
- Data 1 |
- | Data 2 |
-
- ```
+操作类文档写明步骤、注意事项、前提条件等,以便能对其他开发者起到帮助。
-正确示例
-
- ```yaml
-
-
- Header 1 |
- Header 2 |
-
-
- Data 1 |
- Data 2 |
-
-
- ```
+- 使用说明
-> 说明:开发者需要确保提交的文档中HTML 标签已全部闭合,否则CI门禁报错,将无法合入。
+说明此操作在什么场景下使用可以解决开发者的什么问题。
-### 引用链接
+- 环境要求
-图片、网站、手册链接请检查路径地址是否正确。
+执行此操作需要准备的软硬件环境、权限以及其它约束条件。
-反例
+- 操作步骤
-- 失效的网站链接
+具体的操作步骤,需要注意如下事项:
+ - 建议一步一个操作步骤,不建议多个操作步骤合并在一个步骤中描写。
+ - 如果操作可选,要明确可选条件。
+ - 开发步骤中,涉及调用接口(例如使用了工具或者 SQL 语句),需要对使用的接口进行说明。
- ```text
- [错误官网](https://doc.openeuler.org/zh/)
- ```
+- 结果验证
+
+说明如何验证操作结果正确。如果验证操作与步骤强相关,可以在步骤中描述。例如,执行 SQL 语句的返回信息。
+
+### 常见问题
+
+此类文档应该包括问题描述、产生原因及解决办法。
+
+### 附录
+
+附录可包含术语与缩略语介绍。
+
+## 内容元素
+
+### 命名
+
+对于新增文档,请在对应的文件目录下新增 MarkDown 文档(即以 .md 结尾的文件)。
+
+【规则】新增文档名称不能与已有文档重名,如果有请重新命名。
+
+【规则】文档需要以**英文**命名。
+
+【规则】文件名中不能包含括号,会导致文件目录无法正常显示。可以将括号修改为可识别的下划线(\_)或者中划线(-)。
+
+【举例】
+
+```text
+installation_and_deployment.md #新增‘安装与部署’文档
+```
+
+### 标题
+
+【规则】标题尽量采用简洁的语句概况反映章节的中心内容,注意不要省略必要的信息。
+
+【规则】操作类文档标题尽量用动宾结构(例如:申请权限);相同级别,相同类型的标题结构保持一致。
+
+【规则】标题不使用标点符号结尾,标题中尽量采用圆括号来表示补充说明,标题中不能出现特殊字符,如“?”。
+
+【规则】标题与正文使用 1 整行换行隔开。
+
+【规则】标题使用 “#” 空格连接标题名,标题级别一次只能增加一个级别且第一个标题应该是顶层标题。
+
+【举例】
+
+```markdown
+# 一级标题
+## 二级标题
+### 三级标题
+#### 四级标题
+##### 五级标题
+###### 六级标题
+```
+
+### 正文
+
+【使用方法】
+
+- 斜体:使用一个星号(\*)表示斜体。
+
+ ```txt
+ *斜体文本*
+ ```
+
+- 粗体:使用两个星号(\*\*)表示粗体。
+
+ ```txt
+ **粗体文本**
+ ```
+
+- 粗斜体:使用3个星号(\*\*\*)表示粗斜体。
+
+ ```txt
+ ***粗斜体文本***
+ ```
+
+- 转义:对特定内容使用转义符 \。
+
+ ```txt
+ \<转义的标记符号>
+ ```
+
+【规则】该转义的字符必须严格用转义符 \ 。
+
+【规则】如果有连续两个转义符,转义符之间要有空格 \{ \}。
+
+【规则】国际化:需同时提供中英文文档,可联系或协助翻译;如需参与英文文档贡献,可参考[指南](./english_doc_contribute.md)。
+
+### 空格
+
+【规则】编辑文档时中文和英文之间**建议**加空格,页面展示更美观,请保持全文一致。如果是产品名词如 “豆瓣FM”,请按照官方定义格式书写。
+
+ 例如:openEuler 是一款开源操作系统。当前 openEuler 内核源于 Linux ,支持鲲鹏及其它多种处理器。
+
+【规则】中文和数字之间加空格。
+
+【规则】数字和单位之间不加空格。
+
+【规则】全角标点与其他字符之间不加空格。
+
+ 例如:刚刚成为了 openEuler 的 maintainer,好开心。
+
+### 图片
+
+【使用方法】
+
+```bash
+
+
+
+```
+
+【规则】图片统一存放到文档同级目录下的 figures 文件夹中。例如,[A-Tune用户指南](https://docs.openeuler.org/zh/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html)中的手册中使用的图片,统一存储在 [A-Tune](https://gitee.com/openeuler/docs/tree/stable2-22.03_LTS_SP2/docs/zh/docs/A-Tune/figures) 路径下。该文件夹下的文件引用图片时,使用相对引用。
+
+【规则】请使用原创图片,避免存在知识产权侵权风险。
+
+【规则】图文配合使用,切忌图文分离。
+
+【规则】图片格式首选 png,此外也接受 jpg。图片的高不超过 640px,宽不超过 393px,图片大小建议不超过 150K。
+
+【规则】中文用中文插图,英文用英文插图。
+
+【规则】图片路径不能包含中文。
-- 错误的相对路径
+【规则】如果是截图,请在允许的范围内只保留有用的信息。图形中需要突出的关键信息,可增加红色框线或者文字备注说明。
- ```text
- [写作规范](../写作规范.md)
+【举例】
+图片以 `` 格式书写,“./” 不可少,否则图片无法显示到现网。
+
+### 代码块
+
+代码示例说明了如何实现特定功能,开发人员使用代码示例来编写和调试代码。
+
+【规则】代码的逻辑和语法正确。
+
+【规则】代码的输入和输出尽可能的分开。
+
+【规则】保证代码中关键步骤要有注释说明。
+
+【规则】文中行内代码和命令行使用 1 对反引号,如: `代码行`。
+
+【规则】块级代码使用 3 个顿号或 4 个空格(不能用 TAB 键)缩进,且上下均用整行隔开。
+
+【举例】
+
+- 行内代码
+
+ ```txt
+ `printf()` 函数
```
-
-正例
+- 块级代码
-- 网站链接
+ ```python
+ #!/usr/bin/env python3
+ print("Hello, World!");
+ ```
- ```text
- [错误官网](https://docs.openeuler.org/zh/)
+ ```c
+ #include
+ int main(void)
+ {
+ printf("Hello world\n");
+ }
```
+### 列表
+
+- 无序列表:无序列表使用星号(**\***)、加号(**+**)或是减号(**-**)作为列表标记,这些标记后面要添加一个空格,然后再填写内容。同一个无序列表,建议使用同一个符号。
+
+ ```txt
+ * 第一项
+ * 第二项
+ * 第三项
+
+ + 第一项
+ + 第二项
+ + 第三项
+
+
+ - 第一项
+ - 第二项
+ - 第三项
+ ```
+
+- 有序列表:有序列表使用数字并加上 **.** 号来表示。
+
+ ```txt
+ 1. 第一项
+ 2. 第二项
+ 3. 第三项
+ ```
+
+- 嵌套列表:列表嵌套只需在子列表中的选项前面添加四个空格即可。
+
+ ```txt
+ 1. 第一项:
+ - 第一项嵌套的第一个元素
+ - 第一项嵌套的第二个元素
+ 2. 第二项:
+ - 第二项嵌套的第一个元素
+ - 第二项嵌套的第二个元素
+ ```
+
+【规则】有明显先后逻辑顺序情况请使用有序列表,并列关系、多选一情况请使用无序列表。
+
+【规则】当项目列表是术语、短语时,统一不加标点符号。
+
+【规则】当项目列表是句子时,统一加句号。
+
+【规则】特殊情况下如果不能避免出现短语和句子混合的情况,统一加句号。
+
+【规则】项目列表前几项以分号结尾,最后一项以句号结尾的形式也可以接受。
+
+### 注释符号
+
+文档中会出现以下注释符号,代表不同的使用场景和提示程度。如果需要提示用户注意的信息,可以根据重要程度选择对应的注释符号。
+
+| 标识符 | 用途/含义 | 使用方法 |
+|--------|------------------------------------------------------------------|-----------------------------------------------------------------------------|
+| 警告 | 如未按该警告内容操作,可能会导致结果异常,且不可恢复。 | `>**警告:**`
`>正文内容` |
+| 注意 | 如未按该注意事项操作,可能会导致任务中断或结果异常,但是可恢复。 | `>**注意:**`
`>正文内容` |
+| 说明 | 提供帮助提示或有用的参考信息 | `>**说明:**`
`>正文内容` |
+
+### 链接
+
+【规则】链接需要确保指向的目标文件存在,否则会造成链接跳转不正常,不建议使用 HTML 的链接样式。
+
+【举例】
+
+```markdown
+- 网站链接
+这是一个链接 [菜鸟教程](https://www.runoob.com)。
+
- 相对路径
+ [文档开发流水线门禁](./ci_rules.md)
+```
- ```text
- [写作规范](./contribute/写作规范.md)
- ```
+### 表格
+
+【规则】markdown 文档中请使用以下方式创建表格,不建议使用 HTML 的表格样式。
+
+【举例】
+
+| 表头1 | 表头2 |
+| ---------- | -------- |
+| 单元格1 | 单元格2 |
+| 单元格4 | 单元格4 |
+
+【使用方法】
+设置表格的对齐方式:
+
+- -: 设置内容和标题栏居右对齐。
+- :- 设置内容和标题栏居左对齐。
+- :-: 设置内容和标题栏居中对齐。
+
+【规则】当表格内一列全部是术语、短语时,统一不加标点符号。
+
+【规则】当表格内一列全部是句子时,统一加句号。
+
+【规则】特殊情况下如果不能避免出现短语和句子混合的情况,统一加句号。
+
+### 标点符号
+
+【规则】单位与数字之间不建议加空格,比如 50m,10kg,64Kbit/s。
+
+【规则】对于有序/无序列表,如果是长句子,建议统一以句号结尾,如果是短语,结尾可不用标点。**重点是前后一致,要么都加,要么都不加**。
+
+【规则】中文文档使用全角标点。
+
+【规则】数字使用半角字符。
+
+【规则】感叹号使用场景为可能引发严重后果的操作或设备安全、人身安全的警告。其他场景不允许使用感叹号。
+
+【规则】文内引用其他文档件事添加书名号,同时建议增加引用文档的跳转链接。例如:安装 openEuler 系统,安装方法参考《[openEuler 22.03 LTS SP2 安装指南](https://docs.openeuler.org/zh/docs/22.03_LTS_SP2/docs/Installation/installation.html)》。
+
+## 语言风格
+
+【规则】提交内容必须是与 openEuler 特性相关内容。
+
+【规则】内容不能包含敏感信息、有强烈的种族歧视或性别歧视的内容。
->说明:开发者需要确保提交的文档中链接有效,否则CI门禁报错,将无法合入。
+【规则】提交的内容必须是原创内容,不得侵犯他人知识产权。
-### 静态检查
+【规则】提交的内容必须客观、真实,不允许使用夸大宣传等词汇。
-新增文档时,为了能在openEuler 文档官网展示,需要在_menu.md文件增加对应文档位置。
+**文档贡献中不受欢迎的行为**
->说明:开发者需要确保提交新增文档同步提交了_menu.md文件修改,否则CI门禁报错,将无法合入。
+短时间内通过自动化工具,提交大量的PR,提交大量的处理诸如拼写错误,语法错误,日期错误,语句不通顺等“无害的错误”的修正。
+具体内容以及处理措施详见 [openEuler社区开发行为规范 V1.0](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/openEuler%E7%A4%BE%E5%8C%BA%E5%BC%80%E5%8F%91%E8%A1%8C%E4%B8%BA%E8%A7%84%E8%8C%83.md)。
diff --git "a/docs/zh/Contribute/figures/\346\226\207\346\241\243\344\273\223\346\200\273\350\247\210.png" "b/docs/zh/Contribute/figures/\346\226\207\346\241\243\344\273\223\346\200\273\350\247\210.png"
new file mode 100644
index 0000000000000000000000000000000000000000..a87b2504d20c7a744421752d1e8905dc885b97b7
GIT binary patch
literal 190670
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