diff --git a/package.json b/package.json index 011053e32dbcbfc5c0f396c90edcf6d310ff2661..f9d05051c1d3243d25aa935c0b4020b97ea61e41 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "pre-dev": "node scripts/pre-dev.js", "gen-toc": "node scripts/gen-toc.js", "dev": "vitepress dev app", + "dev2": "node scripts/dev.js", "build": "node scripts/gen-toc.js $VERSION && vitepress build app", "preview": "vitepress preview app", "format": "prettier --write app/.vitepress/src/", diff --git a/scripts/dev.js b/scripts/dev.js new file mode 100644 index 0000000000000000000000000000000000000000..14654f54f39e4fb6ed2e0f85ba630422c5fb6008 --- /dev/null +++ b/scripts/dev.js @@ -0,0 +1,33 @@ +import { exec } from 'child_process'; + +import NEW_VERSONS from './config/new-version.js'; + +function execCommand(command) { + return new Promise((resolve, reject) => { + const child = exec(command, { + inherit: true, + }); + + child.stdout?.pipe(process.stdout); + child.stderr?.pipe(process.stderr); + + child.on('close', (code) => { + resolve(code); + }); + + child.on('error', (error) => { + reject(error); + }); + }); +} + +(async () => { + let versions = process.argv.slice(2); + if (versions.length === 0) { + versions = NEW_VERSONS; + } + + await execCommand(`pnpm pre-dev ${versions.join(' ')}`); + await execCommand(`pnpm gen-toc ${versions.join(' ')}`); + await execCommand(`pnpm dev`); +})(); diff --git a/scripts/gen-toc.js b/scripts/gen-toc.js index 85432924660df376738b032a34b5b0d669be96d6..59649caf912333c17ab37e2cb0c224b2ad94fcea 100644 --- a/scripts/gen-toc.js +++ b/scripts/gen-toc.js @@ -9,6 +9,7 @@ import yaml from 'js-yaml'; import { slugify } from '@mdit-vue/shared'; import { getGitUrlInfo } from './utils/git.js'; +import { getBranchName } from './utils/common.js'; const __dirname = path.resolve(); // 获取当前文件夹路径 const recordIds = new Set(); // 已处理过的 id @@ -393,7 +394,8 @@ async function processTocFile() { const outputZhPath = path.join(__dirname, './app/.vitepress/public/toc/toc.json'); const outputEnPath = path.join(__dirname, './app/.vitepress/public/toc/toc-en.json'); - for (const version of versions) { + for (const item of versions) { + const version = getBranchName(item); console.log(`正在构建 ${version} toc 文件...`); if (version === 'common') { // common 分支处理 diff --git a/scripts/pre-dev.js b/scripts/pre-dev.js index 8d87b580f2c3ee4539238305676406e88ad68ce7..ad83f7692ae2b342171717bd93acb5a84f8a3746 100644 --- a/scripts/pre-dev.js +++ b/scripts/pre-dev.js @@ -38,6 +38,7 @@ function gitCloneAndCheckout(url, branch) { console.log(`[pre-dev]: 本地存在分支 ${branch},开始切换分支`); try { + execSync(`cd ${repoDir} && git checkout HEAD -- . && git clean -fd`, { stdio: 'inherit' }); execSync(`cd ${repoDir} && git checkout ${branch}`, { stdio: 'inherit' }); console.log(`[pre-dev]: 切换分支成功,开始拉取远程更新内容`); execSync(`cd ${repoDir} && git pull origin ${branch}`, { stdio: 'inherit' }); @@ -124,7 +125,7 @@ function copyDslContent() { /** * 复制 sig 仓库内容到指定位置 */ -const copySigRepo = async (upstream, dir, storagePath) => { +function copySigRepo(upstream, dir, storagePath) { const { url, repo, branch, locations } = getGitUrlInfo(upstream); gitCloneAndCheckout(url, branch); const cachePath = path.join(CACHE_DIR, repo); @@ -175,15 +176,22 @@ function scanYamlToCloneSigRepo(targetPath) { } } -const syncDocs = async (branch) => { +/** + * 同步文档内容到对应的目录 + * @param {string} branch 分支名 + */ +function syncDocs(branch) { const branchName = getBranchName(branch); - // 复制文档内容 gitCloneAndCheckout('https://gitee.com/openeuler/docs.git', branch); copyDocsContent(branchName); scanYamlToCloneSigRepo(`${__dirname}/app/zh/docs/${branchName}`); scanYamlToCloneSigRepo(`${__dirname}/app/en/docs/${branchName}`); +}; - // 复制 dsl 内容 +/** + * 同步 dsl 内容 + */ +function syncDsl() { gitCloneAndCheckout('https://gitee.com/openeuler/docs.git', 'stable-common'); copyDslContent(); }; @@ -192,6 +200,9 @@ const args = process.argv.slice(2); if (args.length === 0) { console.error('请提供分支名称'); process.exit(1); -} else { - syncDocs(args[0]); +} + +syncDsl(); +for (const branch of args) { + syncDocs(branch); }