From 9a1310243164cc81753945339894b43c2726c7ee Mon Sep 17 00:00:00 2001 From: Ales Raszka Date: Mon, 10 Feb 2025 09:08:22 +0100 Subject: [PATCH] Doc: FBC one step process documentation The documentation covers a process for releasing FBC bundles with single step. A couple of new files and modification of existing are now described in the doc that are required for the ones step. JIRA: ISV-5508 Signed-off-by: Ales Raszka --- .github/workflows/documentation.yaml | 2 +- docs/img/fbc-auto-release-pr.png | Bin 0 -> 87275 bytes .../community-operators-troubleshooting.md | 234 +++++++++--------- docs/users/contributing-via-pr.md | 12 +- docs/users/contributing-where-to.md | 1 + docs/users/fbc_autorelease.md | 70 ++++++ docs/users/fbc_workflow.md | 63 ++++- docs/users/operator-ci-yaml.md | 21 +- docs/users/static_checks.md | 22 +- mkdocs.yml | 5 +- 10 files changed, 292 insertions(+), 138 deletions(-) create mode 100644 docs/img/fbc-auto-release-pr.png create mode 100644 docs/users/fbc_autorelease.md diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml index 275db19c7..ea2b37da0 100644 --- a/.github/workflows/documentation.yaml +++ b/.github/workflows/documentation.yaml @@ -24,7 +24,7 @@ jobs: mkdocs build - name: Deploy uses: peaceiris/actions-gh-pages@v4 - if: github.ref == 'refs/heads/main' + # if: github.ref == 'refs/heads/main' with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./site diff --git a/docs/img/fbc-auto-release-pr.png b/docs/img/fbc-auto-release-pr.png new file mode 100644 index 0000000000000000000000000000000000000000..2607aa845391937a7fded9167720ea933a737eac GIT binary patch literal 87275 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%0AsLCrHr!4-pqZ@;syG@QEYPqq0Q- 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 literal 0 HcmV?d00001 diff --git a/docs/users/community-operators-troubleshooting.md b/docs/users/community-operators-troubleshooting.md index 9a34cf781..cd6eb35e6 100644 --- a/docs/users/community-operators-troubleshooting.md +++ b/docs/users/community-operators-troubleshooting.md @@ -5,80 +5,82 @@ This document provides troubleshooting steps for each Tekton task in the Operato ## Table of Contents -### [Operator Pipeline Tasks Troubleshooting](#tasks) -* [get-pr-number](#get-pr-number) -* [acquire-lease](#acquire-lease) -* [set-github-started-label](#set-github-started-label) -* [set-github-status-pending](#set-github-status-pending) -* [set-env](#set-env) -* [clone-repository-base](#clone-repository-base) -* [clone-repository](#clone-repository) -* [detect-changes](#detect-changes) -* [yaml-lint](#yaml-lint) -* [check-permissions](#check-permissions) -* [set-github-pr-title](#set-github-pr-title) -* [read-config](#read-config) -* [resolve-pr-type](#resolve-pr-type) -* [apply-test-waivers](#apply-test-waivers) -* [content-hash](#content-hash) -* [certification-project-check](#certification-project-check) -* [get-organization](#get-organization) -* [get-pyxis-certification-data](#get-pyxis-certification-data) -* [static-tests](#static-tests) -* [static-tests-results](#static-tests-results) -* [merge-registry-credentials](#merge-registry-credentials) -* [digest-pinning](#digest-pinning) -* [verify-pinned-digest](#verify-pinned-digest) -* [dockerfile-creation](#dockerfile-creation) -* [build-bundle](#build-bundle) -* [make-bundle-repo-public](#make-bundle-repo-public) -* [get-supported-versions](#get-supported-versions) -* [add-bundle-to-index](#add-bundle-to-index) -* [make-index-repo-public](#make-index-repo-public) -* [get-ci-results-attempt](#get-ci-results-attempt) -* [preflight-trigger](#preflight-trigger) -* [evaluate-preflight-result](#evaluate-preflight-result) -* [get-ci-results](#get-ci-results) -* [link-pull-request-with-open-status](#link-pull-request-with-open-status) -* [merge-pr](#merge-pr) -* [link-pull-request-with-merged-status](#link-pull-request-with-merged-status) -* [copy-bundle-image-to-released-registry](#copy-bundle-image-to-released-registry) -* [decide-index-paths](#decide-index-paths) -* [get-manifest-digests](#get-manifest-digests) -* [request-signature](#request-signature) -* [upload-signature](#upload-signature) -* [publish-to-index](#publish-to-index) - -### [FBC-Related Operator Pipeline Tasks Troubleshooting](#fbc-tasks) -* [build-fbc-index-images](#build-fbc-index-images) -* [build-fbc-scratch-catalog](#build-fbc-scratch-catalog) - - -## Operator Pipeline Tasks Troubleshooting - -### get-pr-number -Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - -### acquire-lease -Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - -### set-github-started-label -Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - -### set-github-status-pending -Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - -### set-env -Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - -### clone-repository-base -Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - -### clone-repository -Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - -### detect-changes +- [Troubleshooting the Community Operator Pipeline](#troubleshooting-the-community-operator-pipeline) + - [Table of Contents](#table-of-contents) + - [Operator Pipeline Tasks Troubleshooting](#operator-pipeline-tasks-troubleshooting) + - [get-pr-number](#get-pr-number) + - [acquire-lease](#acquire-lease) + - [set-github-started-label](#set-github-started-label) + - [set-github-status-pending](#set-github-status-pending) + - [set-env](#set-env) + - [clone-repository-base](#clone-repository-base) + - [clone-repository](#clone-repository) + - [detect-changes](#detect-changes) + - [yaml-lint](#yaml-lint) + - [check-permissions](#check-permissions) + - [set-github-pr-title](#set-github-pr-title) + - [read-config](#read-config) + - [resolve-pr-type](#resolve-pr-type) + - [apply-test-waivers](#apply-test-waivers) + - [content-hash](#content-hash) + - [certification-project-check](#certification-project-check) + - [get-organization](#get-organization) + - [get-pyxis-certification-data](#get-pyxis-certification-data) + - [static-tests](#static-tests) + - [static-tests-results](#static-tests-results) + - [merge-registry-credentials](#merge-registry-credentials) + - [digest-pinning](#digest-pinning) + - [verify-pinned-digest](#verify-pinned-digest) + - [dockerfile-creation](#dockerfile-creation) + - [build-bundle](#build-bundle) + - [make-bundle-repo-public](#make-bundle-repo-public) + - [get-supported-versions](#get-supported-versions) + - [add-bundle-to-index](#add-bundle-to-index) + - [make-index-repo-public](#make-index-repo-public) + - [get-ci-results-attempt](#get-ci-results-attempt) + - [preflight-trigger](#preflight-trigger) + - [evaluate-preflight-result](#evaluate-preflight-result) + - [get-ci-results](#get-ci-results) + - [link-pull-request-with-open-status](#link-pull-request-with-open-status) + - [merge-pr](#merge-pr) + - [link-pull-request-with-merged-status](#link-pull-request-with-merged-status) + - [copy-bundle-image-to-released-registry](#copy-bundle-image-to-released-registry) + - [decide-index-paths](#decide-index-paths) + - [get-manifest-digests](#get-manifest-digests) + - [request-signature](#request-signature) + - [upload-signature](#upload-signature) + - [publish-to-index](#publish-to-index) + - [FBC-Related Operator Pipeline Tasks Troubleshooting](#fbc-related-operator-pipeline-tasks-troubleshooting) + - [build-fbc-index-images](#build-fbc-index-images) + - [build-fbc-scratch-catalog](#build-fbc-scratch-catalog) + + +## Operator Pipeline Tasks Troubleshooting + +### get-pr-number +Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. + +### acquire-lease +Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. + +### set-github-started-label +Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. + +### set-github-status-pending +Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. + +### set-env +Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. + +### clone-repository-base +Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. + +### clone-repository +Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. + +### detect-changes The pipeline may fail at this stage due to the following reasons: + 1. Changing Non-Operator Files: If the PR attempts to modify external files outside of targeted operator, the pipeline will fail. 1. Affecting Multiple Operators: If the PR impacts more than one operator, it will result in a failure. 1. Modifying Existing Bundles: Changes to existing bundles in the PR are not allowed at this stage. @@ -86,141 +88,143 @@ The pipeline may fail at this stage due to the following reasons: Other Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### yaml-lint +### yaml-lint -**Warnings** at this step should be addressed if possible but won't result in a failure. -**Errors** at this step will need to be addressed. Often errors center around unexpected whitespace at the end of lines or missing newlines at the end of your `yaml` files. +**Warnings** at this step should be addressed if possible but won't result in a failure. +**Errors** at this step will need to be addressed. Often errors center around unexpected whitespace at the end of lines or missing newlines at the end of your `yaml` files. -### check-permissions +### check-permissions Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### set-github-pr-title +### set-github-pr-title Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### read-config +### read-config Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### resolve-pr-type +### resolve-pr-type Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### apply-test-waivers +### apply-test-waivers Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### content-hash +### content-hash Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### certification-project-check +### certification-project-check Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### get-organization +### get-organization Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### get-pyxis-certification-data +### get-pyxis-certification-data Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### static-tests +### static-tests Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### static-tests-results +### static-tests-results If the static tests fail, a summary will be posted as a comment on the Pull Request, providing detailed reasons for the failure. The summary of test results will look like as shown below: ![Preflight test run logs example](../img/static_tests_example.png) To proceed: + 1. Review the comment for the detailed reasons behind the failed static tests. 1. Fix all the reported issues. 1. Commit the changes with a fix to the PR and it will Re-trigger the hosted pipeline. For more information about static tests, refer to the [documentation](../users/static_checks.md). -### merge-registry-credentials +### merge-registry-credentials Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### digest-pinning +### digest-pinning Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### verify-pinned-digest +### verify-pinned-digest Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### dockerfile-creation +### dockerfile-creation Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### build-bundle +### build-bundle Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### make-bundle-repo-public +### make-bundle-repo-public Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### get-supported-versions +### get-supported-versions Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### add-bundle-to-index +### add-bundle-to-index Failures at this stage are rare and often due to transient issues. Start by reviewing the pipeline logs linked in the PipelineRun summary within the PR. As an initial step, re-trigger the pipeline by adding the appropriate command in the PR comment: + 1. `/pipeline restart operator-hosted-pipeline` for the hosted pipeline. 1. `/pipeline restart operator-release-pipeline` for the release pipeline. If the PR fails again after two consecutive attempts, feel free to request assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### make-index-repo-public +### make-index-repo-public Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### get-ci-results-attempt +### get-ci-results-attempt Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### preflight-trigger +### preflight-trigger Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### evaluate-preflight-result -At this step, the pipeline will primarily fail if the [dynamic tests](../users/dynamic_checks.md) do not pass completely. A link to the test artifacts will be posted as a comment on the PR, as shown below. +### evaluate-preflight-result +At this step, the pipeline will primarily fail if the [dynamic tests](../users/dynamic_checks.md) do not pass completely. A link to the test artifacts will be posted as a comment on the PR, as shown below. ![Preflight test run logs example](../img/preflight_run_logs_example.png) Please review this link, as it will provide detailed error information. Failures at this stage are uncommon. To diagnose the issue: + 1. Review the pipeline logs linked in the PipelineRun summary within the PR. 1. Examine the test artifacts for detailed error information. If the logs and artifacts do not clarify the issue, feel free to ask for assistance in the PR comments. Maintainers will help identify and resolve the problem. -### get-ci-results +### get-ci-results Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### link-pull-request-with-open-status +### link-pull-request-with-open-status Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### merge-pr -If operator hosted pipeline fails at this task with the error message: `Pull request Auto merge is not allowed for this repository (enablePullRequestAutoMerge)` then re-trigger the pipeline by running command `/pipeline restart operator-hosted-pipeline`. +### merge-pr +If operator hosted pipeline fails at this task with the error message: `Pull request Auto merge is not allowed for this repository (enablePullRequestAutoMerge)` then re-trigger the pipeline by running command `/pipeline restart operator-hosted-pipeline`. Another Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### link-pull-request-with-merged-status +### link-pull-request-with-merged-status Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### copy-bundle-image-to-released-registry +### copy-bundle-image-to-released-registry Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### decide-index-paths +### decide-index-paths Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### get-manifest-digests +### get-manifest-digests Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### request-signature +### request-signature Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### upload-signature +### upload-signature Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### publish-to-index +### publish-to-index Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -## FBC-Related Operator Pipeline Tasks Troubleshooting +## FBC-Related Operator Pipeline Tasks Troubleshooting -### build-fbc-index-images +### build-fbc-index-images Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. -### build-fbc-scratch-catalog +### build-fbc-scratch-catalog Failures at this stage are rare. To diagnose the issue, review the pipeline logs linked in the PipelineRun summary within the PR. If the logs don’t clarify the problem, feel free to ask for assistance in the PR comments. Maintainers will assist in identifying and resolving the issue. - diff --git a/docs/users/contributing-via-pr.md b/docs/users/contributing-via-pr.md index 272bd0bd8..9c0dfdec6 100644 --- a/docs/users/contributing-via-pr.md +++ b/docs/users/contributing-via-pr.md @@ -4,14 +4,16 @@ To submit an operator one has to do these steps 1. Fork project based on desired [Operator Repository](./pipelines_overview.md#operator-repositories) -1. Place the operator in the target directory. [More info](./contributing-where-to.md) +2. Place the operator in the target directory. [More info](./contributing-where-to.md) - operators -1. Configure `ci.yaml` file. [More info](./operator-ci-yaml.md) +3. Configure `ci.yaml` file. [More info](./operator-ci-yaml.md) - Setup reviewers - Enable FBC mode -1. Make a pull request with a new operator bundle or catalog changes -1. Verify tests and fix problems, if possible -1. Ask for help in the PR in case of problems + - Add template to catalog mapping +4. Configure the `release-config.yaml` file if you want to automatically release the operator to the OCP catalogs. [More info](./fcb_autorelease.md#release-configyaml) +5. Make a pull request with a new operator bundle or catalog changes +6. Verify tests and fix problems, if possible +7. Ask for help in the PR in case of problems ## Pull request diff --git a/docs/users/contributing-where-to.md b/docs/users/contributing-where-to.md index 06b242879..58393f56e 100644 --- a/docs/users/contributing-where-to.md +++ b/docs/users/contributing-where-to.md @@ -15,6 +15,7 @@ Once you have forked the upstream repo, you will require to add your Operator Bu │ │ │ └── tools.opdev.io_demoresources.yaml │ │ ├── metadata │ │ │ └── annotations.yaml +│ │ ├── release-config.yaml │ │ └── tests │ │ └── scorecard │ │ └── config.yaml diff --git a/docs/users/fbc_autorelease.md b/docs/users/fbc_autorelease.md new file mode 100644 index 000000000..6f3b1f02c --- /dev/null +++ b/docs/users/fbc_autorelease.md @@ -0,0 +1,70 @@ +# File-Based Catalog - auto-release +By the nature of the File-Based Catalog (FBC) mode, the release of operator is made of two steps. + +* The first step builds, tests and releases bundle image +* The second step adds a bundle to OCP catalog and releases it + +The second step can be now automated and user is no longer required to manually create a +second PR with catalog changes. The release pipeline will take care of it. + +The process will require an additional configuration in the `release-config.yaml` file. +Once a PR with new bundle and `release-config.yaml` is merged, the release pipeline will +open a new PR with catalog changes. + +Example of such PR can be found [here](https://github.com/Allda/community-operators-pipeline-preprod/pull/20). +The second PR is linked with it original PR and looks like [this](https://github.com/Allda/community-operators-pipeline-preprod/pull/25): + +![Release info](../img/fbc-auto-release-pr.png) + +## release-config.yaml + +If you want your operators to be automatically released to the OCP catalogs in the FBC mode, +you will need to configure the `release-config.yaml` file. The file should be placed +into the bundle version directory, e.g. `operators/aqua/0.0.2/release-config.yaml`. + +``` +tree operators/aqua +. +├── 0.0.2 +│   ├── release-config.yaml # This is the file +│   ├── manifests +│   └── metadata +├── catalog-templates +├── ci.yaml +└── Makefile +``` +Its content determines where exactly the bundle will be released in terms of +the OCP version and the place in the update graph. + +### Example + +```yaml +--- +catalog_templates: + - template_name: basic.yaml + channels: [my-channel] + replaces: aqua.0.0.1 + - template_name: semver.yaml + channels: [Fast, Stable] +``` +The example above shows a release configuration where operator bundle is going to be +released to the `my-channel` channel in the `basic.yaml` catalog template and to the +`Fast` and `Stable` channels in the `semver.yaml` catalog template. + +The `replaces` field is optional and it specifies the bundle that the new bundle +replaces in the update graph. + +### File structure +The schema of the file is available here: [release-config.yaml schema](https://github.com/redhat-openshift-ecosystem/operator-pipelines/blob/main/operator-pipeline-images/operatorcert/schemas/release-config-schema.json). +The schema is validated automatically in the pipeline and the PR will fail with explanations if the file is not valid. + +Here is a summary of the file structure: + +* The top-level key is `catalog_templates` which is a list of objects. +* Each object has the following keys: + * `template_name` - the name of the catalog template file in the `catalog-templates` directory. + * `channels` - a list of channels where the bundle should be released. + * In case of using `SemVer` a user can pick from allowed values: `Fast`, `Stable` and `Candidate`. + * `replaces` - the bundle that the new bundle replaces in the update graph. (**Optional**, only for the basic templates) + * `skips` - a list of bundles that should be skipped in the update graph. (**Optional**, only for the basic templates) + * `skipRange` - a range of bundles that should be skipped in the update graph. (**Optional**, only for the basic templates) diff --git a/docs/users/fbc_workflow.md b/docs/users/fbc_workflow.md index 752344f58..f67488200 100644 --- a/docs/users/fbc_workflow.md +++ b/docs/users/fbc_workflow.md @@ -18,13 +18,59 @@ File-based catalog templates serve as a simplified view of a catalog that can be by the user. The OPM currently supports 2 types of templates and it is up to the user which template the operator will be using. -* Basic template -* SemVer template +* Basic template - `olm.template.basic` +* SemVer template - `olm.semver` More information about each template can be found at [opm doc](https://olm.operatorframework.io/docs/reference/catalog-templates/). The recommended template from the maintainability point of view is `SemVer`. +### FCB template mapping +To be able to generate a catalog from templates a user needs to provide a mapping between +template and catalog. The mapping is stored in the `ci.yaml` file. Based on your preference +you can map a template to a catalog version with 1:N mapping or 1:1 mapping. + +Here is an example of the `ci.yaml` file with single template rendering multiple catalogs (`1:N`): + +```yaml +--- +fbc: + enabled: true + catalog_mapping: + - template_name: my-custom-semver-template.yaml # The name of the file inside ./catalog-templates directory + catalogs_names: # a list of catalogs within the /catalogs directory + - "v4.15" + - "v4.16" + - "v4.17" + type: olm.semver + - template_name: my-custom-basic-template.yaml # The name of the file inside catalog-templates directory + catalogs_names: + - "v4.12" + - "v4.13" + type: olm.template.basic +``` + +And here is an example of the `ci.yaml` file with a single template rendering a single catalog (`1:1`): + +```yaml +--- +fbc: + enabled: true + catalog_mapping: + - template_name: v4.14.yaml + catalog_names: ["v4.14"] + type: olm.template.basic + - template_name: v4.15.yaml + catalog_names: ["v4.15"] + type: olm.template.basic + - template_name: v4.16.yaml + catalog_names: ["v4.16"] + type: olm.template.basic + - template_name: v4.17.yaml + catalog_names: ["v4.17"] + type: olm.template.basic +``` + ## Generate catalogs using templates To generate a final catalog for an operator a user needs to execute different `opm` commands based on the template type. We as operator pipeline maintainers want @@ -43,6 +89,7 @@ The right place for the Makefile is in the operator's root directory ``` . ├── 0.0.1 +| ├── release-config.yaml │   ├── manifests │   └── metadata ├── catalog-templates @@ -51,8 +98,6 @@ The right place for the Makefile is in the operator's root directory ``` -You can modify the Makefile based on your needs and use it to generate catalogs by running `make catalogs`. - > [!IMPORTANT] > In case an operator isn't shipped to all OCP catalog versions manually update `OCP_VERSIONS` > variable in the `Makefile` and include only versions supported by an operator. @@ -83,6 +128,16 @@ catalogs ``` ### Adding new bundle to Catalog +A new bundle can be added automatically to your templates and catalogs if you use +the automated release feature. The process is described in the +[fbc auto-release](./fbc_autorelease.md) documentation. + +It is highly recommended to use the automated release feature as it simplifies the process +from the user perspective. + +However if you want to manually add a new bundle to the catalog follow the steps below. + + To add a bundle to the catalog you need to first submit the new version of the operator using traditional [PR workflow](./contributing-via-pr.md). The operator pipeline builds, tests, and releases the bundle into the registry. **At this point, the operator is not available diff --git a/docs/users/operator-ci-yaml.md b/docs/users/operator-ci-yaml.md index 5cf8eb6dd..ac57378da 100644 --- a/docs/users/operator-ci-yaml.md +++ b/docs/users/operator-ci-yaml.md @@ -45,12 +45,29 @@ The `fbc.version_promotion_strategy` option defines the strategy for promoting t - `always` - the operator will be promoted to the next OCP version automatically - `review-needed` - the operator will be promoted to the next OCP version automatically, but the PR will be created and the reviewers will be asked to review the changes +### `fbc.catalog_mapping` +The mapping serves as a link between catalog templates within the `./catalog-templates` directory and catalogs within the `./catalogs` directory. + +For more details and structure visit the [FBC workflow page](./fbc_workflow.md#fcb-template-mapping). + ### Example ```yaml --- fbc: - enabled: true - version_promotion_strategy: never + enabled: true + version_promotion_strategy: never + catalog_mapping: + - template_name: my-custom-semver-template.yaml # The name of the file inside ./catalog-templates directory + catalogs_names: # a list of catalogs within the /catalogs directory + - "v4.15" + - "v4.16" + - "v4.17" + type: olm.semver + - template_name: my-custom-basic-template.yaml # The name of the file inside catalog-templates directory + catalogs_names: + - "v4.12" + - "v4.13" + type: olm.template.basic ``` diff --git a/docs/users/static_checks.md b/docs/users/static_checks.md index 4c4203843..4bd30d5ed 100644 --- a/docs/users/static_checks.md +++ b/docs/users/static_checks.md @@ -52,15 +52,15 @@ The test is based on `operator-sdk bundle validate` command with `name=operatorh The test is based on `operator-sdk bundle validate` command with `suite=operatorframework` test suite [(link)](https://sdk.operatorframework.io/docs/cli/operator-sdk_bundle_validate/#operator-sdk-bundle-validate). #### check_required_fields -| Field name | Validation | Description | -|------------|------------|------| -| `spec.displayName` | `.{3,50}` | A string with 3 - 50 characters | -| `spec.description` | `.{20,}` | A bundle description with at least 20 characters | -| `spec.icon` | `media` | A valid base64 content with a supported media type (`{"base64data": , "mediatype": enum["image/png", "image/jpeg", "image/gif", "image/svg+xml"]}`) | -| `spec.version` | `SemVer` | Valid semantic version | -| `spec.maintainers` | | At least 1 maintainer contacts. Example: `{"name": "User 123", "email": "user@redhat.com"}` | -| `spec.provider.name` | `.{3,}` | A string with at least 3 characters | -| `spec.links` | | At least 1 link. Example: `{"name": "Documentation", "url": "https://redhat.com"}` | +| Field name | Validation | Description | +| -------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `spec.displayName` | `.{3,50}` | A string with 3 - 50 characters | +| `spec.description` | `.{20,}` | A bundle description with at least 20 characters | +| `spec.icon` | `media` | A valid base64 content with a supported media type (`{"base64data": , "mediatype": enum["image/png", "image/jpeg", "image/gif", "image/svg+xml"]}`) | +| `spec.version` | `SemVer` | Valid semantic version | +| `spec.maintainers` | | At least 1 maintainer contacts. Example: `{"name": "User 123", "email": "user@redhat.com"}` | +| `spec.provider.name` | `.{3,}` | A string with at least 3 characters | +| `spec.links` | | At least 1 link. Example: `{"name": "Documentation", "url": "https://redhat.com"}` | #### check_dangling_bundles The test prevents from releasing an operator and keeping any previous bundle dangling. @@ -133,6 +133,10 @@ This check will ensure that all bundle images in the file based catalog for give operator catalog(s) use allowed image registry. Allowed registries are configured in `(repo_root)/config.yaml` under the key `allowed_bundle_registries`. +#### check_schema_bundle_release_config +The test validates the `release-config.yaml` file against the schema. The schema +the file including the schema is described [here](./fcb_autorelease.md#release-configyaml) + ## Running tests locally ```bash diff --git a/mkdocs.yml b/mkdocs.yml index fc488f963..53374e6d1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,8 +17,9 @@ nav: - "Before submitting your Operator": "users/contributing-prerequisites.md" - "Where to place operator": "users/contributing-where-to.md" - "Best practices": "users/best-practices.md" - - "File base catalog onboarding": "users/fbc_onboarding.md" - - "File base catalog workflow": "users/fbc_workflow.md" + - "File based catalog onboarding": "users/fbc_onboarding.md" + - "File based catalog workflow": "users/fbc_workflow.md" + - "File based catalog auto-release": "users/fbc_autorelease.md" - "OKD/OpenShift Catalogs criteria and options": "users/packaging-required-criteria-ocp.md" - "Admin": - "Admin guide": "pipeline-admin-guide.md"