diff --git a/lib/modules/manager/cloudbuild/extract.ts b/lib/modules/manager/cloudbuild/extract.ts index 92f08454da77de..9fa9500fe1a160 100644 --- a/lib/modules/manager/cloudbuild/extract.ts +++ b/lib/modules/manager/cloudbuild/extract.ts @@ -1,49 +1,25 @@ -import is from '@sindresorhus/is'; import { logger } from '../../../logger'; -import { parseSingleYaml } from '../../../util/yaml'; import { getDep } from '../dockerfile/extract'; -import type { PackageDependency, PackageFileContent } from '../types'; +import type { PackageFileContent } from '../types'; +import { CloudbuildSteps } from './schema'; export function extractPackageFile( content: string, packageFile?: string, ): PackageFileContent | null { - const deps: PackageDependency[] = []; - try { - // TODO: fix types - const doc: any = parseSingleYaml(content); - if (doc?.steps && is.array(doc.steps)) { - for (const step of doc.steps) { - if (step.name) { - const dep = getDep(step.name); - logger.trace( - { - depName: dep.depName, - currentValue: dep.currentValue, - currentDigest: dep.currentDigest, - }, - 'Cloud Build docker image', - ); + const deps = CloudbuildSteps.catch(({ error: err }) => { + logger.debug( + { err, packageFile }, + 'Cloud Build: error extracting Docker images from a configuration file.', + ); + return []; + }) + .transform((steps) => steps.map((step) => getDep(step))) + .parse(content); - deps.push(dep); - } - } - } - } catch (err) /* istanbul ignore next */ { - if (err.stack?.startsWith('YAMLException:')) { - logger.debug( - { err, packageFile }, - 'YAML exception extracting Docker images from a Cloud Build configuration file.', - ); - } else { - logger.debug( - { err, packageFile }, - 'Error extracting Docker images from a Cloud Build configuration file.', - ); - } - } if (!deps.length) { return null; } + return { deps }; } diff --git a/lib/modules/manager/cloudbuild/schema.ts b/lib/modules/manager/cloudbuild/schema.ts new file mode 100644 index 00000000000000..46cad9b327457c --- /dev/null +++ b/lib/modules/manager/cloudbuild/schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod'; +import { LooseArray, Yaml } from '../../../util/schema-utils'; + +export const CloudbuildSteps = Yaml.pipe( + z + .object({ + steps: LooseArray( + z.object({ name: z.string() }).transform(({ name }) => name), + ), + }) + .transform(({ steps }) => steps), +);