Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TEP-0060: Remote Resource Resolution #389

Merged
merged 1 commit into from May 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
391 changes: 391 additions & 0 deletions teps/0060-remote-resource-resolution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,391 @@
---
status: proposed
title: Remote Resource Resolution
creation-date: '2021-03-23'
last-updated: '2021-05-17'
authors:
- '@sbwsg'
- '@pierretasci'
---

# TEP-0060: Remote Resource Resolution
---

<!-- toc -->
- [Summary](#summary)
- [Key Terms](#key-terms)
- [Motivation](#motivation)
- [Goals](#goals)
- [Non-Goals](#non-goals)
- [Use Cases (optional)](#use-cases-optional)
- [Requirements](#requirements)
- [Proposal](#proposal)
- [Notes/Caveats (optional)](#notescaveats-optional)
- [Risks and Mitigations](#risks-and-mitigations)
- [User Experience (optional)](#user-experience-optional)
- [Performance (optional)](#performance-optional)
- [Design Details](#design-details)
- [Test Plan](#test-plan)
- [Design Evaluation](#design-evaluation)
- [Drawbacks](#drawbacks)
- [Alternatives](#alternatives)
- [Infrastructure Needed (optional)](#infrastructure-needed-optional)
- [Open Questions](#open-questions)
- [Future Extensions](#future-extensions)
- [References](#references)
- [Related designs and TEPs](#related-designs-and-teps)
- [Experiments and proofs-of-concept](#experiments-and-proofs-of-concept)
- [Related issues and discussions](#related-issues-and-discussions)
<!-- /toc -->

## Summary

This TEP describes some problems around fetching and running Tasks and Pipelines
("Tekton resources") from remote locations like image registries, git
repositories, internal catalogs, cloud storage buckets, other clusters or
namespaces, and so on.

This proposal advocates for treating Task and Pipeline resolution as an
interface with several default sources out-of-the-box (those we already support
today: in-cluster and Tekton Bundles). This would allow anyone to setup
resolvers with a direct hook into Tekton's state-machine against a well-formed
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it "Tekton's state machine" here or "Pipeline's state machine" ?

and reliable "API" without requiring Tekton to take hard dependencies on any
one "medium".

A secondary benefit of a shared interface and default implementations is that
these will provide working examples that other developers can use as the basis
for their own resolvers.

## Key Terms
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice, this is a useful section!!


This section defines some key terms used throughout the rest of this doc.

- `Remote`: Any location that stores Tekton resources outside of the cluster
(or namespace in multi-tenant setups) that the user's pipelines are running
in. These could be: OCI registries, git repos and other version control
systems, other namespaces, other clusters, cloud buckets, an organization's
proprietary internal catalog, or any other storage system.
- `Remote Resource`: The YAML file or other representation of a Tekton resource
that lives in the Remote.
- `Resolver`: A program or piece of code that knows how to interpret a
reference to a remote resource and fetch it for execution as part of the
user's TaskRun or Pipeline.
- `Resource Resolution`: The act of taking a reference to a Tekton resource in
a Remote, fetching it, and returning its content to the Tekton Pipelines
reconcilers.

## Motivation

Pipelines currently provides support for resources to be run from two different
locations: a Task or Pipeline can be run from the same cluster or (when the
[`enable-tekton-oci-bundles`
flag](https://github.com/tektoncd/pipeline/blob/main/config/config-feature-flags.yaml)
is `"true"`) from an image registry hosting [Tekton
Bundles](https://tekton.dev/docs/pipelines/pipelines/#tekton-bundles).

This existing support has a few problems:

1. For resources in a cluster the degree of control afforded to operators is
extremely narrow: Either a resource exists in the cluster or it does not. To
add new Tasks and Pipelines operators have to manually (or via automation)
sync them in (`kubectl apply -f git-clone.yaml`).
2. For resources in a Tekton Bundle registry, operators don't have a choice
over what kind of storage best suits their teams: It's either a registry or
it's back to manually installing Tasks and Pipelines. This might not jive
with an org's chosen storage. Put another way: [why can't we just keep our
Tasks in git?](https://github.com/tektoncd/pipeline/issues/2298)
3. Pipeline authors have to document the Tasks their Pipeline depends on
out-of-band. A [common example of
this](https://github.com/tektoncd/pipeline/discussions/3822) is a build
Pipeline that needs `git-clone` to be installed from the open source catalog
before the Pipeline can be run.
[TEP-0053](https://github.com/tektoncd/community/pull/352) is also exploring
ways of encoding this information as part of pipelines in the catalog.
Comment on lines +102 to +103
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i wonder if it would make sense to add a requirement around catalog interoperability - i.e. if we go this route, and folks want to add Pipelines to the catalog, they're going to need a reliable way to reference Tasks - maybe we need to have some minimum number of resource resolution mechanisms that work out of the box (tho folks could disable them if needed)? im thinking oci bundles for sure - maybe git as well...

Copy link
Author

@ghost ghost Mar 30, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linking relevant discussion on TEP-0053 as well.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One of the Goals already describes this a little bit I think:

- Establish a common syntax that tool and platform creators can use to record,
  as part of a pipeline or run, the remote location that Tekton resources
  should be fetched from.

To record the requirement of providing bundle and in-cluster support by default I've added a new req:

- At minimum we should provide resolver implementations for Tekton Bundles and
  in-cluster resources. These can be provided out-of-the-box just as they are
  today. The code for these resolvers can either be hosted as part of
  Pipelines, in the Catalog, or in a new repo under the `tektoncd` GitHub org.

And then to capture adding git support I've added this one too:

- Add new support for resolving resources from git via this mechanism. This
  could be provided out of the box too but we don't _have to_ since this
  doesn't overlap with concerns around backwards compatibility in the same way
  that Tekton Bundles and in-cluster support might.

4. Pipelines' [resolver
code](https://github.com/tektoncd/pipeline/blob/bad45506a9a9c25b028703e85e501b8f97598695/pkg/reconciler/taskrun/resources/taskref.go#L38)
is synchronous: a reconciler thread is blocked while a resource is being
fetched.
5. Pipelines' existing support for cluster and bundle resources is not easily
extensible without modifying Pipelines' source code.

### Goals
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we have anything about caching or do you think that's a concern of the specific resolver?
Today we store the spec on the status, so that might provide a form of caching.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I like the idea that the implementation specifics (caching, pre-fetching, etc) should be left to the resolvers. From the perspective of Pipelines it shouldn't really care about those specifics but it should be concerned with slow or failing resolution. So, in Pipelines, I think this should be controlled via timeout: an operator decides on an SLO e.g. no TaskRuns or PipelineRuns should wait longer than 30s for a remote resource to resolve. They could then configure something like this:

kind: ConfigMap
name: config-tekton-pipelines-resource-resolution
stringData:
  timeout: 30s

Pipelines will observe this configuration and fail any TaskRun or PipelineRun where resolving a taskRef is taking longer than that.


- Aspirationally, never require a user to run `kubectl apply -f git-clone.yaml`
ever again.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

YAASSSSS 💯

(tho as i write this i wanted to give a shout out to tkn hub install which is still doing the kubectl apply but is a nicer experience :D )

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not really as excited as you about this @bobcatfish 😝. kubectl apply (or whatever means to consume the REST API) is still a very valid use case for Tekton.

- Provide the ability to manage Tekton resources in an org's source of choice
via any process of their choice - `git push`, `tkn bundle push`, `gsutil cp`
and so on, instead of `kubectl apply`.
Comment on lines +115 to +117
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that we do not prevent that currently, we just do not cover it as part of tektoncd components, but users can create/use their own software to do this if they need.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Offering a common protocol and source code of working examples (like an "official" BundlesResolver or GitResolver) would also help people that choose to write their own.

- Allow multiple remotes to be supported in a single pipeline: task A from OCI,
task B from the Catalog, task C directly from the cluster, and so on.
- Allow the open source Pipelines project (and any downstream project) to
choose which remotes are enabled out of the box with a new release.
- Allow operators to add new remote sources without having to redeploy the
entirety of Tekton Pipelines.
- Allow operators to completely remove the code paths that fetch Tekton
resources from remotes they don't want to support.
- Allow operators to control the threshold at which fetching a remote Tekton
resource is considered timed out.
- Emit Events and Conditions operators can use to assess whether fetching
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean by Conditions in this context?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking in the sense of status.conditions on TaskRuns - on failing to resolve a taskref, ensure that the Succeeded/"False" condition correctly reflects the failed resolution in the reason and message.

remote resources is slow or failing.
- Establish a common syntax that tool and platform creators can use to record,
as part of a pipeline or run, the remote location that Tekton resources
should be fetched from.
- Offer a mechanism to verify remote tasks and pipelines against a digest
(or similar mechanism) before they are processed as resources by Pipelines'
reconcilers to ensure that the resource returned by a given Remote matches the
resource expected by the user.

### Non-Goals

### Use Cases (optional)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

niiiiice


**Sharing a git repo of tasks**: An organization decides to manage their
internal tasks and pipelines in a shared git repository. The CI/CD cluster is
set up to allow these resources to be referenced directly by TaskRuns and
PipelineRuns in the cluster.
Comment on lines +142 to +145
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we dig deeper on this one, how would this work ? The PipelineRun has a commit sha as parameter and use that parameter to refer to a given Pipeline right ? But then, to be sure to refer to the correct Task from this Pipeline, we need the same commit sha parameter, isn't it ? (so that all task are refered using this particular commit sha)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, also seems like an implementation detail but in general, maybe? It doesn't have to be a parameter, could be part of the resolver url eg github.com/tektoncd/community@sha:foo-bar. I just made this off the top of my head but the salient bit is that it is on the developer of the resolver to specify the format of the input and the contract they have is with the end user to provide that format.

Tekton's role in all this is to provide the API machinery for sending that input to a resolver and expecting the resource back.


**Using non-git VCS for pipelines-as-code**: A game dev keeps all of their
Tasks and Pipelines, config-as-code style, in a Perforce repo alongside the
assets and source that make up their product. Pipelines does not provide
support for resolving Tekton resources from Perforce repositories
out-of-the-box. The dev creates a new Resolver by following a template and docs
published as part of the Tekton Pipelines project. The dev's Resolver is able
to fetch Tekton resources from their Perforce repo and return them to the
Pipelines reconciler.

**Using a cloud bucket to store tasks and pipelines**: A team keeps all of
their CI/CD workflows in a cloud bucket so they can quickly add new features.
They want to be able to refer to the tasks and pipelines stored in that bucket
rather than `kubectl apply` when a new workflow is added.

**Platform interoperability**: A platform builder accepts workflows imported
from other Tekton-compliant platforms. When a Pipeline is imported that
includes a reference to a Task in a Remote that the platform doesn't already
have it goes out and fetches that Task, importing it alongside the pipeline
without the user having to explicitly provide it.
Comment on lines +161 to +165
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The other side of this coin is "what if one or all the resolver used is/are not enable on the instance" ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sounds like an implementation detail to me tangential to the proposal at hand...

...but I think there is a simple answer here so I'll give it a shot anyways. I don't think the object making the reference is or should be strictly tied to the resolving process. No where in a pipeline ref for example, should it say gitRepo: foo. Therefore, there isn't a single resolver for any given Task. Rather, me as an operator of the Tekton componentry will build/enable different resolvers based on my and my orgs priorities and practices.

To the Tekton componentry, it sees a list of resolvers that all follow the same API and it fetches that reference from one of them, falling back to etcd. If no where has the Task, it is the same error message you get today.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

...but I think there is a simple answer here so I'll give it a shot anyways. I don't think the object making the reference is or should be strictly tied to the resolving process. No where in a pipeline ref for example, should it say gitRepo: foo. Therefore, there isn't a single resolver for any given Task. Rather, me as an operator of the Tekton componentry will build/enable different resolvers based on my and my orgs priorities and practices.

Hum right, maybe I assumed there would be something like git:// or gitRepo:. But yeah that might be an implementation detail indeed.


**Providing an audited catalog of tasks and pipelines**: A company requires
their CI/CD Tasks to be audited to check that they adhere to specific
compliance rules before the Tasks can be used in their app teams' Pipelines.
The company hosts a private internal catalog and requires all the app teams to
build their Pipelines using only that catalog. To make this easier all of the
CI/CD clusters in the company are configured with a single remote resource
resolver - a CatalogRef resolver - that points to the internal catalog. When a
new Task is written it must go through an audit and review process before it is
allowed to be merged into the internal catalog for all teams to use.

**Replacing ClusterTasks and introducing ClusterPipelines**: Tekton Pipelines
has an existing CRD called ClusterTask which is a cluster-scoped Task. The
idea is that these can be shared across many namespaces / tenants. If Pipelines
drops support for `ClusterTask` it could be replaced with a Resolver that
has access to a private namespace of shared Tasks. Any user could request
tasks from that Resolver and get access to those shared resources. Similarly
for the concept of `ClusterPipeline` which does not exist yet in Tekton:
a private namespace could be created full of pipelines. A Resolver can then
be given sole access to pipelines in this private namespace via RBAC and
users can leverage those shared pipelines.

## Requirements

- Provide a clear, well-documented interface between Pipelines' role as
executor of Tekton resources and Resolvers' role fetching those Tekton
resources before execution can begin.
- Include a configurable timeout for async resolution so operators can tune the
allowable delay before a resource resolution is considered failed.
- Avoid blocking reconciler threads while fetching a remote resource is in
progress.
- The implementation should be compatibile with the existing flagged Tekton
Bundles support, with a view to replacing Tekton Pipeline's built-in
resolvers with the new solution.
- Allow RBAC to be managed per remote source so that the permissions to fetch
and return Tekton resources to a reconciler are limited to only those needed
by each type of source.
- Support credentials to access a remote both per-source or per-workload,
allowing operators to decide if they manage the creds to fetch Tekton
resources or require their users to provide them at runtime.
- Support Tasks, Pipelines, Custom Tasks and any other resources that Tekton
Pipelines might choose to add support for (e.g. Steps?).
Comment on lines +206 to +207
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not limited to pipeline though right, it could be similar for triggers objects too (binding, interceptors, …)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe! Do you think PipelineSpec will one day have a TriggerRef of some sort? If so (and if we want that ref to be resolvable in the same way) then it will ideally use the same machinery. So taskRefs, pipelineRefs, and triggerRefs all able to lean on the same resolution logic.

After thinking about this a bit I've added 2 more Non-Goals:

- Pulling in non-Pipeline resources like TriggerBindings. Since these aren't
  referencable by a Pipeline or Task today it doesn't make sense to extend
  support to these types, at least not with this initial proposal.

and

- Pipelines-as-code. For that we have
  [TEP-0048](https://github.com/tektoncd/community/pull/341) which covers much                                                                      
  more ground towards a Tekton-centric approach for "-as-code" support.
  TEP-0060 (this proposal) should be pretty unopinionated about the ways
  teams organize and manage their workflows.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe! Do you think PipelineSpec will one day have a TriggerRef of some sort? If so (and if we want that ref to be resolvable in the same way) then it will ideally use the same machinery.

I do not think that. That was more the opposite, in triggers for example, we refer to a set of interceptor. The mechanism used in tektoncd/pipeline could be the same/re-used in triggers.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK thanks for clarifying.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm trying to read between the lines a bit here @vdemeester and I want to know if I'm misunderstanding:

If I rewrite this proposal to remove mention of pipelines, and push it more in the direction of a library and/or independent Tekton component, would that alleviate some of your current concerns?

- Note: this **does not** mean that we'd add support for "any" resource type
in the initial implementation. We may decide to support only fetching Tasks
initially, for example. But the protocol for resolving resources should be
indifferent to the content being fetched.
- At minimum we should provide resolver implementations for Tekton Bundles and
in-cluster resources. These can be provided out-of-the-box just as they are
today. The code for these resolvers can either be hosted as part of
Pipelines, in the Catalog, or in a new repo under the `tektoncd` GitHub org.
- Add new support for resolving resources from git via this mechanism. This
could be provided out of the box too but we don't _have to_ since this
doesn't overlap with concerns around backwards compatibility in the same way
that Tekton Bundles and in-cluster support might.

## Proposal

<!--
This is where we get down to the specifics of what the proposal actually is.
This should have enough detail that reviewers can understand exactly what
you're proposing, but should not include things like API designs or
implementation. The "Design Details" section below is for the real
nitty-gritty.
-->

### Notes/Caveats (optional)

<!--
What are the caveats to the proposal?
What are some important details that didn't come across above.
Go in to as much detail as necessary here.
This might be a good place to talk about core concepts and how they relate.
-->

### Risks and Mitigations

<!--
What are the risks of this proposal and how do we mitigate. Think broadly.
For example, consider both security and how this will impact the larger
kubernetes ecosystem.

How will security be reviewed and by whom?

How will UX be reviewed and by whom?

Consider including folks that also work outside the WGs or subproject.
-->

### User Experience (optional)

<!--
Consideration about the user experience. Depending on the area of change,
users may be task and pipeline editors, they may trigger task and pipeline
runs or they may be responsible for monitoring the execution of runs,
via CLI, dashboard or a monitoring system.

Consider including folks that also work on CLI and dashboard.
-->

### Performance (optional)

<!--
Consideration about performance.
What impact does this change have on the start-up time and execution time
of task and pipeline runs? What impact does it have on the resource footprint
of Tekton controllers as well as task and pipeline runs?

Consider which use cases are impacted by this change and what are their
performance requirements.
-->

## Design Details

<!--
This section should contain enough information that the specifics of your
change are understandable. This may include API specs (though not always
required) or even code snippets. If there's any ambiguity about HOW your
proposal will be implemented, this is the place to discuss them.

If it's helpful to include workflow diagrams or any other related images,
add them under "/teps/images/". It's upto the TEP author to choose the name
of the file, but general guidance is to include at least TEP number in the
file name, for example, "/teps/images/NNNN-workflow.jpg".
-->

## Test Plan

<!--
**Note:** *Not required until targeted at a release.*

Consider the following in developing a test plan for this enhancement:
- Will there be e2e and integration tests, in addition to unit tests?
- How will it be tested in isolation vs with other components?

No need to outline all of the test cases, just the general strategy. Anything
that would count as tricky in the implementation and anything particularly
challenging to test should be called out.

All code is expected to have adequate tests (eventually with coverage
expectations).
-->

## Design Evaluation
<!--
How does this proposal affect the reusability, simplicity, flexibility
and conformance of Tekton, as described in [design principles](https://github.com/tektoncd/community/blob/master/design-principles.md)
-->

## Drawbacks

<!--
Why should this TEP _not_ be implemented?
-->

## Alternatives

<!--
What other approaches did you consider and why did you rule them out? These do
not need to be as detailed as the proposal, but should include enough
information to express the idea and why it was not acceptable.
-->

## Infrastructure Needed (optional)

<!--
Use this section if you need things from the project/SIG. Examples include a
new subproject, repos requested, github details. Listing these here allows a
SIG to get the process for these resources started right away.
-->

## Open Questions

- How will the implementation of this feature support use-cases where pipeline is
fetched at specific commit and references tasks that should also be pulled from
that specific commit?

## Future Extensions

- Add "default" remotes so that operators can pick where to get tasks from when
no remote is specified by user. For example, an internal OCI registry might
be the default remote for an org so a PipelineTask referring only to
"git-clone" without any other remote info could be translated to a fetch from
that OCI registry.
- Build reusable libraries that resolvers can leverage so they don't have to
each rewrite their side of the protocol, common caching approaches, etc.
- Replacing `ClusterTask` with a namespace full of resources that a resolver has
access to.
- Create a "local disk" resolver that would allow a user to work on a task's
YAML locally and use those changes in TaskRuns on their cluster without
an intermediary upload step.

## References

### Related designs and TEPs

- [TEP-0005: Tekton OCI Bundles](https://github.com/tektoncd/community/blob/main/teps/0005-tekton-oci-bundles.md#alternatives)
- [Alternatives section](https://github.com/tektoncd/community/blob/main/teps/0005-tekton-oci-bundles.md#alternatives)
describes possible syntax for git refs
- [TEP-0053: Tekton Catalog Pipeline Organization](https://github.com/tektoncd/community/pull/352)
- This TEP is exploring approaches to annotating pipelines in the catalog
so that the user can tell which specific tasks are being referenced.
- [Tekton Bundles docs in Pipelines](https://tekton.dev/docs/pipelines/pipelines/#tekton-bundles)
- [Tekton Bundle Contract](https://tekton.dev/docs/pipelines/tekton-bundle-contracts/)
- [Tekton OCI Images Design](https://docs.google.com/document/d/1lXF_SvLwl6OqqGy8JbpSXRj4hWJ6CSImlxlIl4V9rnM/edit)
- [Tekton OCI Image Catalog](https://docs.google.com/document/d/1zUVrIbGZh2R9dawKQ9Hm1Cx3GevKIfOcRO3fFLdmBDc/edit)
- Future Work section describes expanding support to other kinds of remote locations
- [Referencing Tasks in Pipelines: Separate Authoring and Runtime Concerns](https://docs.google.com/document/d/1RmV-VTLkH6y4y8dmU7utZKQ9VNavCutihPzgbbAPLl4/edit)

### Experiments and proofs-of-concept

- [CatalogTask Custom Task PR + associated
discussion](https://github.com/tektoncd/experimental/pull/723)
- [Using a Custom Task protocol to support any kind of
resolver](https://github.com/sbwsg/pipeline/commit/a571869336ba09732f830743fbee938f4d40ac4d)
- Intended to be used in tandem with [a set of custom tasks in experimental
repo for remote resources in oci, catalogs, git, and
gcs](https://github.com/sbwsg/experimental/commit/1140f236ec0ffaf529835e913139eafa847608a8)
- A [video demo (starts at
11:09)](https://drive.google.com/file/d/1RxTbDt0wv7kK31tKj6acFhOs2t4Y4uHj/view)
of this proof-of-concept.

### Related issues and discussions

- [Pipelines Issue 2298: Add support for referencing Tasks in git](https://github.com/tektoncd/pipeline/issues/2298)
- [Pipelines Issue 3305: Refactor the way resources are injected into the reconcilers](https://github.com/tektoncd/pipeline/issues/3305)
- [Pipelines Discussion about running tasks from the catalog](https://github.com/tektoncd/pipeline/discussions/3827)
1 change: 1 addition & 0 deletions teps/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,5 +183,6 @@ This is the complete list of Tekton teps:
|[TEP-0056](0056-pipelines-in-pipelines.md) | Pipelines in Pipelines | proposed | 2021-03-08 |
|[TEP-0058](0058-graceful-pipeline-run-termination.md) | Graceful Pipeline Run Termination | implementable | 2021-04-27 |
|[TEP-0059](0059-skip-guarded-task-only.md) | Skip Guarded Task Only | proposed | 2021-03-24 |
|[TEP-0060](0060-remote-resource-resolution.md) | Remote Resource Resolution | proposed | 2021-05-17 |
|[TEP-0061](0061-allow-custom-task-to-be-embedded-in-pipeline.md) | Allow custom task to be embedded in pipeline | implementable | 2021-04-28 |
|[TEP-0063](0063-workspace-dependencies.md) | Workspace Dependencies | proposed | 2021-04-23 |