diff --git a/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap index 5696ca20d7eba0..bb58075e602ec0 100644 --- a/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap @@ -636,6 +636,19 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line "multiLine": true, }, }, + { + "currentDigest": "d98b1b443823", + "currentValue": "v0.0.0-20191003171128-d98b1b443823", + "datasource": "go", + "depName": "golang.org/x/net", + "depType": "indirect", + "digestOneAndOnly": true, + "enabled": false, + "managerData": { + "lineNumber": 61, + "multiLine": true, + }, + }, ] `; diff --git a/lib/modules/manager/gomod/extract.spec.ts b/lib/modules/manager/gomod/extract.spec.ts index fb867376d79ba2..6bd4bc24a3b7fc 100644 --- a/lib/modules/manager/gomod/extract.spec.ts +++ b/lib/modules/manager/gomod/extract.spec.ts @@ -23,8 +23,23 @@ describe('modules/manager/gomod/extract', () => { it('extracts multi-line requires', () => { const res = extractPackageFile(gomod2)?.deps; expect(res).toMatchSnapshot(); - expect(res).toHaveLength(58); + expect(res).toHaveLength(59); expect(res?.filter((e) => e.skipReason)).toHaveLength(0); + expect(res?.filter((e) => e.depType === 'indirect')).toHaveLength(1); + }); + + it('ignores empty spaces in multi-line requires', () => { + const goMod = ` +module github.com/renovate-tests/gomod +go 1.19 +require ( + cloud.google.com/go v0.45.1 + + github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 // indirect +) +`; + const res = extractPackageFile(goMod)?.deps; + expect(res).toHaveLength(3); }); it('extracts replace directives from multi-line and single line', () => { @@ -83,6 +98,17 @@ replace ( currentValue: 'v0.17.3', datasource: 'go', }, + { + managerData: { + lineNumber: 9, + multiLine: true, + }, + depName: 'k8s.io/cluster-bootstrap', + depType: 'indirect', + enabled: false, + currentValue: 'v0.17.3', + datasource: 'go', + }, { managerData: { lineNumber: 10, diff --git a/lib/modules/manager/gomod/extract.ts b/lib/modules/manager/gomod/extract.ts index d05f1b3acc6fdc..91f7c86eebc88e 100644 --- a/lib/modules/manager/gomod/extract.ts +++ b/lib/modules/manager/gomod/extract.ts @@ -134,6 +134,12 @@ function parseMultiLine( const dep = getDep(lineNumber, multiMatch, blockType); dep.managerData!.multiLine = true; deps.push(dep); + } else if (multiMatch && line.endsWith('// indirect')) { + logger.trace({ lineNumber }, `${blockType} indirect line: "${line}"`); + const dep = getDep(lineNumber, multiMatch, 'indirect'); + dep.managerData!.multiLine = true; + dep.enabled = false; + deps.push(dep); } else if (line.trim() !== ')') { logger.trace(`No multi-line match: ${line}`); }