Files
HMDesign/scripts/create-publisher-distribution.mjs
T

28 lines
2.3 KiB
JavaScript

import fs from 'node:fs'
import path from 'node:path'
import { execFileSync } from 'node:child_process'
// Includes only repository source and named built artifacts, never node_modules,
// credentials, backups, Git metadata or unrelated local validation output.
const root = process.cwd()
const output = path.resolve(root, '_local/publisher-release/HMDesign-Publisher-2026-10-10')
if (path.dirname(output) !== path.resolve(root, '_local/publisher-release')) throw Error('Unsafe output')
fs.rmSync(output, { recursive: true, force: true })
fs.mkdirSync(output, { recursive: true })
const sources = execFileSync('git', ['ls-files', '-co', '--exclude-standard', '-z'], { encoding: 'utf8' }).split('\0').filter(Boolean)
for (const file of sources) {
if (/^(?:\.claude|\.codex|\.agents|\.git)(?:\/|$)|(?:^|\/)\.env(?:\.|$)|\.(?:zip|log|tsbuildinfo)$/.test(file)) continue
const destination = path.join(output, file)
fs.mkdirSync(path.dirname(destination), { recursive: true })
fs.copyFileSync(path.join(root, file), destination)
}
for (const dir of ['storybook-static', 'dist', 'dist-dashboard', 'dist-recruit', 'packages/ui/dist', 'packages/center-graphic/dist', 'examples/publisher-list/dist']) {
if (!fs.existsSync(dir)) throw Error(`Build required: ${dir}`)
fs.cpSync(dir, path.join(output, dir), { recursive: true })
}
for (const file of ['start-preview.bat', 'preview-server.cjs']) fs.copyFileSync(`scripts/portable-preview/${file}`, path.join(output, file))
fs.writeFileSync(path.join(output, 'START-HERE.md'), '# HMDesign 퍼블리셔 배포\n\nNode.js 20.19+ 또는 22.12+를 설치한 Windows에서 `start-preview.bat`를 실행하세요. 정적 열람에는 npm 설치가 필요하지 않습니다. 출력된 주소의 `/example/`은 실제 React 신규 화면입니다.\n\n소스 수정·새 화면 실행은 [전체 사용자 안내](docs/guidelines/publisher-distribution-guide.md)를 따릅니다. 검증과 제한은 [추가 수정 보고서](docs/guidelines/publisher-additional-review-2026-10-10.md)를 확인하세요.\n')
const manifest = sources.filter(file => fs.existsSync(path.join(output, file)))
fs.writeFileSync(path.join(output, 'DISTRIBUTION.json'), JSON.stringify({ date: '2026-10-10', sourcePaths: manifest, nodeRequirement: 'Node.js 20.19+ or 22.12+', bundledNode: false, npmRequiredForStaticPreview: false }, null, 2))
console.log(output)