Update CONTRIBUTING with TSC and initial policies

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2023-10-10 10:44:04 -06:00
parent 016db99ecc
commit 03fe1a4434
4 changed files with 840 additions and 17 deletions

3
.gitignore vendored
View File

@@ -29,4 +29,5 @@ Defaults.mk
userdocs/_* userdocs/_*
userdocs/reference/* userdocs/reference/*
/warewulf-?.?.?/ /warewulf-?.?.?/
*.coverprofile *.coverprofile
LICENSE_DEPENDENCIES.csv

View File

@@ -2,23 +2,205 @@
## Contributor's Agreement ## Contributor's Agreement
You are under no obligation whatsoever to provide any bug fixes, patches, or You are under no obligation whatsoever to provide any bug fixes,
upgrades to the features, functionality or performance of the source code patches, or upgrades to the features, functionality or performance of
("Enhancements") to anyone; however, if you choose to make your Enhancements the source code ("Enhancements") to anyone; however, if you choose to
available either publicly, or directly to the project, without imposing a make your Enhancements available either publicly, or directly to the
separate written license agreement for such Enhancements, then you hereby grant project, without imposing a separate written license agreement for
the following license: a non-exclusive, royalty-free perpetual license to such Enhancements, then you hereby grant the following license: a
install, use, modify, prepare derivative works, incorporate into other computer non-exclusive, royalty-free perpetual license to install, use, modify,
software, distribute, and sublicense such enhancements or derivative works prepare derivative works, incorporate into other computer software,
distribute, and sublicense such enhancements or derivative works
thereof, in binary and source code form. thereof, in binary and source code form.
## Getting Started ## Technical Steering Committee
When contributing to Warewulf, it is important to properly communicate the gist (in alphabetical order by surname)
of the contribution. If it is a simple code or editorial fix, simply explaining
this within the GitHub Pull Request (PR) will suffice. But if this is a larger
fix or Enhancement, you are advised to first discuss the change with the
project leader or developers.
All commits must be "Signed-off" by using `git commit -s`, acknowledging that - [Anderson, Jonathon](janderson@ciq.com) (CIQ)
you agree to the [Developer Certificate of Origin](DCO.txt). - [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)
## 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.
## Merging
- All new contributions to the project should first be merged through
a PR to the `main` branch.
- Patches to a minor branch should be copied ("cherry-picked") from a
previously-merged PR.
- Each PR must, prior to merge, be reviewed and approved by a
committer other than the author of the PR.
- Before approving of a PR, an approver must confirm that
- all lint checks and tests pass with the given PR;
- new tests to cover the change have been added as appropriate;
- all commits in the PR have an appropriate DCO “Signed-Off-By”;
- documentation, including (but not necessarily limited to) the
CHANGELOG and user guide, have been updated appropriately.
- Any committer may, at his discretion, merge a PR that has the
requisite approvals and for which all tests are passing. This
includes, but is not limited to, a reviewer of the PR or the author
of the PR.
- Committers should consider the current roadmap when choosing to
approve or merge a given PR. For example, proper and successful
bugfixes are likely always appropriate to merge. However, new
features may not be appropriate to merge if they are not included in
the next milestone. New features which incompatibly alter existing
interfaces or behavior should not be approved or merged unless
included in the current milestone.
- Committers which approve or merge PRs which are disruptive to the
current milestone may have their committer access revoked by the
TSC.
## Roadmapping
- The project roadmap is formally defined by GitHub milestones
associated with the primary Warewulf repository.
- The roadmap, and its milestones, are drafted and managed by the TSC
chair to reflect and codify the priorities of the TSC and the
community. Definition of the roadmap includes, but is not limited to
- the name, description, and due date for each milestone;
- the issues and PRs associated with a given milestone.
- Only the TSC chair may assign issues to or remove issues from
milestones. The TSC chair has proactive discretion to assign or move
issues to reflect and codify the priorities of the TSC and the
community, but may not act in opposition to the direction of the
TSC.
- Requests for changes to the roadmap that are made in the Warewulf
community meeting are recorded in the Warewulf community journal.
## Releases
- Warewulf releases follow a `MAJOR.MINOR.PATCH` format.
- Releases are generated by an automated process encoded as a GitHub
actions workflow.
- All releases must pass the full Warewulf test suite.
- Releases are published by a member of the TSC at the direction of
the TSC.
- Each release is accompanied by an updated changelog.
### Major releases
- All releases occur within major version “4.”
### Minor releases
- A minor release is denoted by a tag named `v4.MINOR.0`.
- A minor release candidate is denoted by a tag named
`v4.MINOR.0rcNUMBER`, where `NUMBER` begins at “1” and increments
for each candidate for the given minor release.
- Minor releases are defined by a previously-planned milestone named
for the projected release.
- A minor release candidate may be published by the TSC when all
functional issues and pull requests in the associated milestone are
closed. (e.g., documentation issues and pull requests may remain.)
This may also be accomplished by the TSC re-scoping the associated
milestone (e.g., by moving issues or pull requests to a different
milestone).
- A minor release may be published by the TSC two weeks after a
release candidate if no major defects have been found in the release
candidate and there are no open issues or pull requests.
### Patch releases
- A patch release is denoted by a tax named `v4.MINOR.PATCH` where
`PATCH` is greater than `0`, and tags a commit on a minor branch.
- The TSC may identify changes in the “main” branch to be ported to a
minor branch.
- A patch release may be published by the TSC whenever one or more
changes have been ported to a minor branch.

577
LICENSE_DEPENDENCIES.md Normal file
View File

@@ -0,0 +1,577 @@
# Dependency Licenses
This project uses a number of dependencies, in accordance with their
own license terms. These dependencies are managed via the project
`go.mod` and `go.sum` files, and included in a `vendor/` directory in
our official source tarballs.
A full build or package of Warewulf uses all dependencies listed
below. If you `import "github.com/hpcng/warewulf"` into your own
project then you may use a subset of them.
The dependencies and their licenses are as follows:
## github.com/containerd/containerd/errdefs
**License:** Apache-2.0
**License URL:** <https://github.com/containerd/containerd/blob/master/errdefs/LICENSE>
## github.com/containers/image/v5
**License:** Apache-2.0
**License URL:** <https://github.com/containers/image/blob/master/v5/LICENSE>
## github.com/containers/libtrust
**License:** Apache-2.0
**License URL:** <https://github.com/containers/libtrust/blob/master/LICENSE>
## github.com/containers/ocicrypt
**License:** Apache-2.0
**License URL:** <https://github.com/containers/ocicrypt/blob/master/LICENSE>
## github.com/containers/storage
**License:** Apache-2.0
**License URL:** <https://github.com/containers/storage/blob/master/LICENSE>
## github.com/coreos/go-semver/semver
**License:** Apache-2.0
**License URL:** <https://github.com/coreos/go-semver/blob/master/semver/LICENSE>
## github.com/coreos/go-systemd/daemon
**License:** Apache-2.0
**License URL:** <https://github.com/coreos/go-systemd/blob/master/daemon/LICENSE>
## github.com/coreos/go-systemd/v22/unit
**License:** Apache-2.0
**License URL:** <https://github.com/coreos/go-systemd/blob/master/v22/unit/LICENSE>
## github.com/coreos/ignition/v2/config
**License:** Apache-2.0
**License URL:** <https://github.com/coreos/ignition/blob/master/v2/config/LICENSE>
## github.com/coreos/vcontext
**License:** Apache-2.0
**License URL:** <https://github.com/coreos/vcontext/blob/master/LICENSE>
## github.com/digitalocean/go-smbios/smbios
**License:** Apache-2.0
**License URL:** <https://github.com/digitalocean/go-smbios/blob/master/smbios/LICENSE.md>
## github.com/docker/distribution
**License:** Apache-2.0
**License URL:** <https://github.com/docker/distribution/blob/master/LICENSE>
## github.com/docker/docker
**License:** Apache-2.0
**License URL:** <https://github.com/docker/docker/blob/master/LICENSE>
## github.com/docker/go-connections
**License:** Apache-2.0
**License URL:** <https://github.com/docker/go-connections/blob/master/LICENSE>
## github.com/docker/go-metrics
**License:** Apache-2.0
**License URL:** <https://github.com/docker/go-metrics/blob/master/LICENSE>
## github.com/docker/go-units
**License:** Apache-2.0
**License URL:** <https://github.com/docker/go-units/blob/master/LICENSE>
## github.com/golang/glog
**License:** Apache-2.0
**License URL:** <https://github.com/golang/glog/blob/master/LICENSE>
## github.com/matttproud/golang_protobuf_extensions/pbutil
**License:** Apache-2.0
**License URL:** <https://github.com/matttproud/golang_protobuf_extensions/blob/master/pbutil/LICENSE>
## github.com/moby/sys/mountinfo
**License:** Apache-2.0
**License URL:** <https://github.com/moby/sys/blob/master/mountinfo/LICENSE>
## github.com/opencontainers/go-digest
**License:** Apache-2.0
**License URL:** <https://github.com/opencontainers/go-digest/blob/master/LICENSE>
## github.com/opencontainers/image-spec/specs-go
**License:** Apache-2.0
**License URL:** <https://github.com/opencontainers/image-spec/blob/master/specs-go/LICENSE>
## github.com/opencontainers/runc/libcontainer
**License:** Apache-2.0
**License URL:** <https://github.com/opencontainers/runc/blob/master/libcontainer/LICENSE>
## github.com/opencontainers/runtime-spec/specs-go
**License:** Apache-2.0
**License URL:** <https://github.com/opencontainers/runtime-spec/blob/master/specs-go/LICENSE>
## github.com/opencontainers/umoci
**License:** Apache-2.0
**License URL:** <https://github.com/opencontainers/umoci/blob/master/COPYING>
## github.com/opencontainers/umoci/third_party/shared
**License:** Apache-2.0
**License URL:** <https://github.com/opencontainers/umoci/blob/master/third_party/shared/COPYING>
## github.com/opencontainers/umoci/third_party/user
**License:** Apache-2.0
**License URL:** <https://github.com/opencontainers/umoci/blob/master/third_party/user/LICENSE>
## github.com/pquerna/ffjson/fflib/v1
**License:** Apache-2.0
**License URL:** <https://github.com/pquerna/ffjson/blob/master/fflib/v1/LICENSE>
## github.com/prometheus/client_golang/prometheus
**License:** Apache-2.0
**License URL:** <https://github.com/prometheus/client_golang/blob/master/prometheus/LICENSE>
## github.com/prometheus/client_model/go
**License:** Apache-2.0
**License URL:** <https://github.com/prometheus/client_model/blob/master/go/LICENSE>
## github.com/prometheus/common
**License:** Apache-2.0
**License URL:** <https://github.com/prometheus/common/blob/master/LICENSE>
## github.com/prometheus/procfs
**License:** Apache-2.0
**License URL:** <https://github.com/prometheus/procfs/blob/master/LICENSE>
## github.com/rootless-containers/proto/go-proto
**License:** Apache-2.0
**License URL:** <https://github.com/rootless-containers/proto/blob/master/go-proto/COPYING>
## github.com/spf13/cobra
**License:** Apache-2.0
**License URL:** <https://github.com/spf13/cobra/blob/master/LICENSE.txt>
## github.com/stefanberger/go-pkcs11uri
**License:** Apache-2.0
**License URL:** <https://github.com/stefanberger/go-pkcs11uri/blob/master/LICENSE>
## github.com/vbatts/go-mtree/pkg/govis
**License:** Apache-2.0
**License URL:** <https://github.com/vbatts/go-mtree/blob/master/pkg/govis/COPYING>
## google.golang.org/genproto
**License:** Apache-2.0
**Project URL:** <https://google.golang.org/genproto>
## google.golang.org/grpc
**License:** Apache-2.0
**Project URL:** <https://google.golang.org/grpc>
## gopkg.in/square/go-jose.v2
**License:** Apache-2.0
**Project URL:** <https://gopkg.in/square/go-jose.v2>
## gopkg.in/yaml.v2
**License:** Apache-2.0
**Project URL:** <https://gopkg.in/yaml.v2>
## github.com/pkg/errors
**License:** BSD-2-Clause
**License URL:** <https://github.com/pkg/errors/blob/master/LICENSE>
## github.com/russross/blackfriday/v2
**License:** BSD-2-Clause
**License URL:** <https://github.com/russross/blackfriday/blob/master/v2/LICENSE.txt>
## github.com/syndtr/gocapability/capability
**License:** BSD-2-Clause
**License URL:** <https://github.com/syndtr/gocapability/blob/master/capability/LICENSE>
## github.com/cyphar/filepath-securejoin
**License:** BSD-3-Clause
**License URL:** <https://github.com/cyphar/filepath-securejoin/blob/master/LICENSE>
## github.com/gogo/protobuf/proto
**License:** BSD-3-Clause
**License URL:** <https://github.com/gogo/protobuf/blob/master/proto/LICENSE>
## github.com/golang/protobuf
**License:** BSD-3-Clause
**License URL:** <https://github.com/golang/protobuf/blob/master/LICENSE>
## github.com/golang/snappy
**License:** BSD-3-Clause
**License URL:** <https://github.com/golang/snappy/blob/master/LICENSE>
## github.com/google/uuid
**License:** BSD-3-Clause
**License URL:** <https://github.com/google/uuid/blob/master/LICENSE>
## github.com/gorilla/mux
**License:** BSD-3-Clause
**License URL:** <https://github.com/gorilla/mux/blob/master/LICENSE>
## github.com/grpc-ecosystem/grpc-gateway/v2
**License:** BSD-3-Clause
**License URL:** <https://github.com/grpc-ecosystem/grpc-gateway/blob/master/v2/LICENSE.txt>
## github.com/klauspost/compress
**License:** BSD-3-Clause
**License URL:** <https://github.com/klauspost/compress/blob/master/LICENSE>
## github.com/manifoldco/promptui
**License:** BSD-3-Clause
**License URL:** <https://github.com/manifoldco/promptui/blob/master/LICENSE.md>
## github.com/miekg/pkcs11
**License:** BSD-3-Clause
**License URL:** <https://github.com/miekg/pkcs11/blob/master/LICENSE>
## github.com/mtrmac/gpgme
**License:** BSD-3-Clause
**License URL:** <https://github.com/mtrmac/gpgme/blob/master/LICENSE>
## github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
**License:** BSD-3-Clause
**License URL:** <https://github.com/prometheus/common/blob/master/internal/bitbucket.org/ww/goautoneg/README.txt>
## github.com/spf13/pflag
**License:** BSD-3-Clause
**License URL:** <https://github.com/spf13/pflag/blob/master/LICENSE>
## github.com/ulikunitz/xz
**License:** BSD-3-Clause
**License URL:** <https://github.com/ulikunitz/xz/blob/master/LICENSE>
## github.com/vbatts/go-mtree
**License:** BSD-3-Clause
**License URL:** <https://github.com/vbatts/go-mtree/blob/master/LICENSE>
## golang.org/x/crypto
**License:** BSD-3-Clause
**Project URL:** <https://golang.org/x/crypto>
## golang.org/x/net
**License:** BSD-3-Clause
**Project URL:** <https://golang.org/x/net>
## golang.org/x/sync/semaphore
**License:** BSD-3-Clause
**Project URL:** <https://golang.org/x/sync/semaphore>
## golang.org/x/sys/unix
**License:** BSD-3-Clause
**Project URL:** <https://golang.org/x/sys/unix>
## golang.org/x/term
**License:** BSD-3-Clause
**Project URL:** <https://golang.org/x/term>
## golang.org/x/text
**License:** BSD-3-Clause
**Project URL:** <https://golang.org/x/text>
## google.golang.org/protobuf
**License:** BSD-3-Clause
**Project URL:** <https://google.golang.org/protobuf>
## gopkg.in/square/go-jose.v2/json
**License:** BSD-3-Clause
**Project URL:** <https://gopkg.in/square/go-jose.v2/json>
## github.com/BurntSushi/toml
**License:** MIT
**License URL:** <https://github.com/BurntSushi/toml/blob/master/COPYING>
## github.com/VividCortex/ewma
**License:** MIT
**License URL:** <https://github.com/VividCortex/ewma/blob/master/LICENSE>
## github.com/acarl005/stripansi
**License:** MIT
**License URL:** <https://github.com/acarl005/stripansi/blob/master/LICENSE>
## github.com/apex/log
**License:** MIT
**License URL:** <https://github.com/apex/log/blob/master/LICENSE>
## github.com/beorn7/perks/quantile
**License:** MIT
**License URL:** <https://github.com/beorn7/perks/blob/master/quantile/LICENSE>
## github.com/cespare/xxhash/v2
**License:** MIT
**License URL:** <https://github.com/cespare/xxhash/blob/master/v2/LICENSE.txt>
## github.com/chzyer/readline
**License:** MIT
**License URL:** <https://github.com/chzyer/readline/blob/master/LICENSE>
## github.com/cpuguy83/go-md2man/v2/md2man
**License:** MIT
**License URL:** <https://github.com/cpuguy83/go-md2man/blob/master/v2/md2man/LICENSE.md>
## github.com/creasty/defaults
**License:** MIT
**License URL:** <https://github.com/creasty/defaults/blob/master/LICENSE>
## github.com/docker/docker-credential-helpers
**License:** MIT
**License URL:** <https://github.com/docker/docker-credential-helpers/blob/master/LICENSE>
## github.com/fatih/color
**License:** MIT
**License URL:** <https://github.com/fatih/color/blob/master/LICENSE.md>
## github.com/ghodss/yaml
**License:** MIT
**License URL:** <https://github.com/ghodss/yaml/blob/master/LICENSE>
## github.com/klauspost/compress/zstd/internal/xxhash
**License:** MIT
**License URL:** <https://github.com/klauspost/compress/blob/master/zstd/internal/xxhash/LICENSE.txt>
## github.com/klauspost/pgzip
**License:** MIT
**License URL:** <https://github.com/klauspost/pgzip/blob/master/LICENSE>
## github.com/mattn/go-colorable
**License:** MIT
**License URL:** <https://github.com/mattn/go-colorable/blob/master/LICENSE>
## github.com/mattn/go-isatty
**License:** MIT
**License URL:** <https://github.com/mattn/go-isatty/blob/master/LICENSE>
## github.com/mattn/go-runewidth
**License:** MIT
**License URL:** <https://github.com/mattn/go-runewidth/blob/master/LICENSE>
## github.com/olekukonko/tablewriter
**License:** MIT
**License URL:** <https://github.com/olekukonko/tablewriter/blob/master/LICENSE.md>
## github.com/sirupsen/logrus
**License:** MIT
**License URL:** <https://github.com/sirupsen/logrus/blob/master/LICENSE>
## github.com/urfave/cli
**License:** MIT
**License URL:** <https://github.com/urfave/cli/blob/master/LICENSE>
## github.com/vincent-petithory/dataurl
**License:** MIT
**License URL:** <https://github.com/vincent-petithory/dataurl/blob/master/LICENSE>
## go.etcd.io/bbolt
**License:** MIT
**Project URL:** <https://go.etcd.io/bbolt>
## go.mozilla.org/pkcs7
**License:** MIT
**Project URL:** <https://go.mozilla.org/pkcs7>
## gopkg.in/yaml.v3
**License:** MIT
**Project URL:** <https://gopkg.in/yaml.v3>
## github.com/talos-systems/go-smbios/smbios
**License:** MPL-2.0
**License URL:** <https://github.com/talos-systems/go-smbios/blob/master/smbios/LICENSE>
## github.com/vbauerster/mpb/v5
**License:** Unknown
**Project URL:** <https://github.com/vbauerster/mpb/v5>
## github.com/vbauerster/mpb/v5/cwriter
**License:** Unknown
**Project URL:** <https://github.com/vbauerster/mpb/v5/cwriter>
## github.com/vbauerster/mpb/v5/decor
**License:** Unknown
**Project URL:** <https://github.com/vbauerster/mpb/v5/decor>
## github.com/vbauerster/mpb/v5/internal
**License:** Unknown
**Project URL:** <https://github.com/vbauerster/mpb/v5/internal>

View File

@@ -0,0 +1,63 @@
#!/bin/sh
set -e
set -u
go install github.com/google/go-licenses@v1.0.0
if [ -d "vendor" ]; then
echo "Please remove vendor directory before running this script"
exit 255
fi
if [ ! -f "go.mod" ]; then
echo "This script must be called from the project root directory,"
echo "i.e. as scripts/update-license-dependencise.sh"
exit 255
fi
# Exclude ourselves
exclude="github.com/hpcng/warewulf"
# Ensure a constant sort order
export LC_ALL=C
go-licenses csv ./... | grep -v -E "${exclude}" | sort -k3,3 -k1,1 -t, > LICENSE_DEPENDENCIES.csv
# Header for the markdown file
cat <<-'EOF' >LICENSE_DEPENDENCIES.md
# Dependency Licenses
This project uses a number of dependencies, in accordance with their
own license terms. These dependencies are managed via the project
`go.mod` and `go.sum` files, and included in a `vendor/` directory in
our official source tarballs.
A full build or package of Warewulf uses all dependencies listed
below. If you `import "github.com/hpcng/warewulf"` into your own
project then you may use a subset of them.
The dependencies and their licenses are as follows:
EOF
while IFS="," read -r dep url license; do
{
echo "## ${dep}"
echo ""
echo "**License:** ${license}"
echo ""
} >>LICENSE_DEPENDENCIES.md
# go-licenses can't work out the web url for non-github projects.
# Fall back to using the dependency URL as a project URL
if [ "${url}" = "Unknown" ]; then
echo "**Project URL:** <https://${dep}>" >>LICENSE_DEPENDENCIES.md
else
echo "**License URL:** <${url}>" >>LICENSE_DEPENDENCIES.md
fi
echo "" >>LICENSE_DEPENDENCIES.md
done <LICENSE_DEPENDENCIES.csv
# Clean up
rm LICENSE_DEPENDENCIES.csv