mirror of
https://gitea.com/actions/setup-deno.git
synced 2025-12-30 02:48:21 +00:00
chore: migrate code to ESM (#73)
This commit is contained in:
88
src/install.mjs
Normal file
88
src/install.mjs
Normal file
@@ -0,0 +1,88 @@
|
||||
import * as os from "node:os";
|
||||
import * as path from "node:path";
|
||||
import * as fs from "node:fs/promises";
|
||||
import process from "node:process";
|
||||
import core from "@actions/core";
|
||||
import tc from "@actions/tool-cache";
|
||||
|
||||
/**
|
||||
* @param {import("./version.mjs").Version} version
|
||||
*/
|
||||
export async function install(version) {
|
||||
const cachedPath = tc.find(
|
||||
"deno",
|
||||
version.kind === "canary" ? `0.0.0-${version.version}` : version.version,
|
||||
);
|
||||
if (cachedPath) {
|
||||
core.info(`Using cached Deno installation from ${cachedPath}.`);
|
||||
core.addPath(cachedPath);
|
||||
return;
|
||||
}
|
||||
|
||||
const zip = zipName();
|
||||
const url = version.kind === "canary"
|
||||
? `https://dl.deno.land/canary/${version.version}/${zip}`
|
||||
: `https://dl.deno.land/release/v${version.version}/${zip}`;
|
||||
|
||||
core.info(`Downloading Deno from ${url}.`);
|
||||
|
||||
const zipPath = await tc.downloadTool(url);
|
||||
const extractedFolder = await tc.extractZip(zipPath);
|
||||
|
||||
const binaryName = core.getInput("deno-binary-name");
|
||||
if (binaryName !== "deno") {
|
||||
await fs.rename(
|
||||
path.join(
|
||||
extractedFolder,
|
||||
process.platform === "win32" ? "deno.exe" : "deno",
|
||||
),
|
||||
path.join(
|
||||
extractedFolder,
|
||||
process.platform === "win32" ? binaryName + ".exe" : binaryName,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
const newCachedPath = await tc.cacheDir(
|
||||
extractedFolder,
|
||||
binaryName,
|
||||
version.kind === "canary" ? `0.0.0-${version.version}` : version.version,
|
||||
);
|
||||
core.info(`Cached Deno to ${newCachedPath}.`);
|
||||
core.addPath(newCachedPath);
|
||||
const denoInstallRoot = process.env.DENO_INSTALL_ROOT ||
|
||||
path.join(os.homedir(), ".deno", "bin");
|
||||
core.addPath(denoInstallRoot);
|
||||
}
|
||||
|
||||
/** @returns {string} */
|
||||
function zipName() {
|
||||
let arch;
|
||||
switch (process.arch) {
|
||||
case "arm64":
|
||||
arch = "aarch64";
|
||||
break;
|
||||
case "x64":
|
||||
arch = "x86_64";
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unsupported architechture ${process.arch}.`);
|
||||
}
|
||||
|
||||
let platform;
|
||||
switch (process.platform) {
|
||||
case "linux":
|
||||
platform = "unknown-linux-gnu";
|
||||
break;
|
||||
case "darwin":
|
||||
platform = "apple-darwin";
|
||||
break;
|
||||
case "win32":
|
||||
platform = "pc-windows-msvc";
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unsupported platform ${process.platform}.`);
|
||||
}
|
||||
|
||||
return `deno-${arch}-${platform}.zip`;
|
||||
}
|
||||
Reference in New Issue
Block a user