UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

170 lines • 6.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateArtifacts = updateArtifacts; exports.getJavaConstraint = getJavaConstraint; const tslib_1 = require("tslib"); const node_os_1 = tslib_1.__importDefault(require("node:os")); const is_1 = tslib_1.__importDefault(require("@sindresorhus/is")); const upath_1 = tslib_1.__importDefault(require("upath")); const global_1 = require("../../../config/global"); const logger_1 = require("../../../logger"); const exec_1 = require("../../../util/exec"); const fs_1 = require("../../../util/fs"); const git_1 = require("../../../util/git"); const regex_1 = require("../../../util/regex"); const maven_1 = tslib_1.__importDefault(require("../../versioning/maven")); const DEFAULT_MAVEN_REPO_URL = 'https://repo.maven.apache.org/maven2'; async function addIfUpdated(status, fileProjectPath) { if (status.modified.includes(fileProjectPath)) { return { file: { type: 'addition', path: fileProjectPath, contents: await (0, fs_1.readLocalFile)(fileProjectPath), }, }; } return null; } async function updateArtifacts({ packageFileName, newPackageFileContent, updatedDeps, config, }) { try { logger_1.logger.debug({ updatedDeps }, 'maven-wrapper.updateArtifacts()'); if (!updatedDeps.some((dep) => dep.depName === 'maven-wrapper')) { logger_1.logger.info('Maven wrapper version not updated - skipping Artifacts update'); return null; } const cmd = await createWrapperCommand(packageFileName); if (!cmd) { logger_1.logger.info('No mvnw found - skipping Artifacts update'); return null; } const extraEnv = getExtraEnvOptions(updatedDeps); await executeWrapperCommand(cmd, config, packageFileName, extraEnv); const status = await (0, git_1.getRepoStatus)(); const artifactFileNames = [ '.mvn/wrapper/maven-wrapper.properties', '.mvn/wrapper/maven-wrapper.jar', '.mvn/wrapper/MavenWrapperDownloader.java', 'mvnw', 'mvnw.cmd', ].map((filename) => packageFileName.replace('.mvn/wrapper/maven-wrapper.properties', '') + filename); const updateArtifactsResult = (await getUpdatedArtifacts(status, artifactFileNames)).filter(is_1.default.truthy); logger_1.logger.debug({ files: updateArtifactsResult.map((r) => r.file?.path) }, `Returning updated maven-wrapper files`); return updateArtifactsResult; } catch (err) { logger_1.logger.debug({ err }, 'Error setting new Maven Wrapper release value'); return [ { artifactError: { lockFile: packageFileName, stderr: err.message, }, }, ]; } } async function getUpdatedArtifacts(status, artifactFileNames) { const updatedResults = []; for (const artifactFileName of artifactFileNames) { const updatedResult = await addIfUpdated(status, artifactFileName); if (updatedResult !== null) { updatedResults.push(updatedResult); } } return updatedResults; } /** * Find compatible java version for maven. * see https://maven.apache.org/developers/compatibility-plan.html * @param mavenWrapperVersion current maven version * @returns A Java semver range */ function getJavaConstraint(mavenWrapperVersion) { const major = mavenWrapperVersion ? maven_1.default.getMajor(mavenWrapperVersion) : null; if (major && major >= 3) { return '^17.0.0'; } return '^8.0.0'; } async function executeWrapperCommand(cmd, config, packageFileName, extraEnv) { logger_1.logger.debug(`Updating maven wrapper: "${cmd}"`); const { wrapperFullyQualifiedPath } = getMavenPaths(packageFileName); const execOptions = { cwdFile: wrapperFullyQualifiedPath, docker: {}, extraEnv, toolConstraints: [ { toolName: 'java', constraint: config.constraints?.java ?? getJavaConstraint(config.currentValue), }, ], }; try { await (0, exec_1.exec)(cmd, execOptions); } catch (err) { logger_1.logger.error({ err }, 'Error executing maven wrapper update command.'); throw err; } } function getExtraEnvOptions(deps) { const customMavenWrapperUrl = getCustomMavenWrapperRepoUrl(deps); if (customMavenWrapperUrl) { return { MVNW_REPOURL: customMavenWrapperUrl }; } return {}; } function getCustomMavenWrapperRepoUrl(deps) { const replaceString = deps.find((dep) => dep.depName === 'maven-wrapper')?.replaceString; if (!replaceString) { return null; } const match = (0, regex_1.regEx)(/^(.*?)\/org\/apache\/maven\/wrapper\//).exec(replaceString); if (!match) { return null; } return match[1] === DEFAULT_MAVEN_REPO_URL ? null : match[1]; } async function createWrapperCommand(packageFileName) { const { wrapperExecutableFileName, localProjectDir, wrapperFullyQualifiedPath, } = getMavenPaths(packageFileName); return await prepareCommand(wrapperExecutableFileName, localProjectDir, await (0, fs_1.statLocalFile)(wrapperFullyQualifiedPath), 'wrapper:wrapper'); } function mavenWrapperFileName() { if (node_os_1.default.platform() === 'win32' && global_1.GlobalConfig.get('binarySource') !== 'docker') { return 'mvnw.cmd'; } return './mvnw'; } function getMavenPaths(packageFileName) { const wrapperExecutableFileName = mavenWrapperFileName(); const localProjectDir = upath_1.default.join(upath_1.default.dirname(packageFileName), '../../'); const wrapperFullyQualifiedPath = upath_1.default.join(localProjectDir, wrapperExecutableFileName); return { wrapperExecutableFileName, localProjectDir, wrapperFullyQualifiedPath, }; } async function prepareCommand(fileName, cwd, pathFileStats, args) { /* v8 ignore start -- hard to test */ if (pathFileStats?.isFile() === true) { // if the file is not executable by others if (node_os_1.default.platform() !== 'win32' && (pathFileStats.mode & 0o1) === 0) { // add the execution permission to the owner, group and others logger_1.logger.warn('Maven wrapper is missing the executable bit'); await (0, fs_1.chmodLocalFile)(upath_1.default.join(cwd, fileName), pathFileStats.mode | 0o111); } if (args === null) { return fileName; } return `${fileName} ${args}`; } /* v8 ignore stop */ return null; } //# sourceMappingURL=artifacts.js.map