{"id":21189233,"url":"https://github.com/uptick/gitops","last_synced_at":"2025-07-25T11:39:36.610Z","repository":{"id":35093900,"uuid":"139778331","full_name":"uptick/gitops","owner":"uptick","description":"Automatically provision Kubernetes resources defined by a git repository.","archived":false,"fork":false,"pushed_at":"2024-11-14T03:53:42.000Z","size":1019,"stargazers_count":6,"open_issues_count":14,"forks_count":1,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2024-11-14T04:26:37.672Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uptick.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-05T01:02:29.000Z","updated_at":"2024-11-10T21:29:48.000Z","dependencies_parsed_at":"2024-01-12T06:47:05.836Z","dependency_job_id":"4208f667-6f08-4c92-944f-e955abbd16d5","html_url":"https://github.com/uptick/gitops","commit_stats":null,"previous_names":[],"tags_count":94,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptick%2Fgitops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptick%2Fgitops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptick%2Fgitops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uptick%2Fgitops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uptick","download_url":"https://codeload.github.com/uptick/gitops/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225614877,"owners_count":17496938,"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-20T18:50:52.562Z","updated_at":"2025-07-10T02:31:44.497Z","avatar_url":"https://github.com/uptick.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gitops\n\n[![PyPI version](https://badge.fury.io/py/gitops.svg)](https://pypi.org/project/gitops/)\n[![versions](https://img.shields.io/pypi/pyversions/gitops.svg)](https://pypi.org/project/gitops/)\n[![Test](https://github.com/uptick/gitops/workflows/Test/badge.svg)](https://github.com/uptick/gitops/actions?query=workflow%3ATest)\n[![Lint](https://github.com/uptick/gitops/workflows/Lint/badge.svg)](https://github.com/uptick/gitops/actions?query=workflow%3ALint)\n\nManage multiple apps across one or more k8s clusters.\n\n## Overview\n\nKeeping track of numerous of single-tenanted application deployments can quickly become a handful. Enter Gitops!\n\nThe tool has two halves:\n\n- Gitops Server - an instance of this gets deployed to each of your kubernetes clusters, listening on changes made to your gitops cluster repo. The server's responsibility is to update the deployments on the cluster it lives on to match the app specifications in the repo.\n- Gitops CLI - this is a tool that you can use to interact comfortably with your cluster repo. It allows listing all deployed applications, what images they're presently running on, and which clusters they live on. It also provides numerous operations that can be applied to one or more apps at a time, such as bumping to a newer version of an image, or running a particular command across your app cohort.\n\n\nCurrently Kubernetes/Helm is the only supported cluster interface. All app deployments are performed as applications of Helm charts.\n\n## So what's a \"cluster repo\"?\n\nThis is a git repository that you set up, where you list out all of your applications and how you want them deployed. It looks like this:\n\n\u003cpre\u003e\n.\n+- apps\n   +- app_0\n      +- deployment.yml\n      +- secrets.yml\n   +- app_1\n      +- deployment.yml\n      +- secrets.yml\n+- jobs\n\u003c/pre\u003e\n\n## Gitops CLI Installation\n\n1. Install the CLI tool with: `uv tool install gitops` and upgrade it with `uv tool upgrade gitops`.\n\n2. Set up the environment variable `GITOPS_APPS_DIRECTORY` to invoke gitops from any directory.\n\n## Gitops Server Installation\n\nSecrets should be placed in `secrets.env`. The example file `secrets.example.env` has the environment variables you will need to supply.\n\nEnsure that the gitops service account has `edit` access to the namespace it is deploying to. An example RoleBinding is:\n\n```\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: gitops-role-binding\n  namespace: workforce\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: edit\nsubjects:\n- kind: ServiceAccount\n  name: default\n  namespace: gitops\n```\n\n## Contribution\nWe're using [releaseplease](https://github.com/googleapis/release-please), to publish a new version do the following:\n1. Checkout a feature branch and make the changes\n   1. Make sure to follow instructions for writing commits by [releaseplease](https://github.com/googleapis/release-please)\n      1. fix: which represents bug fixes, and correlates to a SemVer patch.\n      2. feat: which represents a new feature, and correlates to a SemVer minor.\n      3. feat!:, or fix!:, refactor!:, etc., which represent a breaking change (indicated by the !) and will result in a SemVer major.\n2. Push changes and get the PR approved\n3. Once it is merged; an additional PR containing the release changes needs to be merged to create a release.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuptick%2Fgitops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuptick%2Fgitops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuptick%2Fgitops/lists"}