{"id":13461428,"url":"https://github.com/homeport/havener","last_synced_at":"2025-05-15T09:08:47.776Z","repository":{"id":33529790,"uuid":"156707008","full_name":"homeport/havener","owner":"homeport","description":"/ˈheɪvənə/ - Think of it as a swiss army knife for Kubernetes tasks","archived":false,"fork":false,"pushed_at":"2025-05-12T20:51:23.000Z","size":61867,"stargazers_count":330,"open_issues_count":12,"forks_count":9,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-05-12T21:37:56.689Z","etag":null,"topics":["cli","go","kubernetes","yaml"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/homeport.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,"zenodo":null}},"created_at":"2018-11-08T12:55:12.000Z","updated_at":"2025-05-12T20:21:54.000Z","dependencies_parsed_at":"2024-01-19T21:44:01.330Z","dependency_job_id":"d3b7a30a-284c-4891-b6d2-3cc00ecc57ac","html_url":"https://github.com/homeport/havener","commit_stats":{"total_commits":639,"total_committers":10,"mean_commits":63.9,"dds":0.5508607198748043,"last_synced_commit":"651f2224c831d005aa93347d2b938841081f7e13"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homeport%2Fhavener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homeport%2Fhavener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homeport%2Fhavener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homeport%2Fhavener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/homeport","download_url":"https://codeload.github.com/homeport/havener/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253829800,"owners_count":21970988,"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":["cli","go","kubernetes","yaml"],"created_at":"2024-07-31T11:00:38.788Z","updated_at":"2025-05-15T09:08:42.756Z","avatar_url":"https://github.com/homeport.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Havener /ˈheɪvənə/\n\n[![License](https://img.shields.io/github/license/homeport/havener.svg)](https://github.com/homeport/havener/blob/main/LICENSE)\n[![Go Report Card](https://goreportcard.com/badge/github.com/homeport/havener)](https://goreportcard.com/report/github.com/homeport/havener)\n[![Tests](https://github.com/homeport/havener/workflows/Tests/badge.svg)](https://github.com/homeport/havener/actions?query=workflow%3A%22Tests%22)\n[![Codecov](https://img.shields.io/codecov/c/github/homeport/havener/main.svg)](https://codecov.io/gh/homeport/havener)\n[![Go Reference](https://pkg.go.dev/badge/github.com/homeport/havener.svg)](https://pkg.go.dev/github.com/homeport/havener)\n[![Release](https://img.shields.io/github/release/homeport/havener.svg)](https://github.com/homeport/havener/releases/latest)\n\n![havener](.docs/images/logo.png?raw=true \"Havener logo - a pelican with pirate hat\")\n\n## Table of Contents\n\n- [Introduction](#introducing-havener)\n- [Ok, tell me more](#ok-tell-me-more)\n- [How do I get started](#how-do-i-get-started)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Introducing Havener\n\nIf you use a Kubernetes cluster, chances are very high that you use `kubectl` a lot. These are fine tools and allow you to do everything you need to do, but there are use cases where you end up with a very long `kubectl` command in your terminal. This is why we created `havener` to introduce a convenience wrapper around `kubectl`. Think of it as a swiss army knife for Kubernetes tasks. Possible use cases are for example executing a command on multiple pods at the same time, or retrieving usage details.\n\n## Ok, tell me more\n\nTo see a detail list of all havener commands, please refer to the command [documentation](/.docs/commands/havener.md).\n\nLike `kubectl`, `havener` relies on the Kubernetes configuration that can be set via the `KUBECONFIG` environment variable. It can also be provided with the `--kubeconfig` flag, which takes the path to the YAML file (for example `$HOME/.kube/config`).\n\n### Notable Use Cases\n\n#### Usage overview\n\n\u003e ![havener](.docs/images/havener-top.png?raw=true \"Havener terminal screenshot of top command\")\n\u003e Quickly get a live overview of the current cluster usage details, for example Load, CPU, and Memory of the cluster nodes.\n\n#### Pods in namespace overview\n\n\u003e ![havener](.docs/images/havener-watch.png?raw=true \"Havener terminal screenshot of watch command\")\n\u003e Watch pods in multiple namespaces with added colors to help identify the respective state.\n\n### Havener Commands\n\n- [havener events](.docs/commands/havener_events.md) - Show Kubernetes cluster events\n- [havener logs](.docs/commands/havener_logs.md) - Retrieve log files from all pods\n- [havener node-exec](.docs/commands/havener_node-exec.md) - Execute command on Kubernetes node\n- [havener pod-exec](.docs/commands/havener_pod-exec.md) - Execute command on Kubernetes pod\n- [havener top](.docs/commands/havener_top.md) - Shows CPU and Memory usage\n- [havener watch](.docs/commands/havener_watch.md) - Watch status of all pods in all namespaces\n\n## How do I get started\n\nThere are different ways to get `havener`. You are free to pick the one that makes the most sense for your use case.\n\n- On macOS systems, a Homebrew tap is available to install `havener`:\n\n  ```sh\n  brew install homeport/tap/havener\n  ```\n\n- Use a convenience script to download the latest release to install it in a suitable location on your local machine:\n\n  ```sh\n  curl -sL https://raw.githubusercontent.com/homeport/havener/main/scripts/download-latest.sh | bash\n  ```\n\n- Of course, you can also build it from source code (only for development):\n\n  ```sh\n  go install github.com/homeport/havener/cmd/havener\n  ```\n\n## Contributing\n\nWe are happy to have other people contributing to the project. If you decide to do that, here's how to:\n\n- get Go (`havener` requires Go version 1.20 or greater)\n- fork the project\n- create a new branch\n- make your changes\n- open a PR.\n\nGit commit messages should be meaningful and follow the rules nicely written down by [Chris Beams](https://chris.beams.io/posts/git-commit/):\n\u003e The seven rules of a great Git commit message\n\u003e\n\u003e 1. Separate subject from body with a blank line\n\u003e 1. Limit the subject line to 50 characters\n\u003e 1. Capitalize the subject line\n\u003e 1. Do not end the subject line with a period\n\u003e 1. Use the imperative mood in the subject line\n\u003e 1. Wrap the body at 72 characters\n\u003e 1. Use the body to explain what and why vs. how\n\n### Running test cases and binaries generation\n\nThere are multiple make targets, but running `all` does everything you want in one call.\n\n```sh\nmake all\n```\n\n### Test it with Linux on your macOS system\n\nThe best way to test is to use Docker to spin up a container:\n\n```sh\ndocker run \\\n  --interactive \\\n  --tty \\\n  --rm \\\n  --volume $GOPATH/src/github.com/homeport/havener:/go/src/github.com/homeport/havener \\\n  --workdir /go/src/github.com/homeport/havener \\\n  golang:latest /bin/bash\n```\n\n### Package dependencies (Go modules)\n\nThe Go module setup can be frustrating, if you have to update Kubernetes API libraries. In general, using `go get` with a specific version based on a tag is known to work, for example `go get k8s.io/client-go@kubernetes-1.16.4`. In case you run into difficulties, please do not hesitate to reach out to us.\n\n## License\n\nLicensed under [MIT License](https://github.com/homeport/havener/blob/main/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhomeport%2Fhavener","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhomeport%2Fhavener","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhomeport%2Fhavener/lists"}