xref: /src/CONTRIBUTING.md (revision 467e3e2f2052faa012e6100915b6f99a0c74bfb9)
181ef45edSWarner Losh# Contribution Guidelines for GitHub
281ef45edSWarner Losh
381ef45edSWarner Losh## General Contributions to FreeBSD
481ef45edSWarner Losh
581ef45edSWarner LoshPlease read the guidelines in [Contributing to FreeBSD](https://docs.freebsd.org/en/articles/contributing/)
681ef45edSWarner Loshfor all the ways you can contribute to the project, how the project is organized,
781ef45edSWarner Loshhow to build different parts of the project, etc. The
881ef45edSWarner Losh[developer's handbook](https://docs.freebsd.org/en/books/developers-handbook/)
981ef45edSWarner Loshis another useful resource.
1081ef45edSWarner Losh
117f6a000fSEd MasteFreeBSD accepts source code contributions using one of several methods:
127f6a000fSEd Maste- A GitHub [pull request](https://github.com/freebsd/freebsd-src/pulls)
137f6a000fSEd Maste- A code review in [Phabricator](https://reviews.freebsd.org/differential)
147f6a000fSEd Maste- An attachment on a [Bugzilla ticket](https://bugs.freebsd.org)
157f6a000fSEd Maste- Direct access to the [Git repository](https://cgit.freebsd.org/src/)
167f6a000fSEd Maste
177f6a000fSEd MasteThe preferred method depends on a few factors including the size or scope of
187f6a000fSEd Mastethe change.  GitHub pull requests are preferred for relatively straightforward
197f6a000fSEd Mastechanges where the contributor already has a GitHub account.
207f6a000fSEd Maste
2167783db6SEd MasteA change should be submitted by only one method.  For example, please do not
2267783db6SEd Masteopen a GitHub pull request and create a Phabricator review for the same change
2367783db6SEd Maste(unless explicitly requested to do so by a FreeBSD committer).
2467783db6SEd Maste
2581ef45edSWarner Losh## GitHub Pull Requests
2681ef45edSWarner Losh
2781ef45edSWarner LoshPresently, GitHub 'freebsd-src' repository is one of the publish-only services
2881ef45edSWarner Loshfor the FreeBSD 'src' repository the project uses to promote collaboration and
2981ef45edSWarner Loshcontribution.  Pull requests that need little developer time, are generally
303aa0cc47SGraham Perrinsmall, and have limited scope should be submitted. Do not submit pull requests
313aa0cc47SGraham Perrinthat are security-related, problem reports, works in progress, changes that are controversial
323aa0cc47SGraham Perrinand need discussion, or changes that require specialized review.
3381ef45edSWarner Losh
3481ef45edSWarner LoshA pull request will be considered if:
3581ef45edSWarner Losh
3681ef45edSWarner Losh* It is ready or nearly ready to be committed. A committer should be able to land the pull request with less than 10 minutes of additional work.
3781ef45edSWarner Losh* It passes all the GitHub CI jobs.
3881ef45edSWarner Losh* You can respond to feedback quickly.
3981ef45edSWarner Losh* It touches fewer than about 10 files and the changes are less than about 200 lines. Changes larger than this may be OK, or you may be asked to submit multiple pull requests of a more manageable size.
4081ef45edSWarner Losh* Each logical change is a separate commit within the pull request. Commit messages for each change should follow the [commit log message guide](https://docs.freebsd.org/en/articles/committers-guide/#commit-log-message).
413aa0cc47SGraham Perrin* All commits have, as the author, your name and valid email address as you would like to see them in the FreeBSD repository. Fake github.com addresses cannot be used.
4281ef45edSWarner Losh* The scope of the pull request should not change during review. If the review suggests changes that expand the scope, please create an independent pull request.
4381ef45edSWarner Losh* Fixup commits should be squashed with the commit they are fixing. Each commit in your branch should be suitable for FreeBSD's repository.
4405e2e803SEd Maste* Commits should include one or more `Signed-off-by:` lines with full name and email address certifying [Developer Certificate of Origin](https://developercertificate.org/).
4581ef45edSWarner Losh* The commits follow FreeBSD's style guide. See [Style](#Style).
469c1335ceSWarner Losh* Run tools/build/checkstyle9.pl on your Git branch and eliminate all errors.
473aa0cc47SGraham Perrin* The commits do not introduce trailing white space.
485f71f963Srilysh* If the commit fixes a bug, please add 'PR: \<bugnumber\>' to the commit message.
493aa0cc47SGraham Perrin* If there's a code review in Phabricator, please include a link as a 'Differential Revision: ' line.
509c1335ceSWarner Losh* If you have run FreeBSD's sources through a static analysis tool, please don't submit the raw results. Please also see the chunking up guidelines. Also, please make sure that kyua tests are the same before / after your change. Ideally, you'd also create a test case that shows an actual bug that's being fixed by these changes.
5181ef45edSWarner Losh
5281ef45edSWarner LoshWhen updating your pull request, please rebase with a forced push rather than a
5381ef45edSWarner Loshmerge commit.
5481ef45edSWarner Losh
5581ef45edSWarner LoshMore complex changes may be submitted as pull requests, but they may be closed
5681ef45edSWarner Loshif they are too large, too unwieldy, become inactive, need further discussion in
5781ef45edSWarner Loshthe community, or need extensive revision.  Please avoid creating large,
5881ef45edSWarner Loshwide-ranging cleanup patches: they are too large and lack the focus needed for a
5981ef45edSWarner Loshgood review.  Misdirected patches may be redirected to a more appropriate forum
6081ef45edSWarner Loshfor the patch to be resolved.
6181ef45edSWarner Losh
6281ef45edSWarner LoshPlease make sure that your submissions compile and work before submitting. If
6381ef45edSWarner Loshyou need feedback, a pull request might not be the right place (it may just be
6481ef45edSWarner Loshsummarily closed if there are too many obvious mistakes).
6581ef45edSWarner Losh
6681ef45edSWarner LoshIf you want to cleanup style or older coding conventions in preparation for some
6781ef45edSWarner Loshother commit, please go ahead and prepare those patches. However, please avoid just
6881ef45edSWarner Loshcleaning up to make it cleaner, unless there's a clear advantage to doing
6981ef45edSWarner Loshso. While the project strives to have a uniform coding style, our style offers a
7081ef45edSWarner Loshrange of choices making some 'cleanups' ambiguous at best. Also, some files have
7181ef45edSWarner Loshtheir own consistent style that deviates from style(9). Style changes take
7281ef45edSWarner Loshvolunteer time to process, but that time can be quite limited, so please be
7381ef45edSWarner Loshrespectful.
7481ef45edSWarner Losh
7581ef45edSWarner LoshThe current theory for pull requests on GitHub is to facilitate inclusion in the
7681ef45edSWarner Loshproject. The guidelines are streamlined for quick decisions about each pull
7781ef45edSWarner Loshrequest. Unless explicitly stated, rejection here as "not ready" or "too large"
7881ef45edSWarner Loshdoes not mean the project is uninterested in the work, it just means the
7981ef45edSWarner Loshsubmission does not meet the limited scope for pull requests accepted
8029cbe944SWuerfelDevhere. Sometimes it is easier to review a GitHub pull request than to do the
8181ef45edSWarner Loshreview in Phabricator, so that's also allowed.
8281ef45edSWarner Losh
839c1335ceSWarner LoshFinally, if we close a pull request because it's not ready yet, or stalled out,
849c1335ceSWarner Loshplease don't give up. You can resubmit them later once you have time to finish
859c1335ceSWarner Loshthe work, or to have them reconsidered if you think we've made an error in
869c1335ceSWarner Loshclosing it.
879c1335ceSWarner Losh
88febba462SEd Maste### Author Name and Email
89febba462SEd Maste
90febba462SEd MasteWe require that contributions are associated with a unique identity.
91febba462SEd MasteThe author email address should not be `<something>@users.noreply.github.com`.
92febba462SEd MasteDo note that your name and email address will become a permanent and immutable
93febba462SEd Mastepart of the public Git history of the FreeBSD source tree.
94febba462SEd Maste
9581ef45edSWarner Losh## Style
9681ef45edSWarner Losh
9781ef45edSWarner LoshAvoid adding trailing newlines and whitespace. These slow down the integration
9881ef45edSWarner Loshprocess and are a distraction. `git diff` will highlight them in red, as will
9981ef45edSWarner Loshthe Files Changed tab in the pull request.
10081ef45edSWarner Losh
10181ef45edSWarner LoshFor C programs, see [style(9)](https://man.freebsd.org/cgi/man.cgi?query=style&sektion=9)
10281ef45edSWarner Loshfor details. You can use [Clang format](https://clang.llvm.org/docs/ClangFormat.html)
10381ef45edSWarner Loshwith the top level .clang-format file if you are unsure. The
10481ef45edSWarner Losh[git clang-format](https://github.com/llvm-mirror/clang/blob/master/tools/clang-format/git-clang-format)
10581ef45edSWarner Loshcommand can help minimize churn by only formatting the areas nearby the changes. While
10681ef45edSWarner Loshnot perfect, using these tools will maximize your chances of not having style
10781ef45edSWarner Loshcomments on your pull requests.
10881ef45edSWarner Losh
109*467e3e2fSAlexander ZiaeeFor [Lua](https://www.lua.org), see
110*467e3e2fSAlexander Ziaee[style.lua(9)](https://man.freebsd.org/cgi/man.cgi?query=style.lua&sektion=9)
111*467e3e2fSAlexander Ziaeefor details. Lua is used for the boot loader and a few scripts in the base system.
112*467e3e2fSAlexander Ziaee
11381ef45edSWarner LoshFor Makefiles changes, see
11481ef45edSWarner Losh[style.Makefile(5)](https://man.freebsd.org/cgi/man.cgi?query=style.Makefile&sektion=5)
11581ef45edSWarner Loshfor details. FreeBSD's base system uses the in-tree make, not GNU Make, so
11681ef45edSWarner Losh[make(1)](https://man.freebsd.org/cgi/man.cgi?query=make&sektion=1) is another useful
11781ef45edSWarner Loshresource.
11881ef45edSWarner Losh
119*467e3e2fSAlexander ZiaeeFor manual page changes, see
120*467e3e2fSAlexander Ziaee[style.mdoc(5)](https://man.freebsd.org/cgi/man.cgi?query=style.mdoc&sektion=5)
121*467e3e2fSAlexander Ziaeefor details. Changes should pass `mandoc -Tlint` and igor (install the latter with `pkg install igor`).
122*467e3e2fSAlexander ZiaeePlease be sure to observe the one-sentence-per-line rule so manual pages properly render.
123*467e3e2fSAlexander ZiaeeProposed changes to manual pages should not bump the document date until merged.
12481ef45edSWarner Losh
12581ef45edSWarner LoshFor shell scripts, avoid using bash. The system shell (/bin/sh) is preferred.
12681ef45edSWarner LoshShell scripts in the base system cannot use bash or bash extensions
12781ef45edSWarner Loshnot present in FreeBSD's [shell](https://man.freebsd.org/cgi/man.cgi?query=sh&sektion=1).
12881ef45edSWarner Losh
12981ef45edSWarner Losh## Signed-off-by
13081ef45edSWarner Losh
13181ef45edSWarner LoshOther projects use Signed-off-by to create a paper trail for contributions they
13281ef45edSWarner Loshreceive. The Developer Certificate of Origin is an attestation that the person
13381ef45edSWarner Loshmaking the contribution can do it under the current license of the file. Other
13481ef45edSWarner Loshprojects that have 'delegated' hierarchies also use it when maintainers
13581ef45edSWarner Loshintegrate these patches and submit them upstream.
13681ef45edSWarner Losh
13781ef45edSWarner LoshRight now, pull requests on GitHub are an experimental feature. We strongly
13881ef45edSWarner Loshsuggest that people add this line. It creates a paper trail for infrequent
13981ef45edSWarner Loshcontributors. Also, developers that are landing a pull request will use a
14081ef45edSWarner LoshSigned-off-by line to set the author for the commit.
14181ef45edSWarner Losh
14281ef45edSWarner LoshThese lines are easy to add with `git commit -s`.
143fb03f7f8SWarner Losh
144fb03f7f8SWarner Losh## Submitting as part of class work
145fb03f7f8SWarner Losh
146fb03f7f8SWarner LoshIf you are a professor or teacher that wishes to have your students submit fixes
147fb03f7f8SWarner Loshas part of their class work, please contact imp@FreeBSD.org before the semester
148fb03f7f8SWarner Loshto ensure we allocate the proper resources to process them quickly. We'll give
149fb03f7f8SWarner Loshyou more details when you contact us and thanks for including FreeBSD in your
150fb03f7f8SWarner Loshclass work. It also helps us keep track.
15105e5852dSWarner Losh
15205e5852dSWarner Losh## FreeBSD's Upstreams
15305e5852dSWarner Losh
154ede45635SEd MasteAnything that's in the directory `contrib`, `crypto`, `sys/contrib`,
155ede45635SEd Maste`sys/crypto/` or `sys/cddl` likely has an upstream we pull from. Please do a
156ede45635SEd Maste`git log --merges` in any subdirectory of these you are submitting patches for
157ede45635SEd Masteto find out the last time we merged from upstream. If it is in the last 5 years,
158ede45635SEd Masteupstream is "active" and you should submit your patches there and let the last
159ede45635SEd Mastefew people to commit to this file (especially merge commits) know. If it's been
160ede45635SEd Mastemore than 5 years, upstream is likely inactive so please submit the patch. We
161ede45635SEd Mastecan sort out if it should go into FreeBSD or upstream.
162