import { mkdir, readdir, rm, copyFile, stat, writeFile } from 'node:fs/promises' import { join, resolve } from 'node:path' function parseArgs(argv) { const args = {} for (const raw of argv.slice(2)) { if (!raw.startsWith('--')) continue const [k, v] = raw.slice(2).split('=') args[k] = v ?? true } return args } async function exists(p) { try { await stat(p) return true } catch { return false } } async function main() { const args = parseArgs(process.argv) const platform = typeof args.platform === 'string' ? args.platform : 'unknown' const repoRoot = resolve(process.cwd()) const fromDir = join(repoRoot, 'release') const toDir = join(repoRoot, 'artifacts', 'releases', platform) if (!(await exists(fromDir))) { throw new Error(`Missing release/ directory at: ${fromDir}`) } await mkdir(toDir, { recursive: true }) const entries = await readdir(fromDir) const copied = [] for (const name of entries) { const src = join(fromDir, name) const st = await stat(src) if (!st.isFile()) continue const dst = join(toDir, name) await copyFile(src, dst) copied.push({ name, size: st.size }) } const manifest = { platform, sourceDir: 'release', destDir: `artifacts/releases/${platform}`, files: copied.sort((a, b) => a.name.localeCompare(b.name)), createdAt: new Date().toISOString(), } await writeFile(join(toDir, 'manifest.json'), JSON.stringify(manifest, null, 2), 'utf8') await rm(fromDir, { recursive: true, force: true }) } main().catch((err) => { console.error(err) process.exit(1) })