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)