pre-release version and test
This commit is contained in:
		
							parent
							
								
									43880314e9
								
							
						
					
					
						commit
						768458bd0b
					
				
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							| @ -18,6 +18,7 @@ The V2 beta offers: | |||||||
| - stable input  | - stable input  | ||||||
| - Bug Fixes (including issues around version matching and semver) | - Bug Fixes (including issues around version matching and semver) | ||||||
| 
 | 
 | ||||||
|  | Matching by semver spec: | ||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v2 | - uses: actions/checkout@v2 | ||||||
| @ -27,6 +28,17 @@ steps: | |||||||
| - run: go version | - run: go version | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | Matching an unstable pre-release: | ||||||
|  | ```yaml | ||||||
|  | steps: | ||||||
|  | - uses: actions/checkout@v2 | ||||||
|  | - uses: actions/setup-go@v2-beta | ||||||
|  |   with: | ||||||
|  |     stable: 'false' | ||||||
|  |     go-version: '1.14.0-rc1' # The Go version to download (if necessary) and use. | ||||||
|  | - run: go version | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| # Usage | # Usage | ||||||
| 
 | 
 | ||||||
| See [action.yml](action.yml) | See [action.yml](action.yml) | ||||||
|  | |||||||
| @ -67,6 +67,29 @@ describe('setup-go', () => { | |||||||
| 
 | 
 | ||||||
|   afterAll(async () => {}, 100000); |   afterAll(async () => {}, 100000); | ||||||
| 
 | 
 | ||||||
|  |   it('can query versions', async () => { | ||||||
|  |     let versions: im.IGoVersion[] | null = await im.getVersions( | ||||||
|  |       'https://non.existant.com/path' | ||||||
|  |     ); | ||||||
|  |     expect(versions).toBeDefined(); | ||||||
|  |     let l: number = versions ? versions.length : 0; | ||||||
|  |     expect(l).toBe(91); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('finds stable match for exact version', async () => { | ||||||
|  |     os.platform = 'win32'; | ||||||
|  |     os.arch = 'x64'; | ||||||
|  | 
 | ||||||
|  |     // get request is already mocked
 | ||||||
|  |     // spec: 1.13.7 => 1.13.7 (exact)
 | ||||||
|  |     let match: im.IGoVersion | undefined = await im.findMatch('1.13.7', true); | ||||||
|  |     expect(match).toBeDefined(); | ||||||
|  |     let version: string = match ? match.version : ''; | ||||||
|  |     expect(version).toBe('go1.13.7'); | ||||||
|  |     let fileName = match ? match.files[0].filename : ''; | ||||||
|  |     expect(fileName).toBe('go1.13.7.windows-amd64.zip'); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|   it('finds stable match for exact dot zero version', async () => { |   it('finds stable match for exact dot zero version', async () => { | ||||||
|     os.platform = 'darwin'; |     os.platform = 'darwin'; | ||||||
|     os.arch = 'x64'; |     os.arch = 'x64'; | ||||||
| @ -119,6 +142,22 @@ describe('setup-go', () => { | |||||||
|     expect(fileName).toBe('go1.13.7.windows-386.zip'); |     expect(fileName).toBe('go1.13.7.windows-386.zip'); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|  |   it('finds unstable pre-release version', async () => { | ||||||
|  |     os.platform = 'linux'; | ||||||
|  |     os.arch = 'x64'; | ||||||
|  | 
 | ||||||
|  |     // spec: 1.14, stable=false => go1.14rc1
 | ||||||
|  |     let match: im.IGoVersion | undefined = await im.findMatch( | ||||||
|  |       '1.14.0-rc1', | ||||||
|  |       false | ||||||
|  |     ); | ||||||
|  |     expect(match).toBeDefined(); | ||||||
|  |     let version: string = match ? match.version : ''; | ||||||
|  |     expect(version).toBe('go1.14rc1'); | ||||||
|  |     let fileName = match ? match.files[0].filename : ''; | ||||||
|  |     expect(fileName).toBe('go1.14rc1.linux-amd64.tar.gz'); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|   it('evaluates to stable with input as true', async () => { |   it('evaluates to stable with input as true', async () => { | ||||||
|     inputs['go-version'] = '1.13.0'; |     inputs['go-version'] = '1.13.0'; | ||||||
|     inputs.stable = 'true'; |     inputs.stable = 'true'; | ||||||
| @ -241,26 +280,20 @@ describe('setup-go', () => { | |||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('can query versions', async () => { |   // 1.13.1 => 1.13.1
 | ||||||
|     let versions: im.IGoVersion[] | null = await im.getVersions( |   // 1.13 => 1.13.0
 | ||||||
|       'https://non.existant.com/path' |   // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
 | ||||||
|     ); |   // 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
 | ||||||
|     expect(versions).toBeDefined(); |   it('converts prerelease versions', async () => { | ||||||
|     let l: number = versions ? versions.length : 0; |     expect(im.makeSemver('1.10beta1')).toBe('1.10.0-beta1'); | ||||||
|     expect(l).toBe(91); |     expect(im.makeSemver('1.10rc1')).toBe('1.10.0-rc1'); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('finds stable match for exact version', async () => { |   it('converts dot zero versions', async () => { | ||||||
|     os.platform = 'win32'; |     expect(im.makeSemver('1.13')).toBe('1.13.0'); | ||||||
|     os.arch = 'x64'; |   }); | ||||||
| 
 | 
 | ||||||
|     // get request is already mocked
 |   it('does not convert exact versions', async () => { | ||||||
|     // spec: 1.13.7 => 1.13.7 (exact)
 |     expect(im.makeSemver('1.13.1')).toBe('1.13.1'); | ||||||
|     let match: im.IGoVersion | undefined = await im.findMatch('1.13.7', true); |  | ||||||
|     expect(match).toBeDefined(); |  | ||||||
|     let version: string = match ? match.version : ''; |  | ||||||
|     expect(version).toBe('go1.13.7'); |  | ||||||
|     let fileName = match ? match.files[0].filename : ''; |  | ||||||
|     expect(fileName).toBe('go1.13.7.windows-amd64.zip'); |  | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -4625,7 +4625,7 @@ function findMatch(versionSpec, stable) { | |||||||
|         let goFile; |         let goFile; | ||||||
|         for (let i = 0; i < candidates.length; i++) { |         for (let i = 0; i < candidates.length; i++) { | ||||||
|             let candidate = candidates[i]; |             let candidate = candidates[i]; | ||||||
|             let version = candidate.version.replace('go', ''); |             let version = makeSemver(candidate.version); | ||||||
|             // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
 |             // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
 | ||||||
|             // since a semver of 1.13 would match latest 1.13
 |             // since a semver of 1.13 would match latest 1.13
 | ||||||
|             let parts = version.split('.'); |             let parts = version.split('.'); | ||||||
| @ -4663,6 +4663,25 @@ function getVersions(dlUrl) { | |||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.getVersions = getVersions; | exports.getVersions = getVersions; | ||||||
|  | //
 | ||||||
|  | // Convert the go version syntax into semver for semver matching
 | ||||||
|  | // 1.13.1 => 1.13.1
 | ||||||
|  | // 1.13 => 1.13.0
 | ||||||
|  | // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
 | ||||||
|  | // 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
 | ||||||
|  | function makeSemver(version) { | ||||||
|  |     version = version.replace('go', ''); | ||||||
|  |     version = version.replace('beta', '-beta').replace('rc', '-rc'); | ||||||
|  |     let parts = version.split('-'); | ||||||
|  |     let verPart = parts[0]; | ||||||
|  |     let prereleasePart = parts.length > 1 ? `-${parts[1]}` : ''; | ||||||
|  |     let verParts = verPart.split('.'); | ||||||
|  |     if (verParts.length == 2) { | ||||||
|  |         verPart += '.0'; | ||||||
|  |     } | ||||||
|  |     return `${verPart}${prereleasePart}`; | ||||||
|  | } | ||||||
|  | exports.makeSemver = makeSemver; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
|  | |||||||
| @ -74,7 +74,7 @@ export async function findMatch( | |||||||
|   let goFile: IGoVersionFile | undefined; |   let goFile: IGoVersionFile | undefined; | ||||||
|   for (let i = 0; i < candidates.length; i++) { |   for (let i = 0; i < candidates.length; i++) { | ||||||
|     let candidate: IGoVersion = candidates[i]; |     let candidate: IGoVersion = candidates[i]; | ||||||
|     let version = candidate.version.replace('go', ''); |     let version = makeSemver(candidate.version); | ||||||
| 
 | 
 | ||||||
|     // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
 |     // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
 | ||||||
|     // since a semver of 1.13 would match latest 1.13
 |     // since a semver of 1.13 would match latest 1.13
 | ||||||
| @ -115,3 +115,25 @@ export async function getVersions(dlUrl: string): Promise<IGoVersion[] | null> { | |||||||
|   let http: httpm.HttpClient = new httpm.HttpClient('setup-go'); |   let http: httpm.HttpClient = new httpm.HttpClient('setup-go'); | ||||||
|   return (await http.getJson<IGoVersion[]>(dlUrl)).result; |   return (await http.getJson<IGoVersion[]>(dlUrl)).result; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | //
 | ||||||
|  | // Convert the go version syntax into semver for semver matching
 | ||||||
|  | // 1.13.1 => 1.13.1
 | ||||||
|  | // 1.13 => 1.13.0
 | ||||||
|  | // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
 | ||||||
|  | // 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
 | ||||||
|  | export function makeSemver(version: string): string { | ||||||
|  |   version = version.replace('go', ''); | ||||||
|  |   version = version.replace('beta', '-beta').replace('rc', '-rc'); | ||||||
|  |   let parts = version.split('-'); | ||||||
|  | 
 | ||||||
|  |   let verPart: string = parts[0]; | ||||||
|  |   let prereleasePart = parts.length > 1 ? `-${parts[1]}` : ''; | ||||||
|  | 
 | ||||||
|  |   let verParts: string[] = verPart.split('.'); | ||||||
|  |   if (verParts.length == 2) { | ||||||
|  |     verPart += '.0'; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return `${verPart}${prereleasePart}`; | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user