diff --git a/lib/manager/dockerfile/__fixtures__/Dockerfile1 b/lib/manager/dockerfile/__fixtures__/1.Dockerfile similarity index 100% rename from lib/manager/dockerfile/__fixtures__/Dockerfile1 rename to lib/manager/dockerfile/__fixtures__/1.Dockerfile diff --git a/lib/manager/dockerfile/__fixtures__/Dockerfile2 b/lib/manager/dockerfile/__fixtures__/2.Dockerfile similarity index 82% rename from lib/manager/dockerfile/__fixtures__/Dockerfile2 rename to lib/manager/dockerfile/__fixtures__/2.Dockerfile index 2c2320d27793d5a52dda80f2bfcbc510dc721934..7d183600c45086ea52caa5585a3e088f1790286c 100644 --- a/lib/manager/dockerfile/__fixtures__/Dockerfile2 +++ b/lib/manager/dockerfile/__fixtures__/2.Dockerfile @@ -21,23 +21,13 @@ FROM\ COPY --from=image6 /path/1 /path/2 COPY \ + # comment1 --from=image7:1.0.0@sha256:abcdef \ /path/1 \ /path/2 # COPY --from=image8 -COPY --from=image9 - -COPY\ - --chown=root \ - # comment1 -# - #comment2 - --from=image10 - # comment2 - path1 path2 - COPY --chown=root --from=image11 / ./ COPY \ diff --git a/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap b/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap index 7c0f2969618d241186a335be729f9497ef19e121..69e2aacbd4052e6d3a3b75f05af0312098052ef2 100644 --- a/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap @@ -89,24 +89,6 @@ Array [ "depType": "stage", "replaceString": "image7:1.0.0@sha256:abcdef", }, - Object { - "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}", - "currentDigest": undefined, - "currentValue": undefined, - "datasource": "docker", - "depName": "image9", - "depType": "stage", - "replaceString": "image9", - }, - Object { - "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}", - "currentDigest": undefined, - "currentValue": undefined, - "datasource": "docker", - "depName": "image10", - "depType": "stage", - "replaceString": "image10", - }, Object { "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}", "currentDigest": undefined, diff --git a/lib/manager/dockerfile/extract.spec.ts b/lib/manager/dockerfile/extract.spec.ts index 347664ebde61e6fedadf1a483964a382cfcb1c84..b6125467909d01ceebfc7fdb27c64587951d34ae 100644 --- a/lib/manager/dockerfile/extract.spec.ts +++ b/lib/manager/dockerfile/extract.spec.ts @@ -2,12 +2,12 @@ import { readFileSync } from 'fs'; import { extractPackageFile, getDep } from './extract'; const d1 = readFileSync( - 'lib/manager/dockerfile/__fixtures__/Dockerfile1', + 'lib/manager/dockerfile/__fixtures__/1.Dockerfile', 'utf8' ); const d2 = readFileSync( - 'lib/manager/dockerfile/__fixtures__/Dockerfile2', + 'lib/manager/dockerfile/__fixtures__/2.Dockerfile', 'utf8' ); @@ -150,7 +150,7 @@ describe('lib/manager/dockerfile/extract', () => { it('extracts images from all sorts of (maybe multiline) FROM and COPY --from statements', () => { const res = extractPackageFile(d2).deps; expect(res).toMatchSnapshot(); - expect(res).toHaveLength(11); + expect(res).toHaveLength(9); }); it('handles calico/node', () => { const res = extractPackageFile('FROM calico/node\n').deps; diff --git a/lib/manager/dockerfile/extract.ts b/lib/manager/dockerfile/extract.ts index 6705b9ea2aed8d3d9d55106c6ee821577b527146..6019a926b0a9ad07ccd6c775607983a7b3b1b0e0 100644 --- a/lib/manager/dockerfile/extract.ts +++ b/lib/manager/dockerfile/extract.ts @@ -67,7 +67,7 @@ export function extractPackageFile(content: string): PackageFile | null { const stageNames: string[] = []; const fromMatches = content.matchAll( - /^[ \t]*FROM(?:\\\r?\n| |\t|#.*\r?\n|-\S+)+(?<image>\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?<name>\S+))?/gim + /^[ \t]*FROM(?:\\\r?\n| |\t|#.*?\r?\n|[ \t]--[a-z]+=\w+?)*[ \t](?<image>\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?<name>\S+))?/gim ); for (const fromMatch of fromMatches) { @@ -94,7 +94,7 @@ export function extractPackageFile(content: string): PackageFile | null { } const copyFromMatches = content.matchAll( - /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|-\S+)+--from=(?<image>\S+)/gim + /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|[ \t]--[a-z]+=\w+?)*[ \t]--from=(?<image>\S+)/gim ); for (const copyFromMatch of copyFromMatches) { diff --git a/lib/manager/gradle-lite/utils.spec.ts b/lib/manager/gradle-lite/utils.spec.ts index 9f014b1e496a8e5fa063083404c61b1163e3ea61..639128ca968b11e61793364e4fa21fce6a7a1d88 100644 --- a/lib/manager/gradle-lite/utils.spec.ts +++ b/lib/manager/gradle-lite/utils.spec.ts @@ -42,6 +42,7 @@ describe('manager/gradle-lite/utils', () => { expect(isDependencyString("foo:bar:1.2.3'")).toBe(false); expect(isDependencyString('foo:bar:1.2.3"')).toBe(false); expect(isDependencyString('-Xep:ParameterName:OFF')).toBe(false); + expect(isDependencyString('foo$bar:baz:1.2.+')).toBe(false); }); it('parseDependencyString', () => { diff --git a/lib/manager/gradle-lite/utils.ts b/lib/manager/gradle-lite/utils.ts index daf53ca4fc980240b582daef4bf27264595ed8b7..3731d895d8305787b694b1b6bdf1b69228a66932 100644 --- a/lib/manager/gradle-lite/utils.ts +++ b/lib/manager/gradle-lite/utils.ts @@ -10,7 +10,7 @@ import { } from './common'; const artifactRegex = regEx( - '^[a-zA-Z][-_a-zA-Z0-9]*(?:.[a-zA-Z0-9][-_a-zA-Z0-9]*)*$' + '^[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*?)*$' ); const versionLikeRegex = regEx('^(?<version>[-.\\[\\](),a-zA-Z0-9+]+)');