From 4cc21fa1cd7a003f7f22449e87718d1510b150e9 Mon Sep 17 00:00:00 2001 From: mugi <62197019+mugioka@users.noreply.github.com> Date: Wed, 21 Jun 2023 21:35:04 +0900 Subject: [PATCH] feat(manager/helmfile): use the specific helmfile version that specified in the helmfile.lock. (#22904) --- lib/modules/manager/helmfile/artifacts.spec.ts | 7 ++----- lib/modules/manager/helmfile/artifacts.ts | 11 +++++++++-- lib/modules/manager/helmfile/schema.ts | 4 ++++ lib/modules/manager/helmfile/types.ts | 9 ++++++++- lib/modules/manager/helmfile/utils.ts | 9 +++++++-- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lib/modules/manager/helmfile/artifacts.spec.ts b/lib/modules/manager/helmfile/artifacts.spec.ts index bfdaa57a08..d36b45bda5 100644 --- a/lib/modules/manager/helmfile/artifacts.spec.ts +++ b/lib/modules/manager/helmfile/artifacts.spec.ts @@ -325,7 +325,7 @@ describe('modules/manager/helmfile/artifacts', () => { 'bash -l -c "' + 'install-tool helm v3.7.2' + ' && ' + - 'install-tool helmfile v0.129.0' + + 'install-tool helmfile 0.151.0' + ' && ' + 'install-tool kustomize 5.0.0' + ' && ' + @@ -338,7 +338,7 @@ describe('modules/manager/helmfile/artifacts', () => { binarySource: 'install', expectedCommands: [ { cmd: 'install-tool helm v3.7.2' }, - { cmd: 'install-tool helmfile v0.129.0' }, + { cmd: 'install-tool helmfile 0.151.0' }, { cmd: 'install-tool kustomize 5.0.0' }, { cmd: 'helmfile deps -f helmfile.yaml' }, ], @@ -359,9 +359,6 @@ describe('modules/manager/helmfile/artifacts', () => { datasource.getPkgReleases.mockResolvedValueOnce({ releases: [{ version: 'v3.7.2' }], }); - datasource.getPkgReleases.mockResolvedValueOnce({ - releases: [{ version: 'v0.129.0' }], - }); datasource.getPkgReleases.mockResolvedValueOnce({ releases: [{ version: '5.0.0' }], }); diff --git a/lib/modules/manager/helmfile/artifacts.ts b/lib/modules/manager/helmfile/artifacts.ts index 4e0fed89a5..87c0b6c229 100644 --- a/lib/modules/manager/helmfile/artifacts.ts +++ b/lib/modules/manager/helmfile/artifacts.ts @@ -14,7 +14,12 @@ import { getFile } from '../../../util/git'; import { regEx } from '../../../util/regex'; import { generateHelmEnvs } from '../helmv3/common'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; -import { generateRegistryLoginCmd, isOCIRegistry, parseDoc } from './utils'; +import { + generateRegistryLoginCmd, + isOCIRegistry, + parseDoc, + parseLock, +} from './utils'; export async function updateArtifacts({ packageFileName, @@ -51,7 +56,9 @@ export async function updateArtifacts({ }, { toolName: 'helmfile', - constraint: config.constraints?.helmfile, + constraint: + config.constraints?.helmfile ?? + parseLock(existingLockFileContent).version, }, ]; const needKustomize = updatedDeps.some( diff --git a/lib/modules/manager/helmfile/schema.ts b/lib/modules/manager/helmfile/schema.ts index 8ed7904400..dd4ac7ff2f 100644 --- a/lib/modules/manager/helmfile/schema.ts +++ b/lib/modules/manager/helmfile/schema.ts @@ -19,3 +19,7 @@ export const DocSchema = z.object({ releases: z.array(ReleaseSchema).optional(), repositories: z.array(RepositorySchema).optional(), }); + +export const LockSchema = z.object({ + version: z.string(), +}); diff --git a/lib/modules/manager/helmfile/types.ts b/lib/modules/manager/helmfile/types.ts index 7667d98288..a5bd8e60cf 100644 --- a/lib/modules/manager/helmfile/types.ts +++ b/lib/modules/manager/helmfile/types.ts @@ -1,9 +1,16 @@ import type { z } from 'zod'; -import type { DocSchema, ReleaseSchema, RepositorySchema } from './schema'; +import type { + DocSchema, + LockSchema, + ReleaseSchema, + RepositorySchema, +} from './schema'; export type Release = z.infer<typeof ReleaseSchema>; export type Repository = z.infer<typeof RepositorySchema>; export type Doc = z.infer<typeof DocSchema>; + +export type Lock = z.infer<typeof LockSchema>; diff --git a/lib/modules/manager/helmfile/utils.ts b/lib/modules/manager/helmfile/utils.ts index 578ee04c06..b8acb7cc11 100644 --- a/lib/modules/manager/helmfile/utils.ts +++ b/lib/modules/manager/helmfile/utils.ts @@ -7,8 +7,8 @@ import { DockerDatasource } from '../../datasource/docker'; import { generateLoginCmd } from '../helmv3/common'; import type { RepositoryRule } from '../helmv3/types'; -import { DocSchema } from './schema'; -import type { Doc, Release, Repository } from './types'; +import { DocSchema, LockSchema } from './schema'; +import type { Doc, Lock, Release, Repository } from './types'; /** Returns true if a helmfile release contains kustomize specific keys **/ export function kustomizationsKeysUsed(release: Release): boolean { @@ -36,6 +36,11 @@ export function parseDoc(packageFileContent: string): Doc { return DocSchema.parse(doc); } +export function parseLock(lockFileContent: string): Lock { + const lock = yaml.load(lockFileContent); + return LockSchema.parse(lock); +} + export function isOCIRegistry(repository: Repository): boolean { return repository.oci === true; } -- GitLab