Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/config/options/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1122,7 +1122,7 @@ const options: RenovateOptions[] = [
{
name: 'useBaseBranchConfig',
description:
'Whether to read configuration from `baseBranches` instead of only the default branch.',
'Whether to read configuration from base branches instead of only the default branch.',
type: 'string',
allowedValues: ['merge', 'none'],
default: 'none',
Expand Down
2 changes: 2 additions & 0 deletions lib/config/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,8 @@ export interface RenovateConfig
depName?: string;
/** user configurable base branch patterns*/
baseBranchPatterns?: string[];
/** computed base branch from patterns - for internal use only */
baseBranches?: string[];
commitBody?: string;
useBaseBranchConfig?: UseBaseBranchConfigType;
baseBranch?: string;
Expand Down
6 changes: 5 additions & 1 deletion lib/modules/datasource/nuget/v3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,11 @@ export class NugetV3Api {
if (releaseTimestamp) {
release.releaseTimestamp = releaseTimestamp;
}
if (versioning.isValid(version) && versioning.isStable(version)) {
if (
versioning.isValid(version) &&
versioning.isStable(version) &&
listed
) {
latestStable = removeBuildMeta(version);
homepage = projectUrl ? massageUrl(projectUrl) : homepage;
nupkgUrl = massageUrl(packageContent);
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/platform/github/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ export async function createFork(
body: {
organization: forkOrg ?? undefined,
name: config.parentRepo!.replace('/', '-_-'),
default_branch_only: true, // no baseBranches support yet
default_branch_only: true, // no baseBranchPatterns support yet
},
})
).body;
Expand Down
3 changes: 2 additions & 1 deletion lib/workers/repository/finalize/prune.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ describe('workers/repository/finalize/prune', () => {

it('deletes with base branches', async () => {
config.branchList = ['renovate/main-a'];
config.baseBranchPatterns = ['main', 'maint/v7'];
config.baseBranchPatterns = ['/main.*/'];
config.baseBranches = ['main', 'maint/v7'];
git.getBranchList.mockReturnValueOnce(
config.branchList.concat([
'renovate/main-b',
Expand Down
5 changes: 3 additions & 2 deletions lib/workers/repository/finalize/prune.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ async function cleanUpBranches(
}

/**
* Calculates a {RegExp} to extract the base branch from a branch name if base branches are configured.
* Calculates a {RegExp} to extract the base branch from a branch name if base branch patterns is configured.
* @param config Renovate configuration
*/
function calculateBaseBranchRegex(config: RenovateConfig): RegExp | null {
Expand All @@ -131,7 +131,8 @@ function calculateBaseBranchRegex(config: RenovateConfig): RegExp | null {
.map(escapeRegExp);

// calculate possible base branches and escape for regex
const baseBranches = config.baseBranchPatterns.map(escapeRegExp);
// if baseBranchPatterns is configured, baseBranches will be defined too
const baseBranches = config.baseBranches!.map(escapeRegExp);

// create regex to extract base branche from branch name
const baseBranchRe = regEx(
Expand Down
1 change: 1 addition & 0 deletions lib/workers/repository/process/extract-update.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ describe('workers/repository/process/extract-update', () => {
it('runs with baseBranchPatterns', async () => {
const config = {
baseBranchPatterns: ['master', 'dev'],
baseBranches: ['master', 'dev'],
repoIsOnboarded: true,
enabledManagers: ['npm'],
javascript: {
Expand Down
4 changes: 2 additions & 2 deletions lib/workers/repository/process/extract-update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,8 @@ export async function extract(
}

// Clean up cached branch extracts
const baseBranches = is.nonEmptyArray(config.baseBranchPatterns)
? config.baseBranchPatterns
const baseBranches = is.nonEmptyArray(config.baseBranches)
? config.baseBranches
: [baseBranch];
Object.keys(cache.scan).forEach((branchName) => {
if (!baseBranches.includes(branchName)) {
Expand Down
44 changes: 43 additions & 1 deletion lib/workers/repository/process/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { addMeta } from '../../../logger';
import { getCache } from '../../../util/cache/repository';
import * as _extractUpdate from './extract-update';
import { lookup } from './extract-update';
import { extractDependencies, updateRepo } from '.';
import { extractDependencies, getBaseBranchConfig, updateRepo } from '.';
import { git, logger, platform, scm } from '~test/util';
import type { RenovateConfig } from '~test/util';

Expand Down Expand Up @@ -206,4 +206,46 @@ describe('workers/repository/process/index', () => {
expect(addMeta).toHaveBeenNthCalledWith(2, { baseBranch: 'master' });
});
});

describe('getBaseBranchConfig', () => {
it('adds base branch name to branchPrefix if multiple base branches expected - more than one base branch configured', async () => {
const res = await getBaseBranchConfig('main', {
...config,
baseBranchPatterns: ['main', 'maint/v7'],
});
expect(res.baseBranch).toBe('main');
expect(res.hasBaseBranches).toBeTrue();
expect(res.branchPrefix).toBe('renovate/main-');
});

it('adds base branch name to branchPrefix if multiple base branches expected - base branch regex configured', async () => {
const res = await getBaseBranchConfig('main', {
...config,
baseBranchPatterns: ['/main/'],
});
expect(res.baseBranch).toBe('main');
expect(res.hasBaseBranches).toBeTrue();
expect(res.branchPrefix).toBe('renovate/main-');
});

it('does not add base branch name to branchPrefix if multiple base branches are not expected - only one base branch configured', async () => {
const res = await getBaseBranchConfig('main', {
...config,
baseBranchPatterns: ['main'],
});
expect(res.baseBranch).toBe('main');
expect(res.hasBaseBranches).toBeUndefined();
expect(res.branchPrefix).toBe('renovate/');
});

it('does not add base branch name to branchPrefix if multiple base branches are not expected - baseBranchPatterns undefined', async () => {
const res = await getBaseBranchConfig('main', {
...config,
baseBranchPatterns: undefined,
});
expect(res.baseBranch).toBe('main');
expect(res.hasBaseBranches).toBeUndefined();
expect(res.branchPrefix).toBe('renovate/');
});
});
});
24 changes: 18 additions & 6 deletions lib/workers/repository/process/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import type { ExtractResult } from './extract-update';
import { extract, lookup, update } from './extract-update';
import type { WriteUpdateResult } from './write';

async function getBaseBranchConfig(
export async function getBaseBranchConfig(
baseBranch: string,
config: RenovateConfig,
): Promise<RenovateConfig> {
Expand Down Expand Up @@ -86,9 +86,10 @@ async function getBaseBranchConfig(

// baseBranches value should be based off the default branch
baseBranchConfig.baseBranchPatterns = config.baseBranchPatterns;
baseBranchConfig.baseBranches = config.baseBranches;
}

if (config.baseBranchPatterns!.length > 1) {
if (isMultiBaseBranch(config)) {
baseBranchConfig.branchPrefix += `${baseBranch}-`;
baseBranchConfig.hasBaseBranches = true;
}
Expand Down Expand Up @@ -124,6 +125,17 @@ function unfoldBaseBranches(
return [...new Set(unfoldedList)];
}

function isMultiBaseBranch(config: RenovateConfig): boolean {
if (!config.baseBranchPatterns?.length) {
return false;
}

return (
config.baseBranchPatterns.length > 1 ||
config.baseBranchPatterns[0].startsWith('/')
);
}

export async function extractDependencies(
config: RenovateConfig,
overwriteCache = true,
Expand All @@ -138,13 +150,13 @@ export async function extractDependencies(
GlobalConfig.get('platform') !== 'local' &&
config.baseBranchPatterns?.length
) {
config.baseBranchPatterns = unfoldBaseBranches(
config.baseBranches = unfoldBaseBranches(
config.defaultBranch!,
config.baseBranchPatterns,
);
logger.debug({ baseBranches: config.baseBranchPatterns }, 'baseBranches');
logger.debug({ baseBranches: config.baseBranches }, 'baseBranches');
const extracted: Record<string, Record<string, PackageFile[]>> = {};
for (const baseBranch of config.baseBranchPatterns) {
for (const baseBranch of config.baseBranches) {
addMeta({ baseBranch });

if (scm.syncForkWithUpstream) {
Expand All @@ -158,7 +170,7 @@ export async function extractDependencies(
}
}
addSplit('extract');
for (const baseBranch of config.baseBranchPatterns) {
for (const baseBranch of config.baseBranches) {
if (await scm.branchExists(baseBranch)) {
addMeta({ baseBranch });
const baseBranchConfig = await getBaseBranchConfig(baseBranch, config);
Expand Down