# Contributing

## Contributor's Agreement

You are under no obligation whatsoever to provide any bug fixes,
patches, or upgrades to the features, functionality or performance of
the source code ("Enhancements") to anyone; however, if you choose to
make your Enhancements available either publicly, or directly to the
project, without imposing a separate written license agreement for
such Enhancements, then you hereby grant the following license: a
non-exclusive, royalty-free perpetual license to install, use, modify,
prepare derivative works, incorporate into other computer software,
distribute, and sublicense such enhancements or derivative works
thereof, in binary and source code form.

## Technical Steering Committee

(in alphabetical order by surname)

- [Anderson, Jonathon](janderson@ciq.com) (CIQ)
- [Goll, Christian](cgoll@suse.de) (SUSE)
- [Hanks, John](griznog@gmail.com) (Chan Zuckerburg Biohub)
- [Kurtzer, Greg](gmk@ciq.com) (CIQ)
- [Siadal, Jeremy](jeremy.c.siadal@intel.com) (Intel)

TSC chair: Jonathon Anderson

## Pull requests

- All commits must be "Signed-off" (i.e., by using `git commit -s`),
  acknowledging that you agree to the [Developer Certificate of
  Origin](DCO.txt).

- All PRs should summarize the purpose of the PR in the attached
  GitHub conversation.

- Larger fixes or enhancemens should be discussed with the TSC or
  developers, e.g., on Slack or over Email.

- PRs should be sent to the `main` branch by default. A committer or
  the TSC may request that certain bug fixes also be submitted to a
  minor release branch.

- Follow existing code style precedent. For Go, you should mostly
  conform to the style and form enforced by the "go fmt" and "golint"
  tools for proper formatting.

- For any new functionality, please write appropriate go tests. These
  run as part of the continuous integration system.

- Make sure that the project's default copyright and header have been
  included in any new source files.

- Make sure your code passes linting, by running `make lint` before
  submitting the PR.

- Make sure you have locally tested using `make test` and that all
  tests succeed before submitting the PR.

- PRs which introduce a new Go dependency to the project should
  explain why the dependency is required. Any new dependency should be
  added to `LICENSE_DEPENDENCIES.md` by running
  `scripts/update-license-dependencies.sh`.

## Documentation

- The [README](README.md) is a place to document critical information
  for new users of Warewulf. It should typically not change, but in
  the case where a change is necessary a PR may update it.

- The [CHANGELOG](CHANGELOG.md) documents **functional** differences
  between versions of Warewulf, and should **not** read like a commit
  log.

  Once a release is tagged (*e.g.  v4.0.0*), a new top level section
  is made titled **Changes Since vX.Y.Z** (*e.g. Changes Since
  v4.0.0*) where new changes are documented, leaving the previous
  section immutable.

  The CHANGELOG must be updated for any of the following changes:
  - Renamed commands or subcommands
  - Deprecated / removed commands or subcommands
  - Changed defaults / behaviors
  - Backwards-incompatible changes
  - New features / functionalities

- The [user guide](https://warewulf.org/docs/) should document
  anything pertinent to the use of Warewulf. Changes to Warewulf
  functionality should simultaneously include pertinent updates to the
  user guide, which is maintained alongside the code under
  `userdocs/`.

## Branches

- Development occurs primarily on the `main` branch. This is the
  branch that most PRs should be submitted against unless otherwise
  directed.

- A minor release is accompanied by a minor branch named `v4.MINOR.x`
  from which patch releases may be generated.

- No other branches are maintained in the primary Warewulf repository.

## Maintaining

Additional policies regarding the maintenance of the Warewulf source
code, including roadmapping, merging, and release policies, is
documented at [MAINTAINING.md](MAINTAINING.md).
