From 945aa31fb1c3d1ba58074e9c494e5627b4a2fce4 Mon Sep 17 00:00:00 2001 From: Luiz Carvalho <lucarval@redhat.com> Date: Wed, 30 Nov 2022 05:00:40 -0500 Subject: [PATCH] feat(tekton): support official bundle resolver (#19040) --- .../tekton/__fixtures__/multi-doc.yaml | 37 +++++++++++++++---- .../tekton/__snapshots__/extract.spec.ts.snap | 18 +++++++++ lib/modules/manager/tekton/extract.spec.ts | 2 +- lib/modules/manager/tekton/extract.ts | 29 +++++++++++---- lib/modules/manager/tekton/readme.md | 9 +++-- lib/modules/manager/tekton/types.ts | 5 ++- 6 files changed, 79 insertions(+), 21 deletions(-) diff --git a/lib/modules/manager/tekton/__fixtures__/multi-doc.yaml b/lib/modules/manager/tekton/__fixtures__/multi-doc.yaml index c39ce14263..1c42e7adf1 100644 --- a/lib/modules/manager/tekton/__fixtures__/multi-doc.yaml +++ b/lib/modules/manager/tekton/__fixtures__/multi-doc.yaml @@ -10,7 +10,7 @@ spec: tasks: - taskRef: resolver: bundles - resource: + params: - name: bundle value: gcr.io/tekton-releases/catalog/upstream/pipeline-resolver:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b --- @@ -44,7 +44,7 @@ spec: spec: taskRef: resolver: bundles - resource: + params: - name: bundle value: gcr.io/tekton-releases/catalog/upstream/trigger-template-task-run-resolver - kind: PipelineRun @@ -55,7 +55,7 @@ spec: spec: pipelineRef: resolver: bundles - resource: + params: - name: bundle value: gcr.io/tekton-releases/catalog/upstream/trigger-template-pipeline-run-resolver --- @@ -63,7 +63,7 @@ kind: TaskRun spec: taskRef: resolver: bundles - resource: + params: - name: bundle value: gcr.io/tekton-releases/catalog/upstream/task-run --- @@ -71,7 +71,7 @@ kind: TaskRun spec: taskRef: resolver: bundles - resource: + params: - name: bundle value: gcr.io/tekton-releases/catalog/upstream/task-run-resolver --- @@ -84,7 +84,7 @@ kind: PipelineRun spec: pipelineRef: resolver: bundles - resource: + params: - name: bundle value: gcr.io/tekton-releases/catalog/upstream/pipeline-run-resolver --- @@ -105,7 +105,30 @@ spec: tasks: - taskRef: resolver: bundles - resource: + params: - name: bundle value: "" --- +kind: Pipeline +spec: + tasks: + - taskRef: + bundle: gcr.io/tekton-releases/catalog/upstream/ignored:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b + resolver: bundles + params: + - name: bundle + value: gcr.io/tekton-releases/catalog/upstream/pipeline-resolver:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b + resource: + - name: bundle + value: gcr.io/tekton-releases/catalog/upstream/ignored:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +--- +kind: Pipeline +spec: + tasks: + - taskRef: + bundle: gcr.io/tekton-releases/catalog/upstream/ignored:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b + resolver: bundles + resource: + - name: bundle + value: gcr.io/tekton-releases/catalog/upstream/pipeline-resolver:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b +--- diff --git a/lib/modules/manager/tekton/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/tekton/__snapshots__/extract.spec.ts.snap index 1e7d50094e..6617e1d2d3 100644 --- a/lib/modules/manager/tekton/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/tekton/__snapshots__/extract.spec.ts.snap @@ -132,6 +132,24 @@ exports[`modules/manager/tekton/extract extractPackageFile() extracts deps from "depType": "tekton-bundle", "skipReason": "invalid-value", }, + { + "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}", + "currentDigest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "currentValue": "1.0", + "datasource": "docker", + "depName": "gcr.io/tekton-releases/catalog/upstream/pipeline-resolver", + "depType": "tekton-bundle", + "replaceString": "gcr.io/tekton-releases/catalog/upstream/pipeline-resolver:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + }, + { + "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}", + "currentDigest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "currentValue": "1.0", + "datasource": "docker", + "depName": "gcr.io/tekton-releases/catalog/upstream/pipeline-resolver", + "depType": "tekton-bundle", + "replaceString": "gcr.io/tekton-releases/catalog/upstream/pipeline-resolver:1.0@sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + }, ], } `; diff --git a/lib/modules/manager/tekton/extract.spec.ts b/lib/modules/manager/tekton/extract.spec.ts index b522c8eed7..758175e55c 100644 --- a/lib/modules/manager/tekton/extract.spec.ts +++ b/lib/modules/manager/tekton/extract.spec.ts @@ -9,7 +9,7 @@ describe('modules/manager/tekton/extract', () => { 'test-file.yaml' ); expect(result).toMatchSnapshot(); - expect(result?.deps).toHaveLength(16); + expect(result?.deps).toHaveLength(18); }); it('ignores file without any deps', () => { diff --git a/lib/modules/manager/tekton/extract.ts b/lib/modules/manager/tekton/extract.ts index c1bec54fe7..15502e8c47 100644 --- a/lib/modules/manager/tekton/extract.ts +++ b/lib/modules/manager/tekton/extract.ts @@ -4,7 +4,11 @@ import { logger } from '../../../logger'; import { coerceArray } from '../../../util/array'; import { getDep } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; -import type { TektonBundle, TektonResource } from './types'; +import type { + TektonBundle, + TektonResolverParamsField, + TektonResource, +} from './types'; export function extractPackageFile( content: string, @@ -67,13 +71,13 @@ function addDep(ref: TektonBundle, deps: PackageDependency[]): void { return; } let imageRef: string | undefined; - // Find a bundle reference from the Bundle resolver + + // First, find a bundle reference from the Bundle resolver if (ref.resolver === 'bundles') { - for (const field of coerceArray(ref.resource)) { - if (field.name === 'bundle') { - imageRef = field.value; - break; - } + imageRef = getBundleValue(ref.params); + if (is.nullOrUndefined(imageRef)) { + // Fallback to the deprecated Bundle resolver attribute + imageRef = getBundleValue(ref.resource); } } @@ -94,3 +98,14 @@ function addDep(ref: TektonBundle, deps: PackageDependency[]): void { ); deps.push(dep); } + +function getBundleValue( + fields: TektonResolverParamsField[] | undefined +): string | undefined { + for (const field of coerceArray(fields)) { + if (field.name === 'bundle') { + return field.value; + } + } + return undefined; +} diff --git a/lib/modules/manager/tekton/readme.md b/lib/modules/manager/tekton/readme.md index c8fa0cf7c4..db77f9107e 100644 --- a/lib/modules/manager/tekton/readme.md +++ b/lib/modules/manager/tekton/readme.md @@ -13,16 +13,17 @@ Tasks and Pipeline definitions can also live outside the Kubernetes cluster and The `tekton` manager focuses on providing updates to Tekton resource references. Right now, Renovate's Tekton manager only supports references that are [Bundles](https://tekton.dev/docs/pipelines/tekton-bundle-contracts/). -See the [`tektoncd/resolution` project on GitHub](https://github.com/tektoncd/resolution) for the different kinds of Tekton references. +Read the [Tekton Pipeline remote resolution docs](https://tekton.dev/docs/pipelines/resolution/) for the different kinds of Tekton references and their corresponding resolvers. ### Using a Tekton Bundle reference -There are two ways to use a Tekton Bundle reference: +There are three ways to use a Tekton Bundle reference: +1. Via the [Tekton Bundles Resolver](https://tekton.dev/docs/pipelines/bundle-resolver/) 1. Via the [`tektoncd/resolution` project](https://github.com/tektoncd/resolution) -2. Via the `taskRun.spec.taskRef.bundle` and the `pipelineRun.spec.pipelineRef.bundle` attributes +1. Via the `taskRun.spec.taskRef.bundle` and the `pipelineRun.spec.pipelineRef.bundle` attributes -Renovate's Tekton manager supports both methods. +Renovate's Tekton manager supports all the methods listed above. ### Set your own `fileMatch` pattern diff --git a/lib/modules/manager/tekton/types.ts b/lib/modules/manager/tekton/types.ts index 1cc689dc8f..ceec5ec624 100644 --- a/lib/modules/manager/tekton/types.ts +++ b/lib/modules/manager/tekton/types.ts @@ -17,10 +17,11 @@ interface TektonResourceSpec { export interface TektonBundle { bundle: string; resolver: string; - resource: TektonBundleResourceField[]; + resource?: TektonResolverParamsField[]; + params?: TektonResolverParamsField[]; } -interface TektonBundleResourceField { +export interface TektonResolverParamsField { name: string; value: string; } -- GitLab