mirror of
				https://github.com/actions/setup-node.git
				synced 2025-11-04 12:03:34 +00:00 
			
		
		
		
	prettier
This commit is contained in:
		
							parent
							
								
									1536edb40e
								
							
						
					
					
						commit
						d38528abe0
					
				@ -89,8 +89,7 @@ describe('setup-node', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // disable authentication portion for installer tests
 | 
					    // disable authentication portion for installer tests
 | 
				
			||||||
    authSpy = jest.spyOn(auth, 'configAuthentication');
 | 
					    authSpy = jest.spyOn(auth, 'configAuthentication');
 | 
				
			||||||
    authSpy.mockImplementation(() => {
 | 
					    authSpy.mockImplementation(() => {});
 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // gets
 | 
					    // gets
 | 
				
			||||||
    getManifestSpy.mockImplementation(
 | 
					    getManifestSpy.mockImplementation(
 | 
				
			||||||
@ -1001,15 +1000,17 @@ describe('setup-node', () => {
 | 
				
			|||||||
      'finds the %s version in the hostedToolcache',
 | 
					      'finds the %s version in the hostedToolcache',
 | 
				
			||||||
      async (input, expectedVersion) => {
 | 
					      async (input, expectedVersion) => {
 | 
				
			||||||
        const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
 | 
					        const toolPath = path.normalize(`/cache/node/${expectedVersion}/x64`);
 | 
				
			||||||
        findSpy.mockImplementation((_,version)=>path.normalize(`/cache/node/${version}/x64`))
 | 
					        findSpy.mockImplementation((_, version) =>
 | 
				
			||||||
 | 
					          path.normalize(`/cache/node/${version}/x64`)
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
        findAllVersionsSpy.mockReturnValue([
 | 
					        findAllVersionsSpy.mockReturnValue([
 | 
				
			||||||
          '2.2.2-rc.2',
 | 
					          '2.2.2-rc.2',
 | 
				
			||||||
          '1.1.1-rc.1',
 | 
					          '1.1.1-rc.1',
 | 
				
			||||||
          '99.1.1',
 | 
					          '99.1.1',
 | 
				
			||||||
          expectedVersion,
 | 
					          expectedVersion,
 | 
				
			||||||
          '88.1.1',
 | 
					          '88.1.1',
 | 
				
			||||||
          '3.3.3-rc.3',
 | 
					          '3.3.3-rc.3'
 | 
				
			||||||
        ])
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        inputs['node-version'] = input;
 | 
					        inputs['node-version'] = input;
 | 
				
			||||||
        os['arch'] = 'x64';
 | 
					        os['arch'] = 'x64';
 | 
				
			||||||
@ -1350,15 +1351,17 @@ describe('setup-node', () => {
 | 
				
			|||||||
      os.platform = 'linux';
 | 
					      os.platform = 'linux';
 | 
				
			||||||
      os.arch = 'x64';
 | 
					      os.arch = 'x64';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const versionExpected = 'v20.0.0-v8-canary20221103f7e2421e91'
 | 
					      const versionExpected = 'v20.0.0-v8-canary20221103f7e2421e91';
 | 
				
			||||||
      findAllVersionSpy.mockImplementation(() => [versionExpected]);
 | 
					      findAllVersionSpy.mockImplementation(() => [versionExpected]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      let toolPath = path.normalize(`/cache/node/${versionExpected}/x64`);
 | 
					      let toolPath = path.normalize(`/cache/node/${versionExpected}/x64`);
 | 
				
			||||||
      findSpy.mockImplementation((version) => toolPath);
 | 
					      findSpy.mockImplementation(version => toolPath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      await main.run();
 | 
					      await main.run();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(cnSpy).toHaveBeenCalledWith(`::add-path::${toolPath}/bin${osm.EOL}`)
 | 
					      expect(cnSpy).toHaveBeenCalledWith(
 | 
				
			||||||
 | 
					        `::add-path::${toolPath}/bin${osm.EOL}`
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(dlSpy).not.toHaveBeenCalled();
 | 
					      expect(dlSpy).not.toHaveBeenCalled();
 | 
				
			||||||
      expect(exSpy).not.toHaveBeenCalled();
 | 
					      expect(exSpy).not.toHaveBeenCalled();
 | 
				
			||||||
 | 
				
			|||||||
@ -16,98 +16,125 @@ import {
 | 
				
			|||||||
describe('setup-node unit tests', () => {
 | 
					describe('setup-node unit tests', () => {
 | 
				
			||||||
  describe('splitVersionSpec', () => {
 | 
					  describe('splitVersionSpec', () => {
 | 
				
			||||||
    it('splitVersionSpec correctly splits version spec without dashes', () => {
 | 
					    it('splitVersionSpec correctly splits version spec without dashes', () => {
 | 
				
			||||||
      const [raw, prerelease] = splitVersionSpec('1.1.1')
 | 
					      const [raw, prerelease] = splitVersionSpec('1.1.1');
 | 
				
			||||||
      expect(raw).toBe('1.1.1')
 | 
					      expect(raw).toBe('1.1.1');
 | 
				
			||||||
      expect(prerelease).toBeUndefined()
 | 
					      expect(prerelease).toBeUndefined();
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
    it('splitVersionSpec correctly splits version spec with one dash', () => {
 | 
					    it('splitVersionSpec correctly splits version spec with one dash', () => {
 | 
				
			||||||
      const [raw, prerelease] = splitVersionSpec('1.1.1-nightly12345678')
 | 
					      const [raw, prerelease] = splitVersionSpec('1.1.1-nightly12345678');
 | 
				
			||||||
      expect(raw).toBe('1.1.1')
 | 
					      expect(raw).toBe('1.1.1');
 | 
				
			||||||
      expect(prerelease).toBe('nightly12345678')
 | 
					      expect(prerelease).toBe('nightly12345678');
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
    it('splitVersionSpec correctly splits version spec with 2 dashes', () => {
 | 
					    it('splitVersionSpec correctly splits version spec with 2 dashes', () => {
 | 
				
			||||||
      const [raw, prerelease] = splitVersionSpec('1.1.1-v8-canary12345678')
 | 
					      const [raw, prerelease] = splitVersionSpec('1.1.1-v8-canary12345678');
 | 
				
			||||||
      expect(raw).toBe('1.1.1')
 | 
					      expect(raw).toBe('1.1.1');
 | 
				
			||||||
      expect(prerelease).toBe('v8-canary12345678')
 | 
					      expect(prerelease).toBe('v8-canary12345678');
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
  })
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('distributionOf', () => {
 | 
					  describe('distributionOf', () => {
 | 
				
			||||||
    it('1.1.1-v8-canary should be CANARY', () => {
 | 
					    it('1.1.1-v8-canary should be CANARY', () => {
 | 
				
			||||||
      expect(distributionOf('1.1.1-v8-canary')).toBe(Distributions.CANARY)
 | 
					      expect(distributionOf('1.1.1-v8-canary')).toBe(Distributions.CANARY);
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
    it('1.1.1-v8-canary20221103f7e2421e91 should be CANARY', () => {
 | 
					    it('1.1.1-v8-canary20221103f7e2421e91 should be CANARY', () => {
 | 
				
			||||||
      expect(distributionOf('1.1.1-v8-canary20221103f7e2421e91')).toBe(Distributions.CANARY)
 | 
					      expect(distributionOf('1.1.1-v8-canary20221103f7e2421e91')).toBe(
 | 
				
			||||||
    })
 | 
					        Distributions.CANARY
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('1.1.1-canary should throw exception', () => {
 | 
					    it('1.1.1-canary should throw exception', () => {
 | 
				
			||||||
      expect(() => distributionOf('1.1.1-canary')).toThrow('Canary version must have "-v8-canary suffix"')
 | 
					      expect(() => distributionOf('1.1.1-canary')).toThrow(
 | 
				
			||||||
    })
 | 
					        'Canary version must have "-v8-canary suffix"'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('1.1.1-canary20221103f7e2421e91 should throw exception', () => {
 | 
					    it('1.1.1-canary20221103f7e2421e91 should throw exception', () => {
 | 
				
			||||||
      expect(() => distributionOf('1.1.1-canary20221103f7e2421e91')).toThrow('Canary version must have "-v8-canary suffix"')
 | 
					      expect(() => distributionOf('1.1.1-canary20221103f7e2421e91')).toThrow(
 | 
				
			||||||
    })
 | 
					        'Canary version must have "-v8-canary suffix"'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('1.1.1-nightly should be NIGHTLY', () => {
 | 
					    it('1.1.1-nightly should be NIGHTLY', () => {
 | 
				
			||||||
      expect(distributionOf('1.1.1-nightly')).toBe(Distributions.NIGHTLY)
 | 
					      expect(distributionOf('1.1.1-nightly')).toBe(Distributions.NIGHTLY);
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
    it('1.1.1-nightly20221103f7e2421e91 should be NIGHTLY', () => {
 | 
					    it('1.1.1-nightly20221103f7e2421e91 should be NIGHTLY', () => {
 | 
				
			||||||
      expect(distributionOf('1.1.1-nightly20221103f7e2421e91')).toBe(Distributions.NIGHTLY)
 | 
					      expect(distributionOf('1.1.1-nightly20221103f7e2421e91')).toBe(
 | 
				
			||||||
    })
 | 
					        Distributions.NIGHTLY
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('1.1.1-rc.0 should be RC', () => {
 | 
					    it('1.1.1-rc.0 should be RC', () => {
 | 
				
			||||||
      expect(distributionOf('1.1.1-rc.0')).toBe(Distributions.RC)
 | 
					      expect(distributionOf('1.1.1-rc.0')).toBe(Distributions.RC);
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
  })
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('versionMatcherFactory', () => {
 | 
					  describe('versionMatcherFactory', () => {
 | 
				
			||||||
    it('1.1.1 should be handled by semverVersionMatcherFactory', () => {
 | 
					    it('1.1.1 should be handled by semverVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('1.1.1').factory).toBe(semverVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('1.1.1').factory).toBe(
 | 
				
			||||||
    })
 | 
					        semverVersionMatcherFactory
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('v1.1.1 should be handled by semverVersionMatcherFactory', () => {
 | 
					    it('v1.1.1 should be handled by semverVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('v1.1.1').factory).toBe(semverVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('v1.1.1').factory).toBe(
 | 
				
			||||||
    })
 | 
					        semverVersionMatcherFactory
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('v1.1.1-v8-canary should be handled by canaryRangeVersionMatcherFactory', () => {
 | 
					    it('v1.1.1-v8-canary should be handled by canaryRangeVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('v1.1.1-v8-canary').factory).toBe(canaryRangeVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('v1.1.1-v8-canary').factory).toBe(
 | 
				
			||||||
    })
 | 
					        canaryRangeVersionMatcherFactory
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('v1.1.1-v8-canary123 should be handled by canaryExactVersionMatcherFactory', () => {
 | 
					    it('v1.1.1-v8-canary123 should be handled by canaryExactVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('v1.1.1-v8-canary123').factory).toBe(canaryExactVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('v1.1.1-v8-canary123').factory).toBe(
 | 
				
			||||||
    })
 | 
					        canaryExactVersionMatcherFactory
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('v1.1.1-nightly should be handled by nightlyRangeVersionMatcherFactory', () => {
 | 
					    it('v1.1.1-nightly should be handled by nightlyRangeVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('v1.1.1-nightly').factory).toBe(nightlyRangeVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('v1.1.1-nightly').factory).toBe(
 | 
				
			||||||
    })
 | 
					        nightlyRangeVersionMatcherFactory
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('v1.1.1-nigthly123 should be handled by nightlyExactVersionMatcherFactory', () => {
 | 
					    it('v1.1.1-nigthly123 should be handled by nightlyExactVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('v1.1.1-nightly123').factory).toBe(nightlyExactVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('v1.1.1-nightly123').factory).toBe(
 | 
				
			||||||
    })
 | 
					        nightlyExactVersionMatcherFactory
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('v1.1.1-rc should be handled by semverVersionMatcherFactory', () => {
 | 
					    it('v1.1.1-rc should be handled by semverVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('v1.1.1-rc').factory).toBe(semverVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('v1.1.1-rc').factory).toBe(
 | 
				
			||||||
    })
 | 
					        semverVersionMatcherFactory
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    it('v1.1.1-rc.1 should be handled by semverVersionMatcherFactory', () => {
 | 
					    it('v1.1.1-rc.1 should be handled by semverVersionMatcherFactory', () => {
 | 
				
			||||||
      expect(versionMatcherFactory('v1.1.1-rc.1').factory).toBe(semverVersionMatcherFactory)
 | 
					      expect(versionMatcherFactory('v1.1.1-rc.1').factory).toBe(
 | 
				
			||||||
    })
 | 
					        semverVersionMatcherFactory
 | 
				
			||||||
  })
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('Version spec matchers', () => {
 | 
					  describe('Version spec matchers', () => {
 | 
				
			||||||
    it('semverVersionMatcher should always work as semver.satisfies does', () => {
 | 
					    it('semverVersionMatcher should always work as semver.satisfies does', () => {
 | 
				
			||||||
      const rangePlain = '1.1.1'
 | 
					      const rangePlain = '1.1.1';
 | 
				
			||||||
      const matcherPlain = semverVersionMatcherFactory(rangePlain)
 | 
					      const matcherPlain = semverVersionMatcherFactory(rangePlain);
 | 
				
			||||||
      expect(matcherPlain('1.1.1')).toBe(semver.satisfies('1.1.1', rangePlain))
 | 
					      expect(matcherPlain('1.1.1')).toBe(semver.satisfies('1.1.1', rangePlain));
 | 
				
			||||||
      expect(matcherPlain('1.1.2')).toBe(semver.satisfies('1.1.2', rangePlain))
 | 
					      expect(matcherPlain('1.1.2')).toBe(semver.satisfies('1.1.2', rangePlain));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const rangeEq = '=1.1.1'
 | 
					      const rangeEq = '=1.1.1';
 | 
				
			||||||
      const matcherEq = semverVersionMatcherFactory(rangeEq)
 | 
					      const matcherEq = semverVersionMatcherFactory(rangeEq);
 | 
				
			||||||
      expect(matcherEq('1.1.1')).toBe(semver.satisfies('1.1.1', rangeEq))
 | 
					      expect(matcherEq('1.1.1')).toBe(semver.satisfies('1.1.1', rangeEq));
 | 
				
			||||||
      expect(matcherEq('1.1.2')).toBe(semver.satisfies('1.1.2', rangeEq))
 | 
					      expect(matcherEq('1.1.2')).toBe(semver.satisfies('1.1.2', rangeEq));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // TODO: add for discovered issues if any
 | 
					      // TODO: add for discovered issues if any
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryExactVersionMatcher should match v20.0.0-v8-canary20221103f7e2421e91 only v20.0.0-v8-canary20221103f7e2421e91', () => {
 | 
					    it('canaryExactVersionMatcher should match v20.0.0-v8-canary20221103f7e2421e91 only v20.0.0-v8-canary20221103f7e2421e91', () => {
 | 
				
			||||||
      const version = semver.coerce('v20.0.0')!.version
 | 
					      const version = semver.coerce('v20.0.0')!.version;
 | 
				
			||||||
      const matcher = canaryExactVersionMatcherFactory(version, 'v8-canary20221103f7e2421e91');
 | 
					      const matcher = canaryExactVersionMatcherFactory(
 | 
				
			||||||
 | 
					        version,
 | 
				
			||||||
 | 
					        'v8-canary20221103f7e2421e91'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
      expect(matcher('v20.0.0-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.0.0-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
      // see  https://github.com/actions/setup-node/blob/00e1b6691b40cce14b5078cb411dd1ec7dab07f7/__tests__/verify-node.sh#L10
 | 
					      // see  https://github.com/actions/setup-node/blob/00e1b6691b40cce14b5078cb411dd1ec7dab07f7/__tests__/verify-node.sh#L10
 | 
				
			||||||
      expect(matcher('v20.0.0-v8-canary202211026bf85d0fb4')).toBeFalsy();
 | 
					      expect(matcher('v20.0.0-v8-canary202211026bf85d0fb4')).toBeFalsy();
 | 
				
			||||||
    })
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryRangeVersionMatcherFactory should match v20-v8-canary to any minor and patch version', () => {
 | 
					    it('canaryRangeVersionMatcherFactory should match v20-v8-canary to any minor and patch version', () => {
 | 
				
			||||||
      const version = semver.coerce('v20')!.version
 | 
					      const version = semver.coerce('v20')!.version;
 | 
				
			||||||
      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
					      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
				
			||||||
      expect(matcher('v20.0.0-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.0.0-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
      expect(matcher('v20.0.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.0.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
@ -117,7 +144,7 @@ describe('setup-node unit tests', () => {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryRangeVersionMatcherFactory should not match v20-v8-canary to v21.x & v19.x', () => {
 | 
					    it('canaryRangeVersionMatcherFactory should not match v20-v8-canary to v21.x & v19.x', () => {
 | 
				
			||||||
      const version = semver.coerce('v20')!.version
 | 
					      const version = semver.coerce('v20')!.version;
 | 
				
			||||||
      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
					      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
				
			||||||
      expect(matcher('v21.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
					      expect(matcher('v21.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
				
			||||||
      expect(matcher('v21.1.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
					      expect(matcher('v21.1.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
				
			||||||
@ -128,7 +155,7 @@ describe('setup-node unit tests', () => {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryRangeVersionMatcherFactory should match v20.1-v8-canary to any v20.1 patch version and minor above or eq v20.1', () => {
 | 
					    it('canaryRangeVersionMatcherFactory should match v20.1-v8-canary to any v20.1 patch version and minor above or eq v20.1', () => {
 | 
				
			||||||
      const version = semver.coerce('v20.1')!.version
 | 
					      const version = semver.coerce('v20.1')!.version;
 | 
				
			||||||
      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
					      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
				
			||||||
      expect(matcher('v20.1.0-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.1.0-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
      expect(matcher('v20.1.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.1.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
@ -137,7 +164,7 @@ describe('setup-node unit tests', () => {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryRangeVersionMatcherFactory should not match canaryRangeVersionMatcherFactory to v21.x, v19.x, and v20 minor less v20.2', () => {
 | 
					    it('canaryRangeVersionMatcherFactory should not match canaryRangeVersionMatcherFactory to v21.x, v19.x, and v20 minor less v20.2', () => {
 | 
				
			||||||
      const version = semver.coerce('v20.2')!.version
 | 
					      const version = semver.coerce('v20.2')!.version;
 | 
				
			||||||
      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
					      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
				
			||||||
      expect(matcher('v20.1.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
					      expect(matcher('v20.1.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
				
			||||||
      expect(matcher('v21.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
					      expect(matcher('v21.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
				
			||||||
@ -145,7 +172,7 @@ describe('setup-node unit tests', () => {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryRangeVersionMatcherFactory should not match v20.1.1-v8-canary v20.1.x to patch versions above or eq v20.1.1', () => {
 | 
					    it('canaryRangeVersionMatcherFactory should not match v20.1.1-v8-canary v20.1.x to patch versions above or eq v20.1.1', () => {
 | 
				
			||||||
      const version = semver.coerce('v20.1.1')!.version
 | 
					      const version = semver.coerce('v20.1.1')!.version;
 | 
				
			||||||
      const matcher = canaryRangeVersionMatcherFactory('v20.1.1-v8-canary');
 | 
					      const matcher = canaryRangeVersionMatcherFactory('v20.1.1-v8-canary');
 | 
				
			||||||
      expect(matcher('v20.1.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.1.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
      expect(matcher('v20.1.2-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.1.2-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
@ -153,20 +180,20 @@ describe('setup-node unit tests', () => {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryRangeVersionMatcherFactory should match v20.1.1-v8-canary to patch versions with any canary timestamp', () => {
 | 
					    it('canaryRangeVersionMatcherFactory should match v20.1.1-v8-canary to patch versions with any canary timestamp', () => {
 | 
				
			||||||
      const version = semver.coerce('v20.1.1')!.version
 | 
					      const version = semver.coerce('v20.1.1')!.version;
 | 
				
			||||||
      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
					      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
				
			||||||
      expect(matcher('v20.1.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
					      expect(matcher('v20.1.1-v8-canary20221103f7e2421e91')).toBeTruthy();
 | 
				
			||||||
      expect(matcher('v20.1.1-v8-canary202211026bf85d0fb4')).toBeTruthy();
 | 
					      expect(matcher('v20.1.1-v8-canary202211026bf85d0fb4')).toBeTruthy();
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('canaryRangeVersionMatcherFactory should not match v20.1.1-v8-canary to any other minor versions and patch versions below v20.1.1', () => {
 | 
					    it('canaryRangeVersionMatcherFactory should not match v20.1.1-v8-canary to any other minor versions and patch versions below v20.1.1', () => {
 | 
				
			||||||
      const version = semver.coerce('v20.1.1')!.version
 | 
					      const version = semver.coerce('v20.1.1')!.version;
 | 
				
			||||||
      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
					      const matcher = canaryRangeVersionMatcherFactory(version);
 | 
				
			||||||
      expect(matcher('v20.1.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
					      expect(matcher('v20.1.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
				
			||||||
      expect(matcher('v21.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
					      expect(matcher('v21.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
				
			||||||
      expect(matcher('v19.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
					      expect(matcher('v19.0.0-v8-canary20221103f7e2421e91')).toBeFalsy();
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  })
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('evaluateVersions', () => {
 | 
					  describe('evaluateVersions', () => {
 | 
				
			||||||
    it('evaluateVersions should handle v8-canary version spec without timestamp', () => {
 | 
					    it('evaluateVersions should handle v8-canary version spec without timestamp', () => {
 | 
				
			||||||
@ -190,36 +217,63 @@ describe('setup-node unit tests', () => {
 | 
				
			|||||||
        'v20.0.1-v8-canary20221103f7e2421e93',
 | 
					        'v20.0.1-v8-canary20221103f7e2421e93',
 | 
				
			||||||
        'v20.0.2-v8-canary20221103f7e2421e91'
 | 
					        'v20.0.2-v8-canary20221103f7e2421e91'
 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
      const version = evaluateVersions(versions, 'v20.0.1-v8-canary20221103f7e2421e92');
 | 
					      const version = evaluateVersions(
 | 
				
			||||||
 | 
					        versions,
 | 
				
			||||||
 | 
					        'v20.0.1-v8-canary20221103f7e2421e92'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
      expect(version).toBe('v20.0.1-v8-canary20221103f7e2421e92');
 | 
					      expect(version).toBe('v20.0.1-v8-canary20221103f7e2421e92');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  })
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('getNodejsDistUrl', () => {
 | 
					  describe('getNodejsDistUrl', () => {
 | 
				
			||||||
    it('getNodejsDistUrl should handle v8 canary version spec', async () => {
 | 
					    it('getNodejsDistUrl should handle v8 canary version spec', async () => {
 | 
				
			||||||
      expect(getNodejsDistUrl('1.1.1-v8-canary')).toBe('https://nodejs.org/download/v8-canary');
 | 
					      expect(getNodejsDistUrl('1.1.1-v8-canary')).toBe(
 | 
				
			||||||
      expect(getNodejsDistUrl('1.1.1-v8-canary123')).toBe('https://nodejs.org/download/v8-canary');
 | 
					        'https://nodejs.org/download/v8-canary'
 | 
				
			||||||
      expect(getNodejsDistUrl('v1.1.1-v8-canary')).toBe('https://nodejs.org/download/v8-canary');
 | 
					      );
 | 
				
			||||||
      expect(getNodejsDistUrl('v1.1.1-v8-canary123')).toBe('https://nodejs.org/download/v8-canary');
 | 
					      expect(getNodejsDistUrl('1.1.1-v8-canary123')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/v8-canary'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      expect(getNodejsDistUrl('v1.1.1-v8-canary')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/v8-canary'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      expect(getNodejsDistUrl('v1.1.1-v8-canary123')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/v8-canary'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('getNodejsDistUrl should handle nightly version spec', async () => {
 | 
					    it('getNodejsDistUrl should handle nightly version spec', async () => {
 | 
				
			||||||
      expect(getNodejsDistUrl('1.1.1-nightly')).toBe('https://nodejs.org/download/nightly');
 | 
					      expect(getNodejsDistUrl('1.1.1-nightly')).toBe(
 | 
				
			||||||
      expect(getNodejsDistUrl('v1.1.1-nightly')).toBe('https://nodejs.org/download/nightly');
 | 
					        'https://nodejs.org/download/nightly'
 | 
				
			||||||
      expect(getNodejsDistUrl('1.1.1-nightly123')).toBe('https://nodejs.org/download/nightly');
 | 
					      );
 | 
				
			||||||
      expect(getNodejsDistUrl('v1.1.1-nightly123')).toBe('https://nodejs.org/download/nightly');
 | 
					      expect(getNodejsDistUrl('v1.1.1-nightly')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/nightly'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      expect(getNodejsDistUrl('1.1.1-nightly123')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/nightly'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      expect(getNodejsDistUrl('v1.1.1-nightly123')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/nightly'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('getNodejsDistUrl should handle rc version spec', async () => {
 | 
					    it('getNodejsDistUrl should handle rc version spec', async () => {
 | 
				
			||||||
      expect(getNodejsDistUrl('1.1.1-rc')).toBe('https://nodejs.org/download/rc');
 | 
					      expect(getNodejsDistUrl('1.1.1-rc')).toBe(
 | 
				
			||||||
      expect(getNodejsDistUrl('v1.1.1-rc')).toBe('https://nodejs.org/download/rc');
 | 
					        'https://nodejs.org/download/rc'
 | 
				
			||||||
      expect(getNodejsDistUrl('1.1.1-rc.0')).toBe('https://nodejs.org/download/rc');
 | 
					      );
 | 
				
			||||||
      expect(getNodejsDistUrl('v1.1.1-rc.0')).toBe('https://nodejs.org/download/rc');
 | 
					      expect(getNodejsDistUrl('v1.1.1-rc')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/rc'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      expect(getNodejsDistUrl('1.1.1-rc.0')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/rc'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      expect(getNodejsDistUrl('v1.1.1-rc.0')).toBe(
 | 
				
			||||||
 | 
					        'https://nodejs.org/download/rc'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('getNodejsDistUrl should handle unspecific version spec', async () => {
 | 
					    it('getNodejsDistUrl should handle unspecific version spec', async () => {
 | 
				
			||||||
      expect(getNodejsDistUrl('1.1.1')).toBe('https://nodejs.org/dist');
 | 
					      expect(getNodejsDistUrl('1.1.1')).toBe('https://nodejs.org/dist');
 | 
				
			||||||
      expect(getNodejsDistUrl('v1.1.1')).toBe('https://nodejs.org/dist');
 | 
					      expect(getNodejsDistUrl('v1.1.1')).toBe('https://nodejs.org/dist');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  })
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										129
									
								
								src/installer.ts
									
									
									
									
									
								
							
							
						
						
									
										129
									
								
								src/installer.ts
									
									
									
									
									
								
							@ -34,103 +34,121 @@ export enum Distributions {
 | 
				
			|||||||
  DEFAULT,
 | 
					  DEFAULT,
 | 
				
			||||||
  CANARY,
 | 
					  CANARY,
 | 
				
			||||||
  NIGHTLY,
 | 
					  NIGHTLY,
 | 
				
			||||||
  RC,
 | 
					  RC
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const distributionOf = (versionSpec: string): Distributions =>
 | 
					export const distributionOf = (versionSpec: string): Distributions =>
 | 
				
			||||||
  versionSpec.includes('-v8-canary')
 | 
					  versionSpec.includes('-v8-canary')
 | 
				
			||||||
    ? Distributions.CANARY
 | 
					    ? Distributions.CANARY
 | 
				
			||||||
    // TODO: i'd like to have this check, do you?
 | 
					    : // TODO: i'd like to have this check, do you?
 | 
				
			||||||
    : versionSpec.includes('-canary')
 | 
					    versionSpec.includes('-canary')
 | 
				
			||||||
    ? (() => {
 | 
					    ? (() => {
 | 
				
			||||||
        throw Error('Canary version must have "-v8-canary suffix"')
 | 
					        throw Error('Canary version must have "-v8-canary suffix"');
 | 
				
			||||||
      })()
 | 
					      })()
 | 
				
			||||||
    : versionSpec.includes('nightly')
 | 
					    : versionSpec.includes('nightly')
 | 
				
			||||||
    ? Distributions.NIGHTLY
 | 
					    ? Distributions.NIGHTLY
 | 
				
			||||||
    : semver.prerelease(versionSpec)
 | 
					    : semver.prerelease(versionSpec)
 | 
				
			||||||
    ? Distributions.RC
 | 
					    ? Distributions.RC
 | 
				
			||||||
          : Distributions.DEFAULT
 | 
					    : Distributions.DEFAULT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface VersionMatcher {
 | 
					interface VersionMatcher {
 | 
				
			||||||
  (potential: string): boolean
 | 
					  (potential: string): boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // memoize the factory for testing and debug purposes
 | 
					  // memoize the factory for testing and debug purposes
 | 
				
			||||||
  factory: ((ver: string, suffix: string) => VersionMatcher) |
 | 
					  factory:
 | 
				
			||||||
    ((semverRanger: string) => VersionMatcher) | (() => VersionMatcher)
 | 
					    | ((ver: string, suffix: string) => VersionMatcher)
 | 
				
			||||||
 | 
					    | ((semverRanger: string) => VersionMatcher)
 | 
				
			||||||
 | 
					    | (() => VersionMatcher);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const semverVersionMatcherFactory = (range: string): VersionMatcher => {
 | 
					export const semverVersionMatcherFactory = (range: string): VersionMatcher => {
 | 
				
			||||||
  const matcher = (potential: string): boolean => semver.satisfies(potential, range);
 | 
					 | 
				
			||||||
  matcher.factory = semverVersionMatcherFactory
 | 
					 | 
				
			||||||
  return matcher
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const canaryRangeVersionMatcherFactory = (version: string): VersionMatcher => {
 | 
					 | 
				
			||||||
  const range = semver.validRange(`^${version}`)
 | 
					 | 
				
			||||||
  const matcher = (potential: string): boolean =>
 | 
					 | 
				
			||||||
    semver.satisfies(potential.replace('-v8-canary', '+v8-canary.'), range);
 | 
					 | 
				
			||||||
  matcher.factory = canaryRangeVersionMatcherFactory
 | 
					 | 
				
			||||||
  return matcher
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const canaryExactVersionMatcherFactory = (version: string, timestamp: string): VersionMatcher => {
 | 
					 | 
				
			||||||
  const range = `${version}-${timestamp}`
 | 
					 | 
				
			||||||
  const matcher = (potential: string): boolean =>
 | 
					  const matcher = (potential: string): boolean =>
 | 
				
			||||||
    semver.satisfies(potential, range);
 | 
					    semver.satisfies(potential, range);
 | 
				
			||||||
  matcher.factory = canaryExactVersionMatcherFactory
 | 
					  matcher.factory = semverVersionMatcherFactory;
 | 
				
			||||||
  return matcher
 | 
					  return matcher;
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const nightlyRangeVersionMatcherFactory = (version: string): VersionMatcher => {
 | 
					export const canaryRangeVersionMatcherFactory = (
 | 
				
			||||||
  const range =  `${semver.validRange(`^${version}-0`)}-0`
 | 
					  version: string
 | 
				
			||||||
 | 
					): VersionMatcher => {
 | 
				
			||||||
 | 
					  const range = semver.validRange(`^${version}`);
 | 
				
			||||||
 | 
					  const matcher = (potential: string): boolean =>
 | 
				
			||||||
 | 
					    semver.satisfies(potential.replace('-v8-canary', '+v8-canary.'), range);
 | 
				
			||||||
 | 
					  matcher.factory = canaryRangeVersionMatcherFactory;
 | 
				
			||||||
 | 
					  return matcher;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const canaryExactVersionMatcherFactory = (
 | 
				
			||||||
 | 
					  version: string,
 | 
				
			||||||
 | 
					  timestamp: string
 | 
				
			||||||
 | 
					): VersionMatcher => {
 | 
				
			||||||
 | 
					  const range = `${version}-${timestamp}`;
 | 
				
			||||||
 | 
					  const matcher = (potential: string): boolean =>
 | 
				
			||||||
 | 
					    semver.satisfies(potential, range);
 | 
				
			||||||
 | 
					  matcher.factory = canaryExactVersionMatcherFactory;
 | 
				
			||||||
 | 
					  return matcher;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const nightlyRangeVersionMatcherFactory = (
 | 
				
			||||||
 | 
					  version: string
 | 
				
			||||||
 | 
					): VersionMatcher => {
 | 
				
			||||||
 | 
					  const range = `${semver.validRange(`^${version}-0`)}-0`;
 | 
				
			||||||
  const matcher = (potential: string): boolean =>
 | 
					  const matcher = (potential: string): boolean =>
 | 
				
			||||||
    distributionOf(potential) === Distributions.NIGHTLY &&
 | 
					    distributionOf(potential) === Distributions.NIGHTLY &&
 | 
				
			||||||
    semver.satisfies(potential.replace('-nightly', '-nightly.'), range, {includePrerelease: true})
 | 
					    semver.satisfies(potential.replace('-nightly', '-nightly.'), range, {
 | 
				
			||||||
  matcher.factory = nightlyRangeVersionMatcherFactory
 | 
					      includePrerelease: true
 | 
				
			||||||
  return matcher
 | 
					    });
 | 
				
			||||||
}
 | 
					  matcher.factory = nightlyRangeVersionMatcherFactory;
 | 
				
			||||||
 | 
					  return matcher;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const nightlyExactVersionMatcherFactory = (version: string, prerelease_tag: string): VersionMatcher => {
 | 
					export const nightlyExactVersionMatcherFactory = (
 | 
				
			||||||
 | 
					  version: string,
 | 
				
			||||||
 | 
					  prerelease_tag: string
 | 
				
			||||||
 | 
					): VersionMatcher => {
 | 
				
			||||||
  const range = `${version}-${prerelease_tag.replace('nightly', 'nightly.')}`;
 | 
					  const range = `${version}-${prerelease_tag.replace('nightly', 'nightly.')}`;
 | 
				
			||||||
  const matcher = (potential: string): boolean =>
 | 
					  const matcher = (potential: string): boolean =>
 | 
				
			||||||
    distributionOf(potential) === Distributions.NIGHTLY &&
 | 
					    distributionOf(potential) === Distributions.NIGHTLY &&
 | 
				
			||||||
    semver.satisfies(potential.replace('-nightly', '-nightly.'), range, {includePrerelease: true})
 | 
					    semver.satisfies(potential.replace('-nightly', '-nightly.'), range, {
 | 
				
			||||||
  matcher.factory = nightlyExactVersionMatcherFactory
 | 
					      includePrerelease: true
 | 
				
			||||||
  return matcher
 | 
					    });
 | 
				
			||||||
}
 | 
					  matcher.factory = nightlyExactVersionMatcherFactory;
 | 
				
			||||||
 | 
					  return matcher;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const alwaysFalseVersionMatcherFactory = (): VersionMatcher => {
 | 
					const alwaysFalseVersionMatcherFactory = (): VersionMatcher => {
 | 
				
			||||||
  const matcher = () => false;
 | 
					  const matcher = () => false;
 | 
				
			||||||
  matcher.factory = alwaysFalseVersionMatcherFactory
 | 
					  matcher.factory = alwaysFalseVersionMatcherFactory;
 | 
				
			||||||
  return matcher
 | 
					  return matcher;
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const alwaysFalseVersionMatcher = alwaysFalseVersionMatcherFactory()
 | 
					const alwaysFalseVersionMatcher = alwaysFalseVersionMatcherFactory();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// [raw, prerelease]
 | 
					// [raw, prerelease]
 | 
				
			||||||
export const splitVersionSpec = (versionSpec: string): string[] => versionSpec.split(/-(.*)/s);
 | 
					export const splitVersionSpec = (versionSpec: string): string[] =>
 | 
				
			||||||
 | 
					  versionSpec.split(/-(.*)/s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function versionMatcherFactory(versionSpec: string): VersionMatcher {
 | 
					export function versionMatcherFactory(versionSpec: string): VersionMatcher {
 | 
				
			||||||
  const [raw, prerelease] = splitVersionSpec(versionSpec)
 | 
					  const [raw, prerelease] = splitVersionSpec(versionSpec);
 | 
				
			||||||
  const validVersion = semver.valid(raw) ? raw : semver.coerce(raw)?.version;
 | 
					  const validVersion = semver.valid(raw) ? raw : semver.coerce(raw)?.version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (validVersion) {
 | 
					  if (validVersion) {
 | 
				
			||||||
    switch (distributionOf(versionSpec)) {
 | 
					    switch (distributionOf(versionSpec)) {
 | 
				
			||||||
      case Distributions.CANARY:
 | 
					      case Distributions.CANARY:
 | 
				
			||||||
        return (prerelease === 'v8-canary') // this means versionSpec does not have timestamp
 | 
					        return prerelease === 'v8-canary' // this means versionSpec does not have timestamp
 | 
				
			||||||
          ? canaryRangeVersionMatcherFactory(validVersion)
 | 
					          ? canaryRangeVersionMatcherFactory(validVersion)
 | 
				
			||||||
          : canaryExactVersionMatcherFactory(validVersion, prerelease)
 | 
					          : canaryExactVersionMatcherFactory(validVersion, prerelease);
 | 
				
			||||||
      case Distributions.NIGHTLY:
 | 
					      case Distributions.NIGHTLY:
 | 
				
			||||||
        return (prerelease === 'nightly') // this means versionSpec does not have prerelease tag
 | 
					        return prerelease === 'nightly' // this means versionSpec does not have prerelease tag
 | 
				
			||||||
          ? nightlyRangeVersionMatcherFactory(validVersion)
 | 
					          ? nightlyRangeVersionMatcherFactory(validVersion)
 | 
				
			||||||
            : nightlyExactVersionMatcherFactory(validVersion, prerelease)
 | 
					          : nightlyExactVersionMatcherFactory(validVersion, prerelease);
 | 
				
			||||||
      case Distributions.RC:
 | 
					      case Distributions.RC:
 | 
				
			||||||
      case Distributions.DEFAULT:
 | 
					      case Distributions.DEFAULT:
 | 
				
			||||||
        return semverVersionMatcherFactory(versionSpec)
 | 
					        return semverVersionMatcherFactory(versionSpec);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    // TODO: i prefer to have implicit exception for the malformed input
 | 
					    // TODO: i prefer to have implicit exception for the malformed input
 | 
				
			||||||
    throw Error(`Invalid version input "${versionSpec}"`)
 | 
					    throw Error(`Invalid version input "${versionSpec}"`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO: but it is possible to silently fail
 | 
					    // TODO: but it is possible to silently fail
 | 
				
			||||||
    //  return alwaysFalseVersionMatcher
 | 
					    //  return alwaysFalseVersionMatcher
 | 
				
			||||||
@ -149,7 +167,7 @@ export async function getNode(
 | 
				
			|||||||
  let nodeVersions: INodeVersion[] | undefined;
 | 
					  let nodeVersions: INodeVersion[] | undefined;
 | 
				
			||||||
  const osPlat: string = os.platform();
 | 
					  const osPlat: string = os.platform();
 | 
				
			||||||
  const osArch: string = translateArchToDistUrl(arch);
 | 
					  const osArch: string = translateArchToDistUrl(arch);
 | 
				
			||||||
  const distribution = distributionOf(versionSpec)
 | 
					  const distribution = distributionOf(versionSpec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (isLtsAlias(versionSpec)) {
 | 
					  if (isLtsAlias(versionSpec)) {
 | 
				
			||||||
    core.info('Attempt to resolve LTS alias from manifest...');
 | 
					    core.info('Attempt to resolve LTS alias from manifest...');
 | 
				
			||||||
@ -199,7 +217,7 @@ export async function getNode(
 | 
				
			|||||||
  if (distribution === Distributions.DEFAULT) {
 | 
					  if (distribution === Distributions.DEFAULT) {
 | 
				
			||||||
    toolPath = tc.find('node', versionSpec, osArch);
 | 
					    toolPath = tc.find('node', versionSpec, osArch);
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    const localVersionPaths = tc.findAllVersions('node', osArch)
 | 
					    const localVersionPaths = tc.findAllVersions('node', osArch);
 | 
				
			||||||
    const localVersion = evaluateVersions(localVersionPaths, versionSpec);
 | 
					    const localVersion = evaluateVersions(localVersionPaths, versionSpec);
 | 
				
			||||||
    toolPath = localVersion && tc.find('node', localVersion, osArch);
 | 
					    toolPath = localVersion && tc.find('node', localVersion, osArch);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -470,11 +488,14 @@ async function resolveVersionFromManifest(
 | 
				
			|||||||
//      -  the answer from dsame@github.com - we have customized matcher and can not
 | 
					//      -  the answer from dsame@github.com - we have customized matcher and can not
 | 
				
			||||||
//         export `evaluateVersions` from tc. But it would be possible to modify tc to accept
 | 
					//         export `evaluateVersions` from tc. But it would be possible to modify tc to accept
 | 
				
			||||||
//         the matcher as an optional parameter to `evaluateVersions`
 | 
					//         the matcher as an optional parameter to `evaluateVersions`
 | 
				
			||||||
export function evaluateVersions(versions: string[], versionSpec: string): string {
 | 
					export function evaluateVersions(
 | 
				
			||||||
 | 
					  versions: string[],
 | 
				
			||||||
 | 
					  versionSpec: string
 | 
				
			||||||
 | 
					): string {
 | 
				
			||||||
  core.debug(`evaluating ${versions.length} versions`);
 | 
					  core.debug(`evaluating ${versions.length} versions`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const matcher = versionMatcherFactory(versionSpec)
 | 
					  const matcher = versionMatcherFactory(versionSpec);
 | 
				
			||||||
  const version = versions.sort(semver.rcompare).find(matcher) || ''
 | 
					  const version = versions.sort(semver.rcompare).find(matcher) || '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (version) {
 | 
					  if (version) {
 | 
				
			||||||
    core.debug(`matched: ${version}`);
 | 
					    core.debug(`matched: ${version}`);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user