Skip to content

Latest commit

 

History

History
91 lines (66 loc) · 2.81 KB

File metadata and controls

91 lines (66 loc) · 2.81 KB

Contributing to flow

flow is deliberately small. Read the Philosophy:

Does this help someone understand their network in under one second? If no — cut it.

PRs adding CPU panels, ping, packet counts, multi-pane layouts, or tabs will be declined regardless of code quality. Open an issue first.

UI changes should preserve the current split between data collection, state updates, and rendering. Keep motion spring-driven, pulses brief, and drawing cheap. Avoid border-heavy layouts or anything that reintroduces dashboard clutter.

Setup

Requires Go 1.24+ and git.

git clone https://github.com/programmersd21/flow
cd flow
make build
./bin/flow --version

Install golangci-lint (https://golangci-lint.run/):

curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \
  | sh -s -- -b $(go env GOPATH)/bin v2.1.6

Check suite

Run before every PR:

make check

Runs fmt-check, vet, lint, test, race, and build in sequence. CI runs make check.

Command What it does
make build go build with ldflags from VERSION
make fmt go fmt ./...
make vet go vet ./...
make lint golangci-lint run ./... (pinned v2.1.6)
make test go test ./...
make race go test -race ./...
make check strict quality gate (fmt, vet, lint, test, race, build)
make dev-check fast local check skipping lint
make bench run cpu/alloc benchmarks
make cross CGO-free cross builds
make smoke run binary smoke tests
make clean removes bin/ and dist/

Commits

Conventional Commits recommended, not enforced. Subject under 72 chars. Use "Closes #N" in the body when applicable.

feat: add --no-header flag
fix: prevent sparkline crash on width < 10
docs: clarify tmux integration
refactor: extract formatBytes helper

Branch protection

main requires the CI status check before merge. Enable in Settings > Branches > Branch protection rules and add the check named check (the quality gate job in ci.yml).

Versioning and releases

The VERSION file is the single source of truth. Never hardcode a version string elsewhere. The build injects it via -ldflags "-X main.version=$(cat VERSION)".

Releases are cut via the Release workflow (workflow_dispatch):

  1. Update CHANGELOG.md with the new version section.
  2. Bump VERSION.
  3. Merge the PR.
  4. Run the Release workflow from GitHub Actions.

Code of Conduct

This project follows the Contributor Covenant v2.1. See CODE_OF_CONDUCT.md.