aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--docs/usage/configuration-options.md1
-rw-r--r--lib/config/options/index.ts1
-rw-r--r--lib/modules/manager/gomod/artifacts.spec.ts106
-rw-r--r--lib/modules/manager/gomod/artifacts.ts6
4 files changed, 111 insertions, 3 deletions
diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md
index d96d93cf9e2..a55d0fa601e 100644
--- a/docs/usage/configuration-options.md
+++ b/docs/usage/configuration-options.md
@@ -3357,6 +3357,7 @@ Table with options:
| `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. |
+| `gomodVendor` | Always run `go mod vendor` after Go module updates even if vendor files aren't detected. |
| `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 263cc69f123..c5f677d67e5 100644
--- a/lib/config/options/index.ts
+++ b/lib/config/options/index.ts
@@ -2390,6 +2390,7 @@ const options: RenovateOptions[] = [
'gomodTidyE',
'gomodUpdateImportPaths',
'gomodSkipVendor',
+ 'gomodVendor',
'helmUpdateSubChartArchives',
'npmDedupe',
'pnpmDedupe',
diff --git a/lib/modules/manager/gomod/artifacts.spec.ts b/lib/modules/manager/gomod/artifacts.spec.ts
index 308904a6033..4310e6887c1 100644
--- a/lib/modules/manager/gomod/artifacts.spec.ts
+++ b/lib/modules/manager/gomod/artifacts.spec.ts
@@ -189,6 +189,112 @@ describe('modules/manager/gomod/artifacts', () => {
]);
});
+ it('runs go mod vendor with gomodVendor', async () => {
+ fs.readLocalFile.mockResolvedValueOnce('Current go.sum');
+ fs.readLocalFile.mockResolvedValueOnce('New go.sum');
+ fs.readLocalFile.mockResolvedValueOnce('New go.mod');
+
+ const execSnapshots = mockExecAll();
+ git.getRepoStatus.mockResolvedValueOnce(
+ partial<StatusResult>({
+ modified: ['go.sum'],
+ not_added: [],
+ deleted: [],
+ }),
+ );
+ const res = await gomod.updateArtifacts({
+ packageFileName: 'go.mod',
+ updatedDeps: [],
+ newPackageFileContent: gomod1,
+ config: {
+ ...config,
+ postUpdateOptions: ['gomodVendor'],
+ },
+ });
+ 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' },
+ },
+ {
+ cmd: 'go mod vendor',
+ options: { cwd: '/tmp/github/some/repo' },
+ },
+ ]);
+ });
+
+ it('runs go work vendor with gomodVendor and go.work', async () => {
+ fs.readLocalFile.mockResolvedValueOnce('Current go.sum');
+ fs.findLocalSiblingOrParent.mockResolvedValueOnce('go.work');
+ const execSnapshots = mockExecAll();
+ git.getRepoStatus.mockResolvedValueOnce(
+ partial<StatusResult>({
+ modified: ['go.sum'],
+ not_added: [],
+ deleted: [],
+ }),
+ );
+ 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: ['gomodVendor'],
+ },
+ });
+ 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' },
+ },
+ {
+ cmd: 'go work vendor',
+ options: { cwd: '/tmp/github/some/repo' },
+ },
+ {
+ cmd: 'go work sync',
+ options: { cwd: '/tmp/github/some/repo' },
+ },
+ ]);
+ });
+
it('supports vendor directory update', 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 bf5f65a41d1..e77b3572517 100644
--- a/lib/modules/manager/gomod/artifacts.ts
+++ b/lib/modules/manager/gomod/artifacts.ts
@@ -134,9 +134,9 @@ export async function updateArtifacts({
const vendorDir = upath.join(goModDir, 'vendor/');
const vendorModulesFileName = upath.join(vendorDir, 'modules.txt');
const useVendor =
- !config.postUpdateOptions?.includes('gomodSkipVendor') &&
- (await readLocalFile(vendorModulesFileName)) !== null;
-
+ !!config.postUpdateOptions?.includes('gomodVendor') ||
+ (!config.postUpdateOptions?.includes('gomodSkipVendor') &&
+ (await readLocalFile(vendorModulesFileName)) !== null);
let massagedGoMod = newGoModContent;
if (config.postUpdateOptions?.includes('gomodMassage')) {