{"id":13471141,"url":"https://github.com/keel-hq/keel","last_synced_at":"2025-05-13T19:11:14.728Z","repository":{"id":38857634,"uuid":"93942998","full_name":"keel-hq/keel","owner":"keel-hq","description":"Kubernetes Operator to automate Helm, DaemonSet, StatefulSet \u0026 Deployment updates","archived":false,"fork":false,"pushed_at":"2025-04-09T07:09:37.000Z","size":36217,"stargazers_count":2544,"open_issues_count":204,"forks_count":288,"subscribers_count":34,"default_branch":"master","last_synced_at":"2025-05-12T11:15:32.381Z","etag":null,"topics":["automate","deployment","docker","golang","helm","keel","kubernetes","semver","trigger","webhook"],"latest_commit_sha":null,"homepage":"https://keel.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/keel-hq.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,"zenodo":null}},"created_at":"2017-06-10T14:07:09.000Z","updated_at":"2025-05-11T06:12:09.000Z","dependencies_parsed_at":"2024-01-24T21:02:58.192Z","dependency_job_id":"ab8eaf9d-a6e9-4b20-8982-a09b313d2ace","html_url":"https://github.com/keel-hq/keel","commit_stats":{"total_commits":1155,"total_committers":101,"mean_commits":"11.435643564356436","dds":0.2614718614718615,"last_synced_commit":"611ff29997d94285036f6fd180d74afe5cbaf7ca"},"previous_names":[],"tags_count":88,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keel-hq%2Fkeel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keel-hq%2Fkeel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keel-hq%2Fkeel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keel-hq%2Fkeel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keel-hq","download_url":"https://codeload.github.com/keel-hq/keel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254010824,"owners_count":21998993,"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":["automate","deployment","docker","golang","helm","keel","kubernetes","semver","trigger","webhook"],"created_at":"2024-07-31T16:00:40.448Z","updated_at":"2025-05-13T19:11:14.681Z","avatar_url":"https://github.com/keel-hq.png","language":"Go","funding_links":[],"categories":["Go","Operators vs Controllers","HarmonyOS","webhook","Kubernetes Operators","kubernetes","Configuration Management"],"sub_categories":["Reloaders","Windows Manager"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://keel.sh\" target=\"_blank\"\u003e\u003cimg width=\"100\"src=\"https://keel.sh/img/logo.png\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/keel-hq/keel\"\u003e\n    \u003cimg src=\"https://goreportcard.com/badge/github.com/keel-hq/keel\" alt=\"Go Report\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://img.shields.io/docker/pulls/keelhq/keel.svg\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/pulls/keelhq/keel.svg\" alt=\"Docker Pulls\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://drone-kr.webrelay.io/keel-hq/keel\"\u003e\n    \u003cimg src=\"https://drone-kr.webrelay.io/api/badges/keel-hq/keel/status.svg\" alt=\"Drone Status\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Keel - automated Kubernetes deployments for the rest of us\n\n* Website [https://keel.sh](https://keel.sh)\n* Slack - [kubernetes.slack.com](https://kubernetes.slack.com) look for channel #keel\n\nKeel is a tool for automating [Kubernetes](https://kubernetes.io/) deployment updates. Keel is stateless, robust and lightweight.\n\nKeel provides several key features:\n\n* __[Kubernetes](https://kubernetes.io/) and [Helm](https://helm.sh) providers__ - Keel has direct integrations with Kubernetes and Helm.\n\n* __No CLI/API__ - tired of `f***ctl` for everything? Keel doesn't have one. Gets job done through labels, annotations, charts.\n\n* __Semver policies__ - specify update policy for each deployment/Helm release individually.\n\n* __Automatic [Google Container Registry](https://cloud.google.com/container-registry/) configuration__ - Keel automatically sets up topic and subscriptions for your deployment images by periodically scanning your environment.\n\n* __[Native, DockerHub, Quay and Azure container registry webhooks](https://keel.sh/docs/#triggers) support__ -  once webhook is received impacted deployments will be identified and updated.\n\n*  __[Polling](https://keel.sh/docs/#polling)__ - when webhooks and pubsub aren't available - Keel can still be useful by checking Docker Registry for new tags (if current tag is semver) or same tag SHA digest change (ie: `latest`).\n\n* __Notifications__ - out of the box Keel has Slack, Hipchat, Mattermost and standard webhook notifications, more info [here](https://keel.sh/docs/#notifications)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://keel.sh\" target=\"_blank\"\u003e\u003cimg width=\"700\"src=\"https://keel.sh/img/keel_high_level.png\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### Support\n\nSupport Keel's development by:\n* Star this repository\n* [Follow on Twitter](https://twitter.com/keel_hq)\n\n### Helm quick start\n\nPrerequisites:\n\n* [Helm](https://docs.helm.sh/using_helm/#installing-helm)\n* Kubernetes\n\nYou need to add this Chart repo to Helm:\n\n```bash\nhelm repo add keel https://keel-hq.github.io/keel/ \nhelm repo update\n```\n\nInstall through Helm (with Helm provider enabled by default):\n\n```bash\nhelm upgrade --install keel --namespace=kube-system keel/keel\n```\n\nIf you work mostly with regular Kubernetes manifests, you can install Keel without Helm provider support:\n\n```bash\nhelm upgrade --install keel --namespace=keel keel/keel --set helmProvider.enabled=\"false\" \n```\n\nTo install for Helm v3, set helmProvider.version=\"v3\" (default is \"v2\"):\n\n```bash\nhelm install keel keel/keel --set helmProvider.version=\"v3\" \n```\n\nTo install using terraform:\n\n```terraform\nresource \"helm_release\" \"keel\" {\n  provider   = helm.helm\n  name       = \"keel\"\n  namespace  = \"keel\"\n  repository = \"https://keel-hq.github.io/keel\"\n  chart      = \"keel\"\n  version    = \"v1.0.4\"\n\n  set {\n    name  = \"basicauth.enabled\"\n    value = \"true\"\n  }\n\n  set {\n    name  = \"basicauth.user\"\n    value = \"admin\"\n  }\n\n  set {\n    name  = \"basicauth.password\"\n    value = \"admin\"\n  }\n\n  set {\n    name  = \"image.repository\"\n    value = \"keelhq/keel\"\n  }\n\n  set {\n    name  = \"image.tag\"\n    value = \"0.19.1\"\n  }\n}\n```\n\nThat's it, see [Configuration](https://github.com/keel-hq/keel#configuration) section now.\n\n### Quick Start\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://keel.sh\" target=\"_blank\"\u003e\u003cimg width=\"700\"src=\"https://keel.sh/img/examples/force-workflow.png\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nA step-by-step guide to install Keel on your Kubernetes cluster is viewable on the Keel website:\n\n[https://keel.sh/examples/#example-1-push-to-deploy](https://keel.sh/examples/#example-1-push-to-deploy)\n\n### Configuration\n\nOnce Keel is deployed, you only need to specify update policy on your deployment file or Helm chart:\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata: \n  name: wd\n  namespace: default\n  labels: \n    name: \"wd\"\n  annotations:\n    keel.sh/policy: minor # \u003c-- policy name according to https://semver.org/\n    keel.sh/trigger: poll # \u003c-- actively query registry, otherwise defaults to webhooks\nspec:\n  template:\n    metadata:\n      name: wd\n      labels:\n        app: wd        \n    spec:\n      containers:                    \n        - image: karolisr/webhook-demo:0.0.8\n          imagePullPolicy: Always            \n          name: wd\n          command: [\"/bin/webhook-demo\"]\n          ports:\n            - containerPort: 8090\n```\n\nNo additional configuration is required. Enabling continuous delivery for your workloads has never been this easy!\n\n### Documentation\n\nDocumentation is viewable on the Keel Website:\n\n[https://keel.sh/docs/#introduction](https://keel.sh/docs/#introduction)\n\n\n### Contributing\n\nBefore starting to work on some big or medium features - raise an issue [here](https://github.com/keel-hq/keel/issues) so we can coordinate our efforts. \n\nWe use pull requests, so:\n\n1. Fork this repository\n2. Create a branch on your local copy with a sensible name\n3. Push to your fork and open a pull request\n\n### Developing Keel\n\nIf you wish to work on Keel itself, you will need Go 1.12+ installed. Make sure you put Keel into correct Gopath and `go build` (dependency management is done through [dep](https://github.com/golang/dep)). \n\nTo test Keel while developing:\n\n1. Launch a Kubernetes cluster like Minikube or Docker for Mac with Kubernetes.\n2. Change config to use it: `kubectl config use-context docker-for-desktop`\n3. Build Keel from `cmd/keel` directory. \n4. Start Keel with: `keel --no-incluster`. This will use Kubeconfig from your home. \n\n### Debugging Keel on Windows\n\n```powershell\n# Ensure we have gcc and go\nchoco upgrade mingw -y\nchoco upgrade golang -y\n\n# Move and build\ncd cmd/keel\ngo build\n\n$Env:XDG_DATA_HOME      = $Env:APPDATA; # Data volume for the local database\n$Env:HOME               = $Env:USERPROFILE; # This is where the .kube/config will be read from\n$Env:KUBERNETES_CONTEXT = \"mycontext\" #Use if you have more than one context in .kube/config\n\n.\\keel --no-incluster\n```\n\n### Running unit tests\n\nGet a test parser (makes output nice):\n\n```bash\ngo get github.com/mfridman/tparse\n```\n\nTo run unit tests:\n\n```bash\nmake test\n```\n\n### Running e2e tests\n\nPrerequisites:\n- configured kubectl + kubeconfig\n- a running cluster (test suite will create testing namespaces and delete them after tests)\n- Go environment (will compile Keel before running)\n\nOnce prerequisites are ready:\n\n```bash\nmake e2e\n```\n\n### Debugging keel inside the container against your remote cluster (Windows)\n\nThe repository contains a debug version of keel container ready for remote debugging.\n\nYou can start the debug container with powershell (docker desktop needed):\n\n```powershell\n.\\build.ps1 -StartDebugContainers\n```\n\nTo connect to your cluster, copy the authentication details from within the keel pod in your cluster from:\n\n```\n/var/run/secrets/kubernetes.io/serviceaccount\n```\n\nto the serviceaccount folder at the root of the repository and make sure you set the environment variable for the K8S management API endpoint:\n\n```powershell\n# This can be configured in envesttings.ps1 to be picked up automatically by the build script\n$ENV:KUBERNETES_SERVICE_HOST = \"mycluster-o5ff3caf.hcp.myregion.azmk8s.io\"\n$ENV:KUBERNETES_SERVICE_PORT = \"443\"\n```\n\nAnd make sure your API server is accesible from your client (VPN, IP whitelisting or whatever you use to secure your cluster management API).\n\nOnce started, simply use the debug option in a Go debugger, such as Jetbrains GoLand:\n\n[Debugging a Go application inside a Docker container | The GoLand Blog](https://blog.jetbrains.com/go/2020/05/06/debugging-a-go-application-inside-a-docker-container/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeel-hq%2Fkeel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeel-hq%2Fkeel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeel-hq%2Fkeel/lists"}