mirror of
https://github.com/renovatebot/renovate.git
synced 2025-01-15 00:56:26 +00:00
fix(manager/maven-wrapper): preserve wrapper base url (#20092)
Co-authored-by: Rhys Arkins <rhys@arkins.net> Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
This commit is contained in:
parent
092d3f76f4
commit
ad9f9d3f99
2 changed files with 158 additions and 3 deletions
|
@ -308,4 +308,121 @@ describe('modules/manager/maven-wrapper/artifacts', () => {
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should run wrapper:wrapper with MVNW_REPOURL if it is a custom artifactory', async () => {
|
||||||
|
const execSnapshots = mockExecAll({ stdout: '', stderr: '' });
|
||||||
|
mockMavenFileChangedInGit();
|
||||||
|
await updateArtifacts({
|
||||||
|
packageFileName: 'maven-wrapper',
|
||||||
|
newPackageFileContent: '',
|
||||||
|
updatedDeps: [
|
||||||
|
{
|
||||||
|
depName: 'maven-wrapper',
|
||||||
|
replaceString:
|
||||||
|
'https://internal.local/maven-public/org/apache/maven/wrapper/maven-wrapper/3.0.0/maven-wrapper-3.0.0.jar',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
config: { currentValue: '3.0.0', newValue: '3.3.1' },
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(execSnapshots).toMatchObject([
|
||||||
|
{
|
||||||
|
cmd: './mvnw wrapper:wrapper',
|
||||||
|
options: {
|
||||||
|
cwd: '/tmp/github',
|
||||||
|
encoding: 'utf-8',
|
||||||
|
env: {
|
||||||
|
HOME: '/home/user',
|
||||||
|
HTTPS_PROXY: 'https://example.com',
|
||||||
|
HTTP_PROXY: 'http://example.com',
|
||||||
|
LANG: 'en_US.UTF-8',
|
||||||
|
LC_ALL: 'en_US',
|
||||||
|
NO_PROXY: 'localhost',
|
||||||
|
PATH: '/tmp/path',
|
||||||
|
MVNW_REPOURL: 'https://internal.local/maven-public',
|
||||||
|
},
|
||||||
|
maxBuffer: 10485760,
|
||||||
|
timeout: 900000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should run not include MVNW_REPOURL when run with default maven repo url', async () => {
|
||||||
|
const execSnapshots = mockExecAll({ stdout: '', stderr: '' });
|
||||||
|
mockMavenFileChangedInGit();
|
||||||
|
await updateArtifacts({
|
||||||
|
packageFileName: 'maven-wrapper',
|
||||||
|
newPackageFileContent: '',
|
||||||
|
updatedDeps: [
|
||||||
|
{
|
||||||
|
depName: 'maven-wrapper',
|
||||||
|
replaceString:
|
||||||
|
'https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
config: { currentValue: '3.0.0', newValue: '3.3.1' },
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(execSnapshots).toMatchObject([
|
||||||
|
{
|
||||||
|
cmd: './mvnw wrapper:wrapper',
|
||||||
|
options: {
|
||||||
|
cwd: '/tmp/github',
|
||||||
|
encoding: 'utf-8',
|
||||||
|
env: {
|
||||||
|
HOME: '/home/user',
|
||||||
|
HTTPS_PROXY: 'https://example.com',
|
||||||
|
HTTP_PROXY: 'http://example.com',
|
||||||
|
LANG: 'en_US.UTF-8',
|
||||||
|
LC_ALL: 'en_US',
|
||||||
|
NO_PROXY: 'localhost',
|
||||||
|
PATH: '/tmp/path',
|
||||||
|
},
|
||||||
|
maxBuffer: 10485760,
|
||||||
|
timeout: 900000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
expect(execSnapshots[0]!.options!.env).not.toHaveProperty('MVNW_REPOURL');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should run not include MVNW_REPOURL when run with a malformed replaceString', async () => {
|
||||||
|
const execSnapshots = mockExecAll({ stdout: '', stderr: '' });
|
||||||
|
mockMavenFileChangedInGit();
|
||||||
|
await updateArtifacts({
|
||||||
|
packageFileName: 'maven-wrapper',
|
||||||
|
newPackageFileContent: '',
|
||||||
|
updatedDeps: [
|
||||||
|
{
|
||||||
|
depName: 'maven-wrapper',
|
||||||
|
replaceString: 'not a good url',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
config: { currentValue: '3.0.0', newValue: '3.3.1' },
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(execSnapshots).toMatchObject([
|
||||||
|
{
|
||||||
|
cmd: './mvnw wrapper:wrapper',
|
||||||
|
options: {
|
||||||
|
cwd: '/tmp/github',
|
||||||
|
encoding: 'utf-8',
|
||||||
|
env: {
|
||||||
|
HOME: '/home/user',
|
||||||
|
HTTPS_PROXY: 'https://example.com',
|
||||||
|
HTTP_PROXY: 'http://example.com',
|
||||||
|
LANG: 'en_US.UTF-8',
|
||||||
|
LC_ALL: 'en_US',
|
||||||
|
NO_PROXY: 'localhost',
|
||||||
|
PATH: '/tmp/path',
|
||||||
|
},
|
||||||
|
maxBuffer: 10485760,
|
||||||
|
timeout: 900000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(execSnapshots[0]!.options!.env).not.toHaveProperty('MVNW_REPOURL');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,17 +5,20 @@ import { dirname, join } from 'upath';
|
||||||
import { GlobalConfig } from '../../../config/global';
|
import { GlobalConfig } from '../../../config/global';
|
||||||
import { logger } from '../../../logger';
|
import { logger } from '../../../logger';
|
||||||
import { exec } from '../../../util/exec';
|
import { exec } from '../../../util/exec';
|
||||||
import type { ExecOptions } from '../../../util/exec/types';
|
import type { ExecOptions, ExtraEnv } from '../../../util/exec/types';
|
||||||
import { chmodLocalFile, readLocalFile, statLocalFile } from '../../../util/fs';
|
import { chmodLocalFile, readLocalFile, statLocalFile } from '../../../util/fs';
|
||||||
import { getRepoStatus } from '../../../util/git';
|
import { getRepoStatus } from '../../../util/git';
|
||||||
import type { StatusResult } from '../../../util/git/types';
|
import type { StatusResult } from '../../../util/git/types';
|
||||||
|
import { regEx } from '../../../util/regex';
|
||||||
import mavenVersioning from '../../versioning/maven';
|
import mavenVersioning from '../../versioning/maven';
|
||||||
import type {
|
import type {
|
||||||
|
PackageDependency,
|
||||||
UpdateArtifact,
|
UpdateArtifact,
|
||||||
UpdateArtifactsConfig,
|
UpdateArtifactsConfig,
|
||||||
UpdateArtifactsResult,
|
UpdateArtifactsResult,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
|
|
||||||
|
const DEFAULT_MAVEN_REPO_URL = 'https://repo.maven.apache.org/maven2';
|
||||||
interface MavenWrapperPaths {
|
interface MavenWrapperPaths {
|
||||||
wrapperExecutableFileName: string;
|
wrapperExecutableFileName: string;
|
||||||
localProjectDir: string;
|
localProjectDir: string;
|
||||||
|
@ -60,7 +63,9 @@ export async function updateArtifacts({
|
||||||
logger.info('No mvnw found - skipping Artifacts update');
|
logger.info('No mvnw found - skipping Artifacts update');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
await executeWrapperCommand(cmd, config, packageFileName);
|
|
||||||
|
const extraEnv = getExtraEnvOptions(updatedDeps);
|
||||||
|
await executeWrapperCommand(cmd, config, packageFileName, extraEnv);
|
||||||
|
|
||||||
const status = await getRepoStatus();
|
const status = await getRepoStatus();
|
||||||
const artifactFileNames = [
|
const artifactFileNames = [
|
||||||
|
@ -133,13 +138,16 @@ export function getJavaConstraint(
|
||||||
async function executeWrapperCommand(
|
async function executeWrapperCommand(
|
||||||
cmd: string,
|
cmd: string,
|
||||||
config: UpdateArtifactsConfig,
|
config: UpdateArtifactsConfig,
|
||||||
packageFileName: string
|
packageFileName: string,
|
||||||
|
extraEnv: ExtraEnv
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
logger.debug(`Updating maven wrapper: "${cmd}"`);
|
logger.debug(`Updating maven wrapper: "${cmd}"`);
|
||||||
const { wrapperFullyQualifiedPath } = getMavenPaths(packageFileName);
|
const { wrapperFullyQualifiedPath } = getMavenPaths(packageFileName);
|
||||||
|
|
||||||
const execOptions: ExecOptions = {
|
const execOptions: ExecOptions = {
|
||||||
cwdFile: wrapperFullyQualifiedPath,
|
cwdFile: wrapperFullyQualifiedPath,
|
||||||
docker: {},
|
docker: {},
|
||||||
|
extraEnv,
|
||||||
toolConstraints: [
|
toolConstraints: [
|
||||||
{
|
{
|
||||||
toolName: 'java',
|
toolName: 'java',
|
||||||
|
@ -157,6 +165,36 @@ async function executeWrapperCommand(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getExtraEnvOptions(deps: PackageDependency[]): ExtraEnv {
|
||||||
|
const customMavenWrapperUrl = getCustomMavenWrapperRepoUrl(deps);
|
||||||
|
if (customMavenWrapperUrl) {
|
||||||
|
return { MVNW_REPOURL: customMavenWrapperUrl };
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCustomMavenWrapperRepoUrl(
|
||||||
|
deps: PackageDependency[]
|
||||||
|
): string | null {
|
||||||
|
const replaceString = deps.find(
|
||||||
|
(dep) => dep.depName === 'maven-wrapper'
|
||||||
|
)?.replaceString;
|
||||||
|
|
||||||
|
if (!replaceString) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const match = regEx(/^(.*?)\/org\/apache\/maven\/wrapper\//).exec(
|
||||||
|
replaceString
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!match) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return match[1] === DEFAULT_MAVEN_REPO_URL ? null : match[1];
|
||||||
|
}
|
||||||
|
|
||||||
async function createWrapperCommand(
|
async function createWrapperCommand(
|
||||||
packageFileName: string
|
packageFileName: string
|
||||||
): Promise<string | null> {
|
): Promise<string | null> {
|
||||||
|
|
Loading…
Reference in a new issue