diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts index 9d49dad9c681a787310b8f0e50e5e5e5a6ebde18..f142d182027f13b921642ced9281f82361c0c292 100644 --- a/lib/manager/gomod/artifacts.ts +++ b/lib/manager/gomod/artifacts.ts @@ -38,7 +38,7 @@ export async function updateArtifacts( } await outputFile(localGoModFileName, massagedGoMod); const localGoSumFileName = join(config.localDir, sumFileName); - const customEnv = ['GOPATH', 'GOPROXY']; + const customEnv = ['GOPATH', 'GOPROXY', 'GONOSUMDB']; const env = getChildProcessEnv(customEnv); const startTime = process.hrtime(); let cmd: string; diff --git a/lib/manager/gomod/update.ts b/lib/manager/gomod/update.ts index b08055df406ffb705c09c39ff97a9bfeb8376ccd..14825d83e303d3b7db2f0ad3eef66850fef6134c 100644 --- a/lib/manager/gomod/update.ts +++ b/lib/manager/gomod/update.ts @@ -77,6 +77,8 @@ export function updateDependency( upgrade.newMajor > 1 && !newLine.includes(`/v${upgrade.newMajor}`) ) { + // If package has no version, pin to latest one. + newLine = newLine.replace(depName, depName + '/v' + upgrade.newMajor); if (upgrade.currentValue.match(/^v(0|1)\./)) { // Add version newLine = newLine.replace( @@ -94,7 +96,12 @@ export function updateDependency( } } if (lineToChange.endsWith('+incompatible')) { - newLine += '+incompatible'; + let toAdd = '+incompatible'; + + if (upgrade.updateType === 'major' && upgrade.newMajor >= 2) { + toAdd = ''; + } + newLine += toAdd; } if (newLine === lineToChange) { logger.debug('No changes necessary'); diff --git a/test/manager/gomod/__snapshots__/extract.spec.ts.snap b/test/manager/gomod/__snapshots__/extract.spec.ts.snap index 7ba5ee243c2cbb0cf6e687d6a18c7641eac8ee9e..182598d01d7f3b7b85e1035dcc2a0d7d5d6b33d4 100644 --- a/test/manager/gomod/__snapshots__/extract.spec.ts.snap +++ b/test/manager/gomod/__snapshots__/extract.spec.ts.snap @@ -766,5 +766,15 @@ Array [ "lineNumber": 11, }, }, + Object { + "currentValue": "v3.5.0+incompatible", + "datasource": "go", + "depName": "github.com/caarlos0/env", + "depNameShort": "caarlos0/env", + "depType": "require", + "managerData": Object { + "lineNumber": 13, + }, + }, ] `; diff --git a/test/manager/gomod/__snapshots__/update.spec.ts.snap b/test/manager/gomod/__snapshots__/update.spec.ts.snap index d4b790db6ce36cdce485911ddd71ff563c7dfb22..7b3e74c2065b6d7e44411ac03b532091821b2711 100644 --- a/test/manager/gomod/__snapshots__/update.spec.ts.snap +++ b/test/manager/gomod/__snapshots__/update.spec.ts.snap @@ -14,6 +14,7 @@ require github.com/Azure/azure-sdk-for-go v25.1.0+incompatible replace github.com/pkg/errors => ../errors replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0 +require github.com/caarlos0/env v3.5.0+incompatible " `; @@ -98,5 +99,6 @@ require github.com/Azure/azure-sdk-for-go v25.1.0+incompatible replace github.com/pkg/errors => ../errors replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0 +require github.com/caarlos0/env v3.5.0+incompatible " `; diff --git a/test/manager/gomod/_fixtures/1/go.mod b/test/manager/gomod/_fixtures/1/go.mod index 914afa7d5f062a627637fcd73bb7d1375ae78f9c..e0f36e378d31420fb3ee991e8700502e8271c847 100644 --- a/test/manager/gomod/_fixtures/1/go.mod +++ b/test/manager/gomod/_fixtures/1/go.mod @@ -11,3 +11,4 @@ require github.com/Azure/azure-sdk-for-go v25.1.0+incompatible replace github.com/pkg/errors => ../errors replace golang.org/x/foo => github.com/pravesht/gocql v0.0.0 +require github.com/caarlos0/env v3.5.0+incompatible diff --git a/test/manager/gomod/extract.spec.ts b/test/manager/gomod/extract.spec.ts index 99a8e0081e7d68af456925a2fc59ef0d8e555d34..405070a926d66c3e71e12f924918032ac3f5a362 100644 --- a/test/manager/gomod/extract.spec.ts +++ b/test/manager/gomod/extract.spec.ts @@ -12,7 +12,7 @@ describe('lib/manager/gomod/extract', () => { it('extracts single-line requires', () => { const res = extractPackageFile(gomod1).deps; expect(res).toMatchSnapshot(); - expect(res).toHaveLength(7); + expect(res).toHaveLength(8); expect(res.filter(e => e.skipReason)).toHaveLength(1); expect(res.filter(e => e.depType === 'replace')).toHaveLength(1); }); diff --git a/test/manager/gomod/update.spec.ts b/test/manager/gomod/update.spec.ts index 261c0d585e1c590b2c905e0c423e40a64e4441a0..4b3de3ee3b98b5320e1e182c46f3fd147798535f 100644 --- a/test/manager/gomod/update.spec.ts +++ b/test/manager/gomod/update.spec.ts @@ -235,5 +235,20 @@ describe('manager/gomod/update', () => { expect(res).not.toEqual(gomod1); expect(res.includes(upgrade.newDigest.substring(0, 12))).toBe(true); }); + it('handles no pinned version to latest available version', () => { + const upgrade = { + depName: 'github.com/caarlos0/env', + managerData: { lineNumber: 13 }, + newValue: 'v6.1.0', + depType: 'require', + currentValue: 'v3.5.0+incompatible', + newMajor: 6, + updateType: 'major', + }; + const res = updateDependency(gomod1, upgrade); + expect(res).not.toEqual(gomod1); + expect(res.includes(upgrade.newValue)).toBe(true); + expect(res).toContain(upgrade.depName + '/v6'); + }); }); });