diff --git a/lib/config/presets/internal/workarounds.spec.ts b/lib/config/presets/internal/workarounds.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..f0d8440bbb99175b0f234e266ce66b5defa2f0c9 --- /dev/null +++ b/lib/config/presets/internal/workarounds.spec.ts @@ -0,0 +1,45 @@ +import { regEx } from '../../../util/regex'; +import { presets } from './workarounds'; + +describe('config/presets/internal/workarounds', () => { + describe('bitnamiDockerImageVersioning', () => { + const versioning = presets.bitnamiDockerImageVersioning.packageRules![0] + .versioning as string; + const versioningRe = regEx(versioning.substring(6)); + const matchCurrentValue = presets.bitnamiDockerImageVersioning + .packageRules![0].matchCurrentValue as string; + const matchCurrentValueRe = regEx( + matchCurrentValue.substring(1, matchCurrentValue.length - 1), + ); + + it.each` + input | expected + ${'latest'} | ${false} + ${'20'} | ${true} + ${'20-debian'} | ${false} + ${'20-debian-12'} | ${true} + ${'1.24'} | ${true} + ${'1.24-debian-12'} | ${true} + ${'1.24.0'} | ${true} + ${'1.24.0-debian-12'} | ${true} + ${'1.24.0-debian-12-r24'} | ${true} + `('versioning("$input") == "$expected"', ({ input, expected }) => { + expect(versioningRe.test(input)).toEqual(expected); + }); + + it.each` + input | expected + ${'latest'} | ${false} + ${'20'} | ${false} + ${'20-debian'} | ${false} + ${'20-debian-12'} | ${true} + ${'1.24'} | ${false} + ${'1.24-debian-12'} | ${true} + ${'1.24.0'} | ${false} + ${'1.24.0-debian-12'} | ${true} + ${'1.24.0-debian-12-r24'} | ${true} + `('matchCurrentValue("$input") == "$expected"', ({ input, expected }) => { + expect(matchCurrentValueRe.test(input)).toEqual(expected); + }); + }); +}); diff --git a/lib/config/presets/internal/workarounds.ts b/lib/config/presets/internal/workarounds.ts index a6c8fe3f0c1b5aaa5d8c981f2b09712b34425d83..158515222e43b0b1d34074975a5995c717b83e3a 100644 --- a/lib/config/presets/internal/workarounds.ts +++ b/lib/config/presets/internal/workarounds.ts @@ -21,9 +21,27 @@ export const presets: Record<string, Preset> = { 'workarounds:disableEclipseLifecycleMapping', 'workarounds:disableMavenParentRoot', 'workarounds:containerbase', + 'workarounds:bitnamiDockerImageVersioning', ], ignoreDeps: [], // Hack to improve onboarding PR description }, + bitnamiDockerImageVersioning: { + description: 'Use custom regex versioning for bitnami images', + packageRules: [ + { + matchCurrentValue: + '/^(?<major>\\d+)(?:\\.(?<minor>\\d+)(?:\\.(?<patch>\\d+))?)?-(?<compatibility>.+)-(?<build>\\d+)(?:-r(?<revision>\\d+))?$/', + matchDatasources: ['docker'], + matchPackagePrefixes: [ + 'bitnami/', + 'docker.io/bitnami/', + 'gcr.io/bitnami-containers/', + ], + versioning: + 'regex:^(?<major>\\d+)(?:\\.(?<minor>\\d+)(?:\\.(?<patch>\\d+))?)?(:?-(?<compatibility>.+)-(?<build>\\d+)(?:-r(?<revision>\\d+))?)?$', + }, + ], + }, containerbase: { description: 'Add some containerbase overrides.', packageRules: [