milsko-node/scripts/download.js
2026-04-28 13:11:03 -07:00

59 lines
No EOL
1.7 KiB
JavaScript

import { execSync } from "node:child_process";
import { createWriteStream, mkdirSync } from "node:fs";
import { createRequire } from "node:module";
import { join, resolve } from "node:path";
import { Readable } from "node:stream";
import { pipeline } from "node:stream/promises";
import { t, extract as tarExtract } from "tar";
const extractDir = resolve("deps");
const fileName = "milsko.tar.gz";
const source =
"https://forgejo.nishi.boats/api/v1/repos/pyrite-dev/milsko/tags";
const require = createRequire(import.meta.url);
const { upstream } = require("../package.json");
export async function download() {
console.log("[Mw] Fetching Milsko release tags from", source);
const response = await fetch(source);
if (!response.ok) {
throw new Error(
"Failed to fetch the Milsko repository tags, try running npm run install or npm run update again (" +
response.status +
")"
);
}
const tags = await response.json();
const match = tags.find((k) => k.name == upstream);
if (!match) {
throw new Error(
"Could not find a tag that matches the upstream version " + upstream
);
}
const tarUrl = match["tarball_url"];
console.log("[Mw] Fetching tarball from " + tarUrl);
const tarball = await fetch(tarUrl);
const filePath = join(extractDir, fileName);
mkdirSync(extractDir, { recursive: true }); // mkdir -p
const tarStream = Readable.fromWeb(tarball.body);
const fileStream = createWriteStream(filePath);
await pipeline(tarStream, fileStream);
await tarExtract({
file: filePath,
cwd: extractDir
});
console.log("[Mw] Milsko library successfully installed!");
}
if (import.meta.main)
download();