From 1194cc711dcf8d6f2fe5e74a47e5727c709956ab Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer <secustor@users.noreply.github.com> Date: Mon, 10 Jan 2022 10:52:42 +0100 Subject: [PATCH] feat(onboarding): merge `labels` and `addLabels` and template onboarding labels (#13433) Co-authored-by: Michael Kriese <michael.kriese@visualon.de> --- lib/workers/pr/index.spec.ts | 48 +++++++++++++++++++ lib/workers/pr/index.ts | 12 +++-- .../repository/onboarding/pr/index.spec.ts | 18 +++++++ lib/workers/repository/onboarding/pr/index.ts | 8 +++- 4 files changed, 81 insertions(+), 5 deletions(-) diff --git a/lib/workers/pr/index.spec.ts b/lib/workers/pr/index.spec.ts index 27520244f7..1c1a1eb445 100644 --- a/lib/workers/pr/index.spec.ts +++ b/lib/workers/pr/index.spec.ts @@ -701,4 +701,52 @@ describe('workers/pr/index', () => { }); }); }); + + describe('prepareLabels(config)', () => { + it('returns empty array if no labels are configured', () => { + const result = prWorker.prepareLabels({}); + expect(result).toBeArrayOfSize(0); + }); + + it('only labels', () => { + const result = prWorker.prepareLabels({ labels: ['labelA', 'labelB'] }); + expect(result).toBeArrayOfSize(2); + expect(result).toEqual(['labelA', 'labelB']); + }); + + it('only addLabels', () => { + const result = prWorker.prepareLabels({ + addLabels: ['labelA', 'labelB'], + }); + expect(result).toBeArrayOfSize(2); + expect(result).toEqual(['labelA', 'labelB']); + }); + + it('merge labels and addLabels', () => { + const result = prWorker.prepareLabels({ + labels: ['labelA', 'labelB'], + addLabels: ['labelC'], + }); + expect(result).toBeArrayOfSize(3); + expect(result).toEqual(['labelA', 'labelB', 'labelC']); + }); + + it('deduplicate merged labels and addLabels', () => { + const result = prWorker.prepareLabels({ + labels: ['labelA', 'labelB'], + addLabels: ['labelB', 'labelC'], + }); + expect(result).toBeArrayOfSize(3); + expect(result).toEqual(['labelA', 'labelB', 'labelC']); + }); + + it('template labels', () => { + const result = prWorker.prepareLabels({ + labels: ['datasource-{{{datasource}}}'], + datasource: 'npm', + }); + expect(result).toBeArrayOfSize(1); + expect(result).toEqual(['datasource-npm']); + }); + }); }); diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts index 6e9ea8afbd..b84edac6ae 100644 --- a/lib/workers/pr/index.ts +++ b/lib/workers/pr/index.ts @@ -53,6 +53,14 @@ function prepareAssigneesReviewers( return filterUnavailableUsers(config, normalizedUsernames); } +export function prepareLabels(config: RenovateConfig): string[] { + const labels = config.labels ?? []; + const addLabels = config.addLabels ?? []; + return [...new Set([...labels, ...addLabels])].map((label) => + template.compile(label, config) + ); +} + export async function addAssigneesReviewers( config: RenovateConfig, pr: Pr @@ -430,9 +438,7 @@ export async function ensurePr( targetBranch: config.baseBranch, prTitle, prBody, - labels: [...new Set([...config.labels, ...config.addLabels])].map( - (label) => template.compile(label, config) - ), + labels: prepareLabels(config), platformOptions: getPlatformPrOptions(config), draftPR: config.draftPR, }); diff --git a/lib/workers/repository/onboarding/pr/index.spec.ts b/lib/workers/repository/onboarding/pr/index.spec.ts index debdb38980..a2beb95758 100644 --- a/lib/workers/repository/onboarding/pr/index.spec.ts +++ b/lib/workers/repository/onboarding/pr/index.spec.ts @@ -45,6 +45,24 @@ describe('workers/repository/onboarding/pr/index', () => { expect(platform.createPr).toHaveBeenCalledTimes(1); createPrBody = platform.createPr.mock.calls[0][0].prBody; }); + + it('creates PR with labels', async () => { + await ensureOnboardingPr( + { + ...config, + labels: ['label'], + addLabels: ['label', 'additional-label'], + }, + packageFiles, + branches + ); + expect(platform.createPr).toHaveBeenCalledTimes(1); + expect(platform.createPr.mock.calls[0][0].labels).toEqual([ + 'label', + 'additional-label', + ]); + }); + it('returns if PR does not need updating', async () => { platform.getBranchPr.mockResolvedValue( partial<Pr>({ diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index bf0c7be77d..cd8ac079c2 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -5,7 +5,11 @@ import type { PackageFile } from '../../../../manager/types'; import { platform } from '../../../../platform'; import { emojify } from '../../../../util/emoji'; import { deleteBranch, isBranchModified } from '../../../../util/git'; -import { addAssigneesReviewers, getPlatformPrOptions } from '../../../pr'; +import { + addAssigneesReviewers, + getPlatformPrOptions, + prepareLabels, +} from '../../../pr'; import type { BranchConfig } from '../../../types'; import { getBaseBranchDesc } from './base-branch'; import { getConfigDesc } from './config-description'; @@ -127,7 +131,7 @@ If you need any further assistance then you can also [request help here](${confi return; } logger.debug('Creating onboarding PR'); - const labels: string[] = config.addLabels ?? []; + const labels: string[] = prepareLabels(config); try { if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would create onboarding PR'); -- GitLab