Skip to content

Instantly share code, notes, and snippets.

@dlorenc
dlorenc / FileSet.md
Last active September 5, 2019 14:11

FileSet Pipeline Resource

Today in Tekton, tasks that consume files must operate on a typed Input resource, usually of Type Git or Storage. This leads to a few problems:

  • Tasks must choose which to support, when both should be equivalent
  • Pipelines of Tasks that operate on specific files must invent out-of-band mechanisms to specify which files to operate on

Ideally, Tasks that operate on Files would have a more generic type of resource that can be populated from various sources, and Tasks should not need to communicate about file paths or names out-of-band.

This proposal details a FileSet Pipeline Resource designed to achieve these goals.

apiVersion: tekton.dev/v1alpha1
kind: PipelineResourceType
metadata:
name: git
spec:
implementations:
- modes: [ro]
params:
- name: url
type: string
apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
name: kustomize-build
spec:
resources:
- name: workspace
type: fileset
mode: ro
- name: inflated
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['install', '.']
resources:
- slack
channel: foo
secret: $FOO
- email
apiVersion: tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: ci-pipeline-binding
spec:
params:
- name: gitrevision
value: $(body.pull_request.head.sha)
- name: gitrepositoryurl
value: $(body.pull_request.head.repo.clone_url)
apiVersion: tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: review-pipeline-binding
spec:
params:
- name: gitrevision
value: $(body.pull_request.head.sha)
- name: gitrepositoryurl
value: $(body.pull_request.head.repo.clone_url)
apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
name: run-tests
spec:
inputs:
resources:
- name: repo
type: git
- name: pr
apiVersion: tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:
name: review-pipeline-template
spec:
params:
- name: gitrevision
description: The git revision
default: master
- name: gitrepositoryurl
apiVersion: tekton.dev/v1alpha1
kind: EventListener
metadata:
name: listener-interceptor
spec:
serviceType: LoadBalancer
triggers:
- name: pr-trig
interceptor:
bindings:
apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
name: chatbot-task
spec:
inputs:
resources:
- name: repo
type: git
- name: pr