diff --git a/lib/modules/manager/dockerfile/extract.spec.ts b/lib/modules/manager/dockerfile/extract.spec.ts index 5ea952477dae83..b7934f840b663e 100644 --- a/lib/modules/manager/dockerfile/extract.spec.ts +++ b/lib/modules/manager/dockerfile/extract.spec.ts @@ -330,6 +330,26 @@ describe('modules/manager/dockerfile/extract', () => { ]); }); + it('extracts tags from Dockerfile which begins with a BOM marker', () => { + const res = extractPackageFile( + '\uFEFFFROM node:6.12.3 as frontend\n\n', + '', + {}, + )?.deps; + expect(res).toEqual([ + { + autoReplaceStringTemplate: + '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', + currentDigest: undefined, + currentValue: '6.12.3', + datasource: 'docker', + depName: 'node', + depType: 'final', + replaceString: 'node:6.12.3', + }, + ]); + }); + it('skips scratches', () => { const res = extractPackageFile('FROM scratch\nADD foo\n', '', {}); expect(res).toBeNull(); diff --git a/lib/modules/manager/dockerfile/extract.ts b/lib/modules/manager/dockerfile/extract.ts index 81e2da71bf4327..53dd5550248558 100644 --- a/lib/modules/manager/dockerfile/extract.ts +++ b/lib/modules/manager/dockerfile/extract.ts @@ -244,6 +244,7 @@ export function extractPackageFile( _packageFile: string, config: ExtractConfig, ): PackageFileContent | null { + const sanitizedContent = content.replace(regEx(/^\uFEFF/), ''); // remove bom marker const deps: PackageDependency[] = []; const stageNames: string[] = []; const args: Record = {}; @@ -253,8 +254,8 @@ export function extractPackageFile( let lookForEscapeChar = true; let lookForSyntaxDirective = true; - const lineFeed = content.indexOf('\r\n') >= 0 ? '\r\n' : '\n'; - const lines = content.split(newlineRegex); + const lineFeed = sanitizedContent.indexOf('\r\n') >= 0 ? '\r\n' : '\n'; + const lines = sanitizedContent.split(newlineRegex); for (let lineNumber = 0; lineNumber < lines.length; ) { const lineNumberInstrStart = lineNumber; let instruction = lines[lineNumber];