This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new 19b3fc78ff11 [improvement](website) Archive 2.1 documentation and add
PDF downloads (#4555)
19b3fc78ff11 is described below
commit 19b3fc78ff11dddcaf593d9487eaacecc917f906
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Sat Oct 31 00:22:30 2026 +0000
[improvement](website) Archive 2.1 documentation and add PDF downloads
(#4555)
Apache Doris 2.1 still appears as an online documentation version. This
change moves it to an archived-version page with English and Chinese PDF
downloads for 2.1, 2.0, and 1.2.
## Changes and review
- **Goal:** Replace the 2.1 Docs navigation entry with Archived Versions
and remove 2.1 from online version selection and indexing.
- **Scope:** Add the archive page, OSS download configuration,
historical URL redirects, and shared documentation inventory.
- **Information architecture:** Keep Dev, 4.x, and 3.x online. Retain
historical sources and sidebars for reference and export; update
English/Chinese contribution guidance and archive governance settings.
- **URL compatibility:** Generate redirects for historical document
routes, version roots, and legacy introduction aliases. Preserve the
contribution guide's existing heading anchors.
- **Frontend:** Use semantic brand tokens, translated navigation/page
messages, accessible download links, and responsive layouts.
Desktop/mobile content layout and all eight brand themes were inspected.
- **Validation:** The checks below cover source inventory, redirects,
hydration-safe navigation, localization state, site rendering, and the
exported PDFs.
- **Other findings:** The optional document-theme probe still assumes a
standalone palette and can see zero options under the unified menu;
restoring that pre-existing coverage is a separate follow-up. The OSS
upload prerequisite is listed below.
## Validation
- Full translation unit suite: 401 tests, 400 passed and 1 existing
conditional skip (`node --test scripts/i18n/__tests__/*.test.cjs`).
Version-banner placeholder checks cover Chinese, Japanese, Korean, and
Russian and expect only the active 4.x/3.x links.
- Archive redirect/navigation and documentation-governance checks
passed. The archive-page build also passed after extracting the
exporter.
- Full five-language optimized production build passed locally with Node
20.20.2 for en, zh-CN, ja, ko, and ru. All active documentation
versions, blog, community, course, and release-note plugins were
enabled. The assembled artifact contains 78,106 files (4.25 GB).
- Targeted TypeScript check and changed-document link checks passed.
- Six local PDFs contain 5,846 source documents and 15,587 pages. Checks
passed for SHA-256, page/document counts, bookmarks, internal links,
representative extracted text, and visual samples; all six have zero
missing-image warnings.
- The PDF artifacts are the frozen 2026-10-29 snapshot from source
commit `52197eda76d3af19a1c29d94092070335334b4dc`, recorded in their
covers/metadata and manifest. PDF binaries are generated locally and
hosted in OSS.
- Post-build and public product-page version checks derive their
required versions from `versions.json`, plus `current`, rather than
requiring archived 2.1. Regression tests retain failures for missing
active versions and exercise later version lifecycle changes. The failed
run's native coverage report was replayed successfully for all five
locales.
- Search acceptance now locates the shared `LanguageMenu` and still
requires the complete English URL including query and fragment.
Regression tests render the production menu in
Chinese/Japanese/Korean/Russian and reject missing query, missing
fragment, and wrong routes. A local Chromium check on a compiled
documentation page passed with the real language hook.
- Reproduced run 41030003742 locally against the complete production
artifact using the unchanged verifier. Its no-results source link starts
with `ctx=docs`, while the old check incorrectly required `q` first.
Acceptance now parses the URL and requires the correct origin, English
search path, query, documentation context, and Dev version regardless of
parameter order. Regression cases retain failures for incorrect/missing
values and duplicate queries.
- Before committing, the complete CI search verifier passed in local
Chromium for Japanese, Korean (`--themes`), and Russian (`--themes
--source-locales en,zh-CN`), with zero runtime errors or failed artifact
resources. The pre-existing document-theme coverage gap described above
still applies.
- The rest of the failed post-build step also passed locally: localized
static verification for all three managed locales (4,736 pages each, no
partial checks/skips), documentation navigation (3,446 routes per
locale), publication artifact verification, global
language/desktop-mobile theme verification, and all 160 first-release
cases.
## Local PDF tooling
The local version-selectable exporter is now maintained separately in
#4558. This PR retains the archive page, redirects, and the identical
shared inventory helper.
## Before merge
- [ ] Upload the six PDFs to
`https://apache-doris-releases.oss-accelerate.aliyuncs.com/docs/` using
the filenames below. All six public URLs returned HTTP 404 during the
2026-10-30 preflight.
```text
apache-doris-2.1-en.pdf
apache-doris-2.1-zh-CN.pdf
apache-doris-2.0-en.pdf
apache-doris-2.0-zh-CN.pdf
apache-doris-1.2-en.pdf
apache-doris-1.2-zh-CN.pdf
```
## Versions
Site-wide navigation applies to all active versions; the archival covers
2.1 and older.
- [x] dev
- [x] 4.x
- [x] 3.x
- [x] 2.1 or older (not covered by version/language sync gate)
## Languages
- [x] Chinese
- [x] English
Archive page/navigation messages also include Japanese, Korean, and
Russian.
## Docs Checklist
- [x] Checked by AI
- [x] Test Cases Built
- [x] Updated required version and language counterparts, or explained
why not
- [x] If only one language changed, confirmed whether source/translation
counterparts need sync
---------
Co-authored-by: morningman <[email protected]>
---
.docs-governance/rules.yml | 2 +-
.gitignore | 2 +
AGENTS.md | 2 +-
community/how-to-contribute/contribute-doc.md | 9 +-
config/archived-docs-redirects.cjs | 26 +++
config/archived-docs.json | 5 +
docusaurus.config.js | 2 +-
i18n/ja/code.json | 14 +-
i18n/ko/code.json | 14 +-
i18n/ru/code.json | 14 +-
i18n/zh-CN/code.json | 14 +-
.../current/how-to-contribute/contribute-doc.md | 9 +-
scripts/archive-docs/archive.test.cjs | 24 ++
scripts/docs-governance/lib.js | 4 +-
scripts/docs-inventory.cjs | 71 ++++++
.../i18n/__tests__/active-doc-versions.test.cjs | 51 ++++
scripts/i18n/__tests__/navigation-suffix.test.cjs | 68 +++++-
scripts/i18n/__tests__/search-scopes.test.cjs | 22 ++
scripts/i18n/__tests__/state.test.cjs | 4 +-
scripts/i18n/active-doc-versions.cjs | 20 ++
scripts/i18n/verify-first-release.cjs | 5 +-
scripts/i18n/verify-product-pages.cjs | 6 +-
scripts/i18n/verify-search.cjs | 28 ++-
src/components/home-next/NavbarNext.tsx | 10 +-
src/pages/archived-docs/index.tsx | 43 ++++
src/pages/archived-docs/styles.scss | 51 ++++
src/theme/DocVersionBanner/index.tsx | 13 +-
.../NavbarItem/DocsVersionDropdownNavbarItem.tsx | 9 +-
translations/pages/registry.json | 16 ++
translations/pages/state.json | 256 ++++++++++++++-------
translations/shared/registry.json | 2 +-
versions.json | 3 +-
32 files changed, 666 insertions(+), 153 deletions(-)
diff --git a/.docs-governance/rules.yml b/.docs-governance/rules.yml
index d0886aaf46a1..72aad2b3e2dc 100644
--- a/.docs-governance/rules.yml
+++ b/.docs-governance/rules.yml
@@ -24,8 +24,8 @@ versions:
active:
- "4.x"
- "3.x"
- - "2.1"
archived:
+ - "2.1"
- "2.0"
- "1.2"
default_version: "4.x"
diff --git a/.gitignore b/.gitignore
index ef5a7409a0a7..4fb643a5ca43 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
# Production
/build
+/output/pdf/
+/tmp/pdfs/
# Generated files
.docusaurus
diff --git a/AGENTS.md b/AGENTS.md
index 0afe34ba6ebb..9dcb37761363 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -9,7 +9,7 @@ For review tasks, if the PR involves changes to the website's
basic framework an
- Follow the existing structure and writing style in the touched area. Keep
terminology, heading hierarchy, front matter shape, and file placement
consistent with neighboring files.
- Treat `sidebars.ts`, `sidebarsCommunity.json`, `versioned_sidebars/`,
`versions.json`, and `docusaurus.config.js` as the authoritative sources for
navigation, active versions, and routing. Do not rely on older README tree
examples when they disagree with the current repository layout.
- Preserve stable URLs whenever possible. When moving, renaming, or deleting
docs, review inbound links, sidebar references, redirects, and versioned or
localized counterparts that may also need updates.
-- The current active docs versions are defined in `versions.json`. In the
current repository state they are `4.x`, `3.x`, `2.1`, and `current`, and many
docs changes intentionally update the same topic across `docs/`,
`versioned_docs/`, and the mirrored `i18n/zh-CN` trees together. Review missing
mirror updates against the actual touched page set and nearby history, and
treat them as issues when the repository context shows those mirrors are
expected to stay aligned.
+- The current active docs versions are defined in `versions.json`. In the
current repository state they are `4.x`, `3.x`, and `current`; `2.1`, `2.0`,
and `1.2` are archived as PDFs on `/archived-docs`. Many docs changes
intentionally update the same topic across `docs/`, `versioned_docs/`, and the
mirrored `i18n/zh-CN` trees together. Review missing mirror updates against the
actual touched page set and nearby history, and treat them as issues when the
repository context shows those mir [...]
- Keep Docusaurus metadata correct. When editing docs or blog files, verify
any relevant front matter fields such as `title`, `description`, `slug`,
`keywords`, `sidebar_position`, and tags.
- Prefer targeted edits over broad rewrites. Avoid reformatting unrelated
content, reordering large sections, or changing tone across a whole file unless
the task explicitly requires it.
- When touching React, TypeScript, styling, or site configuration, preserve
the existing visual language and implementation patterns already used in this
repository.
diff --git a/community/how-to-contribute/contribute-doc.md
b/community/how-to-contribute/contribute-doc.md
index a7cb768b4fe2..0d7104602482 100644
--- a/community/how-to-contribute/contribute-doc.md
+++ b/community/how-to-contribute/contribute-doc.md
@@ -128,9 +128,9 @@ The following table summarizes the purpose of each
directory to help you quickly
| `blog/` | Blog article Markdown files | Shared across all versions |
| `community/` | English community documentation | Shared across all versions |
| `docs/` | English latest version (Dev / Master) documentation | Current main
branch |
-| `versioned_docs/version-X.X/` | English documentation for released versions
| 4.x / 3.x / 2.1 (listed in `versions.json`) |
+| `versioned_docs/version-X.X/` | English documentation for released versions
| 4.x / 3.x published online (listed in `versions.json`) |
| `i18n/zh-CN/docusaurus-plugin-content-docs/current/` | Chinese latest
version documentation | Current main branch |
-| `i18n/zh-CN/docusaurus-plugin-content-docs/version-X.X/` | Chinese
documentation for released versions | 4.x / 3.x / 2.1 (listed in
`versions.json`) |
+| `i18n/zh-CN/docusaurus-plugin-content-docs/version-X.X/` | Chinese
documentation for released versions | 4.x / 3.x published online (listed in
`versions.json`) |
| `i18n/zh-CN/docusaurus-plugin-content-docs-community/` | Chinese community
documentation | Shared across all versions |
| `sidebars.ts` | Sidebar for the latest version of the documentation | Shared
between Chinese and English |
| `versioned_sidebars/version-X.X-sidebars.json` | Sidebar for released
version documentation | Shared between Chinese and English |
@@ -261,17 +261,16 @@ The corresponding `sidebars.ts` snippet:
},
```
-### 4.x / 3.x / 2.1 Released Versions
+### 4.x / 3.x Released Versions {#4x--3x--21-released-versions}
**1. Where to modify content**
-The released versions published on the website are listed in `versions.json`
in the root directory, currently 4.x, 3.x, and 2.1. The `version-1.2` and
`version-2.0` directories still exist in the repository, but they are not
listed in `versions.json` and are not built into the website.
+The released versions published on the website are listed in `versions.json`
in the root directory, currently 4.x and 3.x. Versions 2.1, 2.0, and 1.2 are
available as PDFs on the [Archived
Versions](https://doris.apache.org/archived-docs) page. Their source
directories remain in the repository for reference, but are not built into the
website.
| Version | English documentation location | Chinese documentation location |
| --- | --- | --- |
| 4.x | `/versioned_docs/version-4.x` |
`i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x` |
| 3.x | `/versioned_docs/version-3.x` |
`i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x` |
-| 2.1 | `/versioned_docs/version-2.1` |
`i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1` |
```plain
.
diff --git a/config/archived-docs-redirects.cjs
b/config/archived-docs-redirects.cjs
new file mode 100644
index 000000000000..bc0fd8d3e1b6
--- /dev/null
+++ b/config/archived-docs-redirects.cjs
@@ -0,0 +1,26 @@
+const path = require('node:path');
+const {inventory} = require('../scripts/docs-inventory.cjs');
+const {versions} = require('./archived-docs.json');
+const cache = new Map();
+
+module.exports = function archivedDocRedirects(existingPath) {
+ const match = existingPath.replace(/\/$/,
'').match(/^(.*?)\/archived-docs$/);
+ if (!match) return [];
+ const prefix = match[1];
+ if (!cache.has(prefix)) {
+ const root = path.resolve(__dirname, '..');
+ const locale = prefix === '/zh-CN' ? 'zh-CN' : 'en';
+ const routes = new Set();
+ for (const version of versions) {
+ routes.add(`${prefix}/docs/${version}`);
+ for (const doc of inventory(root, version, locale)) {
+ const route = prefix + doc.route.replace(/^\/zh-CN/, '');
+ routes.add(route);
+ if (route.endsWith('/gettingStarted/what-is-apache-doris'))
+ routes.add(route.replace(/what-is-apache-doris$/,
'what-is-new'));
+ }
+ }
+ cache.set(prefix, [...routes]);
+ }
+ return cache.get(prefix);
+};
diff --git a/config/archived-docs.json b/config/archived-docs.json
new file mode 100644
index 000000000000..a9d0a61c3e25
--- /dev/null
+++ b/config/archived-docs.json
@@ -0,0 +1,5 @@
+{
+ "baseUrl": "https://apache-doris-releases.oss-accelerate.aliyuncs.com/docs/",
+ "versions": ["2.1", "2.0", "1.2"],
+ "locales": ["en", "zh-CN"]
+}
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 59a5f76aaed1..32818aa1f094 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -445,7 +445,7 @@ const config = {
// before forwarding to customFields.slackInviteUrl.
],
createRedirects(existingPath) {
- const redirects = [];
+ const redirects =
[...require('./config/archived-docs-redirects.cjs')(existingPath)];
// Static redirects indexed by target. Trim trailing slash
// for the lookup since Docusaurus' trailingSlash:true
diff --git a/i18n/ja/code.json b/i18n/ja/code.json
index 6a65602c7aa0..1d0c809b572b 100644
--- a/i18n/ja/code.json
+++ b/i18n/ja/code.json
@@ -705,7 +705,7 @@
"description": "The label used to tell the user that he's browsing an
unmaintained doc version"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
- "message": "利用方法は、バージョン {v4xLink} / {v3xLink} / {v21Link}
の正式ドキュメントを参照してください。",
+ "message": "利用方法は、バージョン {v4xLink} / {v3xLink} の正式ドキュメントを参照してください。",
"description": "The label used to tell the user to check the latest
version"
},
"theme.NotFound.title": {
@@ -8868,5 +8868,17 @@
},
"course.lesson.continue": {
"message": "次へ →"
+ },
+ "docs.archive.title": {
+ "message": "アーカイブ版"
+ },
+ "docs.archive.description": {
+ "message": "Apache Doris の過去のバージョンの PDF ドキュメントをダウンロードできます。"
+ },
+ "docs.archive.notice": {
+ "message": "これらのバージョンのドキュメントは更新されません。各 PDF
には、選択したバージョンと言語のドキュメント全体が含まれています。"
+ },
+ "docs.archive.current": {
+ "message": "現在の安定版のドキュメントを読む"
}
}
diff --git a/i18n/ko/code.json b/i18n/ko/code.json
index 0e57b78fde89..908da4470420 100644
--- a/i18n/ko/code.json
+++ b/i18n/ko/code.json
@@ -42,7 +42,7 @@
"message": "개발 중인"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
- "message": "사용 방법은 버전 {v4xLink} / {v3xLink} / {v21Link}의 공식 문서를 참고하세요."
+ "message": "사용 방법은 버전 {v4xLink} / {v3xLink}의 공식 문서를 참고하세요."
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "현재 유지 관리되지 않는 {siteTitle} {versionLabel}의 문서입니다."
@@ -8674,5 +8674,17 @@
},
"course.lesson.continue": {
"message": "계속 →"
+ },
+ "docs.archive.title": {
+ "message": "보관된 버전"
+ },
+ "docs.archive.description": {
+ "message": "Apache Doris 이전 버전의 PDF 문서를 다운로드하세요."
+ },
+ "docs.archive.notice": {
+ "message": "이 버전의 문서는 더 이상 업데이트되지 않습니다. 각 PDF에는 선택한 버전과 언어의 전체 문서가 포함되어
있습니다."
+ },
+ "docs.archive.current": {
+ "message": "현재 안정 버전 문서 읽기"
}
}
diff --git a/i18n/ru/code.json b/i18n/ru/code.json
index 88eb2e40135a..595d29539961 100644
--- a/i18n/ru/code.json
+++ b/i18n/ru/code.json
@@ -42,7 +42,7 @@
"message": "разрабатываемой"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
- "message": "Обратитесь к официальной документации версий {v4xLink} /
{v3xLink} / {v21Link}."
+ "message": "Обратитесь к официальной документации версий {v4xLink} /
{v3xLink}."
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "Документация для {siteTitle} {versionLabel} больше не
поддерживается."
@@ -8674,5 +8674,17 @@
},
"course.lesson.continue": {
"message": "Далее →"
+ },
+ "docs.archive.title": {
+ "message": "Архивные версии"
+ },
+ "docs.archive.description": {
+ "message": "Скачайте документацию прошлых версий Apache Doris в формате
PDF."
+ },
+ "docs.archive.notice": {
+ "message": "Документация этих версий больше не обновляется. Каждый PDF
содержит полную документацию выбранной версии на указанном языке."
+ },
+ "docs.archive.current": {
+ "message": "Документация текущей стабильной версии"
}
}
diff --git a/i18n/zh-CN/code.json b/i18n/zh-CN/code.json
index b8028d3056a4..4fcf6ed84604 100644
--- a/i18n/zh-CN/code.json
+++ b/i18n/zh-CN/code.json
@@ -1,6 +1,6 @@
{
"theme.docs.versions.latestVersionSuggestionLabel": {
- "message": "使用参考请跳转至 {v4xLink}/{v3xLink}/{v21Link} 正式版本文档进行查阅。"
+ "message": "使用参考请跳转至 {v4xLink}/{v3xLink} 正式版本文档进行查阅。"
},
"theme.docs.versions.unreleasedVersionLabel": {
"message": "此处为 Apache Doris {unreleased}的版本文档,不建议作为使用参考。"
@@ -16021,5 +16021,17 @@
},
"course.lesson.continue": {
"message": "继续 →"
+ },
+ "docs.archive.title": {
+ "message": "归档版本"
+ },
+ "docs.archive.description": {
+ "message": "下载 Apache Doris 历史版本的 PDF 文档。"
+ },
+ "docs.archive.notice": {
+ "message": "这些版本的文档已停止更新。每份 PDF 包含对应版本和语言的完整文档。"
+ },
+ "docs.archive.current": {
+ "message": "阅读当前稳定版本文档"
}
}
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs-community/current/how-to-contribute/contribute-doc.md
b/i18n/zh-CN/docusaurus-plugin-content-docs-community/current/how-to-contribute/contribute-doc.md
index 3c679e6e9dfa..9cc439c077bb 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs-community/current/how-to-contribute/contribute-doc.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs-community/current/how-to-contribute/contribute-doc.md
@@ -128,9 +128,9 @@ PR 提交流程还可以参考:
| `blog/` | 博客文章 Markdown | 所有版本共用 |
| `community/` | 英文社区文档 | 所有版本共用 |
| `docs/` | 英文最新版(Dev / Master)文档 | 当前主干 |
-| `versioned_docs/version-X.X/` | 英文已发布版本文档 | 4.x / 3.x / 2.1(见
`versions.json`) |
+| `versioned_docs/version-X.X/` | 英文已发布版本文档 | 在线发布的 4.x / 3.x(见
`versions.json`) |
| `i18n/zh-CN/docusaurus-plugin-content-docs/current/` | 中文最新版文档 | 当前主干 |
-| `i18n/zh-CN/docusaurus-plugin-content-docs/version-X.X/` | 中文已发布版本文档 | 4.x /
3.x / 2.1(见 `versions.json`) |
+| `i18n/zh-CN/docusaurus-plugin-content-docs/version-X.X/` | 中文已发布版本文档 | 在线发布的
4.x / 3.x(见 `versions.json`) |
| `i18n/zh-CN/docusaurus-plugin-content-docs-community/` | 中文社区文档 | 所有版本共用 |
| `sidebars.ts` | 最新版文档侧边栏 | 中英文共用 |
| `versioned_sidebars/version-X.X-sidebars.json` | 已发布版本文档侧边栏 | 中英文共用 |
@@ -261,17 +261,16 @@ Dev 版本的目录栏中文翻译文件位于 `i18n/zh-CN/docusaurus-plugin-con
},
```
-### 4.x / 3.x / 2.1 已发布版本
+### 4.x / 3.x 已发布版本 {#4x--3x--21-已发布版本}
**1. 内容修改位置**
-网站发布的已发布版本列在根目录的 `versions.json` 中,目前为 4.x、3.x 和 2.1。仓库中仍保留 `version-1.2` 和
`version-2.0` 目录,但它们不在 `versions.json` 中,也不会构建到网站。
+网站在线发布的已发布版本列在根目录的 `versions.json` 中,目前为 4.x 和 3.x。2.1、2.0 和 1.2 版本的 PDF
文档可在[归档版本](https://doris.apache.org/zh-CN/archived-docs)页面下载。对应的源码目录保留在仓库中供查阅,不再构建到网站。
| 版本 | 英文文档位置 | 中文文档位置 |
| --- | --- | --- |
| 4.x | `/versioned_docs/version-4.x` |
`i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x` |
| 3.x | `/versioned_docs/version-3.x` |
`i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x` |
-| 2.1 | `/versioned_docs/version-2.1` |
`i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1` |
```plain
.
diff --git a/scripts/archive-docs/archive.test.cjs
b/scripts/archive-docs/archive.test.cjs
new file mode 100644
index 000000000000..72d9ecb6bb07
--- /dev/null
+++ b/scripts/archive-docs/archive.test.cjs
@@ -0,0 +1,24 @@
+const assert = require('node:assert/strict');
+const test = require('node:test');
+const path = require('node:path');
+const fs = require('node:fs');
+const {inventory} = require('../docs-inventory.cjs');
+const redirects = require('../../config/archived-docs-redirects.cjs');
+const root = path.resolve(__dirname, '../..');
+
+test('every historical source page has a redirect; active versions have none',
() => {
+ for (const locale of ['en', 'zh-CN']) {
+ const prefix = locale === 'en' ? '' : '/zh-CN';
+ const targets = new Set(redirects(`${prefix}/archived-docs/`));
+ for (const version of ['2.1', '2.0', '1.2']) {
+ const docs = inventory(root, version, locale);
+ assert(docs.length > 700);
+ assert.equal(docs.length, new Set(docs.map(doc =>
doc.source)).size);
+ for (const doc of docs) assert(targets.has(doc.route), doc.route);
+ assert(targets.has(`${prefix}/docs/${version}`));
+
assert(targets.has(`${prefix}/docs/${version}/gettingStarted/what-is-new`));
+ }
+ assert(![...targets].some(route =>
/\/docs\/(?:dev|4\.x|3\.x)(?:\/|$)/.test(route)));
+ }
+ assert.deepEqual(JSON.parse(fs.readFileSync(path.join(root,
'versions.json'))), ['4.x', '3.x']);
+});
diff --git a/scripts/docs-governance/lib.js b/scripts/docs-governance/lib.js
index ad03133137c8..f38724b07071 100644
--- a/scripts/docs-governance/lib.js
+++ b/scripts/docs-governance/lib.js
@@ -4,8 +4,8 @@ const yaml = require('js-yaml');
const DOC_SUFFIX_RE = /\.(md|mdx)$/i;
-const DEFAULT_ACTIVE_VERSIONS = ['4.x', '3.x', '2.1', 'current'];
-const DEFAULT_ARCHIVED_VERSIONS = ['2.0', '1.2'];
+const DEFAULT_ACTIVE_VERSIONS = ['4.x', '3.x', 'current'];
+const DEFAULT_ARCHIVED_VERSIONS = ['2.1', '2.0', '1.2'];
const DEFAULT_VERSION = '4.x';
const CURRENT_ROUTE_VERSION = 'dev';
diff --git a/scripts/docs-inventory.cjs b/scripts/docs-inventory.cjs
new file mode 100644
index 000000000000..61a09423a0f6
--- /dev/null
+++ b/scripts/docs-inventory.cjs
@@ -0,0 +1,71 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const matter = require('gray-matter');
+const getSlug = require('@docusaurus/plugin-content-docs/lib/slug.js').default;
+const {DefaultNumberPrefixParser, stripPathNumberPrefixes} =
require('@docusaurus/plugin-content-docs/lib/numberPrefix.js');
+
+const normalizeVersion = version => version === 'current' ? 'dev' : version;
+function availableVersions(root) {
+ const directory = path.join(root, 'versioned_docs');
+ const versions = fs.existsSync(directory) ? fs.readdirSync(directory,
{withFileTypes: true})
+ .filter(entry => entry.isDirectory() &&
entry.name.startsWith('version-')).map(entry => entry.name.slice(8)) : [];
+ return [...(fs.existsSync(path.join(root, 'docs')) ? ['dev'] : []),
...versions.sort((a, b) => b.localeCompare(a, 'en', {numeric: true}))];
+}
+function contentDirectory(root, version, locale) {
+ const current = normalizeVersion(version) === 'dev';
+ return path.join(root, locale === 'en' ? (current ? 'docs' :
`versioned_docs/version-${version}`)
+ : `i18n/${locale}/docusaurus-plugin-content-docs/${current ? 'current'
: `version-${version}`}`);
+}
+function inventory(root, inputVersion, locale) {
+ const version = normalizeVersion(inputVersion);
+ if (!availableVersions(root).includes(version)) throw new Error(`Unknown
documentation version: ${inputVersion}`);
+ if (!['en', 'zh-CN'].includes(locale)) throw new Error(`Unsupported
documentation locale: ${locale}`);
+ const directory = contentDirectory(root, version, locale);
+ if (!fs.existsSync(directory)) throw new Error(`Missing documentation
source directory: ${directory}`);
+ const docs = [];
+ function walk(dir) {
+ for (const entry of fs.readdirSync(dir, {withFileTypes:
true}).sort((a, b) => a.name.localeCompare(b.name, 'en'))) {
+ const file = path.join(dir, entry.name);
+ if (entry.isDirectory()) walk(file);
+ else if (/\.mdx?$/.test(entry.name)) {
+ const source = path.relative(directory,
file).split(path.sep).join('/');
+ const {data, content} = matter(fs.readFileSync(file, 'utf8'));
+ const basename = path.basename(source).replace(/\.mdx?$/, '');
+ const baseID = data.id ?? (data.parse_number_prefixes ===
false ? basename : DefaultNumberPrefixParser(basename).filename);
+ const sourceDirName = path.posix.dirname(source);
+ const dirname = data.parse_number_prefixes === false ?
sourceDirName : stripPathNumberPrefixes(sourceDirName,
DefaultNumberPrefixParser);
+ const id = [sourceDirName === '.' ? '' : dirname,
baseID].filter(Boolean).join('/');
+ const slug = getSlug({baseID, frontMatterSlug: data.slug,
source, sourceDirName,
+ stripDirNumberPrefixes: data.parse_number_prefixes !==
false});
+ const prefix = locale === 'en' ? '' : `/${locale}`;
+ docs.push({source, file, id, title: String(data.title ??
content.match(/^#\s+(.+)$/m)?.[1] ?? baseID),
+ content, route:
`${prefix}/docs/${version}${slug}`.replace(/\/$/, ''), position:
data.sidebar_position});
+ }
+ }
+ }
+ walk(directory);
+ const sidebarFile = path.join(root, version === 'dev' ? 'sidebars.ts' :
`versioned_sidebars/version-${version}-sidebars.json`);
+ if (!fs.existsSync(sidebarFile)) throw new Error(`Missing documentation
sidebar: ${sidebarFile}`);
+ const sidebar = version === 'dev' ? require('jiti')(__filename,
{interopDefault: true})(sidebarFile)
+ : JSON.parse(fs.readFileSync(sidebarFile, 'utf8'));
+ const order = new Map();
+ function visit(value) {
+ if (typeof value === 'string' && !order.has(value)) order.set(value,
order.size);
+ else if (Array.isArray(value)) value.forEach(visit);
+ else if (value && typeof value === 'object') {
+ if (value.type === 'doc') visit(value.id);
+ if (value.link?.type === 'doc') visit(value.link.id);
+ if (value.type === 'autogenerated') {
+ const prefix = value.dirName === '.' ? '' :
value.dirName.replace(/\/$/, '') + '/';
+ docs.filter(doc => doc.id.startsWith(prefix)).sort((a, b) =>
+ (a.position ?? Infinity) - (b.position ?? Infinity) ||
a.source.localeCompare(b.source, 'en')).forEach(doc => visit(doc.id));
+ }
+ if (value.items) visit(value.items);
+ else if (!value.type) Object.values(value).forEach(visit);
+ }
+ }
+ visit(sidebar);
+ return docs.sort((a, b) => (order.get(a.id) ?? Infinity) -
(order.get(b.id) ?? Infinity) || a.source.localeCompare(b.source, 'en'));
+}
+const filename = (version, locale) =>
`apache-doris-${normalizeVersion(version)}-${locale}.pdf`;
+module.exports = {availableVersions, contentDirectory, inventory, filename,
normalizeVersion};
diff --git a/scripts/i18n/__tests__/active-doc-versions.test.cjs
b/scripts/i18n/__tests__/active-doc-versions.test.cjs
new file mode 100644
index 000000000000..d8f5b54e13ae
--- /dev/null
+++ b/scripts/i18n/__tests__/active-doc-versions.test.cjs
@@ -0,0 +1,51 @@
+const test = require('node:test');
+const assert = require('node:assert/strict');
+const fs = require('node:fs');
+const os = require('node:os');
+const path = require('node:path');
+const {activeDocVersions, assertDocVersionCoverage} =
require('../active-doc-versions.cjs');
+
+function fixture(t, versions = ['4.x', '3.x']) {
+ const root = fs.mkdtempSync(path.join(os.tmpdir(),
'active-doc-versions-'));
+ t.after(() => fs.rmSync(root, {recursive: true, force: true}));
+ const write = values => fs.writeFileSync(path.join(root, 'versions.json'),
JSON.stringify(values));
+ write(versions);
+ return {root, write};
+}
+const pages = versions => versions.map(version => ({kind: 'docs', pluginId:
'default', version}));
+
+test('a complete artifact can omit archived 2.1 even when its source directory
remains', t => {
+ const {root} = fixture(t);
+ fs.mkdirSync(path.join(root, 'versioned_docs/version-2.1'), {recursive:
true});
+ const versions = activeDocVersions(root);
+ assert.deepEqual(versions, ['current', '4.x', '3.x']);
+ for (const locale of ['en', 'zh-CN', 'ja', 'ko', 'ru'])
+ assert.doesNotThrow(() => assertDocVersionCoverage(pages(versions),
locale, versions));
+});
+
+test('missing active versions still fail and other plugins or pages cannot
satisfy coverage', t => {
+ const {root} = fixture(t);
+ const versions = activeDocVersions(root);
+ for (const missing of versions) {
+ const incomplete = [...pages(versions.filter(version => version !==
missing)),
+ {kind: 'docs', pluginId: 'community', version: missing},
+ {kind: 'page', pluginId: 'default', version: missing}];
+ assert.throws(() => assertDocVersionCoverage(incomplete, 'en',
versions),
+ error => error.message === `Missing version: en/${missing}`);
+ }
+});
+
+test('version lifecycle changes follow the authoritative config and reject
malformed lists', t => {
+ const {root, write} = fixture(t);
+ write(['5.x', '4.x']);
+ const versions = activeDocVersions(root);
+ assert.deepEqual(versions, ['current', '5.x', '4.x']);
+ assert.throws(() => assertDocVersionCoverage(pages(['current', '4.x',
'3.x']), 'ja', versions), /Missing version: ja\/5.x/);
+ assert.doesNotThrow(() => assertDocVersionCoverage(pages(versions), 'ja',
versions));
+ write([]);
+ assert.deepEqual(activeDocVersions(root), ['current']);
+ for (const invalid of [null, {}, ['4.x', '4.x'], ['current'], [''],
[null]]) {
+ write(invalid);
+ assert.throws(() => activeDocVersions(root), /versions.json must
contain unique released version names/);
+ }
+});
diff --git a/scripts/i18n/__tests__/navigation-suffix.test.cjs
b/scripts/i18n/__tests__/navigation-suffix.test.cjs
index caf54a6d4fd2..099c3d092657 100644
--- a/scripts/i18n/__tests__/navigation-suffix.test.cjs
+++ b/scripts/i18n/__tests__/navigation-suffix.test.cjs
@@ -6,14 +6,16 @@ const ts = require('typescript');
const React = require('react');
const {renderToString} = require('react-dom/server');
const cheerio = require('cheerio');
+const vm = require('node:vm');
+const {englishLanguageSwitchSelector, verifyLanguageSwitchHref} =
require('../verify-search.cjs');
-function fixture(kind, singleVersion = false) {
+function fixture(kind, singleVersion = false, docsPluginId = 'default',
currentLocale = 'ru') {
const locales = ['en', 'zh-CN', 'ja', 'ko', 'ru'];
const route = locale => `${locale === 'en' ? '' : '/' + locale}${kind ===
'page' ? '/use-cases/ai/' : '/docs/dev/topic/'}`;
- const i18n = {currentLocale: 'ru', defaultLocale: 'en', locales,
- localeConfigs: Object.fromEntries(locales.map(locale => [locale,
{label: locale, htmlLang: locale}]))};
+ const i18n = {currentLocale, defaultLocale: 'en', locales,
+ localeConfigs: Object.fromEntries(locales.map(locale => [locale,
{label: locale, htmlLang: locale === 'en' ? 'en-US' : locale === 'zh-CN' ?
'zh-Hans-CN' : locale}]))};
const versions = (singleVersion ? ['current'] : ['current',
'4.x']).map(name => ({name, label: name,
- mainDocId: 'topic', docs: [{id: 'topic', path: `/ru/docs/${name ===
'current' ? 'dev' : name}/topic/`}]}));
+ mainDocId: 'topic', docs: [{id: 'topic', path: `${currentLocale ===
'en' ? '' : '/' + currentLocale}/docs/${name === 'current' ? 'dev' :
name}/topic/`}]}));
const active = {activeVersion: versions[0],
alternateDocVersions: Object.fromEntries(versions.map(version =>
[version.name, version.docs[0]]))};
let phase = 'server';
@@ -22,14 +24,17 @@ function fixture(kind, singleVersion = false) {
react: React,
'@docusaurus/Link': ({to, children}) => React.createElement('a',
{href: to.replace(/^pathname:\/\//, '')}, children),
'@site/src/utils/contentRoute': {useContentRouteData: () => ({kind:
'page', availableTranslations: locales})},
- '@site/src/utils/languageMessages': {languageMessages: () => ({choose:
'Language'})},
- '@site/src/utils/useLanguageItems': {useLanguageItems: () =>
locales.map(locale => ({locale, label: locale, htmlLang: locale,
- href: route(locale) + (phase === 'hydrated' ? '?from=search#usage'
: ''), current: locale === 'ru', onClick() {}}))},
+ '@site/src/utils/languageMessages': {languageMessages: () => ({choose:
'Language', reset: 'Reset', resetDone: 'Reset complete', resetFailed: 'Reset
failed'})},
+ '@site/src/utils/useLanguageItems': {useLanguageItems: () =>
locales.map(locale => ({locale, label: locale, htmlLang:
i18n.localeConfigs[locale].htmlLang,
+ href: route(locale) + (phase === 'hydrated' ? '?from=search#usage'
: ''), current: locale === currentLocale, onClick() {}}))},
'@site/src/utils/localization': {hasTranslatedPage: (_path, locale) =>
['ja', 'ko', 'ru'].includes(locale)},
'@site/src/utils/locale': {normalizePathname: pathname =>
pathname.replace(/^\/(en|zh-CN|ja|ko|ru)(?=\/|$)/, '')},
- '@docusaurus/router': {useLocation: () => ({pathname: route('ru'),
+ '@docusaurus/router': {useLocation: () => ({pathname:
route(currentLocale),
search: phase === 'server' ? '' : '?from=search', hash: phase ===
'server' ? '' : '#usage'})},
+ '@site/src/utils/localePreference': {clearLocalePreference: () =>
true},
+ '@site/src/components/brand-theme/BrandThemeSwitcher':
{BrandThemeSwitcher: () => null},
'@docusaurus/useIsBrowser': () => phase === 'hydrated',
+ '@docusaurus/useBaseUrl': pathname => (currentLocale === 'en' ? '' :
'/' + currentLocale) + pathname,
'@docusaurus/useDocusaurusContext': () => ({i18n}),
'@docusaurus/Translate': {translate: ({message}) => message},
'@docusaurus/theme-common/internal': {useAlternatePageUtils: () =>
({createUrl: ({locale}) => route(locale)})},
@@ -41,7 +46,7 @@ function fixture(kind, singleVersion = false) {
items.map((item, key) => React.createElement(anchor, {...item,
key}))),
'@theme/NavbarItem/DefaultNavbarItem': anchor,
};
- const file = kind === 'page' ?
'components/home-next/PageLanguageSwitcher.tsx'
+ const file = kind === 'menu' ? 'components/home-next/LanguageMenu.tsx' :
kind === 'page' ? 'components/home-next/PageLanguageSwitcher.tsx'
: `theme/NavbarItem/${kind === 'locale' ?
'LocaleDropdownNavbarItem/index.tsx' : 'DocsVersionDropdownNavbarItem.tsx'}`;
const source = fs.readFileSync(path.resolve(__dirname, '../../../src',
file), 'utf8');
const compiled = ts.transpileModule(source, {compilerOptions: {module:
ts.ModuleKind.CommonJS,
@@ -54,11 +59,12 @@ function fixture(kind, singleVersion = false) {
}, module, module.exports);
return next => {
phase = next;
- return renderToString(React.createElement(kind === 'page' ?
module.exports.PageLanguageSwitcher : module.exports.default));
+ return renderToString(React.createElement(kind === 'menu' ?
module.exports.LanguageMenu : kind === 'page' ?
module.exports.PageLanguageSwitcher : module.exports.default,
+ kind === 'version' ? {docsPluginId} : {}));
};
}
-for (const [kind, singleVersion] of [['locale', false], ['version', false],
['version', true], ['page', false]]) {
+for (const [kind, singleVersion] of [['locale', false], ['version', false],
['version', true], ['page', false], ['menu', false]]) {
test(`${kind} links match SSR before hydration and retain query/hash
afterwards (single version: ${singleVersion})`, () => {
const render = fixture(kind, singleVersion);
const server = render('server');
@@ -66,6 +72,44 @@ for (const [kind, singleVersion] of [['locale', false],
['version', false], ['ve
const links = html => cheerio.load(html)('a').map((_, node) =>
node.attribs.href).get();
const initial = links(server), hydrated = links(render('hydrated'));
assert(initial.length > 0);
- assert.deepEqual(hydrated, initial.map(href => href +
'?from=search#usage'));
+ assert.deepEqual(hydrated, initial.map(href =>
href.endsWith('/archived-docs') ? href : href + '?from=search#usage'));
+ if (kind === 'version') assert(initial.includes('/ru/archived-docs'));
});
}
+
+test('unversioned docs plugins do not acquire the main documentation archive
link', () => {
+ const html = fixture('version', true, 'community')('server');
+ assert(!html.includes('/archived-docs'));
+});
+
+// Exercise the verifier's actual selector/predicate against markup rendered by
+// the production LanguageMenu. This runs before the expensive full-site build.
+function pageFor(html) {
+ const $ = cheerio.load(html);
+ const document = {querySelector(selector) {
+ const node = $(selector).first();
+ return node.length ? {getAttribute: name => node.attr(name)} : null;
+ }};
+ return {
+ async waitForFunction(predicate, args) {
+ const matches = vm.runInNewContext(`(${predicate.toString()})`,
{document})(args);
+ assert.equal(matches, true, 'Language switch href has not reached
the expected URL');
+ },
+ locator(selector) {return {first: () => ({async getAttribute(name)
{return $(selector).first().attr(name) ?? null;}})};},
+ };
+}
+
+for (const locale of ['zh-CN', 'ja', 'ko', 'ru']) test(`${locale} search
acceptance locates the real menu and requires query and fragment`, async () => {
+ const render = fixture('menu', false, 'default', locale);
+ const expected = '/docs/dev/topic/?from=search#usage';
+ const hydrated = '<a lang="en-US" href="/unrelated/">Other English
link</a>' + render('hydrated');
+ const $ = cheerio.load(hydrated);
+ assert.equal($('a.dropdown__link[lang="en-US"]').length, 0, 'Fixture must
use the current menu');
+ assert.equal($(englishLanguageSwitchSelector).length, 1);
+ await verifyLanguageSwitchHref(pageFor(hydrated), expected);
+ await assert.rejects(verifyLanguageSwitchHref(pageFor(render('server')),
expected));
+ for (const href of ['/docs/dev/topic/?from=search',
'/docs/dev/topic/#usage', '/other/?from=search#usage']) {
+ $(englishLanguageSwitchSelector).attr('href', href);
+ await assert.rejects(verifyLanguageSwitchHref(pageFor($.html()),
expected));
+ }
+});
diff --git a/scripts/i18n/__tests__/search-scopes.test.cjs
b/scripts/i18n/__tests__/search-scopes.test.cjs
index a1ac7e903f67..077711755a09 100644
--- a/scripts/i18n/__tests__/search-scopes.test.cjs
+++ b/scripts/i18n/__tests__/search-scopes.test.cjs
@@ -2,6 +2,7 @@ const
test=require('node:test'),assert=require('node:assert/strict'),fs=require(
const
{outputText}=ts.transpileModule(fs.readFileSync(path.resolve(__dirname,'../../../src/utils/searchScopes.js'),'utf8'),{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES2020}});
const moduleValue={exports:{}};new
Function('exports',outputText)(moduleValue.exports);
const
{resolveSearchScope,convertSearchParams,docSearchSourceVersion}=moduleValue.exports;
+const {verifySourceSearchHref}=require('../verify-search.cjs');
const
versions=['dev','4.x','3.x','2.1'].map(name=>({path:'/docs/'+name,isLast:name==='4.x'}));
const
source={versions,contexts:['docs','community','course','releases'],managed:false};
const
managed={versions,contexts:['docs/dev','docs/4.x','community','course','releases'],managed:true};
@@ -35,6 +36,27 @@ test('language conversion preserves the query and unrelated
parameters through a
for(const value of
[english,japanese]){assert.equal(value.get('q'),original.get('q'));assert.equal(value.get('probe'),original.get('probe'));}
assert.equal(original.get('ctx'),'docs/dev');
});
+test('source search acceptance validates URL values independently of parameter
order',()=>{
+ const origin='http://127.0.0.1:3000',query='zzzzqqqq_xxxxwwww';
+ // Use the same scope conversion as SearchPage, including its canonical
+ // ctx-first URL, which failed the old /search/?q= prefix assertion.
+ for(const input of [{q:query,ctx:'docs/dev'},{ctx:'docs/dev',q:query}]) {
+ const params=convertSearchParams(new URLSearchParams(input),source);
+ verifySourceSearchHref('/search/?'+params,origin,query);
+ }
+ const encodedQuery='Doris + 日本語 & запрос';
+ verifySourceSearchHref('/search/?'+new
URLSearchParams({version:'docs/dev/',ctx:'docs',q:encodedQuery}),origin,encodedQuery);
+ for(const href of [
+ '/search/?ctx=docs&q=other&version=docs%2Fdev%2F',
+ '/search/?q='+query+'&version=docs%2Fdev%2F',
+ '/search/?ctx=community&q='+query+'&version=docs%2Fdev%2F',
+ '/search/?ctx=docs&q='+query,
+ '/search/?ctx=docs&q='+query+'&version=docs%2F4.x%2F',
+ '/ja/search/?ctx=docs&q='+query+'&version=docs%2Fdev%2F',
+
'https://example.invalid/search/?ctx=docs&q='+query+'&version=docs%2Fdev%2F',
+ '/search/?ctx=docs&q='+query+'&q=other&version=docs%2Fdev%2F',
+
])assert.throws(()=>verifySourceSearchHref(href,origin,query),undefined,href);
+});
test('an implicit native default stays on the stable version when switching
languages',()=>{
const target=convertSearchParams(new
URLSearchParams({q:'Doris'}),managed,source);
assert.equal(target.get('ctx'),'docs/4.x');
diff --git a/scripts/i18n/__tests__/state.test.cjs
b/scripts/i18n/__tests__/state.test.cjs
index 57afb1581851..521be7252ad9 100644
--- a/scripts/i18n/__tests__/state.test.cjs
+++ b/scripts/i18n/__tests__/state.test.cjs
@@ -7,11 +7,11 @@ const {execFileSync} = require('node:child_process');
const {hash, identity, decide, loadRecords, loadRecordsAt, stateFileFor} =
require('../state.cjs');
const {structure, alignHeadings} = require('../structure.cjs');
-for (const locale of ['ja', 'ko', 'ru']) test(`${locale} version messages
match the custom banner interpolation contract`, () => {
+for (const locale of ['zh-CN', 'ja', 'ko', 'ru']) test(`${locale} version
messages match the custom banner interpolation contract`, () => {
const dictionary = require(`../../../i18n/${locale}/code.json`);
const variables = key =>
[...dictionary[key].message.matchAll(/\{(\w+)\}/g)].map(match =>
match[1]).sort();
assert.deepEqual(variables('theme.docs.versions.unreleasedVersionLabel'),
['unreleased']);
-
assert.deepEqual(variables('theme.docs.versions.latestVersionSuggestionLabel'),
['v21Link', 'v3xLink', 'v4xLink']);
+
assert.deepEqual(variables('theme.docs.versions.latestVersionSuggestionLabel'),
['v3xLink', 'v4xLink']);
});
const page = {pluginId: 'default', version: 'current', docId: 'intro', locale:
'ja', sourceLocale: 'en',
diff --git a/scripts/i18n/active-doc-versions.cjs
b/scripts/i18n/active-doc-versions.cjs
new file mode 100644
index 000000000000..e43929b549bb
--- /dev/null
+++ b/scripts/i18n/active-doc-versions.cjs
@@ -0,0 +1,20 @@
+const assert = require('node:assert/strict');
+const fs = require('node:fs');
+const path = require('node:path');
+
+function activeDocVersions(root = path.resolve(__dirname, '../..')) {
+ // Archived source directories remain in Git; versions.json defines which
+ // released versions are online. The native current version is additional.
+ const released = JSON.parse(fs.readFileSync(path.join(root,
'versions.json'), 'utf8'));
+ assert(Array.isArray(released) && released.every(version => typeof version
=== 'string' && version.trim()
+ && version !== 'current') && new Set(released).size ===
released.length,
+ 'versions.json must contain unique released version names, excluding
current');
+ return ['current', ...released];
+}
+
+function assertDocVersionCoverage(pages, locale, versions =
activeDocVersions()) {
+ const present = new Set(pages.filter(page => page.kind === 'docs' &&
page.pluginId === 'default').map(page => page.version));
+ for (const version of versions) assert(present.has(version), `Missing
version: ${locale}/${version}`);
+}
+
+module.exports = {activeDocVersions, assertDocVersionCoverage};
diff --git a/scripts/i18n/verify-first-release.cjs
b/scripts/i18n/verify-first-release.cjs
index b876ecdbe106..a496f278fa49 100644
--- a/scripts/i18n/verify-first-release.cjs
+++ b/scripts/i18n/verify-first-release.cjs
@@ -7,6 +7,7 @@ const {createHash} = require('node:crypto');
const {createServer} = require('../publish/serve.cjs');
const {verifyContent} = require('./verify-global-language.cjs');
const {localeRegistry} = require('../../config/i18n');
+const {activeDocVersions, assertDocVersionCoverage} =
require('./active-doc-versions.cjs');
const digest = bytes => createHash('sha256').update(bytes).digest('hex');
function verifyPublicIdentity({publicOrigin, landingOnly, sourceSha, asfSha,
runUrl, report, sha, site}) {
assert(!landingOnly, 'Public acceptance requires the complete
artifact');
@@ -23,6 +24,7 @@ function verifyPublicIdentity({publicOrigin, landingOnly,
sourceSha, asfSha, run
async function verify({site, directory, output, origin: publicOrigin,
landingOnly = false, sample = false, buildReport, sourceSha, asfSha, runUrl}) {
const {chromium} = require('playwright');
const locales = ['en', 'zh-CN', 'ja', 'ko', 'ru'];
+ const versions = landingOnly ? [] : activeDocVersions();
const manifests = Object.fromEntries(locales.map(locale => [locale,
JSON.parse(fs.readFileSync(path.join(directory, locale + '.json')))]));
const sha = manifests.en.sourceSha;
for (const locale of locales) {
@@ -32,8 +34,7 @@ async function verify({site, directory, output, origin:
publicOrigin, landingOnl
assert(home && home.fallback === intentionalFallback &&
home.contentLocale === (intentionalFallback ? 'en' : locale)
&& home.indexable === !intentionalFallback, `Homepage policy
mismatch: ${locale}`);
assert.deepEqual([...home.availableTranslations].sort(),
locales.slice().sort());
- if (!landingOnly) for (const version of ['current', '4.x', '3.x',
'2.1'])
- assert(manifests[locale].pages.some(row => row.kind === 'docs' &&
row.pluginId === 'default' && row.version === version), `Missing version:
${locale}/${version}`);
+ if (!landingOnly) assertDocVersionCoverage(manifests[locale].pages,
locale, versions);
}
if (publicOrigin) verifyPublicIdentity({publicOrigin, landingOnly:
landingOnly || sample, sourceSha, asfSha, runUrl,
report: JSON.parse(fs.readFileSync(buildReport)), sha, site});
diff --git a/scripts/i18n/verify-product-pages.cjs
b/scripts/i18n/verify-product-pages.cjs
index 298c48ce68f5..18d4069d3a4c 100644
--- a/scripts/i18n/verify-product-pages.cjs
+++ b/scripts/i18n/verify-product-pages.cjs
@@ -9,6 +9,7 @@ const cheerio = require('cheerio');
const matter = require('gray-matter');
const {createServer} = require('../publish/serve.cjs');
const {localeRegistry} = require('../../config/i18n');
+const {activeDocVersions, assertDocVersionCoverage} =
require('./active-doc-versions.cjs');
const {generate} = require('../key-features/generate');
const root = path.resolve(__dirname, '../..');
@@ -135,11 +136,10 @@ async function verify({site, directory, output, origin:
publicOrigin, requireCom
if (publicOrigin) {
assert(!fs.existsSync(path.join(site, '.ci-validation.json')), 'A
partial CI artifact cannot establish public acceptance');
assert(fs.existsSync(path.join(site, '.publish/redirects.json')),
'Public acceptance requires the optimized publication artifact');
+ const versions = activeDocVersions();
for (const locale of locales) {
const manifest = JSON.parse(fs.readFileSync(path.join(directory,
locale + '.json')));
- for (const version of ['current', '4.x', '3.x', '2.1'])
- assert(manifest.pages.some(row => row.kind === 'docs' &&
row.pluginId === 'default' && row.version === version),
- `Missing publication version: ${locale}/${version}`);
+ assertDocVersionCoverage(manifest.pages, locale, versions);
}
}
const report = {schemaVersion: 1, sourceSha: native.sourceSha,
diff --git a/scripts/i18n/verify-search.cjs b/scripts/i18n/verify-search.cjs
index 361736c334ff..b24b8b2dabee 100644
--- a/scripts/i18n/verify-search.cjs
+++ b/scripts/i18n/verify-search.cjs
@@ -5,6 +5,20 @@ const {createServer} = require('../publish/serve.cjs');
const root = path.resolve(__dirname, '../..');
const {contextsFor, groupFor} = require('./search-plugin.cjs');
const route = url => new URL(url,
'https://doris.apache.org').pathname.replace(/\/?$/, '/');
+const englishLanguageSwitchSelector = '.language-menu__links a[lang="en-US"]';
+async function verifyLanguageSwitchHref(page, expected) {
+ await page.waitForFunction(({selector, href}) =>
+ document.querySelector(selector)?.getAttribute('href') === href,
+ {selector: englishLanguageSwitchSelector, href: expected});
+ assert.equal(await
page.locator(englishLanguageSwitchSelector).first().getAttribute('href'),
expected);
+}
+function verifySourceSearchHref(href, origin, query) {
+ const source = new URL(href, origin);
+ assert.equal(source.origin, origin, href);
+ assert.equal(source.pathname, '/search/', href);
+ for (const [name, value] of Object.entries({q:query, ctx:'docs',
version:'docs/dev/'}))
+ assert.deepEqual(source.searchParams.getAll(name), [value], href);
+}
const corpus = {
ja: {database:'データベース', query:'分析', community:'コミュニティ'},
ko: {database:'데이터베이스', query:'쿼리', community:'커뮤니티'},
@@ -157,11 +171,7 @@ async function verify({site, locale = 'ja', devOnly =
false, sourceLocales = [],
assert.equal(source.hash, '#core-highlights');
// Hydration must update language-switch attributes as well as the
// source link. SSR cannot know the request's query or fragment.
- const englishSwitch =
navigation.locator('a.dropdown__link[lang="en-US"]').first();
- await navigation.waitForFunction(expected =>
-
document.querySelector('a.dropdown__link[lang="en-US"]')?.getAttribute('href')
=== expected,
- current.englishPermalink + source.search + source.hash);
- assert.equal(await englishSwitch.getAttribute('href'),
current.englishPermalink + source.search + source.hash);
+ await verifyLanguageSwitchHref(navigation,
current.englishPermalink + source.search + source.hash);
const linked = await
navigation.locator('a[href]').evaluateAll(nodes => nodes.map(node => new
URL(node.href).pathname));
// A fully translated Dev links no fallback, but the version menu
still
// reaches versions outside the scope. Dev-only builds omit them.
@@ -219,12 +229,12 @@ async function verify({site, locale = 'ja', devOnly =
false, sourceLocales = [],
results.push({mobile:true,inputWidth:Math.round(box.width)});
await mobile.close();
const empty = await newPage();
- await open(empty,
`/${locale}/search/?q=zzzzqqqq_xxxxwwww&ctx=docs/dev`);
+ const emptyQuery = 'zzzzqqqq_xxxxwwww';
+ await open(empty, `/${locale}/search/?${new
URLSearchParams({q:emptyQuery,ctx:'docs/dev'})}`);
const label = dictionary['theme.SearchPage.searchSource'].message;
await
empty.getByRole('link',{name:label,exact:true}).waitFor({timeout:30000});
const original = await
empty.getByRole('link',{name:label,exact:true}).getAttribute('href');
- assert(original.startsWith('/search/?q='), original);
- assert.equal(new URL(original,origin).searchParams.get('version'),
'docs/dev/');
+ verifySourceSearchHref(original, origin, emptyQuery);
results.push({noResultsOriginalSearch:original});
await empty.close();
for (const sourceLocale of sourceLocales) {
@@ -281,4 +291,4 @@ if (require.main === module) {
.then(result=>{if(option('--output'))fs.writeFileSync(option('--output'),JSON.stringify(result,null,2)+'\n');console.log(JSON.stringify(result));})
.catch(error=>{console.error(error);process.exitCode=1;});
}
-module.exports = {verify, checkIndexes};
+module.exports = {verify, checkIndexes, englishLanguageSwitchSelector,
verifyLanguageSwitchHref, verifySourceSearchHref};
diff --git a/src/components/home-next/NavbarNext.tsx
b/src/components/home-next/NavbarNext.tsx
index 5c9790a84272..e490bb0f514a 100644
--- a/src/components/home-next/NavbarNext.tsx
+++ b/src/components/home-next/NavbarNext.tsx
@@ -30,7 +30,7 @@ function buildNavItems(
devDocsHref: string,
stableDocsHref: string,
v3xDocsHref: string,
- v21DocsHref: string,
+ archivedDocsHref: string,
releasesHref: string,
roadmapHref: string,
joinCommunityHref: string,
@@ -82,7 +82,7 @@ function buildNavItems(
{ label: 'Dev', href: devDocsHref },
{ label: '4.x', href: stableDocsHref },
{ label: '3.x', href: v3xDocsHref },
- { label: '2.1', href: v21DocsHref },
+ { label: translate({id: 'docs.archive.title', message:
'Archived Versions'}), href: archivedDocsHref },
],
},
{
@@ -172,9 +172,9 @@ export function NavbarNext(): JSX.Element {
const navbarRef = useRef<HTMLElement>(null);
const devDocsHref = `/docs/dev/getting-started/what-is-apache-doris`;
const stableDocsHref = `/docs/4.x/getting-started/what-is-apache-doris`;
- // 3.x and 2.1 use the legacy slug structure (gettingStarted/ with
camelCase).
+ // 3.x uses the legacy slug structure (gettingStarted/ with camelCase).
const v3xDocsHref = `/docs/3.x/gettingStarted/what-is-apache-doris`;
- const v21DocsHref = `/docs/2.1/gettingStarted/what-is-apache-doris`;
+ const archivedDocsHref = '/archived-docs';
const releasesHref = `/releases/all-release`;
const roadmapHref = `/community/roadmap`;
const joinCommunityHref = `/community/join-community`;
@@ -185,7 +185,7 @@ export function NavbarNext(): JSX.Element {
devDocsHref,
stableDocsHref,
v3xDocsHref,
- v21DocsHref,
+ archivedDocsHref,
releasesHref,
roadmapHref,
joinCommunityHref,
diff --git a/src/pages/archived-docs/index.tsx
b/src/pages/archived-docs/index.tsx
new file mode 100644
index 000000000000..fa8b71133d76
--- /dev/null
+++ b/src/pages/archived-docs/index.tsx
@@ -0,0 +1,43 @@
+import React, {type JSX} from 'react';
+import {translate} from '@docusaurus/Translate';
+import Layout from '@theme/Layout';
+import Link from '@site/src/components/home-next/LocalizedLink';
+import archive from '@site/config/archived-docs.json';
+import './styles.scss';
+
+export default function ArchivedDocs(): JSX.Element {
+ const title = translate({id: 'docs.archive.title', message: 'Archived
Versions'});
+ const description = translate({id: 'docs.archive.description', message:
'Download PDF documentation for archived Apache Doris versions.'});
+ return (
+ <Layout title={title} description={description}>
+ <main className="archived-docs">
+ <header>
+ <p className="archived-docs__eyebrow">APACHE DORIS</p>
+ <h1>{title}</h1>
+ <p>{description}</p>
+ <p>{translate({id: 'docs.archive.notice', message: 'These
documentation versions are no longer updated. Each PDF contains the complete
documentation for the selected version and language.'})}</p>
+ <Link className="archived-docs__current"
to="/docs/4.x/getting-started/what-is-apache-doris">
+ {translate({id: 'docs.archive.current', message: 'Read
the current stable documentation'})} <span aria-hidden="true">→</span>
+ </Link>
+ </header>
+ <section aria-label={title}
className="archived-docs__versions">
+ {archive.versions.map(version => (
+ <article key={version} id={`version-${version}`}
className="archived-docs__version">
+ <h2>Apache Doris {version}</h2>
+ <div className="archived-docs__downloads">
+ {archive.locales.map(locale => {
+ const filename =
`apache-doris-${version}-${locale}.pdf`;
+ return <a key={locale}
href={`${archive.baseUrl.replace(/\/$/, '')}/${filename}`} download={filename}
+ aria-label={`Apache Doris ${version} ·
${locale === 'en' ? 'English' : '中文'} · PDF`}>
+ <span lang={locale}>{locale === 'en' ?
'English' : '中文'}</span>
+ <span
className="archived-docs__format">PDF <span aria-hidden="true">↓</span></span>
+ </a>;
+ })}
+ </div>
+ </article>
+ ))}
+ </section>
+ </main>
+ </Layout>
+ );
+}
diff --git a/src/pages/archived-docs/styles.scss
b/src/pages/archived-docs/styles.scss
new file mode 100644
index 000000000000..ed8b29905d81
--- /dev/null
+++ b/src/pages/archived-docs/styles.scss
@@ -0,0 +1,51 @@
+.archived-docs {
+ width: min(100% - 3rem, 64rem);
+ margin: 0 auto;
+ padding: 5rem 0 6rem;
+ color: var(--brand-ink);
+
+ header { max-width: 47rem; margin-bottom: 3rem; }
+ h1 { font-size: clamp(2rem, 5vw, 3rem); line-height: 1.2; margin: 0 0
1.25rem; }
+ p { line-height: 1.75; }
+ &__eyebrow { color: var(--brand-primary-darkest); font-size: .8rem;
letter-spacing: .12em; font-weight: 700; }
+ &__current { color: var(--brand-primary-darkest); font-weight: 600; }
+ &__versions { display: grid; gap: 1.25rem; }
+ &__version {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 1.5rem;
+ padding: 1.75rem 2rem;
+ border: 1px solid var(--brand-border-soft);
+ border-radius: .75rem;
+ background: var(--brand-surface-faint);
+ h2 { font-size: 1.3rem; margin: 0; }
+ }
+ &__downloads {
+ display: flex;
+ flex-wrap: wrap;
+ gap: .75rem;
+ a {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 1.5rem;
+ min-width: 9rem;
+ padding: .7rem 1rem;
+ border: 1px solid var(--brand-border-soft);
+ border-radius: .4rem;
+ color: var(--brand-primary-darkest);
+ background: var(--brand-surface-note);
+ font-weight: 600;
+ &:hover { background: var(--brand-surface-callout);
text-decoration: underline; }
+ &:focus-visible { outline: 2px solid var(--brand-primary-darkest);
outline-offset: 3px; }
+ }
+ }
+ &__format { font-size: .75rem; font-weight: 400; }
+
+ @media (max-width: 640px) {
+ padding: 3rem 0 4rem;
+ &__version { align-items: stretch; flex-direction: column; padding:
1.5rem; }
+ &__downloads a { flex: 1; }
+ }
+}
diff --git a/src/theme/DocVersionBanner/index.tsx
b/src/theme/DocVersionBanner/index.tsx
index 764a3f16f821..f50f1d2a9e15 100644
--- a/src/theme/DocVersionBanner/index.tsx
+++ b/src/theme/DocVersionBanner/index.tsx
@@ -68,12 +68,10 @@ function BannerLabel(props: BannerLabelComponentProps) {
function VersionsSuggestionLabel({
v4xTo,
v3xTo,
- v21To,
onClick,
}: {
v4xTo: string;
v3xTo: string;
- v21To: string;
onClick: () => void;
}) {
return (
@@ -95,16 +93,9 @@ function VersionsSuggestionLabel({
</Link>
</b>
),
- v21Link: (
- <b>
- <Link to={v21To} onClick={onClick}>
- 2.1
- </Link>
- </b>
- ),
}}
>
- {'For usage, please refer to the official documentation of Version
{v4xLink}/{v3xLink}/{v21Link}'}
+ {'For usage, please refer to the official documentation of Version
{v4xLink}/{v3xLink}'}
</Translate>
);
}
@@ -136,7 +127,6 @@ function DocVersionBannerEnabled({
const v4xTo = resolveDocPath('4.x');
const v3xTo = resolveDocPath('3.x');
- const v21To = resolveDocPath('2.1');
return (
<div
@@ -150,7 +140,6 @@ function DocVersionBannerEnabled({
<VersionsSuggestionLabel
v4xTo={v4xTo}
v3xTo={v3xTo}
- v21To={v21To}
onClick={() =>
savePreferredVersionName(latestVersionSuggestion.name)}
/>
</div>
diff --git a/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx
b/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx
index 1d6c2db36cb3..88fdf7e41b03 100644
--- a/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx
+++ b/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, {type JSX} from 'react';
import {
useVersions,
useActiveDocContext,
@@ -9,6 +9,7 @@ import { translate } from '@docusaurus/Translate';
import { useLocation } from '@docusaurus/router';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import useIsBrowser from '@docusaurus/useIsBrowser';
+import useBaseUrl from '@docusaurus/useBaseUrl';
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
import type { Props } from '@theme/NavbarItem/DocsVersionDropdownNavbarItem';
@@ -39,6 +40,7 @@ export default function DocsVersionDropdownNavbarItem({
i18n: { currentLocale },
} = useDocusaurusContext();
const activeDocContext = useActiveDocContext(docsPluginId);
+ const archiveUrl = useBaseUrl('/archived-docs');
const versions = useVersions(docsPluginId);
const { savePreferredVersionName } = useDocsPreferredVersion(docsPluginId);
const versionLinks = versions.map(version => {
@@ -64,7 +66,10 @@ export default function DocsVersionDropdownNavbarItem({
onClick: () => savePreferredVersionName(version.name),
};
}
- const items: LinkLikeNavbarItemProps[] = [...dropdownItemsBefore,
...versionLinks, ...dropdownItemsAfter];
+ const archiveLinks = !docsPluginId || docsPluginId === 'default'
+ ? [{label: translate({id: 'docs.archive.title', message: 'Archived
Versions'}), to: archiveUrl}]
+ : [];
+ const items: LinkLikeNavbarItemProps[] = [...dropdownItemsBefore,
...versionLinks, ...archiveLinks, ...dropdownItemsAfter];
const dropdownVersion = useDocsVersionCandidates(docsPluginId)[0];
diff --git a/translations/pages/registry.json b/translations/pages/registry.json
index bc8c8df824f0..086fe8f2e41f 100644
--- a/translations/pages/registry.json
+++ b/translations/pages/registry.json
@@ -5551,6 +5551,22 @@
"id": "slack",
"kind": "utility",
"sourcePath": "src/pages/slack.tsx"
+ },
+ {
+ "id": "archived-docs",
+ "kind": "page",
+ "sourcePath": "src/pages/archived-docs/index.tsx",
+ "sourceFiles": [
+ "config/archived-docs.json",
+ "src/pages/archived-docs/index.tsx",
+ "src/pages/archived-docs/styles.scss"
+ ],
+ "messageKeys": [
+ "docs.archive.current",
+ "docs.archive.description",
+ "docs.archive.notice",
+ "docs.archive.title"
+ ]
}
],
"englishFallbackLocales": []
diff --git a/translations/pages/state.json b/translations/pages/state.json
index b15a0966f595..62f2ba95ebb0 100644
--- a/translations/pages/state.json
+++ b/translations/pages/state.json
@@ -57,7 +57,7 @@
"homepage"
],
"sourceHash":
"04fd2ce6e5f2be735f687ceb1ec9bec5ed53b8d366183d51cf475c35c7669a12",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewStatus": "machine",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
@@ -117,7 +117,7 @@
"homepage"
],
"sourceHash":
"04fd2ce6e5f2be735f687ceb1ec9bec5ed53b8d366183d51cf475c35c7669a12",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259"
},
@@ -177,7 +177,7 @@
"homepage"
],
"sourceHash":
"04fd2ce6e5f2be735f687ceb1ec9bec5ed53b8d366183d51cf475c35c7669a12",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259"
},
@@ -237,7 +237,7 @@
"homepage"
],
"sourceHash":
"04fd2ce6e5f2be735f687ceb1ec9bec5ed53b8d366183d51cf475c35c7669a12",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259"
},
@@ -266,7 +266,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"337dfd3f9d86e98e05591d6fdf27f5d460fabb70298294ad7f770a74d74c9dff",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -293,7 +293,7 @@
"i18n/ja/code.json"
],
"sourceHash":
"337dfd3f9d86e98e05591d6fdf27f5d460fabb70298294ad7f770a74d74c9dff",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -323,7 +323,7 @@
"i18n/ko/code.json"
],
"sourceHash":
"337dfd3f9d86e98e05591d6fdf27f5d460fabb70298294ad7f770a74d74c9dff",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -353,7 +353,7 @@
"i18n/ru/code.json"
],
"sourceHash":
"337dfd3f9d86e98e05591d6fdf27f5d460fabb70298294ad7f770a74d74c9dff",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -375,7 +375,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"faa2dfb60b7b2f2f263f67eb4dd791feb6b1c763259ce1aacb0280c3f2d1184c",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -393,7 +393,7 @@
"i18n/ja/code.json"
],
"sourceHash":
"faa2dfb60b7b2f2f263f67eb4dd791feb6b1c763259ce1aacb0280c3f2d1184c",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -414,7 +414,7 @@
"i18n/ko/code.json"
],
"sourceHash":
"faa2dfb60b7b2f2f263f67eb4dd791feb6b1c763259ce1aacb0280c3f2d1184c",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -435,7 +435,7 @@
"i18n/ru/code.json"
],
"sourceHash":
"faa2dfb60b7b2f2f263f67eb4dd791feb6b1c763259ce1aacb0280c3f2d1184c",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -457,7 +457,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"0e443a2d62bcd13a7bd71a95a3aad9a856a8789f5c423e533ba0f75fb9c4909b",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -475,7 +475,7 @@
"i18n/ja/code.json"
],
"sourceHash":
"0e443a2d62bcd13a7bd71a95a3aad9a856a8789f5c423e533ba0f75fb9c4909b",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"derivedDependencies": [
@@ -499,7 +499,7 @@
"i18n/ko/code.json"
],
"sourceHash":
"0e443a2d62bcd13a7bd71a95a3aad9a856a8789f5c423e533ba0f75fb9c4909b",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"derivedDependencies": [
@@ -523,7 +523,7 @@
"i18n/ru/code.json"
],
"sourceHash":
"0e443a2d62bcd13a7bd71a95a3aad9a856a8789f5c423e533ba0f75fb9c4909b",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"derivedDependencies": [
@@ -687,7 +687,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"cc12416cf9494de15597003e40491c91a2197b819a99dc0d293cb0cf07660438",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -849,7 +849,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"cc12416cf9494de15597003e40491c91a2197b819a99dc0d293cb0cf07660438",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P05",
@@ -1010,7 +1010,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"cc12416cf9494de15597003e40491c91a2197b819a99dc0d293cb0cf07660438",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P05",
@@ -1171,7 +1171,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"cc12416cf9494de15597003e40491c91a2197b819a99dc0d293cb0cf07660438",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P06",
@@ -1194,7 +1194,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"572f5460f3e88a1d45232ffa837c236f06d2a8f18132fcd63cade5f19d831500",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -1217,7 +1217,7 @@
"i18n/ja/code.json"
],
"sourceHash":
"572f5460f3e88a1d45232ffa837c236f06d2a8f18132fcd63cade5f19d831500",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1243,7 +1243,7 @@
"i18n/ko/code.json"
],
"sourceHash":
"572f5460f3e88a1d45232ffa837c236f06d2a8f18132fcd63cade5f19d831500",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1269,7 +1269,7 @@
"i18n/ru/code.json"
],
"sourceHash":
"572f5460f3e88a1d45232ffa837c236f06d2a8f18132fcd63cade5f19d831500",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1296,7 +1296,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"82b97c655120ad6aafaa445bc35f4b6a48330ad70aba5e8128c998c7ca3dd92f",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -1319,7 +1319,7 @@
"i18n/ja/code.json"
],
"sourceHash":
"82b97c655120ad6aafaa445bc35f4b6a48330ad70aba5e8128c998c7ca3dd92f",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1345,7 +1345,7 @@
"i18n/ko/code.json"
],
"sourceHash":
"82b97c655120ad6aafaa445bc35f4b6a48330ad70aba5e8128c998c7ca3dd92f",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1371,7 +1371,7 @@
"i18n/ru/code.json"
],
"sourceHash":
"82b97c655120ad6aafaa445bc35f4b6a48330ad70aba5e8128c998c7ca3dd92f",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1398,7 +1398,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"41300ff30c8bfa4923eadc74667c4195cc246a20fb823c4edb4f3aaa97124aef",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -1421,7 +1421,7 @@
"i18n/ja/code.json"
],
"sourceHash":
"41300ff30c8bfa4923eadc74667c4195cc246a20fb823c4edb4f3aaa97124aef",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1447,7 +1447,7 @@
"i18n/ko/code.json"
],
"sourceHash":
"41300ff30c8bfa4923eadc74667c4195cc246a20fb823c4edb4f3aaa97124aef",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1473,7 +1473,7 @@
"i18n/ru/code.json"
],
"sourceHash":
"41300ff30c8bfa4923eadc74667c4195cc246a20fb823c4edb4f3aaa97124aef",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1497,7 +1497,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"15d1b62c09dd2e12754c4219df7a67b426d8088d7b3506837e12171349acec00",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -1517,7 +1517,7 @@
"i18n/ja/code.json"
],
"sourceHash":
"15d1b62c09dd2e12754c4219df7a67b426d8088d7b3506837e12171349acec00",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1540,7 +1540,7 @@
"i18n/ko/code.json"
],
"sourceHash":
"15d1b62c09dd2e12754c4219df7a67b426d8088d7b3506837e12171349acec00",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1563,7 +1563,7 @@
"i18n/ru/code.json"
],
"sourceHash":
"15d1b62c09dd2e12754c4219df7a67b426d8088d7b3506837e12171349acec00",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
"reviewStatus": "machine",
"compatibilitySource": "Existing seven marketing pages at
bb7e86a7ff7b9232af24090928cfbc9a87d8a3b2",
"reviewedSourceCommit": "2df4bc3783d68b5d1b9b50cca4ffda6f8046b259",
@@ -1594,7 +1594,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"9a606e29b717c97f10e92019c0449174ad2dc7f411a28e5e921abecff3576cb4",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "df07fea7243b149566236fc0932304564fab2d25"
},
{
@@ -1628,7 +1628,7 @@
],
"reviewedSourceCommit": "df07fea7243b149566236fc0932304564fab2d25",
"sourceHash":
"9a606e29b717c97f10e92019c0449174ad2dc7f411a28e5e921abecff3576cb4",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P10",
@@ -1661,7 +1661,7 @@
],
"reviewedSourceCommit": "df07fea7243b149566236fc0932304564fab2d25",
"sourceHash":
"9a606e29b717c97f10e92019c0449174ad2dc7f411a28e5e921abecff3576cb4",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P10",
@@ -1694,7 +1694,7 @@
],
"reviewedSourceCommit": "df07fea7243b149566236fc0932304564fab2d25",
"sourceHash":
"9a606e29b717c97f10e92019c0449174ad2dc7f411a28e5e921abecff3576cb4",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P11",
@@ -1721,7 +1721,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"eca1dd2eaf22825059040986b901880e13416a8ef56279c66e7516196e0b51f6",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4"
},
{
@@ -1753,7 +1753,7 @@
],
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4",
"sourceHash":
"eca1dd2eaf22825059040986b901880e13416a8ef56279c66e7516196e0b51f6",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P11",
@@ -1784,7 +1784,7 @@
],
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4",
"sourceHash":
"eca1dd2eaf22825059040986b901880e13416a8ef56279c66e7516196e0b51f6",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P11",
@@ -1815,7 +1815,7 @@
],
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4",
"sourceHash":
"eca1dd2eaf22825059040986b901880e13416a8ef56279c66e7516196e0b51f6",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P12",
@@ -1869,7 +1869,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"fbc29f6ab62e9b5ec55d2d2c689d881ef94cb313ef4de07026ca70ca30bae97c",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4"
},
{
@@ -1928,7 +1928,7 @@
],
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4",
"sourceHash":
"fbc29f6ab62e9b5ec55d2d2c689d881ef94cb313ef4de07026ca70ca30bae97c",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P12",
@@ -1986,7 +1986,7 @@
],
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4",
"sourceHash":
"fbc29f6ab62e9b5ec55d2d2c689d881ef94cb313ef4de07026ca70ca30bae97c",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P12",
@@ -2044,7 +2044,7 @@
],
"reviewedSourceCommit": "5264923f07b0cb362febce45b5d62abd94966de4",
"sourceHash":
"fbc29f6ab62e9b5ec55d2d2c689d881ef94cb313ef4de07026ca70ca30bae97c",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P13",
@@ -2060,7 +2060,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"04aea9fc522482abd7826e6bc880d753a67c298e71a743cb8b660ba599924aa3",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -2081,7 +2081,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"04aea9fc522482abd7826e6bc880d753a67c298e71a743cb8b660ba599924aa3",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P13",
@@ -2101,7 +2101,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"04aea9fc522482abd7826e6bc880d753a67c298e71a743cb8b660ba599924aa3",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P13",
@@ -2121,7 +2121,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"04aea9fc522482abd7826e6bc880d753a67c298e71a743cb8b660ba599924aa3",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P14",
@@ -2156,7 +2156,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"19ac30159720760fb2140606d3a5f145d7cf317d10436f362b7854a896aaded9",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "bd675d25613a69a75e5f97196d6d32f2fd05a0c3"
},
{
@@ -2196,7 +2196,7 @@
],
"reviewedSourceCommit": "bd675d25613a69a75e5f97196d6d32f2fd05a0c3",
"sourceHash":
"19ac30159720760fb2140606d3a5f145d7cf317d10436f362b7854a896aaded9",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P14",
@@ -2235,7 +2235,7 @@
],
"reviewedSourceCommit": "bd675d25613a69a75e5f97196d6d32f2fd05a0c3",
"sourceHash":
"19ac30159720760fb2140606d3a5f145d7cf317d10436f362b7854a896aaded9",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P14",
@@ -2274,7 +2274,7 @@
],
"reviewedSourceCommit": "bd675d25613a69a75e5f97196d6d32f2fd05a0c3",
"sourceHash":
"19ac30159720760fb2140606d3a5f145d7cf317d10436f362b7854a896aaded9",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P15",
@@ -2296,7 +2296,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"29ba179001533b26c301882a156148556ce5cfd423754b1b4afc7af0cc6aad98",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -2323,7 +2323,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"29ba179001533b26c301882a156148556ce5cfd423754b1b4afc7af0cc6aad98",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P15",
@@ -2349,7 +2349,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"29ba179001533b26c301882a156148556ce5cfd423754b1b4afc7af0cc6aad98",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P15",
@@ -2375,7 +2375,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"29ba179001533b26c301882a156148556ce5cfd423754b1b4afc7af0cc6aad98",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P16",
@@ -2400,7 +2400,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"3d1c44d11b35385356c1254afadae40ed492110abfc9d5406d603585bfd23a63",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -2430,7 +2430,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"3d1c44d11b35385356c1254afadae40ed492110abfc9d5406d603585bfd23a63",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P16",
@@ -2459,7 +2459,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"3d1c44d11b35385356c1254afadae40ed492110abfc9d5406d603585bfd23a63",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P16",
@@ -2488,7 +2488,7 @@
],
"reviewedSourceCommit": "3f9be0688303724a81180847311584185ee1baa7",
"sourceHash":
"3d1c44d11b35385356c1254afadae40ed492110abfc9d5406d603585bfd23a63",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P17",
@@ -2513,7 +2513,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"ea46072e6b95eaea26b71cd718979c46ba20acbee027800a115ca3c7bae76ef9",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -2543,7 +2543,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"ea46072e6b95eaea26b71cd718979c46ba20acbee027800a115ca3c7bae76ef9",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P17",
@@ -2572,7 +2572,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"ea46072e6b95eaea26b71cd718979c46ba20acbee027800a115ca3c7bae76ef9",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P17",
@@ -2601,7 +2601,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"ea46072e6b95eaea26b71cd718979c46ba20acbee027800a115ca3c7bae76ef9",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P18",
@@ -2626,7 +2626,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"d73b197f3be189748bc2cf90cf871bcfcc9ffce5ed5940961741be5722ea8036",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -2656,7 +2656,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"d73b197f3be189748bc2cf90cf871bcfcc9ffce5ed5940961741be5722ea8036",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P18",
@@ -2685,7 +2685,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"d73b197f3be189748bc2cf90cf871bcfcc9ffce5ed5940961741be5722ea8036",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P18",
@@ -2714,7 +2714,7 @@
],
"reviewedSourceCommit": "3f9be0688303724a81180847311584185ee1baa7",
"sourceHash":
"d73b197f3be189748bc2cf90cf871bcfcc9ffce5ed5940961741be5722ea8036",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P19",
@@ -2739,7 +2739,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"009c25f0cea8f61ecd48644d2f53c3434503616f31334a79a33061983525ad6a",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "3a9e30380a8f000d7583b107059af36f885af6ac"
},
{
@@ -2769,7 +2769,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"009c25f0cea8f61ecd48644d2f53c3434503616f31334a79a33061983525ad6a",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P19",
@@ -2798,7 +2798,7 @@
],
"reviewedSourceCommit": "84fc102161d192a2ef7547a034db5035b21fc12d",
"sourceHash":
"009c25f0cea8f61ecd48644d2f53c3434503616f31334a79a33061983525ad6a",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P19",
@@ -2827,7 +2827,7 @@
],
"reviewedSourceCommit": "3f9be0688303724a81180847311584185ee1baa7",
"sourceHash":
"009c25f0cea8f61ecd48644d2f53c3434503616f31334a79a33061983525ad6a",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P20",
@@ -2854,7 +2854,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"2ea6430ef3e51508a055113c5311f8e6f487fd133592861cfc10f4cec3c22506",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc"
},
{
@@ -2886,7 +2886,7 @@
],
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc",
"sourceHash":
"2ea6430ef3e51508a055113c5311f8e6f487fd133592861cfc10f4cec3c22506",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P20",
@@ -2917,7 +2917,7 @@
],
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc",
"sourceHash":
"2ea6430ef3e51508a055113c5311f8e6f487fd133592861cfc10f4cec3c22506",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P20",
@@ -2948,7 +2948,7 @@
],
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc",
"sourceHash":
"2ea6430ef3e51508a055113c5311f8e6f487fd133592861cfc10f4cec3c22506",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
},
{
"contentId": "page:P21",
@@ -2986,7 +2986,7 @@
],
"reviewStatus": "machine",
"sourceHash":
"adbbc6ec57dabb8bf267b547ebd87a096031e99fd69ecc2697ddb1c27d665c29",
- "targetHash":
"6c7b36f3037200fa69d7845403d10aa12318a950a8f7c0eced1a17f9297ecf6e",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc"
},
{
@@ -3029,7 +3029,7 @@
],
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc",
"sourceHash":
"adbbc6ec57dabb8bf267b547ebd87a096031e99fd69ecc2697ddb1c27d665c29",
- "targetHash":
"fb9493a57e153e98543f0ab46afdb536d0cf641ba09ff473d8de6e48ad878c01"
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167"
},
{
"contentId": "page:P21",
@@ -3071,7 +3071,7 @@
],
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc",
"sourceHash":
"adbbc6ec57dabb8bf267b547ebd87a096031e99fd69ecc2697ddb1c27d665c29",
- "targetHash":
"96b29d0e4ed9f61a243992afb57431463cfd1d409bbb5a8837b8b1647c000a25"
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0"
},
{
"contentId": "page:P21",
@@ -3113,7 +3113,95 @@
],
"reviewedSourceCommit": "83db37675df50061dbf657a93706b920ffccbcbc",
"sourceHash":
"adbbc6ec57dabb8bf267b547ebd87a096031e99fd69ecc2697ddb1c27d665c29",
- "targetHash":
"db32c1458a7a2fb7c9d05d5751f689f48955910c3cfe1d8522e13a822c7d8d68"
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa"
+ },
+ {
+ "contentId": "page:archived-docs",
+ "locale": "zh-CN",
+ "state": "ready",
+ "sourceFiles": [
+ "config/archived-docs.json",
+ "src/pages/archived-docs/index.tsx",
+ "src/pages/archived-docs/styles.scss"
+ ],
+ "targetFiles": [
+ "i18n/zh-CN/code.json"
+ ],
+ "messageKeys": [
+ "docs.archive.current",
+ "docs.archive.description",
+ "docs.archive.notice",
+ "docs.archive.title"
+ ],
+ "sourceHash":
"0df5166f5ec3532c2dd3a4e3a2d591dbbb10b0e66537d9bd24d8c26cf7592c83",
+ "targetHash":
"69ce7f26d6a8e4838bec8a1e766c1e926f3d24a1c8d14c87cd5bb37fbefba322",
+ "reviewStatus": "machine"
+ },
+ {
+ "contentId": "page:archived-docs",
+ "locale": "ja",
+ "state": "ready",
+ "sourceFiles": [
+ "config/archived-docs.json",
+ "src/pages/archived-docs/index.tsx",
+ "src/pages/archived-docs/styles.scss"
+ ],
+ "targetFiles": [
+ "i18n/ja/code.json"
+ ],
+ "messageKeys": [
+ "docs.archive.current",
+ "docs.archive.description",
+ "docs.archive.notice",
+ "docs.archive.title"
+ ],
+ "sourceHash":
"0df5166f5ec3532c2dd3a4e3a2d591dbbb10b0e66537d9bd24d8c26cf7592c83",
+ "targetHash":
"abe03ef14786120753856c57e34c89caa5cd155f9e0f1cdd82f0f7661f34a167",
+ "reviewStatus": "machine"
+ },
+ {
+ "contentId": "page:archived-docs",
+ "locale": "ko",
+ "state": "ready",
+ "sourceFiles": [
+ "config/archived-docs.json",
+ "src/pages/archived-docs/index.tsx",
+ "src/pages/archived-docs/styles.scss"
+ ],
+ "targetFiles": [
+ "i18n/ko/code.json"
+ ],
+ "messageKeys": [
+ "docs.archive.current",
+ "docs.archive.description",
+ "docs.archive.notice",
+ "docs.archive.title"
+ ],
+ "sourceHash":
"0df5166f5ec3532c2dd3a4e3a2d591dbbb10b0e66537d9bd24d8c26cf7592c83",
+ "targetHash":
"d02fe109727675a20e7c5f44696f6ce7449b058462f7fffda54b681c66a6ffe0",
+ "reviewStatus": "machine"
+ },
+ {
+ "contentId": "page:archived-docs",
+ "locale": "ru",
+ "state": "ready",
+ "sourceFiles": [
+ "config/archived-docs.json",
+ "src/pages/archived-docs/index.tsx",
+ "src/pages/archived-docs/styles.scss"
+ ],
+ "targetFiles": [
+ "i18n/ru/code.json"
+ ],
+ "messageKeys": [
+ "docs.archive.current",
+ "docs.archive.description",
+ "docs.archive.notice",
+ "docs.archive.title"
+ ],
+ "sourceHash":
"0df5166f5ec3532c2dd3a4e3a2d591dbbb10b0e66537d9bd24d8c26cf7592c83",
+ "targetHash":
"1a7386bb841974641f33176fdfdea5c7a8c79bab2fbcce78969b438e1851a9aa",
+ "reviewStatus": "machine"
}
]
}
diff --git a/translations/shared/registry.json
b/translations/shared/registry.json
index 69fa150a34fc..c7c5c0f4e0b8 100644
--- a/translations/shared/registry.json
+++ b/translations/shared/registry.json
@@ -175,7 +175,7 @@
"theme.SearchPage.noResultsText": "No documents were found",
"theme.SearchPage.searchSource": "Search the source documents"
},
- "sourceHash":
"73d6555eacc4cc4b1ffdcfb9f741ce92134a765a4c3202be53296c3ec39c9c87",
+ "sourceHash":
"b43c249af470c0bdbffe32efa9a7bbbcb19dc60c8709a61a37f2c33601b0239a",
"entryFiles": [
"src/components/home-next/NavbarNext.tsx",
"src/components/home-next/SlackCommunityNudge.tsx",
diff --git a/versions.json b/versions.json
index 5a567ddad220..53da81a3aebe 100644
--- a/versions.json
+++ b/versions.json
@@ -1,5 +1,4 @@
[
"4.x",
- "3.x",
- "2.1"
+ "3.x"
]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]