git clone https://github.com/basecamp/basecamp-cli
cd basecamp-cli
bin/setup # Install toolchain and dev tools
make build # Build
bin/ci # Verify everything passesWhen developing against a local copy of basecamp-sdk, use Go workspaces instead of replace directives in go.mod:
# Set up workspace (one-time)
go work init .
go work use ../basecamp-sdk/go
# Now basecamp will use your local SDK automatically
go build ./...The go.work file is gitignored - your local setup won't affect the repo.
- Go 1.26+
- bats-core for integration tests
- golangci-lint for linting
- jq for CLI surface checks
-
Run CI locally before pushing:
bin/ci
This runs formatting, vetting, linting, unit tests, e2e tests, naming checks, CLI surface checks, provenance checks, and tidy checks. Fix anything that fails before pushing.
-
Add tests for new functionality
-
Update documentation if adding commands or changing behavior
-
Keep commits focused - one logical change per commit
- Run
make fmtbefore committing - Follow Effective Go conventions
- Follow Go Code Review Comments
basecamp-cli/
├── cmd/basecamp/ # Main entrypoint
├── internal/
│ ├── auth/ # OAuth authentication
│ ├── commands/ # CLI command implementations
│ ├── config/ # Configuration management
│ ├── output/ # Output formatting
│ └── sdk/ # Basecamp SDK wrapper
└── e2e/ # BATS end-to-end tests
make testRequires bats-core:
brew install bats-core # macOS
make test-e2eBASECAMP_BIN=./bin/basecamp bats e2e/Open an issue for questions about contributing.