{"id":23152651,"url":"https://github.com/cyclops-ui/gitops-starter","last_synced_at":"2026-01-25T08:33:31.131Z","repository":{"id":264676642,"uuid":"859904427","full_name":"cyclops-ui/gitops-starter","owner":"cyclops-ui","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-25T17:23:50.000Z","size":10,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-04T15:50:53.728Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cyclops-ui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-09-19T13:35:10.000Z","updated_at":"2024-11-25T17:23:53.000Z","dependencies_parsed_at":"2024-11-25T18:39:37.008Z","dependency_job_id":null,"html_url":"https://github.com/cyclops-ui/gitops-starter","commit_stats":null,"previous_names":["cyclops-ui/gitops-starter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cyclops-ui/gitops-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyclops-ui%2Fgitops-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyclops-ui%2Fgitops-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyclops-ui%2Fgitops-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyclops-ui%2Fgitops-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cyclops-ui","download_url":"https://codeload.github.com/cyclops-ui/gitops-starter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyclops-ui%2Fgitops-starter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28749397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T08:31:04.260Z","status":"ssl_error","status_checked_at":"2026-01-25T08:30:28.859Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-12-17T19:17:10.203Z","updated_at":"2026-01-25T08:33:31.117Z","avatar_url":"https://github.com/cyclops-ui.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cyclops GitOps starter\n\nGitOps is a practice of storing configuration and infrastructure definitions in a git repository. The same way developers store application code on git, GitOps extends that practice to application deployment. There are tools that marry the GitOps methodology with Kubernetes, like ArgoCD, Flux, Jenkins X…\n\nThis repo serves as a tutorial on how to integrate Cyclops with GitOps, namely ArgoCD.\n\nFeel free to fork the repo, play around with it, and propose alternative approaches! 🧡\n\n## Prerequisites\n\nHere are the prerequisites for the rest of the tutorial and how to set them up.\n\n- Kubernetes cluster\n    - if you don't have a running cluster you can use, you can install and run [minikube](https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fbinary+download)\n- [kubectl](https://pwittrock.github.io/docs/tasks/tools/install-kubectl/)\n- ArgoCD\n    - [tutorial on setting up ArgoCD and exposing it outside of the cluster](https://medium.com/@mehmetodabashi/installing-argocd-on-minikube-and-deploying-a-test-application-caa68ec55fbf)\n    - [official docs](https://argo-cd.readthedocs.io/en/stable/#getting-started)\n- Cyclops\n    - [how to install](https://cyclops-ui.com/docs/installation/install/manifest)\n- Clone this repository\n\n## 👁️ Cyclops x ArgoCD 🦑\n\nAll applications within Cyclops are defined as CRDs called Modules. Each time a Module is created, the Cyclops controller picks it up, creates other Kubernetes resources from it, and applies them to the cluster. Since Modules are CRDs, you can define them via the YAML manifest. Those manifests allow you to define everything you need for your application in a single place.\n\nSince a Module can be defined through a manifest, it can be stored on a git repo and included in your GitOps workflow! In this repository, you can find the `argo-app.yaml` file and the `/apps` folder that holds module definitions.\n\nThe picture below shows the hierarchy of resources inside the cluster with the setup.\n\n![app hierarchy](https://github.com/user-attachments/assets/e0716c9e-bcc9-4312-a6a9-e34fc867e463)\n\n\nIn the root of the hierarchy, there is the `my-team-apps` Argo application defined in the `argo-app.yaml` file in the root of the repo. The application deploy everything from the `https://github.com/cyclops-ui/gitops-starter` repo (this one) under path `apps`.\n\nAs mentioned, that folder contains three module definitions separated into respective files. When the ArgoCD controller syncs those Modules into the cluster, the Cyclops controller takes over and turns those Modules into other Kubernetes resources like Deployment, Services, StatefulSets, or whatever is defined in the Helm chart referenced by the Module and its values.\n\n### See it in action 🔥\n\nTo deploy the proposed setup from above, ensure all of the prerequisites are met and you can access your ArgoCD and Cyclops instances.\n\nOpen your terminal and `cd` to this repository. You can create the `my-team-apps` Argo application with the following command:\n\n```bash\nkubectl apply -f argo-app.yaml\n```\n\nYou can now see your newly created Argo application in your ArgoCD UI:\n\n\u003cimg width=\"1506\" alt=\"argo app\" src=\"https://github.com/user-attachments/assets/f70e045b-bc8f-44aa-ad5a-e0dbf39dbcc4\"\u003e\n\nAll of the Modules are also visible in the Cyclops UI:\n\n\u003cimg width=\"1503\" alt=\"cyclops modules\" src=\"https://github.com/user-attachments/assets/809d8fb9-9a4a-4264-a8a0-610d596b032a\"\u003e\n\nYou can now check all of the resources created from a Module through the Cyclops UI. You are also free to update app configuration through Cyclops.\n\nWhen updating a Module through Cyclops, you could introduce a diff in ArgoCD. For example, while updating replicas through Cyclops, Argo might report it as in the image below\n\n\u003cimg width=\"1507\" alt=\"argo diff\" src=\"https://github.com/user-attachments/assets/a41bcfc9-7f96-4055-b88a-012e4ba5d751\"\u003e\n\nTo avoid this, you can simply **remove the field** you want to edit through the UI from the **Module manifest** in git.\n\nIf you want to restrict edits of any fields explicitly, you can mark them as `immutable` in your helm chart schema. An example of a template with immutable fields is used for the `other-app` you have already deployed.\n\n\u003cimg width=\"1509\" alt=\"immutable\" src=\"https://github.com/user-attachments/assets/c013738b-cd4d-48bc-b53d-4e936cf6f640\"\u003e\n\nIn the image above is the edit screen of the `other-app`, and fields for image and version cannot be updated and should be updated through the GitOps workflow.\n\n## Roadmap 🚧\n\n\u003e *⚠️ Please note, our roadmap is subject to change. ⚠️*\n\u003e\n\u003e\n\u003e *If there's something you'd like to see added, feel free to reach out and let us know!*\n\u003e\n- Option to disable the ***Add module*** button\n    - in case you want to restrict creating a Module to your GitOps workflow\n- Option to disable changing the template in the Edit template screen\n    - in case you want to restrict updating Module templates to your GitOps workflow\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyclops-ui%2Fgitops-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyclops-ui%2Fgitops-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyclops-ui%2Fgitops-starter/lists"}