mirror of
				https://github.com/actions/setup-node.git
				synced 2025-11-01 00:23:59 +08:00 
			
		
		
		
	Expand current syntax to support aliases for latest version (current/latest/node) (#483)
This commit is contained in:
		
							
								
								
									
										31
									
								
								.github/workflows/versions.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								.github/workflows/versions.yml
									
									
									
									
										vendored
									
									
								
							| @@ -139,3 +139,34 @@ jobs: | |||||||
|       - name: Verify node |       - name: Verify node | ||||||
|         run: __tests__/verify-arch.sh "ia32" |         run: __tests__/verify-arch.sh "ia32" | ||||||
|         shell: bash |         shell: bash | ||||||
|  |  | ||||||
|  |   node-latest-aliases: | ||||||
|  |     runs-on: ${{ matrix.os }} | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         os: [ubuntu-latest, windows-latest, macos-latest] | ||||||
|  |         node-version: [current, latest, node] | ||||||
|  |     steps: | ||||||
|  |       - name: Get node version | ||||||
|  |         run: | | ||||||
|  |           latestNodeVersion=$(curl https://nodejs.org/dist/index.json | jq -r '. [0].version') | ||||||
|  |           echo "::set-output name=LATEST_NODE_VERSION::$latestNodeVersion" | ||||||
|  |         id: version | ||||||
|  |         shell: bash | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |       - name: Setup Node | ||||||
|  |         uses: ./ | ||||||
|  |         with: | ||||||
|  |           node-version: ${{ matrix.node-version }} | ||||||
|  |       - name: Retrieve version after install | ||||||
|  |         run: | | ||||||
|  |           updatedVersion=$(echo $(node --version)) | ||||||
|  |           echo "::set-output name=NODE_VERSION_UPDATED::$updatedVersion" | ||||||
|  |         id: updatedVersion | ||||||
|  |         shell: bash | ||||||
|  |       - name: Compare versions | ||||||
|  |         if: ${{ steps.version.outputs.LATEST_NODE_VERSION != steps.updatedVersion.outputs.NODE_VERSION_UPDATED}} | ||||||
|  |         run: | | ||||||
|  |           echo "Latest node version failed to download." | ||||||
|  |           exit 1 | ||||||
|   | |||||||
| @@ -40,6 +40,9 @@ The `node-version` input supports the following syntax: | |||||||
| major versions: `12`, `14`, `16` | major versions: `12`, `14`, `16` | ||||||
| more specific versions: `10.15`, `14.2.0`, `16.3.0` | more specific versions: `10.15`, `14.2.0`, `16.3.0` | ||||||
| nvm lts syntax: `lts/erbium`, `lts/fermium`, `lts/*` | nvm lts syntax: `lts/erbium`, `lts/fermium`, `lts/*` | ||||||
|  | latest release: `latest`/`current`/`node` | ||||||
|  |  | ||||||
|  | **Note:** Since the latest release will not be cached always, there is possibility of hitting rate limit when downloading from dist | ||||||
|  |  | ||||||
| ### Checking in lockfiles | ### Checking in lockfiles | ||||||
|  |  | ||||||
|   | |||||||
| @@ -909,4 +909,30 @@ describe('setup-node', () => { | |||||||
|       ); |       ); | ||||||
|     }); |     }); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|  |   describe('latest alias syntax', () => { | ||||||
|  |     it.each(['latest', 'current', 'node'])( | ||||||
|  |       'download the %s version if alias is provided', | ||||||
|  |       async inputVersion => { | ||||||
|  |         // Arrange | ||||||
|  |         inputs['node-version'] = inputVersion; | ||||||
|  |  | ||||||
|  |         os.platform = 'darwin'; | ||||||
|  |         os.arch = 'x64'; | ||||||
|  |  | ||||||
|  |         findSpy.mockImplementation(() => ''); | ||||||
|  |         getManifestSpy.mockImplementation(() => { | ||||||
|  |           throw new Error('Unable to download manifest'); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         // Act | ||||||
|  |         await main.run(); | ||||||
|  |  | ||||||
|  |         // assert | ||||||
|  |         expect(logSpy).toHaveBeenCalledWith('Unable to download manifest'); | ||||||
|  |  | ||||||
|  |         expect(logSpy).toHaveBeenCalledWith('getting latest node version...'); | ||||||
|  |       } | ||||||
|  |     ); | ||||||
|  |   }); | ||||||
| }); | }); | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -62587,6 +62587,12 @@ function queryDistForMatch(versionSpec, arch = os.arch()) { | |||||||
|         } |         } | ||||||
|         let versions = []; |         let versions = []; | ||||||
|         let nodeVersions = yield getVersionsFromDist(); |         let nodeVersions = yield getVersionsFromDist(); | ||||||
|  |         if (versionSpec === 'current' || | ||||||
|  |             versionSpec === 'latest' || | ||||||
|  |             versionSpec === 'node') { | ||||||
|  |             core.info(`getting latest node version...`); | ||||||
|  |             return nodeVersions[0].version; | ||||||
|  |         } | ||||||
|         nodeVersions.forEach((nodeVersion) => { |         nodeVersions.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) { | ||||||
|   | |||||||
| @@ -373,6 +373,15 @@ async function queryDistForMatch( | |||||||
|   let versions: string[] = []; |   let versions: string[] = []; | ||||||
|   let nodeVersions = await getVersionsFromDist(); |   let nodeVersions = await getVersionsFromDist(); | ||||||
|  |  | ||||||
|  |   if ( | ||||||
|  |     versionSpec === 'current' || | ||||||
|  |     versionSpec === 'latest' || | ||||||
|  |     versionSpec === 'node' | ||||||
|  |   ) { | ||||||
|  |     core.info(`getting latest node version...`); | ||||||
|  |     return nodeVersions[0].version; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   nodeVersions.forEach((nodeVersion: INodeVersion) => { |   nodeVersions.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) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Milos Pantic
					Milos Pantic