This is an automated email from the ASF dual-hosted git repository.

jianbin pushed a commit to branch docusaurus
in repository https://gitbox.apache.org/repos/asf/incubator-seata-website.git


The following commit(s) were added to refs/heads/docusaurus by this push:
     new 9c9a682c41 ci: introduce markdown lint (#729)
9c9a682c41 is described below

commit 9c9a682c411d0c939bb92159633f6d8303cbbb1c
Author: Junduo Dong <andj...@gmail.com>
AuthorDate: Thu Jan 4 11:28:48 2024 +0800

    ci: introduce markdown lint (#729)
---
 .github/workflows/lint.yml |  16 ++
 .markdownlint.yml          | 114 +++++++++++++
 README.md                  |  44 +++--
 package-lock.json          | 404 ++++++++++++++++++++++++++++++++++++++++++++-
 package.json               |   7 +-
 5 files changed, 565 insertions(+), 20 deletions(-)

diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 0000000000..444f4f01cd
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,16 @@
+name: Doc Lint
+
+on: [pull_request]
+
+jobs:
+  markdownlint:
+    name: Markdown lint
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+      - name: Setup Node.js
+        uses: actions/setup-node@v3
+        with:
+          node-version: '19.5.x'
+      - run: npm i
+      - run: npm run lint
diff --git a/.markdownlint.yml b/.markdownlint.yml
new file mode 100644
index 0000000000..f50b27aed4
--- /dev/null
+++ b/.markdownlint.yml
@@ -0,0 +1,114 @@
+# markdownlint configuration
+# Reference: https://github.com/DavidAnson/markdownlint/tree/v0.32.1/doc
+
+# MD001/heading-increment : Heading levels should only increment by one level 
at a time
+MD001: true
+
+# MD003/heading-style : Heading style
+MD003:
+  # Heading style
+  style: "consistent"
+
+# MD004/ul-style : Unordered list style
+MD004:
+  # List style
+  style: "consistent"
+
+# MD005/list-indent : Inconsistent indentation for list items at the same level
+MD005: true
+
+# MD007/ul-indent : Unordered list indentation
+MD007:
+  # Spaces for indent
+  indent: 2
+  # Whether to indent the first level of the list
+  start_indented: false
+  # Spaces for first level indent (when start_indented is set)
+  start_indent: 2
+
+# MD009/no-trailing-spaces : Trailing spaces
+MD009:
+  # Spaces for line break
+  br_spaces: 2
+  # Allow spaces for empty lines in list items
+  list_item_empty_lines: false
+  # Include unnecessary breaks
+  strict: false
+
+# MD010/no-hard-tabs : Hard tab
+MD010:
+  # Include code blocks
+  code_blocks: true
+  # Fenced code languages to ignore
+  ignore_code_languages: []
+  # Number of spaces for each hard tab
+  spaces_per_tab: 1
+
+# MD011/no-reversed-links : Reversed link syntax
+MD011: true
+
+# MD012/no-multiple-blanks : Multiple consecutive blank lines
+MD012:
+  # Consecutive blank lines
+  maximum: 1
+
+# MD012/line-length
+MD013: false
+
+# MD022/blanks-around-headings : Headings should be surrounded by blank lines
+MD022:
+  # Blank lines above heading
+  lines_above: 1
+  # Blank lines below heading
+  lines_below: 1
+
+# MD023/heading-start-left : Headings must start at the beginning of the line
+MD023: true
+
+# MD030/list-marker-space : Spaces after list markers
+MD030:
+  # Spaces for single-line unordered list items
+  ul_single: 1
+  # Spaces for single-line ordered list items
+  ol_single: 1
+  # Spaces for multi-line unordered list items
+  ul_multi: 1
+  # Spaces for multi-line ordered list items
+  ol_multi: 1
+
+# MD031/blanks-around-fences : Fenced code blocks should be surrounded by 
blank lines
+MD031:
+  # Include list items
+  list_items: true
+
+# MD032/blanks-around-lists : Lists should be surrounded by blank lines
+MD032: true
+
+# MD034/no-bare-urls : Bare URL used
+MD034: true
+
+# MD042/no-empty-links : No empty links
+MD042: true
+
+# MD046/code-block-style : Code block style
+MD046:
+  # Block style
+  style: "consistent"
+
+# MD047/single-trailing-newline : Files should end with a single newline 
character
+MD047: true
+
+# MD048/code-fence-style : Code fence style
+MD048:
+  # Code fence style
+  style: "consistent"
+
+# MD049/emphasis-style : Emphasis style
+MD049:
+  # Emphasis style
+  style: "consistent"
+
+# MD050/strong-style : Strong style
+MD050:
+  # Strong style
+  style: "consistent"
diff --git a/README.md b/README.md
index d05d446714..55090650bc 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,11 @@
 # Seata Official Website
 
-[![CI 
Status](https://github.com/seata/seata.github.io/workflows/CI/badge.svg)](https://github.com/seata/seata.github.io/actions)
+[![CI 
Status](https://github.com/apache/incubator-seata-website/workflows/CI/badge.svg)](https://github.com/apache/incubator-seata-website/actions)
 
-All website material of https://seata.io, which uses a open source framework: 
Docusaurus.
+All website material of [https://seata.apache.org](https://seata.apache.org), 
which uses a open source framework: Docusaurus.
+
+## README.md
 
-# README.md
 - en [English](README.md)
 - zh_CN [简体中文](readme/README.zh_CN.md)
 
@@ -17,7 +18,8 @@ All website material of https://seata.io, which uses a open 
source framework: Do
     `npm run start-zh-cn` for starting Seata's **Chinese Simplified** webpage 
in your local machine.
 
 3. Visit
-```
+
+```text
 localhost:3000/
 ```
 
@@ -28,22 +30,27 @@ localhost:3000/
 2. `npm run serve`
 
 3. Visit
-```
+
+```text
 localhost:3000/
 ```
 
 ## Requirements
+
 Base docusaurus **2.4.1**  
 Node.js version **19.5.0**
 
 ## Note for i18n
+
 Please be noted that **locale switching function doesn't work** if you start 
the website in development mode using `npm run start-zh-cn` or `npm run start`. 
Please run it in production mode using the build-and-serve process to enable 
the locale switching function.
 
 ## Overview of the Website Structure
+
 We use the **Docusaurus internationalization (i18n)** to support both 
English(en) and Chinese Simplified(zh-cn) Seata Website. Besides, we apply 
**Docusaurus Versioning** to get versioned docs.
 
 Our website stucture with i18n and versioning looks like below:
-```
+
+```text
 website  
 ├── sidebars.json        # sidebar for the current docs version
 ├── docs                 # docs directory for the current docs version
@@ -86,6 +93,7 @@ website
 ## How To Add Documents
 
 ### Directories Related to Adding Documents
+
 docs - Contain the current (latest version) documents (placeholder for sidebar 
indexing purposes)  
     Document Content should be `Placeholder. DO NOT DELETE.`
 
@@ -103,6 +111,7 @@ i18n-`zh-cn`-docusaurus-plugin-content-docs-`current` - 
Contains the actual **la
 i18n-`zh-cn`-docusaurus-plugin-content-docs-`version-1.0.0` - Contain the 
actual **1.0.0 version** Simplified Chinese documents.
 
 ### Summary of Adding Documents
+
 Steps to add a document for the **latest version**:
 
 1. Place placeholder document under the docs directory which is located in the 
root directory.
@@ -117,13 +126,14 @@ Steps to add a document for a **previous version**:
 3. Place the English document under the 
i18-`en`-docusaurus-plugin-content-docs-`specific version number` directory.
 4. Place the Chinese document under the 
i18-`zh-cn`-docusaurus-plugin-content-docs-`specific version number` directory.
 
->  Notes: Corresponding to Chinese file and English file of same contents, and 
the Chinese and English file names should be consistent.
-
+> Notes: Corresponding to Chinese file and English file of same contents, and 
the Chinese and English file names should be consistent.
 
 ## How To Add Blogs
+
 We don't have a versioned blog, so it's easier to add a blog. When adding a 
new blog, it is automatically added in the Blog sidebar, where the order of 
blogs is sorted by the `date` field in SEO in the blog file.
 
 ### Directories Related to Adding Blogs
+
 blog - Contain the blogs(placeholder for blog sidebar indexing purposes)  
     Blog Content should be `Placeholder. DO NOT DELETE.`
 
@@ -132,36 +142,42 @@ i18n-`en`-docusaurus-plugin-content-blog - Contain all 
the actual English blogs.
 i18n-`zh-cn`-docusaurus-plugin-content-blog - Contain all the actual 
Simplified Chinese blogs.  
 
 ### Summary of Adding Blogs
+
 Steps to add a blog:
 
 1. Place placeholder blog under the blog directory which is located in the 
root directory.
 2. Place the English blog under the i18-`en`-docusaurus-plugin-content-blog 
directory.
 3. Place the Chinese blog under the i18-`zh-cn`-docusaurus-plugin-content-blog 
directory.
 
->  Notes: Corresponding to Chinese file and English file of same contents, and 
the Chinese and English file names should be consistent.
+> Notes: Corresponding to Chinese file and English file of same contents, and 
the Chinese and English file names should be consistent.
 
 ## SEO Needed in Both Docs and Blogs
 
-The type is :
-```
+The type is:
+
+```text
 ---
 title: title
 keywords: [keywords1,keywords2]
 description: some description
 author: author name
 date: 2018-12-29
-custom_edit_url: 
https://github.com/seata/seata.github.io/blob/docusaurus/i18n/en/docusaurus-plugin-content-blog/download.md
+custom_edit_url: 
https://github.com/apache/incubator-seata-website/blob/docusaurus/i18n/en/docusaurus-plugin-content-blog/quick-start-use-seata-and-dubbo-services.md
 ---
 ```
+
 **Note:**
-1. `title` can not include `:` 
+
+1. `title` can not include `:`
 2. `keywords` must be a `Array`
 <!-- 3. `custom_edit_url` is a link to the doc in this repo, required. -->
 
 ## Note for .md file
+
 1. Do not use un correct html tag like `<img>、<br>`, replace with `<img /> <br 
/>`
 2. If you want show `<xx>`, replace with `&lt;xx&gt;`
+3. Use `npm run lint` to check the style.
 
 ## Others
 
-+ This is official Docusaurus docs 
:[https://docusaurus.io/docs](https://docusaurus.io/docs)
+This is official Docusaurus docs: 
[https://docusaurus.io/docs](https://docusaurus.io/docs)
diff --git a/package-lock.json b/package-lock.json
index b3caec5bc7..1fe85b8288 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,7 +27,9 @@
       },
       "devDependencies": {
         "@docusaurus/module-type-aliases": "2.4.1",
-        "algolia-sitemap": "^2.2.1"
+        "algolia-sitemap": "^2.2.1",
+        "markdownlint": "^0.32.1",
+        "markdownlint-cli": "^0.38.0"
       },
       "engines": {
         "node": ">=19.5.0"
@@ -2807,6 +2809,50 @@
         "@hapi/hoek": "^9.0.0"
       }
     },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz";,
+      "integrity": 
"sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": 
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz";,
+      "integrity": 
"sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1";
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": 
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz";,
+      "integrity": 
"sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1";
+      }
+    },
     "node_modules/@jest/schemas": {
       "version": "29.6.3",
       "resolved": 
"https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz";,
@@ -3053,6 +3099,16 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": 
"https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz";,
+      "integrity": 
"sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+      "dev": true,
+      "optional": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
     "node_modules/@pnpm/config.env-replace": {
       "version": "1.1.0",
       "resolved": 
"https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz";,
@@ -6591,6 +6647,34 @@
       "integrity": 
"sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==",
       "dev": true
     },
+    "node_modules/foreground-child": {
+      "version": "3.1.1",
+      "resolved": 
"https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz";,
+      "integrity": 
"sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs";
+      }
+    },
+    "node_modules/foreground-child/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": 
"https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz";,
+      "integrity": 
"sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs";
+      }
+    },
     "node_modules/fork-ts-checker-webpack-plugin": {
       "version": "6.5.3",
       "resolved": 
"https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz";,
@@ -6800,6 +6884,18 @@
       "resolved": 
"https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz";,
       "integrity": 
"sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
     },
+    "node_modules/get-stdin": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz";,
+      "integrity": 
"sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
     "node_modules/get-stream": {
       "version": "6.0.1",
       "resolved": 
"https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz";,
@@ -7492,9 +7588,9 @@
       }
     },
     "node_modules/ignore": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz";,
-      "integrity": 
"sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz";,
+      "integrity": 
"sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
       "engines": {
         "node": ">= 4"
       }
@@ -7935,6 +8031,24 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/jackspeak": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz";,
+      "integrity": 
"sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+      "dev": true,
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs";
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
     "node_modules/jest-util": {
       "version": "29.6.3",
       "resolved": 
"https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz";,
@@ -8052,6 +8166,12 @@
         "node": ">=6"
       }
     },
+    "node_modules/jsonc-parser": {
+      "version": "3.2.0",
+      "resolved": 
"https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz";,
+      "integrity": 
"sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+      "dev": true
+    },
     "node_modules/jsonfile": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz";,
@@ -8148,6 +8268,15 @@
       "resolved": 
"https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz";,
       "integrity": 
"sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
     },
+    "node_modules/linkify-it": {
+      "version": "4.0.1",
+      "resolved": 
"https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz";,
+      "integrity": 
"sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==",
+      "dev": true,
+      "dependencies": {
+        "uc.micro": "^1.0.1"
+      }
+    },
     "node_modules/load-script": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmmirror.com/load-script/-/load-script-1.0.0.tgz";,
@@ -8285,6 +8414,137 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/markdown-it": {
+      "version": "13.0.2",
+      "resolved": 
"https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz";,
+      "integrity": 
"sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==",
+      "dev": true,
+      "dependencies": {
+        "argparse": "^2.0.1",
+        "entities": "~3.0.1",
+        "linkify-it": "^4.0.1",
+        "mdurl": "^1.0.1",
+        "uc.micro": "^1.0.5"
+      },
+      "bin": {
+        "markdown-it": "bin/markdown-it.js"
+      }
+    },
+    "node_modules/markdown-it/node_modules/entities": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz";,
+      "integrity": 
"sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1";
+      }
+    },
+    "node_modules/markdownlint": {
+      "version": "0.32.1",
+      "resolved": 
"https://registry.npmjs.org/markdownlint/-/markdownlint-0.32.1.tgz";,
+      "integrity": 
"sha512-3sx9xpi4xlHlokGyHO9k0g3gJbNY4DI6oNEeEYq5gQ4W7UkiJ90VDAnuDl2U+yyXOUa6BX+0gf69ZlTUGIBp6A==",
+      "dev": true,
+      "dependencies": {
+        "markdown-it": "13.0.2",
+        "markdownlint-micromark": "0.1.7"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/DavidAnson";
+      }
+    },
+    "node_modules/markdownlint-cli": {
+      "version": "0.38.0",
+      "resolved": 
"https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.38.0.tgz";,
+      "integrity": 
"sha512-qkZRKJ4LVq6CJIkRIuJsEHvhWhm+FP0E7yhHvOMrrgdykgFWNYD4wuhZTjvigbJLTKPooP79yPiUDDZBCBI5JA==",
+      "dev": true,
+      "dependencies": {
+        "commander": "~11.1.0",
+        "get-stdin": "~9.0.0",
+        "glob": "~10.3.10",
+        "ignore": "~5.3.0",
+        "js-yaml": "^4.1.0",
+        "jsonc-parser": "~3.2.0",
+        "markdownlint": "~0.32.1",
+        "minimatch": "~9.0.3",
+        "run-con": "~1.3.2"
+      },
+      "bin": {
+        "markdownlint": "markdownlint.js"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/markdownlint-cli/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": 
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz";,
+      "integrity": 
"sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/markdownlint-cli/node_modules/commander": {
+      "version": "11.1.0",
+      "resolved": 
"https://registry.npmjs.org/commander/-/commander-11.1.0.tgz";,
+      "integrity": 
"sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/markdownlint-cli/node_modules/glob": {
+      "version": "10.3.10",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz";,
+      "integrity": 
"sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+      "dev": true,
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^2.3.5",
+        "minimatch": "^9.0.1",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+        "path-scurry": "^1.10.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs";
+      }
+    },
+    "node_modules/markdownlint-cli/node_modules/minimatch": {
+      "version": "9.0.3",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz";,
+      "integrity": 
"sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs";
+      }
+    },
+    "node_modules/markdownlint-micromark": {
+      "version": "0.1.7",
+      "resolved": 
"https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.7.tgz";,
+      "integrity": 
"sha512-BbRPTC72fl5vlSKv37v/xIENSRDYL/7X/XoFzZ740FGEbs9vZerLrIkFRY0rv7slQKxDczToYuMmqQFN61fi4Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=16"
+      }
+    },
     "node_modules/mdast-squeeze-paragraphs": {
       "version": "4.0.0",
       "resolved": 
"https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz";,
@@ -8553,6 +8813,15 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
+    "node_modules/minipass": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz";,
+      "integrity": 
"sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
     "node_modules/mrmime": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz";,
@@ -9048,6 +9317,31 @@
       "resolved": 
"https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz";,
       "integrity": 
"sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
     },
+    "node_modules/path-scurry": {
+      "version": "1.10.1",
+      "resolved": 
"https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz";,
+      "integrity": 
"sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^9.1.1 || ^10.0.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs";
+      }
+    },
+    "node_modules/path-scurry/node_modules/lru-cache": {
+      "version": "10.1.0",
+      "resolved": 
"https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz";,
+      "integrity": 
"sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+      "dev": true,
+      "engines": {
+        "node": "14 || >=16.14"
+      }
+    },
     "node_modules/path-to-regexp": {
       "version": "1.8.0",
       "resolved": 
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz";,
@@ -10884,6 +11178,30 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
+    "node_modules/run-con": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz";,
+      "integrity": 
"sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==",
+      "dev": true,
+      "dependencies": {
+        "deep-extend": "^0.6.0",
+        "ini": "~4.1.0",
+        "minimist": "^1.2.8",
+        "strip-json-comments": "~3.1.1"
+      },
+      "bin": {
+        "run-con": "cli.js"
+      }
+    },
+    "node_modules/run-con/node_modules/ini": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz";,
+      "integrity": 
"sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
+      "dev": true,
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
     "node_modules/run-parallel": {
       "version": "1.2.0",
       "resolved": 
"https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz";,
@@ -11545,6 +11863,27 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": 
"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz";,
+      "integrity": 
"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-width-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": 
"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";,
+      "integrity": 
"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
     "node_modules/string-width/node_modules/ansi-regex": {
       "version": "6.0.1",
       "resolved": 
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz";,
@@ -11594,6 +11933,19 @@
         "node": ">=8"
       }
     },
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": 
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz";,
+      "integrity": 
"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/strip-bom-string": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz";,
@@ -12057,6 +12409,12 @@
         "node": "*"
       }
     },
+    "node_modules/uc.micro": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz";,
+      "integrity": 
"sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+      "dev": true
+    },
     "node_modules/unherit": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz";,
@@ -13086,6 +13444,44 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1";
       }
     },
+    "node_modules/wrap-ansi-cjs": {
+      "name": "wrap-ansi",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz";,
+      "integrity": 
"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1";
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": 
"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";,
+      "integrity": 
"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": 
"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz";,
+      "integrity": 
"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/wrap-ansi/node_modules/ansi-regex": {
       "version": "6.0.1",
       "resolved": 
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz";,
diff --git a/package.json b/package.json
index 03b890d23a..6b375c938c 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,8 @@
     "clear": "docusaurus clear",
     "serve": "docusaurus serve",
     "write-translations": "docusaurus write-translations",
-    "write-heading-ids": "docusaurus write-heading-ids"
+    "write-heading-ids": "docusaurus write-heading-ids",
+    "lint": "markdownlint '**/*.md' --ignore src --ignore node_modules 
--ignore blog --ignore i18n --ignore versioned_docs --ignore versioned_sidebars 
--ignore docs --ignore readme --ignore unversioned"
   },
   "dependencies": {
     "@docusaurus/core": "2.4.1",
@@ -34,7 +35,9 @@
   },
   "devDependencies": {
     "@docusaurus/module-type-aliases": "2.4.1",
-    "algolia-sitemap": "^2.2.1"
+    "algolia-sitemap": "^2.2.1",
+    "markdownlint": "^0.32.1",
+    "markdownlint-cli": "^0.38.0"
   },
   "browserslist": {
     "production": [


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@seata.apache.org
For additional commands, e-mail: notifications-h...@seata.apache.org

Reply via email to