From 2911f979910aff01aabbc8aae520c427ec562bb3 Mon Sep 17 00:00:00 2001 From: Stefan Koelle Date: Sun, 9 Aug 2026 22:13:09 +0200 Subject: [PATCH] Add CHANGELOG, CONTRIBUTING, and GitHub Issue/PR templates for v0.2.0 --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 23 ++++++ .github/pull_request_template.md | 23 ++++++ CHANGELOG.md | 59 ++++++++++++++ CONTRIBUTING.md | 95 +++++++++++++++++++++++ 5 files changed, 238 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/pull_request_template.md create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..db91bfe --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug Report +about: Report a bug to help us improve kctl-tui +title: "" +labels: bug +assignees: "" +--- + +## Describe the Bug + +A clear description of what the bug is. + +## Steps to Reproduce + +1. Run `kctl-tui ...` +2. Select '...' +3. See error + +## Expected Behavior + +What you expected to happen. + +## Actual Behavior + +What actually happened. + +## Environment + +- OS: [e.g. Windows 11, Ubuntu 24.04, macOS 15] +- Go version: [e.g. 1.22.5] +- kctl-tui version: [e.g. v0.2.0] +- kubectl version: [e.g. v1.30.0] +- tmux/psmux version: [e.g. tmux 3.4, psmux latest] +- Terminal: [e.g. Windows Terminal, iTerm2, GNOME Terminal] + +## Additional Context + +Config file (without secrets), error logs, or screenshots. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..8f5a6d6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,23 @@ +--- +name: Feature Request +about: Suggest a new feature or improvement +title: "" +labels: enhancement +assignees: "" +--- + +## Problem + +What problem does this feature solve? + +## Proposed Solution + +Describe the solution you'd like. + +## Alternatives Considered + +Any alternative solutions or workarounds you considered. + +## Additional Context + +Any mockups, examples, or references. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..8aa2599 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,23 @@ +## Summary + +Brief description of what this PR does. + +## Changes + +- ... + +## Related Issues + +Closes # + +## Testing + +- [ ] `go vet ./...` passes +- [ ] `go test ./...` passes +- [ ] Manually tested on [OS] + +## Checklist + +- [ ] Code follows existing style +- [ ] No new comments added (unless necessary) +- [ ] CHANGELOG.md updated (if applicable) diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2d73060 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,59 @@ +# Changelog + +All notable changes to kctl-tui will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/). + +## [Unreleased] + +## [0.2.0] - 2026-08-09 + +### Added +- **Windows support** via [psmux](https://github.com/marlocarlo/psmux) as tmux-compatible multiplexer +- `install.ps1` PowerShell install script for Windows +- `--help` flag with full usage documentation +- `--version` / `-v` flag (set via `-ldflags` at build time) +- `kctl-tui doctor` command to verify tools, config and cluster connectivity +- `kctl-tui config check` command to validate `~/.kctl-tui/config.yaml` +- `--verbose` flag for debug logging of all kubectl/aws commands to stderr +- Binary secret value detection (`IsBinary`) — base64 or non-UTF-8 content is flagged +- ExternalSecret name validation before force-sync +- `CheckTool()` and `CheckAWSAuth()` helpers for pre-flight checks +- Diff table scroll support (j/k, up/down arrows) +- `--command pods` flag for k9s to start directly in pod view +- `--namespace` flag for k9s (Windows compatibility) + +### Fixed +- Tmux session cleanup: stale sessions are killed before creating new ones +- Panel path: uses `os.Executable()` instead of PATH lookup for correct binary +- k9s on Windows: `--namespace` instead of `-n`, direct pods view +- `--help` always shows usage and exits (no fallthrough to TUI) +- Unknown subcommands show error message + usage (exit 1) +- Panel quit: properly closes tmux session and exits +- Bubbles list filter disabled to prevent stuck filter state after tmux return + +### Changed +- Config uses `k8s_secret_name_template` for Kubernetes secret names (separate from AWS `secret_name_template`) +- Contexts resolved via template (`context_template`) instead of live kubectl discovery +- Panel redesigned: env-first menu (quit/beta/prod) with secrets sync + redeploy +- Full-mode navigation starts at team selection with default context +- `tea.ExecProcess` only used for `tmux attach` — setup commands run synchronously + +### Removed +- Context-pair logic (superseded by env-template based context resolution) +- Live kubectl discovery (superseded by config templates) + +## [0.1.0] - 2026-07-XX + +### Added +- Initial release with Bubble Tea TUI +- 3-pane tmux orchestration (control panel + 2x k9s) +- Team/namespace navigation with kubectl context switching +- Panel mode with redeploy and secrets diff/force-sync +- AWS SSO integration with interactive login prompt +- CI/CD pipeline with Go build and release +- Linux/macOS install script + +[Unreleased]: https://github.com/skoelle/kctl-tui/compare/v0.2.0...HEAD +[0.2.0]: https://github.com/skoelle/kctl-tui/compare/v0.1.0...v0.2.0 +[0.1.0]: https://github.com/skoelle/kctl-tui/releases/tag/v0.1.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5e5e03d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,95 @@ +# Contributing to kctl-tui + +Thanks for your interest in contributing! This document explains how to get +started. + +## Development Setup + +```bash +git clone https://github.com/skoelle/kctl-tui.git +cd kctl-tui +go mod download +``` + +### Prerequisites + +- Go 1.22+ +- kubectl, k9s, tmux (or psmux on Windows) +- An active Kubernetes cluster for integration testing + +### Running Locally + +```bash +go run ./cmd/kctl-tui +``` + +### Building + +```bash +go build -o kctl-tui ./cmd/kctl-tui +``` + +### With Version Tag + +```bash +go build -ldflags "-X main.version=v0.2.0" -o kctl-tui ./cmd/kctl-tui +``` + +## Project Structure + +``` +cmd/kctl-tui/ Entry points (main, full mode, panel mode) +internal/config/ YAML config loading and template resolution +internal/kctl/ Pure logic (secret diffing, template engine) +internal/kubeexec/ kubectl/aws/tmux wrappers (side effects only) +``` + +### Architecture Rules + +- **Pure logic** goes into `internal/kctl` or `internal/config` — no exec, no I/O. +- **Side effects** (running kubectl, aws, tmux) go into `internal/kubeexec`. +- **UI** lives in `cmd/kctl-tui/` — Bubble Tea models, views, handlers. +- Unit tests cover pure logic only. Side-effect packages are tested via + integration/manual tests. + +## Testing + +```bash +go vet ./... # static analysis +go test ./... # unit tests +``` + +There are no integration tests yet. Manual testing against a real cluster is +expected for UI and kubeexec changes. + +## Code Style + +- Standard Go formatting (`gofmt`). +- No comments unless the logic is non-obvious. +- Error messages should be actionable — tell the user what to fix. +- Log commands with `kubeexec.VerboseLog()` when `--verbose` is active. + +## Commits + +- One logical change per commit. +- Imperative mood in commit messages ("Add ...", "Fix ...", "Remove ..."). +- No co-authors in commits. + +## Pull Requests + +1. Fork the repo and create a feature branch. +2. Make your changes following the style guide above. +3. Run `go vet` and `go test`. +4. Open a PR against `main` with a clear description of what changed and why. +5. Reference any related issues. + +## Issues + +- Use the provided issue templates. +- Include your OS, Go version, and kctl-tui version. +- For bugs: steps to reproduce, expected vs actual behavior. + +## License + +By contributing, you agree that your contributions will be licensed under the +MIT License.