Skip to content

Commit b20a256

Browse files
committed
get manifest once
1 parent 141334f commit b20a256

File tree

2 files changed

+39
-32
lines changed

2 files changed

+39
-32
lines changed

dist/setup/index.js

+16-16
Original file line numberDiff line numberDiff line change
@@ -62339,20 +62339,24 @@ const tc = __importStar(__webpack_require__(533));
6233962339
const path = __importStar(__webpack_require__(622));
6234062340
const semver = __importStar(__webpack_require__(280));
6234162341
const fs = __webpack_require__(747);
62342-
const installer = __importStar(__webpack_require__(923));
6234362342
function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
6234462343
return __awaiter(this, void 0, void 0, function* () {
6234562344
// Store manifest data to avoid multiple calls
6234662345
let manifest;
62346+
let distManifest;
6234762347
let osPlat = os.platform();
6234862348
let osArch = translateArchToDistUrl(arch);
62349-
let latestVersionResolved = false;
6235062349
if (isLtsAlias(versionSpec)) {
6235162350
core.info('Attempt to resolve LTS alias from manifest...');
6235262351
// No try-catch since it's not possible to resolve LTS alias without manifest
6235362352
manifest = yield getManifest(auth);
6235462353
versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest);
6235562354
}
62355+
if (isLatestSyntax(versionSpec)) {
62356+
distManifest = yield getVersionsFromDist();
62357+
versionSpec = yield queryDistForMatch(versionSpec, arch, distManifest);
62358+
core.info(`getting latest node version...`);
62359+
}
6235662360
if (checkLatest) {
6235762361
core.info('Attempt to resolve the latest version from manifest...');
6235862362
const resolvedVersion = yield resolveVersionFromManifest(versionSpec, stable, auth, osArch, manifest);
@@ -62364,11 +62368,6 @@ function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
6236462368
core.info(`Failed to resolve version ${versionSpec} from manifest`);
6236562369
}
6236662370
}
62367-
if (isLatestSyntax(versionSpec)) {
62368-
versionSpec = yield queryDistForMatch(versionSpec, arch);
62369-
latestVersionResolved = true;
62370-
core.info(`getting latest node version...`);
62371-
}
6237262371
// check cache
6237362372
let toolPath;
6237462373
toolPath = tc.find('node', versionSpec, osArch);
@@ -62409,7 +62408,7 @@ function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
6240962408
// Download from nodejs.org
6241062409
//
6241162410
if (!downloadPath) {
62412-
info = yield getInfoFromDist(versionSpec, arch, latestVersionResolved);
62411+
info = yield getInfoFromDist(versionSpec, arch, distManifest);
6241362412
if (!info) {
6241462413
throw new Error(`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`);
6241562414
}
@@ -62509,13 +62508,11 @@ function getInfoFromManifest(versionSpec, stable, auth, osArch = translateArchTo
6250962508
return info;
6251062509
});
6251162510
}
62512-
function getInfoFromDist(versionSpec, arch = os.arch(), latestVersionResolved) {
62511+
function getInfoFromDist(versionSpec, arch = os.arch(), distManifest) {
6251362512
return __awaiter(this, void 0, void 0, function* () {
6251462513
let osPlat = os.platform();
6251562514
let osArch = translateArchToDistUrl(arch);
62516-
let version = latestVersionResolved
62517-
? versionSpec
62518-
: yield queryDistForMatch(versionSpec, arch);
62515+
let version = yield queryDistForMatch(versionSpec, arch, distManifest);
6251962516
if (!version) {
6252062517
return null;
6252162518
}
@@ -62574,7 +62571,7 @@ function evaluateVersions(versions, versionSpec) {
6257462571
}
6257562572
return version;
6257662573
}
62577-
function queryDistForMatch(versionSpec, arch = os.arch()) {
62574+
function queryDistForMatch(versionSpec, arch = os.arch(), distManifest) {
6257862575
return __awaiter(this, void 0, void 0, function* () {
6257962576
let osPlat = os.platform();
6258062577
let osArch = translateArchToDistUrl(arch);
@@ -62593,13 +62590,16 @@ function queryDistForMatch(versionSpec, arch = os.arch()) {
6259362590
default:
6259462591
throw new Error(`Unexpected OS '${osPlat}'`);
6259562592
}
62593+
if (!distManifest) {
62594+
core.debug('No dist manifest cached');
62595+
distManifest = yield getVersionsFromDist();
62596+
}
6259662597
let versions = [];
62597-
let nodeVersions = yield installer.getVersionsFromDist();
6259862598
if (isLatestSyntax(versionSpec)) {
6259962599
core.info(`getting latest node version...`);
62600-
return nodeVersions[0].version;
62600+
return distManifest[0].version;
6260162601
}
62602-
nodeVersions.forEach((nodeVersion) => {
62602+
distManifest.forEach((nodeVersion) => {
6260362603
// ensure this version supports your os and platform
6260462604
if (nodeVersion.files.indexOf(dataFileName) >= 0) {
6260562605
versions.push(nodeVersion.version);

src/installer.ts

+23-16
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ export async function getNode(
3838
) {
3939
// Store manifest data to avoid multiple calls
4040
let manifest: INodeRelease[] | undefined;
41+
let distManifest: INodeVersion[] | undefined;
4142
let osPlat: string = os.platform();
4243
let osArch: string = translateArchToDistUrl(arch);
43-
let latestVersionResolved: boolean = false;
4444

4545
if (isLtsAlias(versionSpec)) {
4646
core.info('Attempt to resolve LTS alias from manifest...');
@@ -51,6 +51,12 @@ export async function getNode(
5151
versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest);
5252
}
5353

54+
if (isLatestSyntax(versionSpec)) {
55+
distManifest = await getVersionsFromDist();
56+
versionSpec = await queryDistForMatch(versionSpec, arch, distManifest);
57+
core.info(`getting latest node version...`);
58+
}
59+
5460
if (checkLatest) {
5561
core.info('Attempt to resolve the latest version from manifest...');
5662
const resolvedVersion = await resolveVersionFromManifest(
@@ -68,12 +74,6 @@ export async function getNode(
6874
}
6975
}
7076

71-
if (isLatestSyntax(versionSpec)) {
72-
versionSpec = await queryDistForMatch(versionSpec, arch);
73-
latestVersionResolved = true;
74-
core.info(`getting latest node version...`);
75-
}
76-
7777
// check cache
7878
let toolPath: string;
7979
toolPath = tc.find('node', versionSpec, osArch);
@@ -127,7 +127,7 @@ export async function getNode(
127127
// Download from nodejs.org
128128
//
129129
if (!downloadPath) {
130-
info = await getInfoFromDist(versionSpec, arch, latestVersionResolved);
130+
info = await getInfoFromDist(versionSpec, arch, distManifest);
131131
if (!info) {
132132
throw new Error(
133133
`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`
@@ -274,14 +274,16 @@ async function getInfoFromManifest(
274274
async function getInfoFromDist(
275275
versionSpec: string,
276276
arch: string = os.arch(),
277-
latestVersionResolved?: boolean
277+
distManifest?: INodeVersion[]
278278
): Promise<INodeVersionInfo | null> {
279279
let osPlat: string = os.platform();
280280
let osArch: string = translateArchToDistUrl(arch);
281281

282-
let version: string = latestVersionResolved
283-
? versionSpec
284-
: await queryDistForMatch(versionSpec, arch);
282+
let version: string = await queryDistForMatch(
283+
versionSpec,
284+
arch,
285+
distManifest
286+
);
285287

286288
if (!version) {
287289
return null;
@@ -359,7 +361,8 @@ function evaluateVersions(versions: string[], versionSpec: string): string {
359361

360362
async function queryDistForMatch(
361363
versionSpec: string,
362-
arch: string = os.arch()
364+
arch: string = os.arch(),
365+
distManifest?: INodeVersion[]
363366
): Promise<string> {
364367
let osPlat: string = os.platform();
365368
let osArch: string = translateArchToDistUrl(arch);
@@ -380,15 +383,19 @@ async function queryDistForMatch(
380383
throw new Error(`Unexpected OS '${osPlat}'`);
381384
}
382385

386+
if (!distManifest) {
387+
core.debug('No dist manifest cached');
388+
distManifest = await getVersionsFromDist();
389+
}
390+
383391
let versions: string[] = [];
384-
let nodeVersions = await installer.getVersionsFromDist();
385392

386393
if (isLatestSyntax(versionSpec)) {
387394
core.info(`getting latest node version...`);
388-
return nodeVersions[0].version;
395+
return distManifest[0].version;
389396
}
390397

391-
nodeVersions.forEach((nodeVersion: INodeVersion) => {
398+
distManifest.forEach((nodeVersion: INodeVersion) => {
392399
// ensure this version supports your os and platform
393400
if (nodeVersion.files.indexOf(dataFileName) >= 0) {
394401
versions.push(nodeVersion.version);

0 commit comments

Comments
 (0)