From 5f21e173982fde6c30c9df33b2c4713a16e21c59 Mon Sep 17 00:00:00 2001 From: Dean Lindqvist Todevski <dean.todevski@gmail.com> Date: Wed, 10 Jul 2024 17:29:12 -0400 Subject: [PATCH] feat(gomod): Add `gomodSkipVendor` postUpdateOption (#30025) Co-authored-by: Michael Kriese <michael.kriese@visualon.de> --- docs/usage/configuration-options.md | 1 + lib/config/options/index.ts | 1 + lib/modules/manager/gomod/artifacts.spec.ts | 50 +++++++++++++++++++++ lib/modules/manager/gomod/artifacts.ts | 4 +- 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 09dc38bc54..abf13a2eae 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -3378,6 +3378,7 @@ Table with options: | `gomodTidy1.17` | Run `go mod tidy -compat=1.17` after Go module updates. | | `gomodTidyE` | Run `go mod tidy -e` after Go module updates. | | `gomodUpdateImportPaths` | Update source import paths on major module updates, using [mod](https://github.com/marwan-at-work/mod). | +| `gomodSkipVendor` | Never run `go mod vendor` after Go module updates. | | `helmUpdateSubChartArchives` | Update subchart archives in the `/charts` folder. | | `npmDedupe` | Run `npm install` with `--prefer-dedupe` for npm >= 7 or `npm dedupe` after `package-lock.json` update for npm <= 6. | | `pnpmDedupe` | Run `pnpm dedupe --config.ignore-scripts=true` after `pnpm-lock.yaml` updates. | diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 62a8c89ec2..9d92162015 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -2508,6 +2508,7 @@ const options: RenovateOptions[] = [ 'gomodTidy1.17', 'gomodTidyE', 'gomodUpdateImportPaths', + 'gomodSkipVendor', 'helmUpdateSubChartArchives', 'npmDedupe', 'pnpmDedupe', diff --git a/lib/modules/manager/gomod/artifacts.spec.ts b/lib/modules/manager/gomod/artifacts.spec.ts index d584ed2dbd..9246997792 100644 --- a/lib/modules/manager/gomod/artifacts.spec.ts +++ b/lib/modules/manager/gomod/artifacts.spec.ts @@ -278,6 +278,56 @@ describe('modules/manager/gomod/artifacts', () => { ]); }); + it('skips vendor directory update with gomodSkipVendor', async () => { + const foo = join('vendor/github.com/foo/foo/go.mod'); + const bar = join('vendor/github.com/bar/bar/go.mod'); + const baz = join('vendor/github.com/baz/baz/go.mod'); + + fs.readLocalFile.mockResolvedValueOnce('Current go.sum'); + const execSnapshots = mockExecAll(); + git.getRepoStatus.mockResolvedValueOnce( + partial<StatusResult>({ + modified: ['go.sum', foo], + not_added: [bar], + deleted: [baz], + }), + ); + fs.readLocalFile.mockResolvedValueOnce('New go.sum'); + fs.readLocalFile.mockResolvedValueOnce('New go.mod'); + const res = await gomod.updateArtifacts({ + packageFileName: 'go.mod', + updatedDeps: [], + newPackageFileContent: gomod1, + config: { + ...config, + postUpdateOptions: ['gomodSkipVendor'], + }, + }); + expect(res).toEqual([ + { + file: { + contents: 'New go.sum', + path: 'go.sum', + type: 'addition', + }, + }, + { + file: { + contents: 'New go.mod', + path: 'go.mod', + type: 'addition', + }, + }, + ]); + + expect(execSnapshots).toMatchObject([ + { + cmd: 'go get -d -t ./...', + options: { cwd: '/tmp/github/some/repo' }, + }, + ]); + }); + it('supports vendor directory update with go.work', async () => { const foo = join('vendor/github.com/foo/foo/go.mod'); const bar = join('vendor/github.com/bar/bar/go.mod'); diff --git a/lib/modules/manager/gomod/artifacts.ts b/lib/modules/manager/gomod/artifacts.ts index ad9b044746..bf5f65a41d 100644 --- a/lib/modules/manager/gomod/artifacts.ts +++ b/lib/modules/manager/gomod/artifacts.ts @@ -133,7 +133,9 @@ export async function updateArtifacts({ const vendorDir = upath.join(goModDir, 'vendor/'); const vendorModulesFileName = upath.join(vendorDir, 'modules.txt'); - const useVendor = (await readLocalFile(vendorModulesFileName)) !== null; + const useVendor = + !config.postUpdateOptions?.includes('gomodSkipVendor') && + (await readLocalFile(vendorModulesFileName)) !== null; let massagedGoMod = newGoModContent; -- GitLab