tools/build-docs.js (91 lines of code) (raw):
/**
* Tool script for building documentation
* @module build-docs
*/
const child_process = require("child_process");
const fs = require("fs");
const { copySync } = require("fs-extra");
const {
PROJECT_NAME,
SWAP_DIR,
PROJECT_SITE_DOC_DIR,
PROJECT_SITE_IMG_DIR,
DOCUSAURUS_DOC_SIDEBARS_FILE,
PROJECT_BRANCH_NAME,
PROJECT_DIR,
PROJECT_SIDEBAR_PATH,
PROJECT_IMG_DIR,
PROJECT_SITE_ZH_IMG_DIR,
PROJECT_DOC_DIR,
PROJECT_SITE_DOC_IMG_DIR,
PROJECT_ZH_DOC_DIR,
PROJECT_SITE_ZH_DOC_DIR,
PROJECT_SITE_ZH_DOC_IMG_DIR,
replaceImagesPath,
} = require("./common");
const PROJECT_TAG_NAME = process.argv[2];
// Determine protocol mode
const PROTOCOL_MODE = process.env.PROTOCOL_MODE || "HTTP";
let PROJECT_REPO =
PROTOCOL_MODE === "ssh"
? `git@github.com:apache/${PROJECT_NAME}.git`
: `https://github.com/apache/${PROJECT_NAME}.git`;
/**
* Utility function to rebuild directories
* @param {...string} dirs - Directory paths to rebuild
*/
function rebuildDirs(...dirs) {
for (const dir of dirs) {
console.log(` ---> Rebuild directory ${dir}`);
if (fs.existsSync(dir)) {
fs.rmSync(dir, { recursive: true });
}
fs.mkdirSync(dir, { recursive: true });
}
}
/**
* Utility function to remove existing files
* @param {...string} files - File paths to remove
*/
function rmExistsFiles(...files) {
for (const file of files) {
console.log(` ---> Remove exists ${file}`);
if (fs.existsSync(file)) {
fs.rmSync(file);
}
}
}
/**
* Utility function to clone repository
* @param {string} repo - Repository URL
* @param {string} branch - Branch name
* @param {string} targetPath - Target path
*/
function cloneRepo(repo, branch, targetPath) {
console.log(
` ---> Start clone repository ${repo} branch ${branch} to directory ${targetPath}`
);
child_process.execSync(
`git clone --depth 1 --branch ${branch} ${repo} ${targetPath}`
);
}
/**
* Main function to prepare documentation
*/
function prepareDocs() {
console.log("===>>>: Start documents sync.");
console.log("===>>>: Rebuild directory swap, docs, static/image_en.");
rebuildDirs(SWAP_DIR, PROJECT_SITE_DOC_DIR, PROJECT_SITE_IMG_DIR);
console.log("===>>>: Remove exists file sidebars.js.");
rmExistsFiles(DOCUSAURUS_DOC_SIDEBARS_FILE);
console.log("===>>>: Clone project main codebase repositories.");
cloneRepo(
PROJECT_REPO,
PROJECT_TAG_NAME ? PROJECT_TAG_NAME + "-release" : PROJECT_BRANCH_NAME,
PROJECT_DIR
);
console.log(`===>>>: Rsync sidebars.js to ${DOCUSAURUS_DOC_SIDEBARS_FILE}`);
fs.copyFileSync(PROJECT_SIDEBAR_PATH, DOCUSAURUS_DOC_SIDEBARS_FILE);
console.log(`===>>>: Rsync en images to ${PROJECT_SITE_IMG_DIR}`);
copySync(PROJECT_IMG_DIR, PROJECT_SITE_IMG_DIR, {});
console.log(`===>>>: Rsync zh images to ${PROJECT_SITE_ZH_IMG_DIR}`);
copySync(PROJECT_IMG_DIR, PROJECT_SITE_ZH_IMG_DIR, {});
console.log(
`===>>>: Rsync documents exclude images to ${PROJECT_SITE_DOC_DIR}`
);
copySync(PROJECT_DOC_DIR, PROJECT_SITE_DOC_DIR, {
filter: (src) => !src.endsWith("images"),
});
console.log(`===>>>: Rsync en images to ${PROJECT_SITE_DOC_IMG_DIR}`);
copySync(PROJECT_IMG_DIR, PROJECT_SITE_DOC_IMG_DIR, {});
console.log(`===>>>: Rsync zh documents to ${PROJECT_SITE_ZH_DOC_DIR}`);
copySync(PROJECT_ZH_DOC_DIR, PROJECT_SITE_ZH_DOC_DIR, {
filter: (src) => !src.endsWith("images"),
});
console.log(`===>>>: Rsync zh images to ${PROJECT_SITE_ZH_DOC_IMG_DIR}`);
copySync(PROJECT_IMG_DIR, PROJECT_SITE_ZH_DOC_IMG_DIR, {});
console.log(`===>>>: Replace images path in ${PROJECT_SITE_DOC_DIR}`);
replaceImagesPath(PROJECT_SITE_DOC_DIR, "images", "images");
console.log(`===>>>: Replace images path in ${PROJECT_SITE_ZH_DOC_DIR}`);
replaceImagesPath(PROJECT_SITE_ZH_DOC_DIR, "images", "images");
console.log("===>>>: End documents sync");
}
// Execute the main function
prepareDocs();