This page outlines how to set up your development environment to build and develop with the DataRobot CLI.
GitHub CLI Recommendation: DataRobot recommends using the GitHub CLI (
gh) for fork management. All examples useghcommands. See the GitHub CLI installation guide if needed. If you prefer manual git workflow, you can replaceghcommands with equivalentgitoperations.
Task is required for running development tasks.
brew install go-task/tap/go-tasksh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/binchoco install go-task# Fork and clone in one command
gh repo fork datarobot-oss/cli --clone --default-branch-only
cd clitask dev-initThis will install all necessary development tools including linters and code formatters.
task dev-inittask dev-init runs lefthook install automatically, which sets up git hooks
that run quality checks before each commit. The hooks reuse Taskfile tasks
(task precommit, task dupcheck) so checks are always consistent between
local commits and CI. See Git hooks (lefthook) below for details.
task buildThe binary will be available at ./dist/dr.
./dist/dr self versionTo view all available tasks:
task --list| Task | Description |
|---|---|
task build |
Build the CLI binary. |
task test |
Run all tests. |
task test-coverage |
Run tests with a coverage report. |
task lint |
Run linters and code formatters. |
task fmt |
Format code. |
task clean |
Cleanly build artifacts. |
task dev-init |
Set up a development environment. |
task install-tools |
Install development tools. |
task run |
Run the CLI without building (e.g., task run -- templates list). |
task dupcheck |
Check for duplicate code (jscpd). |
task precommit |
Run pre-commit checks (format, tidy, vet, lint new changes). |
Always use task build for building the CLI. This ensures that:
- The version information from git is included
- The git commit hash is embedded
- The build timestamp is recorded
- The proper
ldflagsconfiguration is applied
# Standard build (recommended)
task build
# Run without building (for quick testing)
task run -- templates list# Run all tests (both unit and integration)
task test
# Run tests with coverage
task test-coverage
# Run specific test
go test ./cmd/auth/...For linting and formatting, this project uses the following tools:
golangci-lintfor comprehensive lintinggo fmtfor basic formattinggo vetfor suspicious constructsgoreleaser checkfor release configuration validation
# Run all linters (includes formatting)
task lint
# Format code only
task fmtWhen upgrading the Go version in go.mod, update golangci-lint if needed:
# 1. Check available versions at https://github.com/golangci/golangci-lint/releases
# 2. Update GOLANGCI_LINT_VERSION in Taskfile.yaml
# 3. Reinstall the binary
task install-tools
# 4. Verify linting works
task lintgolangci-lint is installed as a pre-built binary, so version mismatches with your project's Go version are handled automatically.
Lefthook enforces quality checks before each commit. It is a Go binary installed
by task install-tools and wired up by task dev-init (which runs lefthook install).
Hooks run automatically on git commit. Run manually with task precommit.
Bypass with LEFTHOOK=0 git commit (use sparingly). Configured hooks:
task precommit: formats via gofumpt, verifies Go files are formatted, runsgo mod tidy,go vet, andgolangci-lint run --new-from-rev HEAD(new changes only), verifies golangci-lint config, and checks go.mod/go.sum are tidytask dupcheck: duplicate code detection via jscpd (threshold and exclusions in.jscpd.json)
Both hooks reuse Taskfile tasks so there is a single source of truth for quality checks.
Configuration lives in lefthook.yml at the repository root.
- Project structure: Understand the codebase organization.
- Build guide: Detailed build information and architecture.
- Release process: Create and publish releases.