3.9 KiB
Contributing
Welcome to the urfave/cli contributor docs! This goal of this document is to help those
interested in joining the 200+ humans who have contributed to this project over the years.
As a general guiding principle, the current maintainers may be notified via the @urfave/cli GitHub team.
All of the current maintainers are volunteers who live in various timezones with different scheduling needs, so please understand that your contribution or question may not get a response for many days.
semantic versioning adherence
The urfave/cli project strives to strictly adhere to semantic versioning. The active
development branches and the milestones and import paths to which they correspond are:
main branch
https://github.com/urfave/cli/tree/main
The majority of active development and issue management is targeting the main branch,
which MUST only receive bug fixes and feature additions.
- ➡️
v2.x - ➡️
github.com/urfave/cli/v2
v1 branch
https://github.com/urfave/cli/tree/v1
The v1 branch MUST only receive bug fixes in the v1.22.x series. There is no
strict rule regarding bug fixes to the v2.x series being backported to the v1.22.x
series.
- ➡️
v1.22.x - ➡️
github.com/urfave/cli
v3-dev-main branch
https://github.com/urfave/cli/tree/v3-dev-main
The v3-dev-branch MUST receive all bug fixes and features added to the main branch
and MAY receive feature removals and other changes that are otherwise
backward-incompatible with the v2.x series.
- ➡️
v3.x - unreleased / unsupported
development workflow
Most of the tooling around the development workflow strives for effective
dogfooding. There is a top-level
Makefile that is maintained strictly for the purpose of easing verification of one's
development environment and any changes one may have introduced:
make
Running the default make target (all) will ensure all of the critical steps are run to
verify one's changes are harmonious in nature. The same steps are also run during the
continuous integration
phase.
generated code
A significant portion of the project's source code is generated, with the goal being to
eliminate repetetive maintenance where other type-safe abstraction is impractical or
impossible with Go versions < 1.18. In a future where the eldest Go version supported is
1.18.x, there will likely be efforts to take advantage of
generics.
The built-in go generate command is used to run the commands specified in
//go:generate directives. Each such command runs a file that also supports a command
line help system which may be consulted for further information, e.g.:
go run internal/genflags/cmd/genflags/main.go --help
pull requests
Please feel free to open a pull request to fix a bug or add a feature. The @urfave/cli team will review it as soon as possible, giving special attention to maintaining backward compatibility. If the @urfave/cli team agrees that your contribution is in line with the vision of the project, they will work with you to get the code into a mergeable state, merged, and then released.
granting of commit bit / admin mode
Those with a history of contributing to this project will likely be invited to join the @urfave/cli team. As a member of the @urfave/cli team, you will have the ability to fully administer pull requests, issues, and other repository bits.
If you feel that you should be a member of the @urfave/cli team but have not yet been added, the most likely explanation is that this is an accidental oversight! 😅. Please open an issue!