mirror of
				https://github.com/actions/setup-node.git
				synced 2025-11-04 13:29:12 +08:00 
			
		
		
		
	get manifest once
This commit is contained in:
		
							
								
								
									
										32
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							@@ -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);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user