star-chart-search-enhancer/scripts/package-release-archive.mjs
admin123 66e814b30f
All checks were successful
continuous-integration/drone/tag Build is passing
fix: package release zip without system binary
2026-05-25 11:57:22 +08:00

34 lines
1007 B
JavaScript

import { createWriteStream } from "node:fs";
import { readdir } from "node:fs/promises";
import path from "node:path";
import { pipeline } from "node:stream/promises";
import yazl from "yazl";
export async function createReleaseArchive({ archivePath, sourceDir }) {
const zip = new yazl.ZipFile();
const output = createWriteStream(archivePath);
await addDirectory(zip, sourceDir, sourceDir);
zip.end();
await pipeline(zip.outputStream, output);
}
async function addDirectory(zip, rootDir, currentDir) {
const entries = await readdir(currentDir, { withFileTypes: true });
entries.sort((left, right) => left.name.localeCompare(right.name));
for (const entry of entries) {
const absolutePath = path.join(currentDir, entry.name);
const relativePath = path.relative(rootDir, absolutePath);
if (entry.isDirectory()) {
await addDirectory(zip, rootDir, absolutePath);
continue;
}
if (entry.isFile()) {
zip.addFile(absolutePath, relativePath);
}
}
}