aslan-h5/scripts/sync-security-docs.js
2026-04-21 16:42:29 +08:00

73 lines
2.0 KiB
JavaScript

import { execFileSync } from 'node:child_process'
import { mkdirSync, writeFileSync } from 'node:fs'
import { dirname, join } from 'node:path'
const DOC_FILES = [
'docs/security/frontend-hardening.md',
'docs/security/frontend-hardening.zh-CN.md',
'docs/security/frontend-hardening.zh-CN.updates.md',
'docs/security/atu-prod-hardening-playbook.zh-CN.md',
]
function printHelp() {
console.log(`
用法:
node scripts/sync-security-docs.js [source-ref]
说明:
将安全文档从指定分支或提交同步到当前工作区。
默认 source-ref 为 master。
示例:
node scripts/sync-security-docs.js
node scripts/sync-security-docs.js master
node scripts/sync-security-docs.js origin/master
npm run docs:sync:security -- master
注意:
只有当 source-ref 中已经提交了这些文档时,才能成功同步。
`.trim())
}
function readFileFromGit(sourceRef, relativePath) {
try {
return execFileSync('git', ['show', `${sourceRef}:${relativePath}`], {
encoding: 'utf8',
maxBuffer: 10 * 1024 * 1024,
})
} catch (error) {
const message = [
`无法从 ${sourceRef} 读取 ${relativePath}`,
'请先确认源分支中已经提交了这些文档,再执行同步。',
].join('\n')
throw new Error(message, { cause: error })
}
}
function writeWorkspaceFile(relativePath, content) {
const absolutePath = join(process.cwd(), relativePath)
mkdirSync(dirname(absolutePath), { recursive: true })
writeFileSync(absolutePath, content, 'utf8')
}
function main() {
const sourceRef = process.argv[2] || 'master'
if (sourceRef === '--help' || sourceRef === '-h') {
printHelp()
return
}
console.log(`开始从 ${sourceRef} 同步安全文档...`)
for (const relativePath of DOC_FILES) {
const content = readFileFromGit(sourceRef, relativePath)
writeWorkspaceFile(relativePath, content)
console.log(`已同步: ${relativePath}`)
}
console.log('安全文档同步完成。')
}
main()