mirror of
https://github.com/goauthentik/authentik
synced 2026-05-08 16:13:02 +02:00
95 lines
2.8 KiB
JavaScript
Executable File
95 lines
2.8 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* @file Downloads the latest corepack tarball from the npm registry.
|
|
*/
|
|
|
|
import * as fs from "node:fs/promises";
|
|
import { parseArgs } from "node:util";
|
|
|
|
import { ConsoleLogger } from "../../packages/logger-js/lib/node.js";
|
|
import { $, parseCWD, reportAndExit } from "./utils/commands.mjs";
|
|
import { corepack, pullLatestCorepack } from "./utils/corepack.mjs";
|
|
import { resolveRepoRoot } from "./utils/git.mjs";
|
|
import { findNPMPackage, loadJSON, npm } from "./utils/node.mjs";
|
|
|
|
const FALLBACK_NPM_VERSION = "11.11.0";
|
|
const logger = ConsoleLogger.prefix("setup-corepack");
|
|
|
|
async function main() {
|
|
const parsedArgs = parseArgs({
|
|
options: {
|
|
force: {
|
|
type: "boolean",
|
|
default: false,
|
|
description: "Force re-download of corepack even if a version is already installed",
|
|
},
|
|
},
|
|
allowPositionals: true,
|
|
});
|
|
|
|
const cwdArg = parseCWD(parsedArgs.positionals);
|
|
|
|
const repoRoot = await resolveRepoRoot(cwdArg).catch(() => null);
|
|
const cwd = repoRoot || cwdArg;
|
|
|
|
const npmVersion = await npm`--version`({ cwd });
|
|
|
|
logger.info(`npm ${npmVersion}`);
|
|
|
|
const corepackVersion = await corepack`--version`({ cwd }).catch(() => null);
|
|
|
|
logger.info(`corepack ${corepackVersion || "not found"}`);
|
|
|
|
if (corepackVersion && !parsedArgs.values.force) {
|
|
logger.info("Corepack is already installed, skipping download (use --force to override)");
|
|
return;
|
|
}
|
|
|
|
await pullLatestCorepack(cwd);
|
|
|
|
await npm`install --force -g corepack@latest`({ cwd });
|
|
logger.info("Corepack installed successfully");
|
|
|
|
const { packageJSONPath } = await findNPMPackage(cwd);
|
|
|
|
logger.info(`Checking versions in ${packageJSONPath}`);
|
|
|
|
const packageJSONData = await loadJSON(packageJSONPath);
|
|
|
|
const packageManager = packageJSONData.packageManager || `npm@${FALLBACK_NPM_VERSION}`;
|
|
|
|
await $`corepack install -g ${packageManager}`({ cwd });
|
|
|
|
logger.info(`Setting up Corepack to use ${packageManager}...`);
|
|
|
|
const writablePackageJSON = await fs.access(packageJSONPath, fs.constants.W_OK).then(
|
|
() => true,
|
|
() => false,
|
|
);
|
|
|
|
/**
|
|
* @type {string}
|
|
*/
|
|
let subcommand;
|
|
|
|
if (!writablePackageJSON) {
|
|
if (!packageJSONData.packageManager) {
|
|
throw new Error(
|
|
`package.json is not writable and does not specify a packageManager field. Was the package.json file mounted via Docker?`,
|
|
);
|
|
}
|
|
|
|
subcommand = "install -g";
|
|
} else {
|
|
logger.info("package.json is writable");
|
|
subcommand = "use";
|
|
}
|
|
|
|
await $`corepack ${subcommand} ${packageManager}`({ cwd });
|
|
|
|
logger.info("Corepack installed npm successfully");
|
|
}
|
|
|
|
main().catch((error) => reportAndExit(error, logger));
|