mirror of
				https://github.com/actions/setup-java.git
				synced 2025-10-31 06:20:53 +00:00 
			
		
		
		
	add changes for check-latest
This commit is contained in:
		
					parent
					
						
							
								804a60faf9
							
						
					
				
			
			
				commit
				
					
						8f3a7c87ff
					
				
			
		
					 9 changed files with 3363 additions and 9258 deletions
				
			
		
							
								
								
									
										37
									
								
								.github/workflows/e2e-versions.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								.github/workflows/e2e-versions.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -69,6 +69,43 @@ jobs: | ||||||
|       - name: Verify Java |       - name: Verify Java | ||||||
|         run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}" |         run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}" | ||||||
|         shell: bash |         shell: bash | ||||||
|  | 
 | ||||||
|  |   setup-java-major-minor-versions-with-check-latest: | ||||||
|  |     name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }} | ||||||
|  |     needs: setup-java-major-versions | ||||||
|  |     runs-on: ${{ matrix.os }} | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         os: [macos-latest, windows-latest, ubuntu-latest] | ||||||
|  |         distribution: ['adopt', 'zulu'] | ||||||
|  |         version: | ||||||
|  |         - '11.0' | ||||||
|  |         - '8.0.282' | ||||||
|  |         - '11.0.2+7' | ||||||
|  |         include: | ||||||
|  |           - distribution: 'adopt' | ||||||
|  |             version: '12.0.2+10.1' | ||||||
|  |             os: macos-latest | ||||||
|  |           - distribution: 'adopt' | ||||||
|  |             version: '12.0.2+10.1' | ||||||
|  |             os: windows-latest | ||||||
|  |           - distribution: 'adopt' | ||||||
|  |             version: '12.0.2+10.1' | ||||||
|  |             os: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v2 | ||||||
|  |       - name: setup-java | ||||||
|  |         uses: ./ | ||||||
|  |         id: setup-java | ||||||
|  |         with: | ||||||
|  |           java-version: ${{ matrix.version }} | ||||||
|  |           distribution: ${{ matrix.distribution }} | ||||||
|  |           check-latest: true | ||||||
|  |       - name: Verify Java | ||||||
|  |         run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}" | ||||||
|  |         shell: bash | ||||||
|    |    | ||||||
|   setup-java-ea-versions-zulu: |   setup-java-ea-versions-zulu: | ||||||
|     name: zulu ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }} |     name: zulu ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }} | ||||||
|  |  | ||||||
|  | @ -19,13 +19,13 @@ class EmptyJavaBase extends JavaBase { | ||||||
| 
 | 
 | ||||||
|   protected async downloadTool(javaRelease: JavaDownloadRelease): Promise<JavaInstallerResults> { |   protected async downloadTool(javaRelease: JavaDownloadRelease): Promise<JavaInstallerResults> { | ||||||
|     return { |     return { | ||||||
|       version: '11.0.8', |       version: '11.0.9', | ||||||
|       path: `/toolcache/${this.toolcacheFolderName}/11.0.8/${this.architecture}` |       path: `toolcache/${this.toolcacheFolderName}/11.0.9/${this.architecture}` | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected async findPackageForDownload(range: string): Promise<JavaDownloadRelease> { |   protected async findPackageForDownload(range: string): Promise<JavaDownloadRelease> { | ||||||
|     const availableVersion = '11.0.8'; |     const availableVersion = '11.0.9'; | ||||||
|     if (!semver.satisfies(availableVersion, range)) { |     if (!semver.satisfies(availableVersion, range)) { | ||||||
|       throw new Error('Available version not found'); |       throw new Error('Available version not found'); | ||||||
|     } |     } | ||||||
|  | @ -38,7 +38,7 @@ class EmptyJavaBase extends JavaBase { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| describe('findInToolcache', () => { | describe('findInToolcache', () => { | ||||||
|   const actualJavaVersion = '11.1.10'; |   const actualJavaVersion = '11.0.8'; | ||||||
|   const javaPath = path.join('Java_Empty_jdk', actualJavaVersion, 'x64'); |   const javaPath = path.join('Java_Empty_jdk', actualJavaVersion, 'x64'); | ||||||
| 
 | 
 | ||||||
|   let mockJavaBase: EmptyJavaBase; |   let mockJavaBase: EmptyJavaBase; | ||||||
|  | @ -62,18 +62,30 @@ describe('findInToolcache', () => { | ||||||
|       { version: actualJavaVersion, path: javaPath } |       { version: actualJavaVersion, path: javaPath } | ||||||
|     ], |     ], | ||||||
|     [ |     [ | ||||||
|       { version: '11.1', architecture: 'x64', packageType: 'jdk' }, |       { version: '11.0', architecture: 'x64', packageType: 'jdk' }, | ||||||
|       { version: actualJavaVersion, path: javaPath } |       { version: actualJavaVersion, path: javaPath } | ||||||
|     ], |     ], | ||||||
|     [ |     [ | ||||||
|       { version: '11.1.10', architecture: 'x64', packageType: 'jdk' }, |       { version: '11.0.8', architecture: 'x64', packageType: 'jdk' }, | ||||||
|  |       { version: actualJavaVersion, path: javaPath } | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       { version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: true }, | ||||||
|  |       { version: actualJavaVersion, path: javaPath } | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       { version: '11.0', architecture: 'x64', packageType: 'jdk', checkLatest: true }, | ||||||
|  |       { version: actualJavaVersion, path: javaPath } | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       { version: '11.0.8', architecture: 'x64', packageType: 'jdk', checkLatest: true }, | ||||||
|       { version: actualJavaVersion, path: javaPath } |       { version: actualJavaVersion, path: javaPath } | ||||||
|     ], |     ], | ||||||
|     [{ version: '11', architecture: 'x64', packageType: 'jre' }, null], |     [{ version: '11', architecture: 'x64', packageType: 'jre' }, null], | ||||||
|     [{ version: '8', architecture: 'x64', packageType: 'jdk' }, null], |     [{ version: '8', architecture: 'x64', packageType: 'jdk' }, null], | ||||||
|     [{ version: '11', architecture: 'x86', packageType: 'jdk' }, null], |     [{ version: '11', architecture: 'x86', packageType: 'jdk' }, null], | ||||||
|     [{ version: '11', architecture: 'x86', packageType: 'jre' }, null] |     [{ version: '11', architecture: 'x86', packageType: 'jre' }, null] | ||||||
|   ])(`should find java for path %s -> %s`, (input, expected) => { |   ])(`should find java for path %o -> %o`, (input, expected) => { | ||||||
|     spyTcFindAllVersions.mockReturnValue([actualJavaVersion]); |     spyTcFindAllVersions.mockReturnValue([actualJavaVersion]); | ||||||
|     spyGetToolcachePath.mockImplementation( |     spyGetToolcachePath.mockImplementation( | ||||||
|       (toolname: string, javaVersion: string, architecture: string) => { |       (toolname: string, javaVersion: string, architecture: string) => { | ||||||
|  | @ -122,8 +134,10 @@ describe('findInToolcache', () => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| describe('setupJava', () => { | describe('setupJava', () => { | ||||||
|   const actualJavaVersion = '11.1.10'; |   const actualJavaVersion = '11.0.8'; | ||||||
|  |   const installedJavaVersion = '11.0.9'; | ||||||
|   const javaPath = path.join('Java_Empty_jdk', actualJavaVersion, 'x86'); |   const javaPath = path.join('Java_Empty_jdk', actualJavaVersion, 'x86'); | ||||||
|  |   const javaPathInstalled = path.join('toolcache', 'Java_Empty_jdk', installedJavaVersion, 'x86'); | ||||||
| 
 | 
 | ||||||
|   let mockJavaBase: EmptyJavaBase; |   let mockJavaBase: EmptyJavaBase; | ||||||
| 
 | 
 | ||||||
|  | @ -181,31 +195,54 @@ describe('setupJava', () => { | ||||||
|       { version: actualJavaVersion, path: javaPath } |       { version: actualJavaVersion, path: javaPath } | ||||||
|     ], |     ], | ||||||
|     [ |     [ | ||||||
|       { version: '11.1', architecture: 'x86', packageType: 'jdk' }, |       { version: '11.0', architecture: 'x86', packageType: 'jdk' }, | ||||||
|       { version: actualJavaVersion, path: javaPath } |       { version: actualJavaVersion, path: javaPath } | ||||||
|     ], |     ], | ||||||
|     [ |     [ | ||||||
|       { version: '11.1.10', architecture: 'x86', packageType: 'jdk' }, |       { version: '11.0.8', architecture: 'x86', packageType: 'jdk' }, | ||||||
|       { version: actualJavaVersion, path: javaPath } |       { version: actualJavaVersion, path: javaPath } | ||||||
|     ] |     ] | ||||||
|   ])('should find java locally for %s', (input, expected) => { |   ])('should find java locally for %o', (input, expected) => { | ||||||
|     mockJavaBase = new EmptyJavaBase(input); |     mockJavaBase = new EmptyJavaBase(input); | ||||||
|     expect(mockJavaBase.setupJava()).resolves.toEqual(expected); |     expect(mockJavaBase.setupJava()).resolves.toEqual(expected); | ||||||
|     expect(spyGetToolcachePath).toHaveBeenCalled(); |     expect(spyGetToolcachePath).toHaveBeenCalled(); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|  |   it.each([ | ||||||
|  |     [ | ||||||
|  |       { version: '11', architecture: 'x86', packageType: 'jdk', checkLatest: true }, | ||||||
|  |       { version: installedJavaVersion, path: javaPathInstalled } | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       { version: '11.0', architecture: 'x86', packageType: 'jdk', checkLatest: true }, | ||||||
|  |       { version: installedJavaVersion, path: javaPathInstalled } | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       { version: '11.0.x', architecture: 'x86', packageType: 'jdk', checkLatest: true }, | ||||||
|  |       { version: installedJavaVersion, path: javaPathInstalled } | ||||||
|  |     ] | ||||||
|  |   ])('should check the latest java version for %o', async (input, expected) => { | ||||||
|  |     mockJavaBase = new EmptyJavaBase(input); | ||||||
|  |     await expect(mockJavaBase.setupJava()).resolves.toEqual(expected); | ||||||
|  |     expect(spyGetToolcachePath).toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreInfo).toHaveBeenCalledWith( | ||||||
|  |       `Java ${input.version} was not found in tool-cache. Trying to download...` | ||||||
|  |     ); | ||||||
|  |     expect(spyCoreInfo).toHaveBeenCalledWith(`Java ${installedJavaVersion} was downloaded`); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|   it.each([ |   it.each([ | ||||||
|     [ |     [ | ||||||
|       { version: '11', architecture: 'x86', packageType: 'jre' }, |       { version: '11', architecture: 'x86', packageType: 'jre' }, | ||||||
|       { path: `/toolcache/Java_Empty_jre/11.0.8/x86`, version: '11.0.8' } |       { path: `toolcache/Java_Empty_jre/11.0.9/x86`, version: '11.0.9' } | ||||||
|     ], |     ], | ||||||
|     [ |     [ | ||||||
|       { version: '11', architecture: 'x64', packageType: 'jdk' }, |       { version: '11', architecture: 'x64', packageType: 'jdk' }, | ||||||
|       { path: `/toolcache/Java_Empty_jdk/11.0.8/x64`, version: '11.0.8' } |       { path: `toolcache/Java_Empty_jdk/11.0.9/x64`, version: '11.0.9' } | ||||||
|     ], |     ], | ||||||
|     [ |     [ | ||||||
|       { version: '11', architecture: 'x64', packageType: 'jre' }, |       { version: '11', architecture: 'x64', packageType: 'jre' }, | ||||||
|       { path: `/toolcache/Java_Empty_jre/11.0.8/x64`, version: '11.0.8' } |       { path: `toolcache/Java_Empty_jre/11.0.9/x64`, version: '11.0.9' } | ||||||
|     ] |     ] | ||||||
|   ])('download java with configuration %s', async (input, expected) => { |   ])('download java with configuration %s', async (input, expected) => { | ||||||
|     mockJavaBase = new EmptyJavaBase(input); |     mockJavaBase = new EmptyJavaBase(input); | ||||||
|  |  | ||||||
|  | @ -20,6 +20,10 @@ inputs: | ||||||
|   jdkFile: |   jdkFile: | ||||||
|     description: 'Path to where the compressed JDK is located' |     description: 'Path to where the compressed JDK is located' | ||||||
|     required: false |     required: false | ||||||
|  |   check-latest: | ||||||
|  |     description: 'Set this option if you want the action to check for the latest available version that satisfies the version spec' | ||||||
|  |     required: false | ||||||
|  |     default: false | ||||||
|   server-id: |   server-id: | ||||||
|     description: 'ID of the distributionManagement repository in the pom.xml |     description: 'ID of the distributionManagement repository in the pom.xml | ||||||
|        file. Default is `github`' |        file. Default is `github`' | ||||||
|  |  | ||||||
							
								
								
									
										6199
									
								
								dist/cleanup/index.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6199
									
								
								dist/cleanup/index.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										6298
									
								
								dist/setup/index.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6298
									
								
								dist/setup/index.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -4,6 +4,7 @@ export const INPUT_ARCHITECTURE = 'architecture'; | ||||||
| export const INPUT_JAVA_PACKAGE = 'java-package'; | export const INPUT_JAVA_PACKAGE = 'java-package'; | ||||||
| export const INPUT_DISTRIBUTION = 'distribution'; | export const INPUT_DISTRIBUTION = 'distribution'; | ||||||
| export const INPUT_JDK_FILE = 'jdkFile'; | export const INPUT_JDK_FILE = 'jdkFile'; | ||||||
|  | export const INPUT_CHECK_LATEST = 'check-latest'; | ||||||
| export const INPUT_SERVER_ID = 'server-id'; | export const INPUT_SERVER_ID = 'server-id'; | ||||||
| export const INPUT_SERVER_USERNAME = 'server-username'; | export const INPUT_SERVER_USERNAME = 'server-username'; | ||||||
| export const INPUT_SERVER_PASSWORD = 'server-password'; | export const INPUT_SERVER_PASSWORD = 'server-password'; | ||||||
|  |  | ||||||
|  | @ -12,6 +12,7 @@ export abstract class JavaBase { | ||||||
|   protected architecture: string; |   protected architecture: string; | ||||||
|   protected packageType: string; |   protected packageType: string; | ||||||
|   protected stable: boolean; |   protected stable: boolean; | ||||||
|  |   protected checkLatest: boolean; | ||||||
| 
 | 
 | ||||||
|   constructor(protected distribution: string, installerOptions: JavaInstallerOptions) { |   constructor(protected distribution: string, installerOptions: JavaInstallerOptions) { | ||||||
|     this.http = new httpm.HttpClient('actions/setup-java', undefined, { |     this.http = new httpm.HttpClient('actions/setup-java', undefined, { | ||||||
|  | @ -24,6 +25,7 @@ export abstract class JavaBase { | ||||||
|     )); |     )); | ||||||
|     this.architecture = installerOptions.architecture; |     this.architecture = installerOptions.architecture; | ||||||
|     this.packageType = installerOptions.packageType; |     this.packageType = installerOptions.packageType; | ||||||
|  |     this.checkLatest = !!installerOptions.checkLatest; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected abstract downloadTool(javaRelease: JavaDownloadRelease): Promise<JavaInstallerResults>; |   protected abstract downloadTool(javaRelease: JavaDownloadRelease): Promise<JavaInstallerResults>; | ||||||
|  | @ -31,13 +33,17 @@ export abstract class JavaBase { | ||||||
| 
 | 
 | ||||||
|   public async setupJava(): Promise<JavaInstallerResults> { |   public async setupJava(): Promise<JavaInstallerResults> { | ||||||
|     let foundJava = this.findInToolcache(); |     let foundJava = this.findInToolcache(); | ||||||
|     if (foundJava) { |     if (foundJava && !this.checkLatest) { | ||||||
|       core.info(`Resolved Java ${foundJava.version} from tool-cache`); |       core.info(`Resolved Java ${foundJava.version} from tool-cache`); | ||||||
|     } else { |     } else { | ||||||
|       core.info(`Java ${this.version} was not found in tool-cache. Trying to download...`); |       core.info(`Java ${this.version} was not found in tool-cache. Trying to download...`); | ||||||
|       const javaRelease = await this.findPackageForDownload(this.version); |       const javaRelease = await this.findPackageForDownload(this.version); | ||||||
|       foundJava = await this.downloadTool(javaRelease); |       if (foundJava?.version != javaRelease.version) { | ||||||
|       core.info(`Java ${foundJava.version} was downloaded`); |         foundJava = await this.downloadTool(javaRelease); | ||||||
|  |         core.info(`Java ${foundJava.version} was downloaded`); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       core.info(`Java ${foundJava.version} was resolved`); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     core.info(`Setting Java ${foundJava.version} as the default`); |     core.info(`Setting Java ${foundJava.version} as the default`); | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ export interface JavaInstallerOptions { | ||||||
|   version: string; |   version: string; | ||||||
|   architecture: string; |   architecture: string; | ||||||
|   packageType: string; |   packageType: string; | ||||||
|  |   checkLatest?: boolean; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export interface JavaInstallerResults { | export interface JavaInstallerResults { | ||||||
|  |  | ||||||
|  | @ -13,11 +13,13 @@ async function run() { | ||||||
|     const architecture = core.getInput(constants.INPUT_ARCHITECTURE); |     const architecture = core.getInput(constants.INPUT_ARCHITECTURE); | ||||||
|     const packageType = core.getInput(constants.INPUT_JAVA_PACKAGE); |     const packageType = core.getInput(constants.INPUT_JAVA_PACKAGE); | ||||||
|     const jdkFile = core.getInput(constants.INPUT_JDK_FILE); |     const jdkFile = core.getInput(constants.INPUT_JDK_FILE); | ||||||
|  |     const checkLatest = core.getInput(constants.INPUT_CHECK_LATEST); | ||||||
| 
 | 
 | ||||||
|     const installerOptions: JavaInstallerOptions = { |     const installerOptions: JavaInstallerOptions = { | ||||||
|       architecture, |       architecture, | ||||||
|       packageType, |       packageType, | ||||||
|       version |       version, | ||||||
|  |       checkLatest: checkLatest ? false : checkLatest.toLowerCase() === 'true' | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     const distribution = getJavaDistribution(distributionName, installerOptions, jdkFile); |     const distribution = getJavaDistribution(distributionName, installerOptions, jdkFile); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue