Contributing
The canonical contributing guide is CONTRIBUTING.md in the repo. This page is a quick summary; please read that one for the full policy.
In scope
- Improving the NUT setup, client, and exporter scripts
- New per-host shutdown recipes (UniFi, Synology, TrueNAS, LG TVs, …)
- The Go CLI + TUI (Cobra subcommands, Bubble Tea screens)
- The SSH executor + role implementations
- Better docs, screenshots, examples
- Notification integrations
Out of scope
- Replacing NUT or nut-webgui with a custom implementation
- Enterprise / HA features
- Per-distro packaging beyond Debian/Ubuntu (PRs welcome but not a priority)
Before you open a PR
- Test locally. Most setup happens on real machines — there's no CI substitute for running
setup-server.shon a fresh VM or driving the daemon against a real UPS. - Run the linters:
- Go:
make lint(golangci-lint) - Bash:
shellcheck scripts/**/*.sh ups-status.sh - Docs site:
pnpm --dir apps/docs lint
- Go:
- No host-specific values. Use generic placeholders in docs and examples:
- IPs:
192.0.2.10(RFC 5737 documentation range) - Hosts:
myhost,control-node,pi-rack - Users:
myuser,admin
- IPs:
- TODOs link to issues. Any
TODOorFIXMEin code must reference a GitHub issue:CI (// TODO(#42): handle multi-UPS hosts.github/workflows/todo-check.yml) enforces this.
How work is tracked
- ROADMAP.md — vision, phases, milestones
- TODOS.md — index of open issues (regenerate with
make todos) - Issues — grouped by
phase-Nlabels; filter bygood first issueif you're new
Code of Conduct
This project follows the Contributor Covenant. Be kind, assume good intent.