{"id":18510699,"url":"https://github.com/operator-framework/cool-catalog","last_synced_at":"2026-01-24T21:13:03.042Z","repository":{"id":46493931,"uuid":"402155778","full_name":"operator-framework/cool-catalog","owner":"operator-framework","description":"Repository that showcases example workflows for building OLM Catalogs via Declarative Configurations","archived":false,"fork":false,"pushed_at":"2022-11-18T18:24:24.000Z","size":24,"stargazers_count":6,"open_issues_count":1,"forks_count":7,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-12-25T20:26:17.279Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/operator-framework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null}},"created_at":"2021-09-01T17:59:02.000Z","updated_at":"2024-01-18T07:55:54.000Z","dependencies_parsed_at":"2022-09-22T12:52:02.413Z","dependency_job_id":null,"html_url":"https://github.com/operator-framework/cool-catalog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Fcool-catalog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Fcool-catalog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Fcool-catalog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Fcool-catalog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/operator-framework","download_url":"https://codeload.github.com/operator-framework/cool-catalog/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239225766,"owners_count":19603162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T15:24:37.242Z","updated_at":"2025-10-31T19:30:25.316Z","avatar_url":"https://github.com/operator-framework.png","language":"Dockerfile","readme":"# CoolCatalog\nWelcome!  This repository showcases example workflows for building OLM Catalogs via Declarative Configurations\n\n## Quickstart\n1. fork this repository\n2. determine the desired storage format of the resulting FBC catalog hierarchy (unversioned per-operator partitions?  nested versions? etc.)\n3. add/modify/adjust action CI configurations in [.github/workflows](.github/workflows)\n4. communicate your desired storage format to contributors\n5. push changes\n\n\n## Detailed HOWTO\n\n### Actors and Terms\n- [`File-Based Catalog`](https://olm.operatorframework.io/docs/reference/file-based-catalogs/) (FBC) is the declarative expression of operators and their relationships with other operators, other versions of themselves.\n- [`Veneers`](https://olm.operatorframework.io/docs/reference/veneers/) are a general class of objects which can provide a simplified interaction with FBC.\n- `Operator Author` is the role related to expressing an individual operator versions, channels, properties, etc. in a destination catalog.\n- `Catalog` is the FBC-based catalog composed of the FBC contributions of one or more operators.\n- `Catalog Owner` is the role related to integrating Operator Authors' catalog contributions.\n- `Catalog Contribution` is the FBC that a Catalog Ownder receives from an Operator Author.  The format needs to be negotiated with the Operator Author.\nFor this example, the Catalog Owner receives contributions of a single, unversioned directory named after the operator which contain all FBC files, e.g.:\n\n```tree\ncatalog\n├── .indexignore          (to make `opm validate` ignore README.md)\n├── README.md\n├── testoperator\n│   ├── .indexignore\n│   ├── OWNERS\n│   └── catalog.yaml\n└── testoperator2\n    ├── .indexignore\n    ├── OWNERS\n    └── catalog.yaml\n```\n\n### Lifecycle\n\nThis repository models an operator catalog which receives contributions from one or more Operator Authors, merges and organizes those contributions. This repository has pre-configured GitHub actions to validate contributed content, validate FBC contributions, auto-merge contribution PRs, and push updated catalog images capable of serving as [Catalog Sources](https://olm.operatorframework.io/docs/concepts/crds/catalogsource/).\n\n\n```mermaid\n%%{init: {'securityLevel': 'strict', 'theme':'forest'}}%%\nsequenceDiagram\nautonumber\nparticipant CatalogOwner\nparticipant Catalog\nparticipant GHAction\nparticipant ImageRepo\nCatalogOwner--xCatalog: fork repo\nCatalogOwner--xCatalog: adjust CI\nCatalogOwner--xCatalog: push updates to remote\nCatalogOwner-\u003e\u003e+Catalog: Approves PR, merges (auto-merge trivial case)\nactivate CatalogOwner\nactivate Catalog\nCatalog-\u003e\u003e+GHAction: Integrate contribution to catalog\nactivate GHAction\nGHAction-\u003e\u003eGHAction: validate contribution's Operator Author \nGHAction-\u003e\u003eGHAction: generate image contiaining updated catalog\nGHAction-\u003e\u003eGHAction: validate catalog in image \nGHAction-\u003e\u003e+ ImageRepo: push catalog image to repo\nactivate ImageRepo\ndeactivate ImageRepo\ndeactivate GHAction\ndeactivate Catalog\ndeactivate CatalogOwner  \n```\n\n1. Fork and Clone Remote Repository  \nIMPORTANT! Failure to customize could result in unwanted contributions.\n\n2. Determine Storage Strategy and Adjust CI\nThe default configuration for this repository is a collection of operator-titled directories which individually and collectively validate successfully via [`opm validate`](https://olm.operatorframework.io/docs/reference/file-based-catalogs/#opm-validate). The storage strategy must be communicated to any contributing Operator Authors.\n\n3. Customize CI workflows in [.github/workflows](.github/workflows) to suit your authorization, validation, organization, and publication needs.  At a minimum, to suit the \"as-is\" for this repository, you must:\n    1. define a [Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) (PAT) `GH_PAT` for the [auto-merge action](https://github.com/marketplace/actions/enable-pull-request-automerge)\n\n    2. Set branch protection rules for the fork (`Settings --\u003e  Branches`):\n        1. Add a new rule\n        2. Set the following fields:\n            - `Require a pull request before merging`\n            - `Require status checks to pass before merging`\n            - `Require branches to be up to date before merging`\n        3. Set `Status Checks that are required` by searching for `build` and selecting it from the search results. (Note:  you may have to attempt a submission action before this will be available.)\n\n    3. Set general settings for the fork (`Settings --\u003e General`):\n        1. `Allow merge commits`\n        2. `Allow squash merging`\n        3. `Allow auto-merge`\n        4. (optional) `Automatically delete head branches`\n\n    4. (Optional) If you wish to push images to other than docker's image repository\n        1. Add a `repository` field to the docker/login-action, for e.g. quay.io:\n        ```\n        - name: login to registry\n          uses: docker/login-action@v1\n          with:\n            registry: \"quay.io\"\n            username: ${{ secrets.DOCKER_USERNAME }}\n            password: ${{ secrets.DOCKER_PASSWORD }}\n        ```\n\n        2. Add a corresponding `images` field to the docker/metadata-action (e.g. quay.io/exampleuser/cool-catalog)\n\n        ```\n        - name: Docker meta\n          id: docker_meta\n          uses: docker/metadata-action@v3\n          with:\n            images: quay.io/exampleuser/cool-catalog\n            tags: ${{ github.event.number }}\n        ```\n\n4. Push Changes to Remote  \nOnce finishing customization, push changes to the remote repo to ready it to receive contributions.\n\n5. Catalog Contribution Approval  \nThe default configuration of this repo will auto-approve an Operator Author's contribution if:\n\n    1. the Operator Author is listed in the CODEOWNERS file\n    2. the Catalog Contribution passes validation.  This is currently just `opm validate`.\n    3. the Catalog Contribution can be automerged without conflict.\n\n6. Catalog Publication  \nOnce a PR merges, a GitHub action will be triggered to build and push a Docker catalog image.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperator-framework%2Fcool-catalog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foperator-framework%2Fcool-catalog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperator-framework%2Fcool-catalog/lists"}