{"id":15130101,"url":"https://github.com/coveros-archive/genoa","last_synced_at":"2025-04-12T08:09:29.999Z","repository":{"id":55115773,"uuid":"280462768","full_name":"Coveros-Archive/Genoa","owner":"Coveros-Archive","description":"🚀  ☁️    A Continuous Delivery tool for shipping helm releases in a accelerated, automated and auditable fashion while respecting Git.","archived":false,"fork":false,"pushed_at":"2021-01-09T02:21:32.000Z","size":641,"stargazers_count":2,"open_issues_count":2,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-12T08:09:05.211Z","etag":null,"topics":["gitops","gitops-controller","helm-operator","kubernetes","kubernetes-operator"],"latest_commit_sha":null,"homepage":"","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/Coveros-Archive.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}},"created_at":"2020-07-17T15:39:36.000Z","updated_at":"2023-10-04T20:01:15.000Z","dependencies_parsed_at":"2022-08-14T12:30:43.538Z","dependency_job_id":null,"html_url":"https://github.com/Coveros-Archive/Genoa","commit_stats":null,"previous_names":["coveros-archive/genoa","coveros/genoa"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coveros-Archive%2FGenoa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coveros-Archive%2FGenoa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coveros-Archive%2FGenoa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coveros-Archive%2FGenoa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Coveros-Archive","download_url":"https://codeload.github.com/Coveros-Archive/Genoa/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248537135,"owners_count":21120709,"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":["gitops","gitops-controller","helm-operator","kubernetes","kubernetes-operator"],"created_at":"2024-09-26T02:29:58.499Z","updated_at":"2025-04-12T08:09:29.979Z","avatar_url":"https://github.com/Coveros-Archive.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Genoa\nWIP: Opinionated webhook based GitOps controller that installs and manages helm (v3) releases from configured github/gitlab repositories\n\nGenoa does two important things:\n\n* Allows you to manage your helm releases in a GitOps fashion using a custom resource definitions of the chart name, version, and values\n* Responds to git webhook invocations when those resource definitions change (gitops)\n\n![image info](./pictures/genoa.png)\n\n## Installing the Chart\nYou can install the chart with the release name `genoa` as below.\n\nFrom this repository, create your own `genoa.values.yaml` file and install the chart:\n\n```console\n$ kubectl create ns genoa\n$ helm upgrade genoa charts/genoa --install --namespace=genoa --values=genoa.values.yaml\n```\nNOTE: For custom helm repositories, you need to tell Genoa about them with the `config.helmRepos` in your Genoa values.yaml file.\nThe  can be viewed in `repositories.yaml` file in this repository or in chart values file: .Values.config.helmRepos\n\n## Using Genoa\nAfter installing the Genoa helm chart it creates `releases.coveros.apps.com` as a CRD in the cluster. You use Genoa by creating `release` CRs\nthat describe the helm releases you want to manage.\n\nSee [./sample-releases](./sample-releases) for examples of release CRs. \n\nSee [api/v1alpha1/release_types.go](api/v1alpha1/release_types.go) for a full spec of the values you can put in a release.\n\nSide note: Genoa can adopt existing helm releases by simply building a release.yaml to represent the current chart and values\n\nAnnotations that control the release:\n```\n  annotations:\n    \"coveros.apps.genoa/autoDeleteNamespace\": \"true\" # DISABLED. delete namespace when release is deleted\n    \"coveros.apps.genoa/follow-git-branch\": \"master\" # which branch this follows for webhook\n    \"coveros.apps.genoa/notification-channel-id\": \"YOUR_SLACK_CHANNEL_ID\" # who to notify\n```\n\nImportant fields for every release:\n```\n  chart: stable/jenkins # req: what chart\n  version: 2.4.1        # req: pin a version\n  values: # values files for the helm chart\n    master:\n      adminUser: admin\n      adminPassword: secRet!\n    persistence:\n      enabled: false\n```\n\nTODO:\n* How to set up slack notifications with \"slack app oauth token\"\n\n### Registering the webhook\n\nTo enable Gitops behavior, you need to set your Git server with a webhook to invoke the controller when\nyour helm release CRs change in Git. Your `genoa.values.yaml` file needs to include these things:\n\n```\nconfig:\n  github: # example for github\n     enabled: true\n     accessToken: xxxxxxxxx # user or deploy key as access token to authenticate to github to fetch code\n     webhookSecret: abc123xyz # generate this from a ruby -rsecurerandom -e 'puts SecureRandom.hex(20)'\n     deployDir: /deploy # the directory where you have your release.yaml files live in the repo\n```\nCreate these, then install the chart and it will tell you what to register in github as part of the notes.\n\n## Use cases for genoa\n\nNeed to think through how you could do complicated things.\n\n* Simple case where you have a /deploy directory which notifices single cluster for helm release changes\n* Case where you have directories representing individual clusters (or even namespaces)\n* Case where you have separate repositories representing clusters or namespaces\n* Complicated case where /global-deploy directory notifies multiple clusters that a central helm release has changed and therefore should be deployed to multiple clusters. Could use CR branch tags to test on a branch first in a particular cluster, then use the master branch to roll out to all clusters.\n\n\n## Contributing\n\nPre-req:\n* golang 1.14.1\n* kube builder KubeBuilderVersion:“2.3.1”,\n\n\nBuilding:\n\nSet your context to something harmless (docker-for-desktop)\n\n```\nmake local-build\n...\ngo mod tidy\ngo: downloading google.golang.org/appengine v1.6.5\n...\n\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoveros-archive%2Fgenoa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoveros-archive%2Fgenoa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoveros-archive%2Fgenoa/lists"}