{"id":50474915,"url":"https://github.com/softwarefactory-project/sf-operator","last_synced_at":"2026-06-01T12:31:32.122Z","repository":{"id":38476270,"uuid":"486104194","full_name":"softwarefactory-project/sf-operator","owner":"softwarefactory-project","description":"SF-Operator is an Operator that simplifies the deployment and operation of OpenDev's Zuul and its dependencies (NodePool, Zookeeper, MariaDB, Log Server) on the OpenShift Container Platform.","archived":false,"fork":false,"pushed_at":"2026-05-13T12:18:24.000Z","size":8400,"stargazers_count":9,"open_issues_count":4,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-05-13T13:36:47.558Z","etag":null,"topics":["ci","continuous-integration","nodepool","openshift","operator-framework","zuul"],"latest_commit_sha":null,"homepage":"https://softwarefactory-project.github.io/sf-operator/","language":"Go","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/softwarefactory-project.png","metadata":{"files":{"readme":"docs/README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-27T08:13:48.000Z","updated_at":"2026-05-13T12:17:16.000Z","dependencies_parsed_at":"2024-05-30T09:30:48.724Z","dependency_job_id":"4e92f826-ea16-441d-a710-4acf127c9311","html_url":"https://github.com/softwarefactory-project/sf-operator","commit_stats":null,"previous_names":[],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/softwarefactory-project/sf-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fsf-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fsf-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fsf-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fsf-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softwarefactory-project","download_url":"https://codeload.github.com/softwarefactory-project/sf-operator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fsf-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33775857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ci","continuous-integration","nodepool","openshift","operator-framework","zuul"],"created_at":"2026-06-01T12:31:30.712Z","updated_at":"2026-06-01T12:31:32.116Z","avatar_url":"https://github.com/softwarefactory-project.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SF-Operator: a Zuul-based CI infrastructure for OpenShift\n\n\u003ca href=\"https://zuul-ci.org\" \u003e\u003cimg src =\"https://zuul-ci.org/gated.svg\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://softwarefactory-project.io/zuul/t/local/buildsets?project=software-factory%2Fsf-operator\u0026pipeline=post\u0026skip=0\" \u003e\u003cimg src=\"https://softwarefactory-project.io/zuul/api/tenant/local/badge?project=software-factory/sf-operator\u0026pipeline=post\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://matrix.to/#/#softwarefactory-project:matrix.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/matrix-%23softwarefactory--project-8A2BE2\" alt=\"Matrix Channel\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/softwarefactory-project/sf-operator/tags\" \u003e\u003cimg src=\"https://img.shields.io/github/v/tag/softwarefactory-project/sf-operator\" /\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/badge/project%20status-BETA-orange\" alt=\"This project is in beta phase. Use in production at your own risks.\" /\u003e\n\nSF-Operator is a Kubernetes deployment system to install Software Factory (SF) on the OpenShift Container Platform.\nSF is a Continuous Integration (CI) service based on [Zuul](https://zuul-ci.org) to provide project gating with Ansible\nfor developer platforms like GitLab using cloud providers like OpenStack.\n\n## Getting Started\n\nTo try SF-Operator you will need:\n\n- A Linux system to run the operator standalone (RHEL, CentOS or Fedora are supported).\n- A copy of the source code.\n- Access to a Kubernetes or OpenShift cluster (recommended).\n\nRun the following commands:\n\n```ShellSession\ngit clone https://softwarefactory-project.io/r/software-factory/sf-operator\ncd sf-operator\n./hack/deploy.sh\n```\n\n\u003e This procedure is expected to work out of the box on a fresh system, please create a [bug report][bugreport] if it ever fails.\n\nYou now have the Software Factory services running at the default `https://sfop.me` domain.\n\nThe local Zuul is connected to a Gerrit instance running at `https://gerrit.sfop.me`. You can test the integration by creating a change in the `demo-project` and watch Zuul run a job.\n\nFirst, you need to install the `git-review` plugin:\n\n```ShellSession\nsudo dnf install -y git-review\n```\n\nThen, create a test change:\n\n```ShellSession\ncd deploy/demo-project\ngit checkout -b demo\necho \"Hello world\" \u003e README.md\ngit add README.md\ngit commit -m \"My first review\"\ngit review\n```\n\nThe change will be submitted to the Gerrit server. You can then visit the Zuul status page at `https://sfop.me` to see the `demo-job` running for your change.\n\nThe next steps are:\n\n- Configure the custom resource (CR) to change the FQDN, add Zuul connections and Nodepool providers.\n- Configure public access to the SF services using a Route or Ingress.\n- Create a Zuul tenant in the provided project config.\n- Manage the project config through the config-update pipelines by hosting the configuration on your developer platform.\n\nThe next sections introduce the SF architecture and the installation options.\n\n## Architecture Overview\n\nSoftware Factory is composed of the following services:\n\n- Zuul, for running the CI.\n- Gateway, for the HTTP frontend.\n- Nodepool, for the resource providers.\n- LogServer, for the build logs.\n- HoundSearch, for code search.\n- LogJuicer, for build analysis.\n- Weeder, for inspecting whole tenant config.\n\nInternally, SF leverages the following services:\n\n- ZooKeeper, for the Zuul state.\n- MariaDB, for storing the build results.\n- GitServer, for hosting the internal tenant config.\n- Gerrit, for the initial config project location until it is moved to an external location.\n\nSF-Operator deployment is defined with the following elements:\n\n- The Software Factory custom resource (CR) to manage the services configuration.\n- The project config repository to manage the Zuul tenants and Nodepool providers.\n\n## Install\n\nSF-Operator supports OpenShift and Kubernetes, and it is tested with the following local cluster deployment:\n\n- MicroShift for OpenShift\n- Minikube for Kubernetes\n\nHere is a standard configuration resource (CR), adapted from the getting started one, which is available in [sf.yaml](https://github.com/softwarefactory-project/sf-operator/blob/master/playbooks/files/sf.yaml):\n\n```yaml\napiVersion: sf.softwarefactory-project.io/v1\nkind: SoftwareFactory\nmetadata:\n  name: my-sf\nspec:\n  fqdn: \"sfop.me\"\n  config-location:\n    name: sf/project-config\n    zuul-connection-name: my-gitlab\n  zuul:\n    gitlabconns:\n      - name: my-gitlab\n        server: gitlab.me\n        baseurl: https://gitlab.me\n        secrets: gitlab-secret\n```\n\nWhich can be installed by running:\n\n```ShellSession\n# Make sure the ~/.kube/config is valid\noc login --token=SECRET --server=https://openshift.me:6443\n\n# Apply the CR\ngo run ./main.go deploy ./my-sf.yaml\n```\n\nCheck out the other documentation:\n\n* [Deploying Zuul and dependencies with SF-Operator](deployment/getting_started.md)\n* [Developing the SF-Operator](developer/getting_started.md)\n\n## About\n\nSF-Operator is the natural evolution of the [Software Factory project](https://softwarefactory-project.io): the 3.8.x release of Software Factory saw the containerization of every major service, but was still delivered as RPM packages, in the form of a custom CentOS 7 distribution.\nSF-Operator builds upon this containerization effort to move from a distro-centric approach to a cloud-native deployment.\nThis is also an opportunity to focus on the leanest service suite needed to provide a working gated CI infrastructure; hence a scope reduced to Zuul and its dependencies only.\n\nSF-Operator is built mostly in Go upon the [Operator Framework](https://operatorframework.io), with the aim of reaching the highest capability level that can be achieved, in order to bring a modern, scalable gated CI alternative to OpenShift users, with the least friction from operation as possible.\n\nFurthermore, SF-Operator takes advantage of some of the specificities of OpenShift as a container orchestration platform:\n\n* Improved ingress management with OpenShift's Route Custom Resources\n* If [enabled in OpenShift](https://docs.openshift.com/container-platform/4.13/monitoring/enabling-monitoring-for-user-defined-projects.html#enabling-monitoring-for-user-defined-projects), SF-Operator comes with default monitoring and alerting configurations that can be used out of the box. The default alerting rules are honed from years of maintaining and running several large Zuul deployments at scale for [Fedora](https://fedora.softwarefactory-project.io/zuul/status), [Ansible](https://ansible.softwarefactory-project.io/zuul/status) and [RDO](https://review.rdoproject.org/zuul/status).\n* If [enabled](https://docs.openshift.com/container-platform/4.13/logging/cluster-logging.html), OpenShift provides application logs aggregation with its logging subsystem out of the box.\n\nFinally, we also provide a [Command Line Interface (CLI)](reference/cli/index.md) to simplify common tasks related to the operator, management of the operands, development and testing.\n\n## Status\n\nThe current project status is: **Beta**\n\n## Capability Levels\n\n* Level 1 - Basic Install - **10/10**\n    - Zuul Scheduler: ✅\n    - Zuul Executor: ✅\n    - Zuul Web: ✅\n    - Zuul Merger: ✅\n    - Nodepool Launcher: ✅\n    - Nodepool Builder: ✅\n    - Zookeeper: ✅\n    - MariaDB: ✅\n    - Log Server: ✅\n    - Internal Config Repository, bootstrapped pipelines and default jobs: ✅\n* Level 2 - Seamless upgrades - **2/2**\n    - Operator: ✅\n    - Operands: ✅\n* Level 3 - Full Lifecycle - **3/5**\n    - SF 3.8.x migration ❌\n    - Backup: ✅\n    - Restore: ✅\n    - Rolling deployments: ❌\n    - Reconfiguration: ✅\n* Level 4 - Deep Insights - **1/3**\n    - Operator metrics: ❌\n    - Operand metrics: ✅\n    - Alerts: ❌ (WIP)\n* Level 5 - Auto pilot - **0/3**\n    - Auto-scaling : ❌\n    - Auto-healing: ❌\n    - Auto-tuning: ❌\n\n## Getting Started\n\n* [Deploying Zuul and dependencies with SF-Operator](deployment/getting_started.md)\n\n## Documentation\n\n* [Deployment documentation](deployment/index.md): this documentation covers the essentials for people or teams who intend to deploy and manage Zuul and its dependencies through the SF-Operator.\n* [Developer documentation](developer/index.md): this documentation describes how to set up a development and testing environment to develop the SF-Operator.\n* [End User documentation](user/index.md): for users of a Software Factory instance. This documentation mostly describes the `Software Factory's config repository` usage (configuration-as-code).\n* [CLI reference](reference/cli/index.md)\n\n## Getting Help\n\nShould you have any questions or feedback concerning the SF-Operator, you can:\n\n* [Join our Matrix channel](https://matrix.to/#/#softwarefactory-project:matrix.org)\n* Send an email to [softwarefactory-dev@redhat.com](mailto:softwarefactory-dev@redhat.com)\n* [File an issue][bugreport] for bugs and feature suggestions\n\n## Contributing\n\nRefer to [CONTRIBUTING.md](developer/CONTRIBUTING.md).\n\n## License\n\nSf-operator is distributed under the [Apache License](https://www.apache.org/licenses/LICENSE-2.0.txt).\n\n[bugreport]: https://github.com/softwarefactory-project/sf-operator/issues/new\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fsf-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftwarefactory-project%2Fsf-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fsf-operator/lists"}