{"id":37215572,"url":"https://github.com/roadiehq/kubewise","last_synced_at":"2026-01-15T00:55:50.595Z","repository":{"id":48406632,"uuid":"247351407","full_name":"RoadieHQ/kubewise","owner":"RoadieHQ","description":"Get Helm notifications in your team chat","archived":false,"fork":false,"pushed_at":"2023-10-11T21:03:14.000Z","size":1539,"stargazers_count":62,"open_issues_count":14,"forks_count":5,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-12-26T16:41:04.139Z","etag":null,"topics":["bot","hangouts-chat","helm","kubernetes","kubernetes-cluster","slack","webhooks"],"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/RoadieHQ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2020-03-14T20:51:36.000Z","updated_at":"2025-05-05T21:35:11.000Z","dependencies_parsed_at":"2024-06-19T00:10:31.682Z","dependency_job_id":"a1c4c5ee-6626-4937-80ab-ef388d30c5b6","html_url":"https://github.com/RoadieHQ/kubewise","commit_stats":null,"previous_names":["larderdev/kubewise"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/RoadieHQ/kubewise","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoadieHQ%2Fkubewise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoadieHQ%2Fkubewise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoadieHQ%2Fkubewise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoadieHQ%2Fkubewise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RoadieHQ","download_url":"https://codeload.github.com/RoadieHQ/kubewise/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RoadieHQ%2Fkubewise/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28440914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"ssl_error","status_checked_at":"2026-01-15T00:55:20.945Z","response_time":107,"last_error":"SSL_read: 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":["bot","hangouts-chat","helm","kubernetes","kubernetes-cluster","slack","webhooks"],"created_at":"2026-01-15T00:55:49.791Z","updated_at":"2026-01-15T00:55:50.579Z","avatar_url":"https://github.com/RoadieHQ.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![KubeWise Mark and Name](./assets/kubewise-name-and-mark-487x127.png)\n\n![Go workflow status](https://github.com/RoadieHQ/kubewise/workflows/Go/badge.svg)\n\nKubeWise is a notifications bot for Helm 3. It notifies your team chat whenever a Helm chart is installed,\nupgraded, rolled back or uninstalled in your Kubernetes cluster.\n\n![A demo of KubeWise posting Slack messages as ZooKeeper is installed, upgraded and uninstalled](./assets/kubewise-demo.gif)\n\n# Supported Applications\n\n| Logo | Name | Supported |  |\n| ------------- | ------------- | ------------ | ------- |\n| ![Slack mark](./assets/slack-mark-50x50.png)  | [Slack](https://slack.com)  | ✅ | [Get started](#slack) |\n| ![Google Chat mark](./assets/googlechat-mark-50x50.png)  | [Google Hangouts Chat](https://gsuite.google.com/products/chat/)  | ✅ | [Get started](#google-hangouts-chat) |\n|  | Webhooks | ✅ | [Get started](#webhooks) |\n| ![Microsoft Teams mark](./assets/ms-teams-mark-50x50.png) | [Microsoft teams](https://products.office.com/en-us/microsoft-teams/group-chat-software) | ⏳ |  |\n\n📣 [Get notified when your chosen chat app is supported.](https://forms.gle/bWJAaaiYArMJ9hrYA)\n\n# Getting Started\n\nIn general, the getting started process has two steps:\n\n1. Create a bot in your team chat application.\n2. Install KubeWise, passing it an API token for the bot.\n\nSensitive tokens are stored securely in Kubernetes secrets. No data is ever sent to an external API (other\nthan your chosen team chat app obviously).\n\n## Slack\n\n### How it looks\n![Slack sample](./assets/slack-sample-935x422.png)\n\n### Step 1: Create the bot\n 1. Create a [Slack Bot](https://my.slack.com/services/new/bot) using Slack's admin controls.\n    - username: `kubewise`\n    - name: `KubeWise`\n    - icon: [Use this PNG file](https://raw.githubusercontent.com/RoadieHQ/kubewise/master/assets/kubewise-mark-blue-512x512.png)\n 2. Save it and grab the API token.\n 3. Invite the Bot into your channel by typing `/invite @kubewise` in your Slack channel.\n 4. Install KubeWise in your Kubernetes cluster. See below.\n\n### Step 2: Install KubeWise\n```shell\nkubectl create namespace kubewise\nhelm repo add roadie https://charts.roadie.io\nhelm install kubewise roadie/kubewise --namespace kubewise --set handler=slack --set slack.token=\"\u003capi-token\u003e\" --set slack.channel=\"#\u003cchannel\u003e\"\n```\n\nThat's it! From now on, Helm operations will result in a message in your chosen Slack channel.\n\n## Google Hangouts Chat\n\n### How it looks\n![Google Hangouts Chat sample](./assets/googlechat-sample-915x605.png)\n\n### Step 1: Create the bot\n 1. Open [Hangouts Chat](https://chat.google.com/) in your browser.\n 2. Go to the room to which you want to add a bot.\n 3. From the dropdown menu at the top of the page, select \"Configure webhooks\".\n 4. Under Incoming Webhooks, click ADD WEBHOOK.\n 5. Name the new webhook `KubeWise` and set the Avatar URL to `https://raw.githubusercontent.com/RoadieHQ/kubewise/master/assets/kubewise-mark-blue-512x512.png`.\n 6. Click SAVE.\n 7. Copy the URL listed next to your new webhook in the Webhook Url column. You will need this later.\n 8. Click outside the dialog box to close.\n\n### Step 2: Install KubeWise\n```shell\nkubectl create namespace kubewise\nhelm repo add roadie https://charts.roadie.io\nhelm install kubewise roadie/kubewise --namespace kubewise --set handler=googlechat --set googlechat.webhookUrl=\"\u003cwebhook-url\u003e\"\n```\n\n## Webhooks\n\nKubeWise can be used to send a JSON payload to an arbitrary endpoint when a Helm operation\noccurs.\n\n### How it looks\n\n```json\n{\n  \"appName\": \"zookeeper\",\n  \"appVersion\": \"3.5.5\",\n  \"namespace\": \"zookeeper\",\n  \"previousAppVersion\": \"3.2.1\",\n  \"action\": \"PRE_UNINSTALL\",\n  \"appDescription\": \"Keep your stuff in the zoo\",\n  \"installNotes\": \"... truncated notes ...\"\n}\n```\n\n### Step 1: Install KubeWise\n\n```shell\nkubectl create namespace kubewise\nhelm repo add roadie https://charts.roadie.io\nhelm install kubewise roadie/kubewise --namespace kubewise --set handler=webhook --set webhook.url=\"\u003cwebhook-url\u003e\"\n```\n\nThe optional parameter `webhook.method` is also supported. It defaults to `POST`.\n\nBasic authentication is supported via the `webhook.authToken=\"\u003capi-token\u003e\"` parameter. It will\nadd the following header to the request `\"Authorization\":\"Bearer \u003capi-token\u003e\"`.\n\n# Using KubeWise from outside a cluster\n\nIt is easy to use KubeWise from outside your Kubernetes cluster. It will pick up your local\n`kubectl` configuration and use it to speak to your cluster.\n\nFirst, download a binary from the [Releases page](https://github.com/RoadieHQ/kubewise/releases).\nFor OS X, you most likely need the `kubewise_0.7.4_Darwin_x86_64.tar.gz` release. Unzip it.\n\nBy default, Apple prevents you from running binaries which are downloaded from the internet. To\ncircumvent this, run the following against the downloaded binary.\n\n```shell\nxattr -d com.apple.quarantine ~/path/to/kubewise\n```\n\nYou should now be able to run it like this:\n\n```shell\nenv KW_HANDLER=slack KW_SLACK_CHANNEL=\"#\u003cchannel\u003e\" KW_SLACK_TOKEN=\"\u003capi-token\u003e\" ~/path/to/kubewise\n```\n\n# Multiple clusters in the same channel\n\nIt's common for teams to have multiple Kubernetes clusters running such as `staging` and `production`.\n\nKubeWise supports sending the notifications from all of your clusters to one place.\nIn order to tell the clusters apart, it is a good idea to use the `messagePrefix` feature.\n\n```shell\nhelm install kubewise roadie/kubewise --namespace kubewise --set messagePrefix=\"\\`production\\` \" --set handler=slack --set slack.token=\"\u003capi-token\u003e\" --set slack.channel=\"#\u003cchannel\u003e\"\n```\n\nThis will produce the following effect:\n\n![uninstalling ZooKeeper with a message prefix](./assets/message-prefix-sample-567x46.png)\n\n# Different namespaces in different channels\n\nIf you run your cluster with test and staging in different namespaces of the same cluster,\nyou may wish to send KubeWise notifications to different places for each namespace.\n\nThe best way to accomplish this is with multiple instances of KubeWise, each locked down to\na single namespace. KubeWise is small and uses few resources.\n\nTo accomplish this configuration with Helm, set `clusterRole.create=false`,\n`namespaceToWatch=\"production\"` and set (for example) `slack.channel=\"#production-cluster\"`.\n\nMake sure you install KubeWise into the `namespaceToWatch` by passing the `--namespace` flag\nto Helm.\n\nRepeat this process for as many namespaces as you wish, installing KubeWise in each one\nindividually.\n\n# Full configuration list\n\n| Parameter | Environment Variable Equivalent | Default | Description |\n| ------------- | ------------- | ------------ | ------- |\n| `handler` | `KW_HANDLER` | `slack` | The service to send the notifications to. Options are `slack`, `webhook` and `googlechat`. |\n| `slack.channel` | `KW_SLACK_CHANNEL` | `#general` | The Slack channel to send notification to when using the Slack handler. |\n| `slack.token` | `KW_SLACK_TOKEN` |  | The Slack API token to use. Must be provided by user. |\n| `webhook.method` | `KW_WEBHOOK_METHOD` | `POST` | The webhook HTTP method to use. |\n| `webhook.url` | `KW_WEBHOOK_URL` |  | The webhook URL to send the request to. |\n| `webhook.authToken` | `KW_WEBHOOK_AUTH_TOKEN` |  | An optional Bearer auth header to send with the request. |\n| `googlechat.webhookUrl` | `KW_GOOGLECHAT_WEBHOOK_URL` |  | The Google Hangouts Chat URL to use. Must be provided by user. |\n| `namespaceToWatch` | `KW_NAMESPACE` | `\"\"` | The cluster namespace to watch for Helm operations in. Leave blank to watch all namespaces. |\n| `messagePrefix` | `KW_MESSAGE_PREFIX` |  | A prefix for every notification sent. Often used to identify the cluster (production, staging etc). |\n| `chartValuesDiff.enabled` | `KW_CHART_VALUES_DIFF_ENABLED` | `false` | When `true`, KubeWise will log a diff of the chart values when a package is upgraded or rolled back. This is useful for visualizing changes between package versions. Be extremely careful with this feature as it can leak sensitive chart values. |\n| `image.repository` | | `roadiehq/kubewise` | Image repository |\n| `image.tag` | | `\u003cVERSION\u003e` | Image tag |\n| `replicaCount` | | `1` | Number of KubeWise pods to deploy. More than 1 is not desirable |\n| `image.pullPolicy` | | `IfNotPresent` | Image pull policy |\n| `imagePullSecrets` | | `[]` | Image pull secrets |\n| `nameOverride` | | `\"\"` | Name override |\n| `fullnameOverride` | | `\"\"` | Full name override |\n| `rbac.create` | | `true` | Set to false if you would prefer to bring your own RBAC settings. |\n| `clusterRole.create` | | `true` | Set to false to use non-cluster role bindings. Can be used in conjunction with `namespaceToWatch` to ensure that KubeWise only reports on changes in a single namespace. |\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froadiehq%2Fkubewise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froadiehq%2Fkubewise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froadiehq%2Fkubewise/lists"}