spf13/cobraApache-2.0adbc881Report / request removal

Repository Layout & Development Setup

This repository is a Go module for Cobra, with the module identity and dependency versions declared in go.mod. The main implementation is organized as Go source files, including cobra.go, command.go, platform-specific files, completion generators, and documentation generators.

The development setup exists to make formatting, dependency installation, tests, and linting repeatable before a change is submitted. The contribution guide also defines the expected fork, branch, test, commit, push, and pull-request path.

Sources: go.mod:1-10, cobra.go:15-18, command.go:66-86, command_win.go:15-26

Core concepts

Repository artifact

A repository artifact is a top-level project file with one ownership concern, such as dependencies, contribution rules, or maintainer metadata. The visible artifacts include Makefile, go.mod, CONTRIBUTING.md, CONDUCT.md, MAINTAINERS, and .mailmap.

Sources: Makefile:1-35, go.mod:1-10, CONDUCT.md:1-37, MAINTAINERS:1-13, .mailmap:1-3

Make target

A Make target is a named local-development operation exposed by Makefile, such as fmt, test, or lint.

Sources: Makefile:8-32

Contribution path

A contribution path is the ordered hand-off from a fork to a feature branch, local validation, a pushed branch, and a pull request.

Sources: CONTRIBUTING.md:39-47

What the repository files own

The visible repository files divide responsibilities so that project behavior, dependency selection, contribution procedure, policy, and identity metadata are not mixed together.

ArtifactOwnershipWhy it matters
MakefileDevelopment targetsDefines formatting, linting, testing, dependency installation, and cleanup operations.
go.modModule and dependenciesDeclares github.com/spf13/cobra, Go version 1.15, and required packages.
CONTRIBUTING.mdContributor procedureDocuments issue reporting, tests, formatting, forking, branching, commits, pushes, and pull requests.
CONDUCT.mdProject contractDescribes versioning, compatibility, deprecation, breaking changes, and CI testing expectations.
MAINTAINERSMaintainer namesLists active and inactive maintainer entries.
.mailmapAuthor identity mappingMaps contributor names and email addresses.
doc/ and completion source filesFeature-specific implementationThe shown paths include documentation generation and shell-completion implementation.

The source excerpts also show that platform-specific behavior is separated into command_win.go, which has a Windows build tag and imports mousetrap.

Sources: Makefile:1-35, go.mod:1-10, CONTRIBUTING.md:18-47, CONDUCT.md:1-37, MAINTAINERS:1-13, .mailmap:1-3, doc/md_docs.go:133-158, bash_completions.go:38-78, command_win.go:15-26

How local build checks run

The Makefile’s default target is all, and all runs fmt followed by test; this makes formatting and tests the standard combined check.

TargetLocal operationPurpose
allmake allRuns fmt and then test.
fmtmake fmtFails if gofmt reports any Go source file as unformatted, and prints the formatting diff.
lintmake lintRuns golangci-lint run -v.
testmake testInstalls dependencies, then runs go test -v $(GO_TEST_FLAGS) ./....
richtestmake richtestInstalls dependencies, then runs tests through richgo.
install_depsmake install_depsRuns go get -v ./....
cleanmake cleanRemoves the ./bin directory configured by BIN.

The test target depends on install_deps, so a normal test run downloads dependencies before executing the full package pattern. The lint target expects golangci-lint; when it is not found, the Makefile emits an installation hint. The contribution guide separately names go test./... and make test as supported ways to run tests, and recommends make all for formatting consistency.

The module declares github.com/spf13/cobra as its module path, requires Go 1.15, and lists dependencies for Markdown-to-man-page conversion, Windows mousetrap behavior, flag parsing, and YAML support. This dependency boundary explains why local setup should use the module metadata rather than manually choosing library versions.

Sources: Makefile:8-16, Makefile:22-24, Makefile:1-35, Makefile:22-32, Makefile:4-6, CONTRIBUTING.md:31-37, go.mod:1-10

How a change reaches a pull request

The expected workflow starts by forking the project, cloning the fork, creating a feature branch, making changes, running tests, staging and committing the work, pushing the branch, and opening a pull request.

Contribution workflow — How does a local change become a pull request?

Evidence

Before filing a bug, contributors should check existing issues; a bug report should include reproduction steps, the Cobra version, relevant environment details, and current versus expected behavior. Feature requests should have a clear title, description, and explanation of their benefit.

For code changes, contributors should provide adequate tests, run go test./... or make test, and run make all to check formatting and tests. A pull request prompts contributors to sign a CLA.

Sources: CONTRIBUTING.md:39-47, CONTRIBUTING.md:18-24, CONTRIBUTING.md:25-27, CONTRIBUTING.md:31-37, CONTRIBUTING.md:29-34

How it connects

The development targets validate the same Go source tree that implements Cobra’s command, flag, completion, documentation, and platform behavior.

For command behavior, continue with Cobra Overview, Command Tree & Registration, and Command Execution Flow. For generated documentation and completion code, see Man Page & Markdown Doc Generation, REST & YAML Doc Generation, and Dynamic Completion Engine.

Testing and automation details belong in Testing Patterns and CI, Linting & Release Automation, while Windows-specific implementation belongs in Windows Platform Support & Mousetrap.

Sources: command.go:66-86, doc/md_docs.go:133-158, command_win.go:15-26, CONTRIBUTING.md:31-37

Key takeaways

  • Makefile is the local entry point for formatting, linting, tests, dependency installation, and cleanup.
  • go.mod defines the module path, Go version, and required dependencies.
  • make all runs formatting checks and tests; make lint runs golangci-lint.
  • The expected contribution path is fork, clone, branch, test, commit, push, and pull request.
  • Code submissions should include adequate tests, pass formatting checks, and satisfy the project’s contribution rules.

Want this for your repos?

Try Angada AI Wiki