mirror of
				https://github.com/actions/setup-java.git
				synced 2025-10-31 14:30:53 +00:00 
			
		
		
		
	Add functionality to setup maven binary
Add functionality to setup maven in order to use for project building
This commit is contained in:
		
					parent
					
						
							
								104660f1cc
							
						
					
				
			
			
				commit
				
					
						6fa8ff8bf6
					
				
			
		
					 12 changed files with 222 additions and 127 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
								
							|  | @ -1,3 +1,2 @@ | |||
| dist/index.js    -diff -merge | ||||
| dist/index.js    linguist-generated=true | ||||
| .licenses/** -diff linguist-generated=true | ||||
| dist/** -diff linguist-generated=true | ||||
|  |  | |||
							
								
								
									
										19
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								README.md
									
										
									
									
									
								
							|  | @ -13,6 +13,25 @@ This action sets up a java environment for use in actions by: | |||
| 
 | ||||
| See [action.yml](action.yml) | ||||
| 
 | ||||
| ## MTLS Basic  | ||||
| ```yaml | ||||
| steps: | ||||
| - uses: tradeshift/actions-setup-java@master | ||||
|   with: | ||||
|     # standard github actions parameters | ||||
|     # possible values explained in sections below  | ||||
|     java-version: 11 | ||||
|     # mvn and MTLS related parameters | ||||
|     maven-version: "3.6.3"  | ||||
|     maven-ca-cert-b64: ${{ secrets.MTLS_CACERT }} | ||||
|     maven-keystore-p12-b64: ${{ secrets.MAVEN_P12 }} | ||||
|     maven-keystore-password: ${{ secrets.MAVEN_P12_PASSWORD }} | ||||
|     maven-settings-b64: ${{ secrets.MAVEN_SETTINGS }} | ||||
|     maven-security-settings-b64: ${{ secrets.MAVEN_SECURITY }}  | ||||
| - run: | | ||||
|     mvn -B compile | ||||
| ``` | ||||
| 
 | ||||
| ## Basic | ||||
| ```yaml | ||||
| steps: | ||||
|  |  | |||
|  | @ -156,4 +156,24 @@ describe('installer tests', () => { | |||
|     expect(thrown).toBe(true); | ||||
|     return; | ||||
|   }); | ||||
| 
 | ||||
|   it('throws error when given invalid maven version', async () => { | ||||
|     expect(installer.getMaven('2-3-4')).rejects.toThrow(); | ||||
|   }); | ||||
| 
 | ||||
|   it('Installs version of Maven and stores it to cache', async () => { | ||||
|     await installer.getMaven('3.6.3'); | ||||
|     const mvnDir = path.join(toolDir, 'mvn', '3.6.3', 'x64'); | ||||
| 
 | ||||
|     expect(fs.existsSync(`${mvnDir}.complete`)).toBe(true); | ||||
|     expect(fs.existsSync(path.join(mvnDir))).toBe(true); | ||||
|   }, 100000); | ||||
| 
 | ||||
|   it('Uses version of Maven installed in cache', async () => { | ||||
|     const mvnDir: string = path.join(toolDir, 'mvn', '3.6.3', 'x64'); | ||||
|     await io.mkdirP(mvnDir); | ||||
|     fs.writeFileSync(`${mvnDir}.complete`, 'hello'); | ||||
|     // This will throw if it doesn't find it in the cache (because no such version exists)
 | ||||
|     await installer.getMaven('3.6.3'); | ||||
|   }); | ||||
| }); | ||||
|  |  | |||
|  | @ -9,6 +9,9 @@ inputs: | |||
|        Early access versions can be specified in the form of e.g. 14-ea, | ||||
|        14.0.0-ea, or 14.0.0-ea.28' | ||||
|     required: true | ||||
|   maven-version: | ||||
|     description: 'Version of maven. You have to provide version in order to setup maven. | ||||
|         Check available versions here https://downloads.apache.org/maven/' | ||||
|   maven-ca-cert-b64: | ||||
|     description: 'CA cert in the format of a base64 blob used to connect to private | ||||
|         maven repo protected by MTLS' | ||||
|  |  | |||
							
								
								
									
										3
									
								
								dist/cleanup/index.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								dist/cleanup/index.js
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1029,7 +1029,7 @@ module.exports = require("child_process"); | |||
| "use strict"; | ||||
| 
 | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_MAVEN_SECURITY_SETTINGS_B64 = exports.INPUT_MAVEN_SETTINGS_B64 = exports.INPUT_MAVEN_KEYSTORE_PASSWORD = exports.INPUT_MAVEN_KEYSTORE_P12_B64 = exports.INPUT_MAVEN_CA_CERT_B64 = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_JDK_FILE = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.INPUT_VERSION = void 0; | ||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_MAVEN_VERSION = exports.INPUT_MAVEN_SECURITY_SETTINGS_B64 = exports.INPUT_MAVEN_SETTINGS_B64 = exports.INPUT_MAVEN_KEYSTORE_PASSWORD = exports.INPUT_MAVEN_KEYSTORE_P12_B64 = exports.INPUT_MAVEN_CA_CERT_B64 = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_JDK_FILE = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.INPUT_VERSION = void 0; | ||||
| exports.INPUT_VERSION = 'version'; | ||||
| exports.INPUT_JAVA_VERSION = 'java-version'; | ||||
| exports.INPUT_ARCHITECTURE = 'architecture'; | ||||
|  | @ -1046,6 +1046,7 @@ exports.INPUT_MAVEN_KEYSTORE_P12_B64 = 'maven-keystore-p12-b64'; | |||
| exports.INPUT_MAVEN_KEYSTORE_PASSWORD = 'maven-keystore-password'; | ||||
| exports.INPUT_MAVEN_SETTINGS_B64 = 'maven-settings-b64'; | ||||
| exports.INPUT_MAVEN_SECURITY_SETTINGS_B64 = 'maven-security-settings-b64'; | ||||
| exports.INPUT_MAVEN_VERSION = 'maven-version'; | ||||
| exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; | ||||
| exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; | ||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; | ||||
|  |  | |||
							
								
								
									
										108
									
								
								dist/setup/index.js
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										108
									
								
								dist/setup/index.js
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -11056,29 +11056,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||
|     }); | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| exports.setupMaven = exports.validateOptions = void 0; | ||||
| exports.setupMaven = exports.isValidOptions = void 0; | ||||
| const core = __importStar(__webpack_require__(470)); | ||||
| const fs = __importStar(__webpack_require__(747)); | ||||
| const path = __importStar(__webpack_require__(622)); | ||||
| const constants = __importStar(__webpack_require__(694)); | ||||
| const os = __importStar(__webpack_require__(87)); | ||||
| const exec = __importStar(__webpack_require__(986)); | ||||
| const io = __importStar(__webpack_require__(1)); | ||||
| function validateOptions(opts) { | ||||
|     if ((opts.caCert === '' || | ||||
|         opts.keystore === '' || | ||||
|         opts.password === '' || | ||||
|         opts.securitySettings === '', | ||||
|         opts.settings === '')) { | ||||
|         core.debug('maven options set is not valid: some field is empty'); | ||||
|         return false; | ||||
| function isValidOptions(mvnOpts) { | ||||
|     return (mvnOpts.caCert !== '' && | ||||
|         mvnOpts.keystore !== '' && | ||||
|         mvnOpts.password !== '' && | ||||
|         mvnOpts.securitySettings !== '' && | ||||
|         mvnOpts.settings !== ''); | ||||
| } | ||||
|     return true; | ||||
| } | ||||
| exports.validateOptions = validateOptions; | ||||
| exports.isValidOptions = isValidOptions; | ||||
| function setupMaven(opts) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         const settingsDir = path.join(core.getInput(constants.INPUT_SETTINGS_PATH) || os.homedir(), core.getInput(constants.INPUT_SETTINGS_PATH) ? '' : '.m2'); | ||||
|         const certDir = path.join(os.homedir(), 'certs'); | ||||
|         fs.writeFileSync(path.join(settingsDir, 'settings.xml'), btoa(opts.settings), { | ||||
|             encoding: 'utf-8', | ||||
|             flag: 'w' | ||||
|  | @ -11087,26 +11083,35 @@ function setupMaven(opts) { | |||
|             encoding: 'utf-8', | ||||
|             flag: 'w' | ||||
|         }); | ||||
|         const certDir = path.join(os.homedir(), 'certs'); | ||||
|         const rooCaPath = path.join(certDir, 'rootca.crt'); | ||||
|         yield io.mkdirP(certDir); | ||||
|         fs.writeFileSync(path.join(certDir, 'rootca.crt'), btoa(opts.caCert), { | ||||
|         fs.writeFileSync(rooCaPath, btoa(opts.caCert), { | ||||
|             encoding: 'utf-8', | ||||
|             flag: 'w' | ||||
|         }); | ||||
|         const p12Path = path.join(certDir, 'certificate.p12'); | ||||
|         fs.writeFileSync(p12Path, btoa(opts.keystore), { | ||||
|             encoding: 'utf-8', | ||||
|             flag: 'w' | ||||
|         }); | ||||
|         const password = btoa(opts.password); | ||||
|         core.exportVariable('MAVEN_OPTS', `-Djavax.net.ssl.keyStore=${p12Path} -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStorePassword=${password}`); | ||||
|         fs.writeFileSync(p12Path, Buffer.from(opts.keystore, 'base64')); | ||||
|         core.exportVariable('MAVEN_OPTS', `-Djavax.net.ssl.keyStore=${p12Path} -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStorePassword=${opts.password}`); | ||||
|         yield exec.exec(path.join(opts.javaPath, 'bin/keytool'), [ | ||||
|             '-importcert', | ||||
|             '-cacerts', | ||||
|             '-storepass', | ||||
|             'changeit', | ||||
|             '-noprompt', | ||||
|             '-alias', | ||||
|             'mycert', | ||||
|             '-file', | ||||
|             rooCaPath | ||||
|         ]); | ||||
|         core.debug(`added maven opts for MTLS access`); | ||||
|     }); | ||||
| } | ||||
| exports.setupMaven = setupMaven; | ||||
| const btoa = function (str) { | ||||
| const atob = function (str) { | ||||
|     return Buffer.from(str, 'binary').toString('base64'); | ||||
| }; | ||||
| const atob = function (str) { | ||||
| const btoa = function (str) { | ||||
|     return Buffer.from(str, 'base64').toString('binary'); | ||||
| }; | ||||
| 
 | ||||
|  | @ -30166,7 +30171,7 @@ exports.StaticRangeImpl = StaticRangeImpl; | |||
| "use strict"; | ||||
| 
 | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_MAVEN_SECURITY_SETTINGS_B64 = exports.INPUT_MAVEN_SETTINGS_B64 = exports.INPUT_MAVEN_KEYSTORE_PASSWORD = exports.INPUT_MAVEN_KEYSTORE_P12_B64 = exports.INPUT_MAVEN_CA_CERT_B64 = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_JDK_FILE = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.INPUT_VERSION = void 0; | ||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_MAVEN_VERSION = exports.INPUT_MAVEN_SECURITY_SETTINGS_B64 = exports.INPUT_MAVEN_SETTINGS_B64 = exports.INPUT_MAVEN_KEYSTORE_PASSWORD = exports.INPUT_MAVEN_KEYSTORE_P12_B64 = exports.INPUT_MAVEN_CA_CERT_B64 = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_JDK_FILE = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.INPUT_VERSION = void 0; | ||||
| exports.INPUT_VERSION = 'version'; | ||||
| exports.INPUT_JAVA_VERSION = 'java-version'; | ||||
| exports.INPUT_ARCHITECTURE = 'architecture'; | ||||
|  | @ -30183,6 +30188,7 @@ exports.INPUT_MAVEN_KEYSTORE_P12_B64 = 'maven-keystore-p12-b64'; | |||
| exports.INPUT_MAVEN_KEYSTORE_PASSWORD = 'maven-keystore-password'; | ||||
| exports.INPUT_MAVEN_SETTINGS_B64 = 'maven-settings-b64'; | ||||
| exports.INPUT_MAVEN_SECURITY_SETTINGS_B64 = 'maven-security-settings-b64'; | ||||
| exports.INPUT_MAVEN_VERSION = 'maven-version'; | ||||
| exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; | ||||
| exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; | ||||
| exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; | ||||
|  | @ -33356,21 +33362,15 @@ function run() { | |||
|             if (!version) { | ||||
|                 version = core.getInput(constants.INPUT_JAVA_VERSION, { required: true }); | ||||
|             } | ||||
|             const mvnOpts = { | ||||
|             let mvnOpts = { | ||||
|                 caCert: core.getInput(constants.INPUT_MAVEN_CA_CERT_B64), | ||||
|                 keystore: core.getInput(constants.INPUT_MAVEN_KEYSTORE_P12_B64), | ||||
|                 password: core.getInput(constants.INPUT_MAVEN_KEYSTORE_PASSWORD), | ||||
|                 settings: core.getInput(constants.INPUT_MAVEN_SETTINGS_B64), | ||||
|                 securitySettings: core.getInput(constants.INPUT_MAVEN_SECURITY_SETTINGS_B64) | ||||
|                 securitySettings: core.getInput(constants.INPUT_MAVEN_SECURITY_SETTINGS_B64), | ||||
|                 javaPath: '' | ||||
|             }; | ||||
|             if ((mvnOpts.caCert !== '' || | ||||
|                 mvnOpts.keystore !== '' || | ||||
|                 mvnOpts.password !== '' || | ||||
|                 mvnOpts.securitySettings !== '', | ||||
|                 mvnOpts.settings !== '') && | ||||
|                 !maven_1.validateOptions(mvnOpts)) { | ||||
|                 throw new Error('Some of the Maven options is empty: please check maven-* parameters'); | ||||
|             } | ||||
|             const mvnVersion = core.getInput(constants.INPUT_MAVEN_VERSION); | ||||
|             const arch = core.getInput(constants.INPUT_ARCHITECTURE, { required: true }); | ||||
|             if (!['x86', 'x64'].includes(arch)) { | ||||
|                 throw new Error(`architecture "${arch}" is not in [x86 | x64]`); | ||||
|  | @ -33379,7 +33379,17 @@ function run() { | |||
|                 required: true | ||||
|             }); | ||||
|             const jdkFile = core.getInput(constants.INPUT_JDK_FILE, { required: false }); | ||||
|             yield installer.getJava(version, arch, jdkFile, javaPackage); | ||||
|             const javaPath = yield installer.getJava(version, arch, jdkFile, javaPackage); | ||||
|             if (mvnVersion !== '') { | ||||
|                 if (!maven_1.isValidOptions(mvnOpts)) { | ||||
|                     throw new Error('Some of the Maven options is empty: please check maven-* parameters'); | ||||
|                 } | ||||
|                 mvnOpts.javaPath = javaPath; | ||||
|                 yield installer.getMaven(mvnVersion); | ||||
|             } | ||||
|             else { | ||||
|                 mvnOpts = undefined; | ||||
|             } | ||||
|             const matchersPath = path.join(__dirname, '..', '..', '.github'); | ||||
|             core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); | ||||
|             const id = core.getInput(constants.INPUT_SERVER_ID, { required: false }); | ||||
|  | @ -38708,7 +38718,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||
|     }); | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| exports.getJava = void 0; | ||||
| exports.getJava = exports.getMaven = void 0; | ||||
| const core = __importStar(__webpack_require__(470)); | ||||
| const io = __importStar(__webpack_require__(1)); | ||||
| const exec = __importStar(__webpack_require__(986)); | ||||
|  | @ -38720,6 +38730,33 @@ const semver = __importStar(__webpack_require__(280)); | |||
| const util = __importStar(__webpack_require__(322)); | ||||
| const tempDirectory = util.getTempDir(); | ||||
| const IS_WINDOWS = util.isWindows(); | ||||
| function getMaven(version) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         if (semver.valid(version) === null) { | ||||
|             throw new Error(`wrong version is set(${version}): supported version template: major.minor.patch`); | ||||
|         } | ||||
|         const majorVersion = semver.major(version); | ||||
|         let toolPath = tc.find('mvn', version); | ||||
|         if (toolPath) { | ||||
|             core.debug(`Tool found in cache ${toolPath}`); | ||||
|         } | ||||
|         else { | ||||
|             core.debug(`Downloading Maven from https://downloads.apache.org/maven/maven-${majorVersion}`); | ||||
|             const url = path.join(`https:///downloads.apache.org/maven/maven-${majorVersion}`, version, `binaries/apache-maven-${version}-bin.tar.gz`); | ||||
|             console.log(url); | ||||
|             const mvnTarFile = yield tc.downloadTool(url); | ||||
|             let tempDir = path.join(tempDirectory, 'temp_' + Math.floor(Math.random() * 2000000000)); | ||||
|             yield extractFiles(mvnTarFile, '.tar.gz', tempDir); | ||||
|             core.debug(`maven extracted to ${tempDir}`); | ||||
|             toolPath = yield tc.cacheDir(path.join(tempDir, `apache-maven-${version}`), 'mvn', version, 'x64'); | ||||
|         } | ||||
|         core.exportVariable('MAVEN_HOME', toolPath); | ||||
|         core.addPath(path.join(toolPath, 'bin')); | ||||
|         core.setOutput('path', toolPath); | ||||
|         core.setOutput('version', version); | ||||
|     }); | ||||
| } | ||||
| exports.getMaven = getMaven; | ||||
| function getJava(version, arch, jdkFile, javaPackage) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         let toolPath = tc.find(javaPackage, version); | ||||
|  | @ -38776,6 +38813,7 @@ function getJava(version, arch, jdkFile, javaPackage) { | |||
|         core.addPath(path.join(toolPath, 'bin')); | ||||
|         core.setOutput('path', toolPath); | ||||
|         core.setOutput('version', version); | ||||
|         return toolPath; | ||||
|     }); | ||||
| } | ||||
| exports.getJava = getJava; | ||||
|  |  | |||
							
								
								
									
										45
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										45
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -5,6 +5,7 @@ | |||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "setup-java", | ||||
|       "version": "1.0.0", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|  | @ -13,8 +14,7 @@ | |||
|         "@actions/http-client": "^1.0.9", | ||||
|         "@actions/io": "^1.0.0", | ||||
|         "@actions/tool-cache": "^1.6.1", | ||||
|         "@tradeshift/actions-credentials-yaml": "^0.7.0", | ||||
|         "semver": "^6.1.1", | ||||
|         "semver": "^6.3.0", | ||||
|         "xmlbuilder2": "^2.4.0" | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|  | @ -603,15 +603,6 @@ | |||
|         "node": ">=8.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@tradeshift/actions-credentials-yaml": { | ||||
|       "version": "0.7.0", | ||||
|       "resolved": "https://registry.npmjs.org/@tradeshift/actions-credentials-yaml/-/actions-credentials-yaml-0.7.0.tgz", | ||||
|       "integrity": "sha512-FBHqPvlnqL71DQJJB8aV0WUR/hDoeL3Mf+wpTD1DoxgoPH93LvwiChyNa2NybqENJB9nm85ylK+4pgUxwUoRBw==", | ||||
|       "dependencies": { | ||||
|         "js-base64": "^3.6.0", | ||||
|         "yaml": "^1.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@types/babel__core": { | ||||
|       "version": "7.1.12", | ||||
|       "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", | ||||
|  | @ -3425,11 +3416,6 @@ | |||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/js-base64": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.0.tgz", | ||||
|       "integrity": "sha512-wVdUBYQeY2gY73RIlPrysvpYx+2vheGo8Y1SNQv/BzHToWpAZzJU7Z6uheKMAe+GLSBig5/Ps2nxg/8tRB73xg==" | ||||
|     }, | ||||
|     "node_modules/js-tokens": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", | ||||
|  | @ -5872,14 +5858,6 @@ | |||
|       "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/yaml": { | ||||
|       "version": "1.10.0", | ||||
|       "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", | ||||
|       "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", | ||||
|       "engines": { | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/yargs": { | ||||
|       "version": "13.3.2", | ||||
|       "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", | ||||
|  | @ -6434,15 +6412,6 @@ | |||
|       "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", | ||||
|       "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==" | ||||
|     }, | ||||
|     "@tradeshift/actions-credentials-yaml": { | ||||
|       "version": "0.7.0", | ||||
|       "resolved": "https://registry.npmjs.org/@tradeshift/actions-credentials-yaml/-/actions-credentials-yaml-0.7.0.tgz", | ||||
|       "integrity": "sha512-FBHqPvlnqL71DQJJB8aV0WUR/hDoeL3Mf+wpTD1DoxgoPH93LvwiChyNa2NybqENJB9nm85ylK+4pgUxwUoRBw==", | ||||
|       "requires": { | ||||
|         "js-base64": "^3.6.0", | ||||
|         "yaml": "^1.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "@types/babel__core": { | ||||
|       "version": "7.1.12", | ||||
|       "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", | ||||
|  | @ -8701,11 +8670,6 @@ | |||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "js-base64": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.0.tgz", | ||||
|       "integrity": "sha512-wVdUBYQeY2gY73RIlPrysvpYx+2vheGo8Y1SNQv/BzHToWpAZzJU7Z6uheKMAe+GLSBig5/Ps2nxg/8tRB73xg==" | ||||
|     }, | ||||
|     "js-tokens": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", | ||||
|  | @ -10683,11 +10647,6 @@ | |||
|       "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "yaml": { | ||||
|       "version": "1.10.0", | ||||
|       "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", | ||||
|       "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" | ||||
|     }, | ||||
|     "yargs": { | ||||
|       "version": "13.3.2", | ||||
|       "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
|     "@actions/http-client": "^1.0.9", | ||||
|     "@actions/io": "^1.0.0", | ||||
|     "@actions/tool-cache": "^1.6.1", | ||||
|     "semver": "^6.1.1", | ||||
|     "semver": "^6.3.0", | ||||
|     "xmlbuilder2": "^2.4.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|  |  | |||
|  | @ -9,11 +9,13 @@ export const INPUT_SERVER_PASSWORD = 'server-password'; | |||
| export const INPUT_SETTINGS_PATH = 'settings-path'; | ||||
| export const INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; | ||||
| export const INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; | ||||
| 
 | ||||
| export const INPUT_MAVEN_CA_CERT_B64 = 'maven-ca-cert-b64'; | ||||
| export const INPUT_MAVEN_KEYSTORE_P12_B64 = 'maven-keystore-p12-b64'; | ||||
| export const INPUT_MAVEN_KEYSTORE_PASSWORD = 'maven-keystore-password'; | ||||
| export const INPUT_MAVEN_SETTINGS_B64 = 'maven-settings-b64'; | ||||
| export const INPUT_MAVEN_SECURITY_SETTINGS_B64 = 'maven-security-settings-b64'; | ||||
| export const INPUT_MAVEN_VERSION = 'maven-version'; | ||||
| 
 | ||||
| export const INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; | ||||
| export const INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; | ||||
|  |  | |||
|  | @ -11,12 +11,58 @@ import * as util from './util'; | |||
| const tempDirectory = util.getTempDir(); | ||||
| const IS_WINDOWS = util.isWindows(); | ||||
| 
 | ||||
| export async function getMaven(version: string): Promise<void> { | ||||
|   if (semver.valid(version) === null) { | ||||
|     throw new Error( | ||||
|       `wrong version is set(${version}): supported version template: major.minor.patch` | ||||
|     ); | ||||
|   } | ||||
|   const majorVersion = semver.major(version); | ||||
|   let toolPath = tc.find('mvn', version); | ||||
| 
 | ||||
|   if (toolPath) { | ||||
|     core.debug(`Tool found in cache ${toolPath}`); | ||||
|   } else { | ||||
|     core.debug( | ||||
|       `Downloading Maven from https://downloads.apache.org/maven/maven-${majorVersion}` | ||||
|     ); | ||||
| 
 | ||||
|     const url = path.join( | ||||
|       `https:///downloads.apache.org/maven/maven-${majorVersion}`, | ||||
|       version, | ||||
|       `binaries/apache-maven-${version}-bin.tar.gz` | ||||
|     ); | ||||
| 
 | ||||
|     console.log(url); | ||||
|     const mvnTarFile = await tc.downloadTool(url); | ||||
| 
 | ||||
|     let tempDir: string = path.join( | ||||
|       tempDirectory, | ||||
|       'temp_' + Math.floor(Math.random() * 2000000000) | ||||
|     ); | ||||
|     await extractFiles(mvnTarFile, '.tar.gz', tempDir); | ||||
| 
 | ||||
|     core.debug(`maven extracted to ${tempDir}`); | ||||
|     toolPath = await tc.cacheDir( | ||||
|       path.join(tempDir, `apache-maven-${version}`), | ||||
|       'mvn', | ||||
|       version, | ||||
|       'x64' | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   core.exportVariable('MAVEN_HOME', toolPath); | ||||
|   core.addPath(path.join(toolPath, 'bin')); | ||||
|   core.setOutput('path', toolPath); | ||||
|   core.setOutput('version', version); | ||||
| } | ||||
| 
 | ||||
| export async function getJava( | ||||
|   version: string, | ||||
|   arch: string, | ||||
|   jdkFile: string, | ||||
|   javaPackage: string | ||||
| ): Promise<void> { | ||||
| ): Promise<string> { | ||||
|   let toolPath = tc.find(javaPackage, version); | ||||
| 
 | ||||
|   if (toolPath) { | ||||
|  | @ -83,6 +129,8 @@ export async function getJava( | |||
|   core.addPath(path.join(toolPath, 'bin')); | ||||
|   core.setOutput('path', toolPath); | ||||
|   core.setOutput('version', version); | ||||
| 
 | ||||
|   return toolPath; | ||||
| } | ||||
| 
 | ||||
| function getCacheVersionString(version: string) { | ||||
|  |  | |||
							
								
								
									
										64
									
								
								src/maven.ts
									
										
									
									
									
								
							
							
						
						
									
										64
									
								
								src/maven.ts
									
										
									
									
									
								
							|  | @ -3,6 +3,7 @@ import * as fs from 'fs'; | |||
| import * as path from 'path'; | ||||
| import * as constants from './constants'; | ||||
| import * as os from 'os'; | ||||
| import * as exec from '@actions/exec'; | ||||
| import * as io from '@actions/io'; | ||||
| 
 | ||||
| export interface MavenOpts { | ||||
|  | @ -11,35 +12,17 @@ export interface MavenOpts { | |||
|   password: string; | ||||
|   settings: string; | ||||
|   securitySettings: string; | ||||
| } | ||||
| 
 | ||||
| export function validateOptions(opts: MavenOpts): boolean { | ||||
|   if ( | ||||
|     (opts.caCert === '' || | ||||
|       opts.keystore === '' || | ||||
|       opts.password === '' || | ||||
|       opts.securitySettings === '', | ||||
|     opts.settings === '') | ||||
|   ) { | ||||
|     core.debug('maven options set is not valid: some field is empty'); | ||||
|     return false; | ||||
|   } | ||||
|   return true; | ||||
|   javaPath: string; | ||||
| } | ||||
| 
 | ||||
| export function isValidOptions(mvnOpts: MavenOpts): boolean { | ||||
|   if ( | ||||
|     (mvnOpts.caCert !== '' || | ||||
|       mvnOpts.keystore !== '' || | ||||
|       mvnOpts.password !== '' || | ||||
|       mvnOpts.securitySettings !== '', | ||||
|     mvnOpts.settings !== '') && | ||||
|     !validateOptions(mvnOpts) | ||||
|   ) { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   return true; | ||||
|   return ( | ||||
|     mvnOpts.caCert !== '' && | ||||
|     mvnOpts.keystore !== '' && | ||||
|     mvnOpts.password !== '' && | ||||
|     mvnOpts.securitySettings !== '' && | ||||
|     mvnOpts.settings !== '' | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| export async function setupMaven(opts: MavenOpts): Promise<void> { | ||||
|  | @ -47,7 +30,6 @@ export async function setupMaven(opts: MavenOpts): Promise<void> { | |||
|     core.getInput(constants.INPUT_SETTINGS_PATH) || os.homedir(), | ||||
|     core.getInput(constants.INPUT_SETTINGS_PATH) ? '' : '.m2' | ||||
|   ); | ||||
|   const certDir = path.join(os.homedir(), 'certs'); | ||||
| 
 | ||||
|   fs.writeFileSync( | ||||
|     path.join(settingsDir, 'settings.xml'), | ||||
|  | @ -67,31 +49,41 @@ export async function setupMaven(opts: MavenOpts): Promise<void> { | |||
|     } | ||||
|   ); | ||||
| 
 | ||||
|   const certDir = path.join(os.homedir(), 'certs'); | ||||
|   const rooCaPath = path.join(certDir, 'rootca.crt'); | ||||
|   await io.mkdirP(certDir); | ||||
|   fs.writeFileSync(path.join(certDir, 'rootca.crt'), btoa(opts.caCert), { | ||||
|   fs.writeFileSync(rooCaPath, btoa(opts.caCert), { | ||||
|     encoding: 'utf-8', | ||||
|     flag: 'w' | ||||
|   }); | ||||
| 
 | ||||
|   const p12Path = path.join(certDir, 'certificate.p12'); | ||||
|   fs.writeFileSync(p12Path, btoa(opts.keystore), { | ||||
|     encoding: 'utf-8', | ||||
|     flag: 'w' | ||||
|   }); | ||||
|   fs.writeFileSync(p12Path, Buffer.from(opts.keystore, 'base64')); | ||||
| 
 | ||||
|   const password = btoa(opts.password); | ||||
|   core.exportVariable( | ||||
|     'MAVEN_OPTS', | ||||
|     `-Djavax.net.ssl.keyStore=${p12Path} -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStorePassword=${password}` | ||||
|     `-Djavax.net.ssl.keyStore=${p12Path} -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStorePassword=${opts.password}` | ||||
|   ); | ||||
| 
 | ||||
|   await exec.exec(path.join(opts.javaPath, 'bin/keytool'), [ | ||||
|     '-importcert', | ||||
|     '-cacerts', | ||||
|     '-storepass', | ||||
|     'changeit', | ||||
|     '-noprompt', | ||||
|     '-alias', | ||||
|     'mycert', | ||||
|     '-file', | ||||
|     rooCaPath | ||||
|   ]); | ||||
| 
 | ||||
|   core.debug(`added maven opts for MTLS access`); | ||||
| } | ||||
| 
 | ||||
| const btoa = function(str: string) { | ||||
| const atob = function(str: string) { | ||||
|   return Buffer.from(str, 'binary').toString('base64'); | ||||
| }; | ||||
| 
 | ||||
| const atob = function(str: string) { | ||||
| const btoa = function(str: string) { | ||||
|   return Buffer.from(str, 'base64').toString('binary'); | ||||
| }; | ||||
|  |  | |||
|  | @ -13,21 +13,18 @@ async function run() { | |||
|       version = core.getInput(constants.INPUT_JAVA_VERSION, {required: true}); | ||||
|     } | ||||
| 
 | ||||
|     const mvnOpts: MavenOpts = { | ||||
|     let mvnOpts: MavenOpts | undefined = { | ||||
|       caCert: core.getInput(constants.INPUT_MAVEN_CA_CERT_B64), | ||||
|       keystore: core.getInput(constants.INPUT_MAVEN_KEYSTORE_P12_B64), | ||||
|       password: core.getInput(constants.INPUT_MAVEN_KEYSTORE_PASSWORD), | ||||
|       settings: core.getInput(constants.INPUT_MAVEN_SETTINGS_B64), | ||||
|       securitySettings: core.getInput( | ||||
|         constants.INPUT_MAVEN_SECURITY_SETTINGS_B64 | ||||
|       ) | ||||
|       ), | ||||
|       javaPath: '' | ||||
|     }; | ||||
| 
 | ||||
|     if (!isValidOptions(mvnOpts)) { | ||||
|       throw new Error( | ||||
|         'Some of the Maven options is empty: please check maven-* parameters' | ||||
|       ); | ||||
|     } | ||||
|     const mvnVersion = core.getInput(constants.INPUT_MAVEN_VERSION); | ||||
| 
 | ||||
|     const arch = core.getInput(constants.INPUT_ARCHITECTURE, {required: true}); | ||||
|     if (!['x86', 'x64'].includes(arch)) { | ||||
|  | @ -39,7 +36,24 @@ async function run() { | |||
|     }); | ||||
|     const jdkFile = core.getInput(constants.INPUT_JDK_FILE, {required: false}); | ||||
| 
 | ||||
|     await installer.getJava(version, arch, jdkFile, javaPackage); | ||||
|     const javaPath = await installer.getJava( | ||||
|       version, | ||||
|       arch, | ||||
|       jdkFile, | ||||
|       javaPackage | ||||
|     ); | ||||
|     if (mvnVersion !== '') { | ||||
|       if (!isValidOptions(mvnOpts)) { | ||||
|         throw new Error( | ||||
|           'Some of the Maven options is empty: please check maven-* parameters' | ||||
|         ); | ||||
|       } | ||||
|       mvnOpts.javaPath = javaPath; | ||||
| 
 | ||||
|       await installer.getMaven(mvnVersion); | ||||
|     } else { | ||||
|       mvnOpts = undefined; | ||||
|     } | ||||
| 
 | ||||
|     const matchersPath = path.join(__dirname, '..', '..', '.github'); | ||||
|     core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue