Files
2026-07-13 12:23:53 +08:00

58 lines
3.7 KiB
JavaScript

// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
// ┃ This file is part of the Perspective library, distributed under the terms ┃
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
// Download a full Pyodide distribution from github and extract it to rust/target dir for
// use in integration tests
import { getPyodideVersion, getPyodideDownloadDir } from "./pyodide.mjs";
import assert from "node:assert";
import fs from "node:fs";
import path from "node:path";
import { execFileSync } from "node:child_process";
const pyodideVersion = getPyodideVersion();
function downloadPyodide() {
const pyodideUrl = `https://github.com/pyodide/pyodide/releases/download/${pyodideVersion}/pyodide-${pyodideVersion}.tar.bz2`;
const downloadDir = getPyodideDownloadDir(); // the download dir is versioned
const tarball = path.join(downloadDir, `pyodide-${pyodideVersion}.tar.bz2`);
const buildStamp = path.join(downloadDir, "psp-build-stamp.txt");
const pyodideLock = path.join(downloadDir, "pyodide", "pyodide-lock.json");
if (fs.existsSync(buildStamp) && fs.existsSync(pyodideLock)) {
console.log(
`Pyodide ${pyodideVersion} already extracted to ${downloadDir}`,
);
} else {
fs.rmSync(buildStamp, { force: true });
console.log(
`Downloading Pyodide ${pyodideVersion} from ${pyodideUrl}...`,
);
fs.mkdirSync(downloadDir, { recursive: true });
execFileSync("wget", ["-O", tarball, pyodideUrl], {
stdio: "inherit",
});
console.log(`Extracting ${tarball}...`);
execFileSync("tar", ["-xvf", tarball, "-C", downloadDir], {
stdio: "inherit",
});
console.log(`Removing ${tarball}...`);
fs.rmSync(tarball);
// assert presence of a known file
assert(fs.existsSync(pyodideLock), `${pyodideLock} not found`);
console.log(`Extracted to ${downloadDir}`);
fs.writeFileSync(buildStamp, ""); // prevent re-download/extract
}
}
downloadPyodide();