From 4fd5839434fa166195f6fc596620d7098c03302f Mon Sep 17 00:00:00 2001 From: Quan Zhang Date: Mon, 3 Oct 2022 16:34:51 -0400 Subject: [PATCH] [TEP-0115] Update Artifact Hub Usage In https://github.com/tektoncd/hub/issues/667, we have discussed and agreed to migrate to the Artifact Hub from the Tekton Hub. This commit updates the git-based versioning proposal for the Artifact Hub, move the Tekton Hub git-based versioning support to future work, and add Artifact Hub remote resolution support to the Hub Resolver. --- ...115-tekton-catalog-git-based-versioning.md | 229 ++++++++++++------ teps/README.md | 2 +- teps/images/0115-artifacthub-versioning.png | Bin 0 -> 46434 bytes 3 files changed, 155 insertions(+), 76 deletions(-) create mode 100644 teps/images/0115-artifacthub-versioning.png diff --git a/teps/0115-tekton-catalog-git-based-versioning.md b/teps/0115-tekton-catalog-git-based-versioning.md index 1021a63ed..75419202f 100644 --- a/teps/0115-tekton-catalog-git-based-versioning.md +++ b/teps/0115-tekton-catalog-git-based-versioning.md @@ -2,7 +2,7 @@ status: implementable title: Tekton Catalog Git-Based Versioning creation-date: '2022-07-12' -last-updated: '2022-09-28' +last-updated: '2022-10-03' authors: - "@jerop" - "@vdemeester" @@ -28,21 +28,20 @@ see-also: - [eBay - Catalog with one Task](#ebay---catalog-with-one-task) - [OpenShift](#openshift) - [Migration](#migration) - - [From Directory-Based to Git-Based](#from-directory-based-to-git-based) + - [Surface Tekton Catalogs on Artifact Hub](#surface-tekton-catalogs-on-the-artifact-hub) - [Tekton Catalog GitHub Organization](#tekton-catalog-github-organization) - [Getting Started with Git-Based Versioning](#getting-started-with-git-based-versioning) - [Git-Based Resource Reference](#git-based-resource-reference) - [Git Resolver](#git-resolver) - [Hub Resolver](#hub-resolver) - - [HTTP Endpoint](#http-endpoint) - - [Tekton Catlin](#tekton-catlin) + - [Tekton Catlin](#tekton-catlin) - [Related Work](#related-work) - [GitHub Actions](#github-actions) - [Future Work](#future-work) - - [Hub](#hub) - [Best Practices](#best-practices) - [Catlin](#catlin) - [Alternatives](#alternatives) + - [Tekton Hub Git-Based Versioning](#tekton-hub-git-based-versioning) - [One resource per Catalog](#one-resource-per-catalog) - [Submodules in Catalogs](#submodules-in-catalogs) - [References](#references) @@ -174,6 +173,10 @@ is defined in this TEP. A Catalog may contain one or more resources. * **Resource**: Item shared in a Catalog e.g. `Task` or `Pipeline`. * **Hub**: User interface for one or more Catalogs. + * **Artifact Hub (https://artifacthub.io/)**: The primary and suggested user interface for Tekton Catalogs. Catalogs with git-based versioning will **ONLY** be discussed in the Artifact Hub in the first iteration of this TEP. + * **Tekton Hub (https://hub.tekton.dev/)**: The old Tekton owned user interface for Tekton Catalogs. + + (*Note: The Tekton Hub will be deprecated as the community is working on migrating from the Tekton Hub to the Artifact Hub. Details in [tektoncd/hub#667][667]*) ## Proposal @@ -241,17 +244,12 @@ Note that there are no changes to the contents of the resources themselves, only #### Versioning in a Catalog Versioning will move from the resources themselves to the Catalog as a whole. This is because releases and version tags -apply to the whole repository. Therefore, Catalogs will contain one or multiple resource with shared versioning. Owners +apply to the whole repository. Therefore, Catalogs will contain one or multiple resources with shared versioning. Owners of Catalogs will make regular releases of Catalogs - the release cadence for the official Catalogs will be determined in [TEP-0079][tep-0079]. The release notes should provide details about the changes in the specific resources in the Catalog in a given release, including notes about breaking changes. -The versions in the Tekton Hub should continue to use the simple version of [semver][semver]: `{major}.{minor}`. We -propose that the release tags in Catalogs use the semantic versioning model - `v.`. -As such, the tags in the Catalogs will map to versions in the Hub e.g. tag "v0.7" in a Catalog maps to version "0.7" -in the Hub. Minor versions are made if there are backwards-compatible changes only in the Catalog, while major versions -are made if there are any backwards-incompatible changes in the Catalog. The Hub will recognize this versioning model -only, therefore Catalogs must use this versioning to surface versions in the Hub. +The versions in the Artifact Hub should use the simple version of [semver][semver] - `..0`. We propose that the release tags in Catalogs follow the simplified semantic versioning model - `v.`. As such, the tags in the Catalogs will map to versions in the Artifact Hub e.g. tag "v0.7" in a Catalog maps to version "0.7.0" in the Hub. Minor versions are made if there are backwards-compatible changes only in the Catalog, while major versions are made if there are any backwards-incompatible changes in the Catalog. The Hub will recognize this versioning model only, therefore Catalogs must use this versioning to surface versions in the Hub. Instead of the centralized Catalog from the community, we will encourage users to create Catalogs in their own GitHub organizations and share them through the Hub. @@ -322,7 +320,7 @@ up the versions based on the tags in the Catalog. ``` Note that the version tags used in this Catalog applies to all the resources. For example, if the Buildpacks team -updates the "buildpack-phases" `Task` and make a new release tagged "v0.17" then there will be a version "0.17" for +updates the "buildpack-phases" `Task` and make a new release tagged "v0.17" then there will be a version "0.17.0" for the Catalog. If the Buildpacks team would prefer to decouple the versioning of the resources, they can split the resources into separate Catalogs where each will have its own versioning. @@ -340,8 +338,8 @@ The eBay team could modify the repository to meet the organization contract in t /OWNERS ``` -The eBay team can share this Catalog with the `Task` in the Hub without adding it to a centralized Catalog. They can -then version the Catalog and its resources using release tags, which would be picked up by the Tekton Hub. +The eBay team can share this Catalog with the `Task` in the Artifact Hub without adding it to a centralized Catalog. They can +then version the Catalog and its resources using release tags, which would be picked up by the Artifact Hub. ##### OpenShift @@ -411,57 +409,20 @@ organized using the new contract as such: /tests ``` -The Openshift team can share this Catalog with the `Tasks` in the Hub without adding it to a centralized Catalog. -They can then version the Catalog and its resources using release tags, which would be picked up by the Tekton Hub. +The Openshift team can share this Catalog with the `Tasks` in the Artifact Hub without adding it to a centralized Catalog. +They can then version the Catalog and its resources using release tags, which would be picked up by the Artifact Hub. Note that the version tags used in this Catalog applies to all the resources. For example, if the Openshift team -updates the "openshift-client" `Task` and makes a new release tagged "v0.5" then there will be a version "0.5" for +updates the "openshift-client" `Task` and makes a new release tagged "v0.5" then there will be a version "0.5.0" for all the resources in the Catalog. If the Openshift team would prefer to decouple the versioning of a specific resource from the rest, they can isolate the resources into its own Catalog where it will have its own versioning. #### Migration +##### Surface Tekton Catalogs on the Artifact Hub -##### From Directory-Based to Git-Based +The Artifact Hub should support both directory-based and git-based versioning to provide backwards compatibility. Catalog owners can follow the [repository registration](https://artifacthub.io/docs/topics/repositories/tekton-tasks/) guide to register Tekton Catalogs from the Artifact Hub [Control Panel](https://artifacthub.io/control-panel/repositories?page=1). The registration process should allow users select the versioning layout of the catalog: -The Hub should support both the directory-based and git-based versioning to provide backwards compatibility. The -[config.yaml][cy] will take a `versioning` field under `catalogs`, which will default to `"directory"` and users -can set it to `"git"`. Taking the examples above, the entries in [config.yaml][cy] could be: - -```yaml -catalogs: - -- name: tekton - org: tektoncd - type: community - provider: github - url: https://github.com/tektoncd/catalog - -- name: buildpacks - org: buildpacks - type: community - provider: github - url: https://github.com/buildpacks/tekton-integration - versioning: git - -- name: slack-notify - org: ebay - type: community - provider: github - url: https://github.com/eBay/tekton-slack-notify - versioning: git - -- name: openshift - org: redhat - type: community - provider: github - url: https://github.com/openshift/tekton-catalog - versioning: git - ``` - -The existing Tekton Catalog - `tektoncd/catalog` - will remain as it is using the directory-based contract. It will -be read-only and will encourage owners of the resources to move them to their own repositories in their own GitHub -organizations. After 9 months, we will archive the `tektoncd/catalog` repository. At the same time, we will remove -support for the directory-based versioning in the Tekton Hub. +![Artifact Hub Versioning](images/0115-artifacthub-versioning.png) ##### Tekton Catalog GitHub Organization @@ -474,6 +435,65 @@ contributions are distributed in multiple repositories. This work will be scoped out further in [TEP-0079][tep-0079]. +Based on the usefulness of the resources and the bandwidth of the catalog maintainers, the Tekton community has discussed and decided to migrate the following 5 tasks from the current centralized Catalog repository to the `tektoncd-catalog` GitHub organization in the first iteration. The versioning in the new catalog repository starts with `1.0`: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resource NameOld Version (directory-based)New Catalog NameNew Version (git-based)
git-clone0.6git-clone1.0
0.72.0
0.83.0
golang-build0.3golang1.0
golang-test0.21.0
kaniko0.6kaniko1.0
git-batch-merge0.2git-batch-merge1.0
+ +The existing Tekton Catalog - `tektoncd/catalog` - will remain as it is using the directory-based contract. It will +be read-only and will encourage owners of the resources to move them to their own repositories in their own GitHub +organizations once TEP-0115 is `implemented`. After 9 months, we will archive the `tektoncd/catalog` repository. + +The Tekton Catalog Maintainers will continue to maintain the above selected official tasks in the current centralized repo until +TEP-0115 is `implemented`. + ##### Getting Started with Git-Based Versioning To make it easy for the community to create Catalogs, we will provide a template Catalog in the `tektoncd-catalog` @@ -585,8 +605,7 @@ spec: #### Hub Resolver -[Hub Resolver][hub-resolver] has a `"version"` parameter that can be used to get a specific version of a resource, -for example [this version][bp-hub] of buildpacks `Task`: +[Hub Resolver][hub-resolver] has a `"version"` parameter that can be used to get a specific version of a resource. The `"version"` should continue to use the simple version of [semver][semver] (i.e. `.`). For example [this version][bp-hub] of buildpacks `Task`: ```yaml apiVersion: tekton.dev/v1beta1 @@ -605,8 +624,6 @@ spec: value: 0.5 ``` -The `"version"` will default to the latest version if not provided. - We propose adding a `"catalog"` parameter to the Hub Resolver. This will be useful in resolving conflicts when resources from separate Catalogs have the same names. For example, a `TaskRun` executing the "openshift-client" from the Openshift Catalog described [above](#openshift) would use the Hub Resolver as such: @@ -630,16 +647,62 @@ spec: value: 0.3 ``` -#### HTTP Endpoint +As we are working on migrating from the Tekton Hub to the Artifact Hub ([tektoncd/hub#667][667]), we propose adding an optional `"type"` parameter to the Hub Resolver indicating which Hub API should be used to fetch the catalog. The value can be set to `"artifact"` or `"tekton"`. The default value is `"artifact"`. -In [TEP-0110][tep-0110], we added an HTTP endpoint that serves Tekton resources that users can apply directly to their -clusters. These endpoints should continue working as is: +Note that the Catalog versioning in the Artifact Hub follows the semantic versioning (i.e. `..0`). For backward compatibility in the Hub Resolver, both full (i.e. `..0`) and simplified semantic versioning (i.e. `.`) will be accepted by the `"version"` parameter. The Hub Resolver will map the version to the format expected by the target Hub type. +Example: +```yaml +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: + name: openshift-install +spec: + taskRef: + resolver: hub + resource: + - name: type + value: artifact + - name: kind + value: task + - name: name + value: openshift-client + - name: catalog + value: openshift + - name: version + value: 0.3 +``` + + +When setting to `"artifact"`, the following Artifact Hub API will be invoked to fetch **task** resources: +```shell +curl -X 'GET' \ + '{ARTIFACT_HUB_API}/api/v1/packages/tekton-///' \ + -H 'accept: application/json' +``` + +The `ARTIFACT_HUB_API` can be configured by setting the `ARTIFACT_HUB_API` environment variable in [resolver-deployment.yaml](https://github.com/tektoncd/pipeline/blob/main/config/resolvers/resolvers-deployment.yaml). The default value is `https://artifacthub.io/`. +```yaml +env +- name: ARTIFACT_HUB_API + value: "https://artifacthub.io/" +``` + +When setting to `"tekton"`, the following Artifact Hub API will be invoked to fetch resources: ```shell -kubectl apply -f https://api.hub.tekton.dev/v1/resource/tekton/task/buildpacks/0.5/raw +curl -X 'GET' \ + '{TEKTON_HUB_API}/v1/resource/////yaml' ``` -#### Tekton Catlin +The `TEKTON_HUB_API` can be configured by setting the `TEKTON_HUB_API` environment variable in [resolver-deployment.yaml](https://github.com/tektoncd/pipeline/blob/main/config/resolvers/resolvers-deployment.yaml). For backward compatibility of the Hub Resolver, we propose to remove the default value (`https://api.hub.tekton.dev`) of `TEKTON_HUB_API` since the default `type` is changed to `artifact` and the Tekton Hub is planned to be deprecated soon. The users must configure their own private instance of the Tekton Hub to use the Hub Resolver with `"type"` setting to `"tekton"`. +```yaml +env +- name: TEKTON_HUB_API + value: "https://api.private.hub.instance.dev" +``` + +### Tekton Catlin + [Tekton Catlin](https://github.com/tektoncd/catlin) has the capability to validate the file path of catalog resources in the directory-based versioning. The expected resource file path is: ```////.yaml``` (e.g. ```catalog/task/git-clone/0.8/git-clone.yaml```). We propose to add an optional new flag ```versioning``` for [catlin validate](https://github.com/tektoncd/catlin#validate) command and the value can be set to ```git``` or ```directory```, for example: @@ -665,23 +728,38 @@ approach of tagging new releases in the Catalogs as is done in GitHub Actions. ## Future Work -### Hub - -Today, the Hub registers Catalogs through a [config.yaml][cy] file. We could provide an interface for users to share -resources in the Hub directly, and improve the user experience in using the Hub. We can explore this in future work. - -The Hub already supports multiple Catalogs. As we move to providing multiple Catalogs in practice, we may need to -improve the scalability and performance of the Hub - most of this will be implementation details in the Hub. - ### Best Practices We could provide guidelines and recommendations for creating Catalogs e.g. deciding whether to group resources together instead of splitting them into separate Catalogs. We can explore this in future work. ### Catlin + Today, [catlin bump](https://github.com/tektoncd/catlin#bump) command only supports directory-based versioning catalog. We could further extend the [catlin bump](https://github.com/tektoncd/catlin#bump) command to support git-based versioning catalogs (where the command will create a new git tag and a corresponding release note based on the current latest version). ## Alternatives +### Tekton Hub Git-Based Versioning + +To support git-based versioning in the Tekton Hub, the [config.yaml][cy] will take a `versioning` field under `catalogs`, which will default to `"directory"` and users can set it to `"git"`. For example, the entries in [config.yaml][cy] could be: + +```yaml +catalogs: + +- name: tekton + org: tektoncd + type: community + provider: github + url: https://github.com/tektoncd/catalog + +- name: buildpacks + org: buildpacks + type: community + provider: github + url: https://github.com/buildpacks/tekton-integration + versioning: git + ``` + + However, given the git-based versioning is already supported in the Artifact Hub and the Tekton Hub will be deprecated, this work is no longer required. ### One resource per Catalog @@ -709,6 +787,7 @@ This could be a future optimization, if needed. [tep-0079]: ./0079-tekton-catalog-support-tiers.md [tep-0110]: ./0110-decouple-catalog-organization-and-reference.md [784]: https://github.com/tektoncd/catalog/issues/784 +[667]: https://github.com/tektoncd/hub/issues/667 [git-clone]: https://github.com/tektoncd/catalog/tree/main/task/git-clone/0.7 [git-resolver]: https://github.com/tektoncd/resolution/tree/7f92187843085874229aa4c43e5c6d7d392a26fa/gitresolver [hub-resolver]: https://github.com/tektoncd/resolution/tree/5d7918cb5b6f183d79cf0f91f4f08ecb204505a0/hubresolver diff --git a/teps/README.md b/teps/README.md index 4805d9aba..04cc50fd7 100644 --- a/teps/README.md +++ b/teps/README.md @@ -281,7 +281,7 @@ This is the complete list of Tekton teps: |[TEP-0111](0111-propagating-workspaces.md) | Propagating Workspaces | implemented | 2022-09-16 | |[TEP-0112](0112-replace-volumes-with-workspaces.md) | Replace Volumes with Workspaces | proposed | 2022-07-20 | |[TEP-0114](0114-custom-tasks-beta.md) | Custom Tasks Beta | implementable | 2022-07-12 | -|[TEP-0115](0115-tekton-catalog-git-based-versioning.md) | Tekton Catalog Git-Based Versioning | implementable | 2022-09-28 | +|[TEP-0115](0115-tekton-catalog-git-based-versioning.md) | Tekton Catalog Git-Based Versioning | implementable | 2022-10-03 | |[TEP-0116](0116-referencing-finally-task-results-in-pipeline-results.md) | Referencing Finally Task Results in Pipeline Results | implemented | 2022-08-11 | |[TEP-0117](0117-tekton-results-logs.md) | Tekton Results Logs | proposed | 2022-08-17 | |[TEP-0118](0118-matrix-with-explicit-combinations-of-parameters.md) | Matrix with Explicit Combinations of Parameters | implementable | 2022-08-08 | diff --git a/teps/images/0115-artifacthub-versioning.png b/teps/images/0115-artifacthub-versioning.png new file mode 100644 index 0000000000000000000000000000000000000000..a791b18f35baf77d23d85521336e68fe8f04e2fd GIT binary patch literal 46434 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�i@dGbTkXv#}QwX^qFnG7PlH9;yk{(SP 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