diff --git a/lib/modules/manager/vendir/__fixtures__/valid-contents.yaml b/lib/modules/manager/vendir/__fixtures__/valid-contents.yaml index 9492aebf173199..23f317ea994d35 100644 --- a/lib/modules/manager/vendir/__fixtures__/valid-contents.yaml +++ b/lib/modules/manager/vendir/__fixtures__/valid-contents.yaml @@ -36,3 +36,8 @@ directories: git: url: https://github.com/test/test ref: "7.10.1" + # Normal GithubRelease Repo + - path: custom-repo-custom-version + githubRelease: + slug: test/test + tag: "7.10.1" diff --git a/lib/modules/manager/vendir/extract.spec.ts b/lib/modules/manager/vendir/extract.spec.ts index 66fd02e686ad05..f34a482b734997 100644 --- a/lib/modules/manager/vendir/extract.spec.ts +++ b/lib/modules/manager/vendir/extract.spec.ts @@ -78,6 +78,12 @@ describe('modules/manager/vendir/extract', () => { packageName: 'https://github.com/test/test', datasource: 'git-refs', }, + { + currentValue: '7.10.1', + depName: 'test/test', + packageName: 'test/test', + datasource: 'github-releases', + }, ], }); }); diff --git a/lib/modules/manager/vendir/extract.ts b/lib/modules/manager/vendir/extract.ts index 34b1387dab0aba..00526d5ba894ca 100644 --- a/lib/modules/manager/vendir/extract.ts +++ b/lib/modules/manager/vendir/extract.ts @@ -2,6 +2,7 @@ import { logger } from '../../../logger'; import { getHttpUrl } from '../../../util/git/url'; import { parseSingleYaml } from '../../../util/yaml'; import { GitRefsDatasource } from '../../datasource/git-refs'; +import { GithubReleasesDatasource } from '../../datasource/github-releases'; import { HelmDatasource } from '../../datasource/helm'; import { getDep } from '../dockerfile/extract'; import { isOCIRegistry } from '../helmv3/utils'; @@ -12,14 +13,12 @@ import type { } from '../types'; import { GitRefDefinition, + GithubReleaseDefinition, HelmChartDefinition, Vendir, VendirDefinition, } from './schema'; -// TODO: Add support for other vendir types (like git tags, github releases, etc.) -// Recommend looking at the kustomize manager for more information on support. - export function extractHelmChart( helmChart: HelmChartDefinition, aliases?: Record | undefined, @@ -63,6 +62,18 @@ export function extractGitSource( }; } +export function extractGithubReleaseSource( + githubRelease: GithubReleaseDefinition, +): PackageDependency | null { + return { + depName: githubRelease.slug, + packageName: githubRelease.slug, + depType: 'GithubRelease', + currentValue: githubRelease.tag, + datasource: GithubReleasesDatasource.id, + }; +} + export function parseVendir( content: string, packageFile?: string, @@ -104,6 +115,11 @@ export function extractPackageFile( if (dep) { deps.push(dep); } + } else if ('githubRelease' in content && content.githubRelease) { + const dep = extractGithubReleaseSource(content.githubRelease); + if (dep) { + deps.push(dep); + } } } diff --git a/lib/modules/manager/vendir/readme.md b/lib/modules/manager/vendir/readme.md index a9861052c993ce..6ab7931a72ba3d 100644 --- a/lib/modules/manager/vendir/readme.md +++ b/lib/modules/manager/vendir/readme.md @@ -58,3 +58,20 @@ directories: depth: 1 ... ``` + +### GithubRelease + +Renovates supporting explicit tags in for github releases in vendir.yml + +```yaml title="Example github vendir.yml" +directories: + - path: config/_ytt_lib + contents: + path: github.com/cloudfoundry/cf-k8s-networking + githubRelease: + # slug for repository (org/repo) (required) + slug: k14s/kapp-controller + # use release tag (optional) + # optional if tagSelection is specified (available in v0.22.0+) + tag: v0.1.0 +``` diff --git a/lib/modules/manager/vendir/schema.ts b/lib/modules/manager/vendir/schema.ts index 03418dc0eac191..93c5a7d99245e7 100644 --- a/lib/modules/manager/vendir/schema.ts +++ b/lib/modules/manager/vendir/schema.ts @@ -12,6 +12,11 @@ export const GitRef = z.object({ depth: z.number().optional(), }); +export const GithubRelease = z.object({ + slug: z.string(), + tag: z.string(), +}); + export const HelmChart = z.object({ name: z.string(), version: z.string(), @@ -30,7 +35,16 @@ export const GitRefContent = z.object({ git: GitRef, }); -export const Contents = z.union([HelmChartContent, GitRefContent]); +export const GithubReleaseContent = z.object({ + path: z.string(), + githubRelease: GithubRelease, +}); + +export const Contents = z.union([ + HelmChartContent, + GitRefContent, + GithubReleaseContent, +]); export const Vendir = VendirResource.extend({ directories: z.array( @@ -44,3 +58,4 @@ export const Vendir = VendirResource.extend({ export type VendirDefinition = z.infer; export type HelmChartDefinition = z.infer; export type GitRefDefinition = z.infer; +export type GithubReleaseDefinition = z.infer;