59 lines
No EOL
1.7 KiB
JavaScript
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(); |