diff --git a/__tests__/data/.tool-versions b/__tests__/data/.tool-versions new file mode 100644 index 000000000..10b40f8be --- /dev/null +++ b/__tests__/data/.tool-versions @@ -0,0 +1,2 @@ +yarn 1.22.4 +nodejs 17.6.0 diff --git a/__tests__/installer.test.ts b/__tests__/installer.test.ts index 4565dd4ce..8721f71f4 100644 --- a/__tests__/installer.test.ts +++ b/__tests__/installer.test.ts @@ -601,6 +601,32 @@ describe('setup-node', () => { ); }); + it('reads node-version-file of `asdf` if provided', async () => { + // Arrange + const versionSpec = `yarn 1.22.4 +nodejs 17.6.0 +`; + const versionFile = '.tool-versions'; + const expectedVersionSpec = '17.6.0'; + process.env['GITHUB_WORKSPACE'] = path.join(__dirname, 'data'); + inputs['node-version-file'] = versionFile; + + parseNodeVersionSpy.mockImplementation(() => expectedVersionSpec); + existsSpy.mockImplementationOnce( + input => input === path.join(__dirname, 'data', versionFile) + ); + // Act + await main.run(); + + // Assert + expect(existsSpy).toHaveBeenCalledTimes(1); + expect(existsSpy).toHaveReturnedWith(true); + expect(parseNodeVersionSpy).toHaveBeenCalledWith(versionSpec); + expect(logSpy).toHaveBeenCalledWith( + `Resolved ${versionFile} as ${expectedVersionSpec}` + ); + }); + it('both node-version-file and node-version are provided', async () => { inputs['node-version'] = '12'; const versionSpec = 'v14'; diff --git a/src/installer.ts b/src/installer.ts index a9baae0a1..12db1a7cf 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -468,6 +468,14 @@ function translateArchToDistUrl(arch: string): string { export function parseNodeVersionFile(contents: string): string { let nodeVersion = contents.trim(); + if (contents.indexOf('nodejs') !== -1) { + const lineWithNodeJsVersions = contents.match(/^nodejs.*$/gm); + const firstLineWithNodeJsVersion = + lineWithNodeJsVersions && lineWithNodeJsVersions[0]; + nodeVersion = + firstLineWithNodeJsVersion?.replace('nodejs', '').trim() || nodeVersion; + } + if (/^v\d/.test(nodeVersion)) { nodeVersion = nodeVersion.substring(1); }