diff --git a/lib/modules/manager/helmfile/artifacts.spec.ts b/lib/modules/manager/helmfile/artifacts.spec.ts index bfdaa57a08634c69b37def8de4caf815804fb010..d36b45bda5b662cabc5fa961245da4c21c14af82 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 4e0fed89a5f5038d7d69452b27ea58dfbeda41ea..87c0b6c229b103efe026ebcc1d71491d8d18dbc3 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 8ed79044002d62c9606dc8e8b5a782772857da00..dd4ac7ff2fd79302de37da528bc216b045c7daa0 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 7667d98288173138d769c23c81bd361fa47ee6e4..a5bd8e60cf2152fa193c6703d985498d377f38d5 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 578ee04c06bc2ce4fd2acf8af91c94dca8830415..b8acb7cc114a90c7d6e9d871185e66abee5b7a71 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; }