mirror of
https://github.com/louislam/dockge.git
synced 2024-11-28 13:34:03 +00:00
93 lines
2.4 KiB
TypeScript
93 lines
2.4 KiB
TypeScript
|
import fsAsync from "fs/promises";
|
||
|
import unzipper from "unzipper";
|
||
|
import stream from "node:stream";
|
||
|
import { fileExists } from "../backend/util-server";
|
||
|
|
||
|
const version = process.env.VERSION;
|
||
|
|
||
|
if (!version) {
|
||
|
console.error("VERSION env not set");
|
||
|
process.exit(1);
|
||
|
}
|
||
|
|
||
|
const output = `./private/build/dockgen-${version}-win-x64.zip`;
|
||
|
|
||
|
if (await fileExists(output)) {
|
||
|
console.error(`${output} already exists`);
|
||
|
process.exit(1);
|
||
|
}
|
||
|
|
||
|
console.log(`Building ${output}`);
|
||
|
|
||
|
const nodeVersion = "18.17.1";
|
||
|
const buildPath = "./private/build/windows";
|
||
|
const nodePath = `${buildPath}/node`;
|
||
|
const nodeTempPath = `${buildPath}/node-v${nodeVersion}-win-x64`;
|
||
|
const corePath = `${buildPath}/core`;
|
||
|
|
||
|
// Clear
|
||
|
await fsAsync.rm(`${buildPath}/dockge-${version}`, {
|
||
|
recursive: true,
|
||
|
force: true
|
||
|
});
|
||
|
|
||
|
await fsAsync.rm(corePath, {
|
||
|
recursive: true,
|
||
|
force: true
|
||
|
});
|
||
|
|
||
|
// mkdir
|
||
|
await fsAsync.mkdir(buildPath, {
|
||
|
recursive: true
|
||
|
});
|
||
|
|
||
|
// Download Node.js if not exists
|
||
|
// Download,pipe to unzipper and extract to nodePath
|
||
|
if (!await fileExists(nodePath)) {
|
||
|
console.log(`Downloading Node.js ${nodeVersion}`);
|
||
|
|
||
|
try {
|
||
|
await download(`https://nodejs.org/dist/v${nodeVersion}/node-v${nodeVersion}-win-x64.zip`);
|
||
|
// Rename folder
|
||
|
await fsAsync.rename(nodeTempPath, nodePath);
|
||
|
} catch (e) {
|
||
|
if (e instanceof Error) {
|
||
|
console.error(e.message);
|
||
|
}
|
||
|
process.exit(1);
|
||
|
}
|
||
|
} else {
|
||
|
console.log(`Node.js ${nodeVersion} already exists, skipping download`);
|
||
|
}
|
||
|
|
||
|
// Download Dockge from GitHub
|
||
|
console.log(`Downloading Dockge ${version} from GitHub`);
|
||
|
|
||
|
try {
|
||
|
await download(`https://github.com/louislam/dockge/archive/refs/tags/${version}.zip`);
|
||
|
// Rename folder
|
||
|
await fsAsync.rename(`${buildPath}/dockge-${version}`, corePath);
|
||
|
} catch (e) {
|
||
|
if (e instanceof Error) {
|
||
|
console.error(e.message);
|
||
|
}
|
||
|
process.exit(1);
|
||
|
}
|
||
|
|
||
|
function download(url : string) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
fetch(url).then((res) => {
|
||
|
if (res.body) {
|
||
|
// @ts-ignore
|
||
|
stream.Readable.fromWeb(res.body)
|
||
|
.pipe(unzipper.Extract({
|
||
|
path: buildPath,
|
||
|
}))
|
||
|
.on("close", resolve);
|
||
|
} else {
|
||
|
reject(new Error(`Unable to download ${url}`));
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|