From 9b16e1c7578f8e1453dbe4e48e5443bd72c91b4f Mon Sep 17 00:00:00 2001 From: Filipe Azevedo <filipe@azevedo.io> Date: Fri, 29 Nov 2019 13:00:56 +0000 Subject: [PATCH] fix(gomod): update package version (#4900) --- lib/manager/gomod/artifacts.ts | 2 +- lib/manager/gomod/update.ts | 9 ++++++++- .../gomod/__snapshots__/extract.spec.ts.snap | 10 ++++++++++ .../gomod/__snapshots__/update.spec.ts.snap | 2 ++ test/manager/gomod/_fixtures/1/go.mod | 1 + test/manager/gomod/extract.spec.ts | 2 +- test/manager/gomod/update.spec.ts | 15 +++++++++++++++ 7 files changed, 38 insertions(+), 3 deletions(-) diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts index 9d49dad9c6..f142d18202 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 b08055df40..14825d83e3 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 7ba5ee243c..182598d01d 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 d4b790db6c..7b3e74c206 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 914afa7d5f..e0f36e378d 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 99a8e0081e..405070a926 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 261c0d585e..4b3de3ee3b 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'); + }); }); }); -- GitLab