Framework Overview
Introduction
The goal of the community operator pipeline framework project is to deploy and configure pipelines for various flavors of Kubernetes or Openshift clusters and publish multiple versions of operator indexes. GitHub projects via GitHub Action technology are supported. Currently, the following projects are supported:
Codebase and development
Name | Project | Barnches |
---|---|---|
Framework | https://github.com/redhat-openshift-ecosystem/community-operators-pipeline | ci/latest and ci/dev |
Ansible playbooks | https://github.com/redhat-openshift-ecosystem/operator-test-playbooks | upstream-community and upstream-community-dev |
User and maintainer documentation (k8s and ocp) | https://github.com/redhat-openshift-ecosystem/community-operators-pipeline | documentation |
Admin Documentation | https://github.com/redhat-openshift-ecosystem/community-operators-pipeline | documentation-admin |
Producion operator repositories
Name | Project | Configuration | Branch |
---|---|---|---|
Kubernetes operators (OperatorHub.io) | https://github.com/k8s-operatorhub/community-operators | pipeline-config.yaml | main |
OpenShift (OCP) operators | https://github.com/redhat-openshift-ecosystem/community-operators-prod | pipeline-config.yaml | main |
Staging environment | https://github.com/redhat-openshift-ecosystem/community-operators-pipeline | pipeline-config-k8s.yaml and pipeline-config-ocp.yaml | main |
Project structure
Each project should contain the following directory structure
$ tree -L 1 --sort=mtime -a
.
├── LICENSE
├── .github
├── categories.json
├── upstream.Dockerfile
├── scripts
├── .gitignore
├── docs
├── README.md
├── config.yaml
├── ci
├── operators
└── .git
File | Description |
---|---|
README.md |
Main README file |
ci/ |
Project CI configration directory |
operators/ |
Directory contains all operators with the versions |
categories.json |
Config file with list of categories |
config.yaml |
Operator pipelines config file |
docs/ |
Contains file with pull request predefined template (generated by the framework. Don't change!!!) |
.github/workflows |
Directory contains GitHub Action workflows (generated by the framework. Don't change!!!) |
upstream.Dockerfile |
Dockerfile needed for CI pipeline (generated by the framework. Don't change!!!) |
scripts/ |
Temporary scripts directory (generated by the framework. Don't change!!!) |
Testing Pipeline via GitHub Action
The testing pipeline flow chart is shown below
flowchart TD
A0[PR]
A0 --> |push| B0(Operator test)
A0 --> |push| C0(Operator CI)
A0 --> |labeled| D0(Operator CI Labels)
A0 --> |push| E0(DCO test)
A0 --> |comment| F0[/retest]
A0 --> |comment| G0[/merge possible]
B0 --> |job|B10[lemon]
B0 --> |job|B11[orange]
B0 --> |job|B12[kiwi]
E0 --> E1(DCO Workflow Complete)
F0 --> F1(Issue Comments - retest)
G0 --> G1(Issue Comments - merge)
B10 --> B2(Operator Workflow Complete)
B11 --> B2
B12 --> B2
B2 --> |handle label| B3[package-validated]
B3 --> |handle label| B4[installation-validated]
B4 --> |make comment| B5[/merge possible]
C0 --> |job|C1[operator-automerge-enabled]
C1 --> |handled label|C2[automerge-disabled]
C2 --> |job|C20[operator-ci]
C20 --> |handle label|C21[new-operator]
C20 --> |handle label|C22[allow/operator-version-overwrite]
C20 --> |handle label|C23[allow/operator-recreate]
C20 --> |on error|C24[Fail + PR comment]
D0 --> |handle label|D1[authorized-changes]
D1 --> |make comment|G0
G1 --> G2[automerge]
F1 --> |make comment|F20[/hold]
F1 --> |make comment|F21[/hold cancel]
E1 --> |handle label|E2[dco-failed]
Download or edit
Release Pipeline via GitHub Action
The release pipeline flow charts are shown below
Openshift(ocp)
flowchart LR
A0(PR-traffic-light)
A0 --> A1(Remove Operator)
A1 --> A2(Index check)
A2 --> A3(Bundles)
A3 --> A4(Index)
A4 --> A5(Index verify)
A5 --> A6(Slack notification)
Download or edit
Kubernetes(k8s) with publishing index into operatorhub.io
flowchart LR
A0(PR-traffic-light)
A0 --> A1(Remove Operator)
A1 --> A2(Index check)
A2 --> A3(Bundles)
A3 --> A4(Index)
A4 --> A50(OHIO image)
A4 --> A51(Index verify)
A50 --> A6(Release / operatorhub.io)
A6 --> A7(Slack notification)
A51 --> A7