get manifest once

This commit is contained in:
panticmilos 2022-05-20 13:45:28 +02:00
parent 141334fcd1
commit b20a2561b9
2 changed files with 39 additions and 32 deletions

32
dist/setup/index.js vendored
View File

@ -62339,20 +62339,24 @@ const tc = __importStar(__webpack_require__(533));
const path = __importStar(__webpack_require__(622)); const path = __importStar(__webpack_require__(622));
const semver = __importStar(__webpack_require__(280)); const semver = __importStar(__webpack_require__(280));
const fs = __webpack_require__(747); const fs = __webpack_require__(747);
const installer = __importStar(__webpack_require__(923));
function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) { function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
// Store manifest data to avoid multiple calls // Store manifest data to avoid multiple calls
let manifest; let manifest;
let distManifest;
let osPlat = os.platform(); let osPlat = os.platform();
let osArch = translateArchToDistUrl(arch); let osArch = translateArchToDistUrl(arch);
let latestVersionResolved = false;
if (isLtsAlias(versionSpec)) { if (isLtsAlias(versionSpec)) {
core.info('Attempt to resolve LTS alias from manifest...'); core.info('Attempt to resolve LTS alias from manifest...');
// No try-catch since it's not possible to resolve LTS alias without manifest // No try-catch since it's not possible to resolve LTS alias without manifest
manifest = yield getManifest(auth); manifest = yield getManifest(auth);
versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest); versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest);
} }
if (isLatestSyntax(versionSpec)) {
distManifest = yield getVersionsFromDist();
versionSpec = yield queryDistForMatch(versionSpec, arch, distManifest);
core.info(`getting latest node version...`);
}
if (checkLatest) { if (checkLatest) {
core.info('Attempt to resolve the latest version from manifest...'); core.info('Attempt to resolve the latest version from manifest...');
const resolvedVersion = yield resolveVersionFromManifest(versionSpec, stable, auth, osArch, manifest); const resolvedVersion = yield resolveVersionFromManifest(versionSpec, stable, auth, osArch, manifest);
@ -62364,11 +62368,6 @@ function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
core.info(`Failed to resolve version ${versionSpec} from manifest`); core.info(`Failed to resolve version ${versionSpec} from manifest`);
} }
} }
if (isLatestSyntax(versionSpec)) {
versionSpec = yield queryDistForMatch(versionSpec, arch);
latestVersionResolved = true;
core.info(`getting latest node version...`);
}
// check cache // check cache
let toolPath; let toolPath;
toolPath = tc.find('node', versionSpec, osArch); toolPath = tc.find('node', versionSpec, osArch);
@ -62409,7 +62408,7 @@ function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
// Download from nodejs.org // Download from nodejs.org
// //
if (!downloadPath) { if (!downloadPath) {
info = yield getInfoFromDist(versionSpec, arch, latestVersionResolved); info = yield getInfoFromDist(versionSpec, arch, distManifest);
if (!info) { if (!info) {
throw new Error(`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`); throw new Error(`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`);
} }
@ -62509,13 +62508,11 @@ function getInfoFromManifest(versionSpec, stable, auth, osArch = translateArchTo
return info; return info;
}); });
} }
function getInfoFromDist(versionSpec, arch = os.arch(), latestVersionResolved) { function getInfoFromDist(versionSpec, arch = os.arch(), distManifest) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
let osPlat = os.platform(); let osPlat = os.platform();
let osArch = translateArchToDistUrl(arch); let osArch = translateArchToDistUrl(arch);
let version = latestVersionResolved let version = yield queryDistForMatch(versionSpec, arch, distManifest);
? versionSpec
: yield queryDistForMatch(versionSpec, arch);
if (!version) { if (!version) {
return null; return null;
} }
@ -62574,7 +62571,7 @@ function evaluateVersions(versions, versionSpec) {
} }
return version; return version;
} }
function queryDistForMatch(versionSpec, arch = os.arch()) { function queryDistForMatch(versionSpec, arch = os.arch(), distManifest) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
let osPlat = os.platform(); let osPlat = os.platform();
let osArch = translateArchToDistUrl(arch); let osArch = translateArchToDistUrl(arch);
@ -62593,13 +62590,16 @@ function queryDistForMatch(versionSpec, arch = os.arch()) {
default: default:
throw new Error(`Unexpected OS '${osPlat}'`); throw new Error(`Unexpected OS '${osPlat}'`);
} }
if (!distManifest) {
core.debug('No dist manifest cached');
distManifest = yield getVersionsFromDist();
}
let versions = []; let versions = [];
let nodeVersions = yield installer.getVersionsFromDist();
if (isLatestSyntax(versionSpec)) { if (isLatestSyntax(versionSpec)) {
core.info(`getting latest node version...`); core.info(`getting latest node version...`);
return nodeVersions[0].version; return distManifest[0].version;
} }
nodeVersions.forEach((nodeVersion) => { distManifest.forEach((nodeVersion) => {
// ensure this version supports your os and platform // ensure this version supports your os and platform
if (nodeVersion.files.indexOf(dataFileName) >= 0) { if (nodeVersion.files.indexOf(dataFileName) >= 0) {
versions.push(nodeVersion.version); versions.push(nodeVersion.version);

View File

@ -38,9 +38,9 @@ export async function getNode(
) { ) {
// Store manifest data to avoid multiple calls // Store manifest data to avoid multiple calls
let manifest: INodeRelease[] | undefined; let manifest: INodeRelease[] | undefined;
let distManifest: INodeVersion[] | undefined;
let osPlat: string = os.platform(); let osPlat: string = os.platform();
let osArch: string = translateArchToDistUrl(arch); let osArch: string = translateArchToDistUrl(arch);
let latestVersionResolved: boolean = false;
if (isLtsAlias(versionSpec)) { if (isLtsAlias(versionSpec)) {
core.info('Attempt to resolve LTS alias from manifest...'); core.info('Attempt to resolve LTS alias from manifest...');
@ -51,6 +51,12 @@ export async function getNode(
versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest); versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest);
} }
if (isLatestSyntax(versionSpec)) {
distManifest = await getVersionsFromDist();
versionSpec = await queryDistForMatch(versionSpec, arch, distManifest);
core.info(`getting latest node version...`);
}
if (checkLatest) { if (checkLatest) {
core.info('Attempt to resolve the latest version from manifest...'); core.info('Attempt to resolve the latest version from manifest...');
const resolvedVersion = await resolveVersionFromManifest( const resolvedVersion = await resolveVersionFromManifest(
@ -68,12 +74,6 @@ export async function getNode(
} }
} }
if (isLatestSyntax(versionSpec)) {
versionSpec = await queryDistForMatch(versionSpec, arch);
latestVersionResolved = true;
core.info(`getting latest node version...`);
}
// check cache // check cache
let toolPath: string; let toolPath: string;
toolPath = tc.find('node', versionSpec, osArch); toolPath = tc.find('node', versionSpec, osArch);
@ -127,7 +127,7 @@ export async function getNode(
// Download from nodejs.org // Download from nodejs.org
// //
if (!downloadPath) { if (!downloadPath) {
info = await getInfoFromDist(versionSpec, arch, latestVersionResolved); info = await getInfoFromDist(versionSpec, arch, distManifest);
if (!info) { if (!info) {
throw new Error( throw new Error(
`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.` `Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`
@ -274,14 +274,16 @@ async function getInfoFromManifest(
async function getInfoFromDist( async function getInfoFromDist(
versionSpec: string, versionSpec: string,
arch: string = os.arch(), arch: string = os.arch(),
latestVersionResolved?: boolean distManifest?: INodeVersion[]
): Promise<INodeVersionInfo | null> { ): Promise<INodeVersionInfo | null> {
let osPlat: string = os.platform(); let osPlat: string = os.platform();
let osArch: string = translateArchToDistUrl(arch); let osArch: string = translateArchToDistUrl(arch);
let version: string = latestVersionResolved let version: string = await queryDistForMatch(
? versionSpec versionSpec,
: await queryDistForMatch(versionSpec, arch); arch,
distManifest
);
if (!version) { if (!version) {
return null; return null;
@ -359,7 +361,8 @@ function evaluateVersions(versions: string[], versionSpec: string): string {
async function queryDistForMatch( async function queryDistForMatch(
versionSpec: string, versionSpec: string,
arch: string = os.arch() arch: string = os.arch(),
distManifest?: INodeVersion[]
): Promise<string> { ): Promise<string> {
let osPlat: string = os.platform(); let osPlat: string = os.platform();
let osArch: string = translateArchToDistUrl(arch); let osArch: string = translateArchToDistUrl(arch);
@ -380,15 +383,19 @@ async function queryDistForMatch(
throw new Error(`Unexpected OS '${osPlat}'`); throw new Error(`Unexpected OS '${osPlat}'`);
} }
if (!distManifest) {
core.debug('No dist manifest cached');
distManifest = await getVersionsFromDist();
}
let versions: string[] = []; let versions: string[] = [];
let nodeVersions = await installer.getVersionsFromDist();
if (isLatestSyntax(versionSpec)) { if (isLatestSyntax(versionSpec)) {
core.info(`getting latest node version...`); core.info(`getting latest node version...`);
return nodeVersions[0].version; return distManifest[0].version;
} }
nodeVersions.forEach((nodeVersion: INodeVersion) => { distManifest.forEach((nodeVersion: INodeVersion) => {
// ensure this version supports your os and platform // ensure this version supports your os and platform
if (nodeVersion.files.indexOf(dataFileName) >= 0) { if (nodeVersion.files.indexOf(dataFileName) >= 0) {
versions.push(nodeVersion.version); versions.push(nodeVersion.version);