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.
- section 2(b) requires a list of Technical Steering Committee (TSC) members here
(in alphabetical sort order of surname)
- Cedric Clerget <[email protected]>, <[email protected]>
- Dave Dykstra <[email protected]>
- Ian Kaneshiro <[email protected]>, <[email protected]>
- Gregory M. Kurtzer <[email protected]>
- Krishna Muriki <[email protected]>, <[email protected]>
When contributing to Apptainer, it is important to properly communicate the gist 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.
Please note we have a code of conduct. Please follow it in all your interactions with the project members and users.
In addition, all commits must be "Signed-off" by using git commit -s
,
acknowledging that you agree to the Developer Certificate of Origin.
- Essential bug fix PRs should be sent to both main and release branches.
- Small bug fix and feature enhancement PRs should be sent to main only.
- Follow the existing code style precedent, especially for C. For Go, you will 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 that will run as part of the Continuous Integration (github workflow actions) 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 check
before submitting the PR. We usegolangci-lint
as our linter. You may need to address linting errors by:- Running
gofumpt -w .
to format all.go
files. We use gofumpt instead ofgofmt
as it adds additional formatting rules which are helpful for clarity. - Leaving a function comment on every new exported function and package that your PR has introduced. To learn about how to properly comment Go code, read this post on golang.org
- Running
- Make sure you have locally tested using
make -C builddir test
and that all tests succeed before submitting the PR. - If you accidentally changed code in a submodule, you can undo it like
git submodule foreach --recursive git reset --hard
before committing. - If possible, run
make -C builddir testall
locally, after setting the environment variablesE2E_DOCKER_USERNAME
andE2E_DOCKER_PASSWORD
appropriately for an authorized Docker Hub account. This is required as Apptainer's end-to-end tests perform many tests that build from or execute docker images. Our CI is authorized to run these tests if you cannot. - Ask yourself is the code human understandable? This can be accomplished via a clear code style as well as documentation and/or comments.
- The pull request will be reviewed by others, and finally merged when all requirements are met.
- The
CHANGELOG.md
must be updated for any of the following changes:- Renamed commands
- Deprecated / removed commands
- Changed defaults / behaviors
- Backwards incompatible changes
- New features / functionalities
- PRs which introduce a new Go dependency to the project via
go get
and additions togo.mod
should explain why the dependency is required. - Any new or updated dependency should be reflected in
LICENSE_DEPENDENCIES.md
, by runningscripts/update-license-dependencies.sh
There are a few places where documentation for the Apptainer project lives.
The changelog is where PRs should include documentation if
necessary. When a new release is tagged, the
user guide and
admin guide will be updated
using the contents of the CHANGELOG.md
file as reference.
- The changelog is a place to document functional differences between versions of Apptainer. PRs which require documentation must update this file. This should be a document which can be used to explain what the new features of each version of Apptainer are, and should not read like a commit log. Once a release is tagged (e.g. v1.0.0), a new top level section will be made titled Changes Since vX.Y.Z (e.g. Changes Since v1.0.0) where new changes will now be documented, leaving the previous section immutable.
- The README is a place to document critical information for new users of Apptainer. It should typically not change, but in the case where a change is necessary a PR may update it.
- The user guide should document anything pertinent to the usage of Apptainer.
- The admin guide document anything that is pertinent to a system administrator who manages a system with Apptainer installed.
- If necessary, changes to the message displayed when running
apptainer help *
can be made by editingdocs/content.go
.