1*81ef45edSWarner Losh# Contribution Guidelines for GitHub 2*81ef45edSWarner Losh 3*81ef45edSWarner Losh## General Contributions to FreeBSD 4*81ef45edSWarner Losh 5*81ef45edSWarner LoshPlease read the guidelines in [Contributing to FreeBSD](https://docs.freebsd.org/en/articles/contributing/) 6*81ef45edSWarner Loshfor all the ways you can contribute to the project, how the project is organized, 7*81ef45edSWarner Loshhow to build different parts of the project, etc. The 8*81ef45edSWarner Losh[developer's handbook](https://docs.freebsd.org/en/books/developers-handbook/) 9*81ef45edSWarner Loshis another useful resource. 10*81ef45edSWarner Losh 11*81ef45edSWarner Losh## GitHub Pull Requests 12*81ef45edSWarner Losh 13*81ef45edSWarner LoshPresently, GitHub 'freebsd-src' repository is one of the publish-only services 14*81ef45edSWarner Loshfor the FreeBSD 'src' repository the project uses to promote collaboration and 15*81ef45edSWarner Loshcontribution. Pull requests that need little developer time, are generally 16*81ef45edSWarner Loshsmall, and have limited scope should be submitted. Do not submit pull request 17*81ef45edSWarner Loshthat are a problem reports, works in progress, changes that are controversial 18*81ef45edSWarner Loshand need discussion, changes require specialize review, or are security related. 19*81ef45edSWarner Losh 20*81ef45edSWarner LoshA pull request will be considered if: 21*81ef45edSWarner Losh 22*81ef45edSWarner 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. 23*81ef45edSWarner Losh* It passes all the GitHub CI jobs. 24*81ef45edSWarner Losh* You can respond to feedback quickly. 25*81ef45edSWarner 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. 26*81ef45edSWarner 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). 27*81ef45edSWarner Losh* All commits have your name and valid email address as you would like to see them in the FreeBSD repository as the author. Fake github.com addresses cannot be used. 28*81ef45edSWarner 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. 29*81ef45edSWarner Losh* Fixup commits should be squashed with the commit they are fixing. Each commit in your branch should be suitable for FreeBSD's repository. 30*81ef45edSWarner Losh* Commits should include one or more `Signed-off-by:` lines with full name and email address certifying https://developercertificate.org/[Developer Certificate of Origin]. 31*81ef45edSWarner Losh* The commits follow FreeBSD's style guide. See [Style](#Style). 32*81ef45edSWarner Losh* The commits should not introduce trailing white space. 33*81ef45edSWarner Losh 34*81ef45edSWarner LoshWhen updating your pull request, please rebase with a forced push rather than a 35*81ef45edSWarner Loshmerge commit. 36*81ef45edSWarner Losh 37*81ef45edSWarner LoshMore complex changes may be submitted as pull requests, but they may be closed 38*81ef45edSWarner Loshif they are too large, too unwieldy, become inactive, need further discussion in 39*81ef45edSWarner Loshthe community, or need extensive revision. Please avoid creating large, 40*81ef45edSWarner Loshwide-ranging cleanup patches: they are too large and lack the focus needed for a 41*81ef45edSWarner Loshgood review. Misdirected patches may be redirected to a more appropriate forum 42*81ef45edSWarner Loshfor the patch to be resolved. 43*81ef45edSWarner Losh 44*81ef45edSWarner LoshPlease make sure that your submissions compile and work before submitting. If 45*81ef45edSWarner Loshyou need feedback, a pull request might not be the right place (it may just be 46*81ef45edSWarner Loshsummarily closed if there are too many obvious mistakes). 47*81ef45edSWarner Losh 48*81ef45edSWarner LoshIf you want to cleanup style or older coding conventions in preparation for some 49*81ef45edSWarner Loshother commit, please go ahead and prepare those patches. However, please avoid just 50*81ef45edSWarner Loshcleaning up to make it cleaner, unless there's a clear advantage to doing 51*81ef45edSWarner Loshso. While the project strives to have a uniform coding style, our style offers a 52*81ef45edSWarner Loshrange of choices making some 'cleanups' ambiguous at best. Also, some files have 53*81ef45edSWarner Loshtheir own consistent style that deviates from style(9). Style changes take 54*81ef45edSWarner Loshvolunteer time to process, but that time can be quite limited, so please be 55*81ef45edSWarner Loshrespectful. 56*81ef45edSWarner Losh 57*81ef45edSWarner LoshThe current theory for pull requests on GitHub is to facilitate inclusion in the 58*81ef45edSWarner Loshproject. The guidelines are streamlined for quick decisions about each pull 59*81ef45edSWarner Loshrequest. Unless explicitly stated, rejection here as "not ready" or "too large" 60*81ef45edSWarner Loshdoes not mean the project is uninterested in the work, it just means the 61*81ef45edSWarner Loshsubmission does not meet the limited scope for pull requests accepted 62*81ef45edSWarner Loshhere. Sometimes it is easier to review a GihHub pull request than to do the 63*81ef45edSWarner Loshreview in Phabricator, so that's also allowed. 64*81ef45edSWarner Losh 65*81ef45edSWarner Losh## Style 66*81ef45edSWarner Losh 67*81ef45edSWarner LoshAvoid adding trailing newlines and whitespace. These slow down the integration 68*81ef45edSWarner Loshprocess and are a distraction. `git diff` will highlight them in red, as will 69*81ef45edSWarner Loshthe Files Changed tab in the pull request. 70*81ef45edSWarner Losh 71*81ef45edSWarner LoshFor C programs, see [style(9)](https://man.freebsd.org/cgi/man.cgi?query=style&sektion=9) 72*81ef45edSWarner Loshfor details. You can use [Clang format](https://clang.llvm.org/docs/ClangFormat.html) 73*81ef45edSWarner Loshwith the top level .clang-format file if you are unsure. The 74*81ef45edSWarner Losh[git clang-format](https://github.com/llvm-mirror/clang/blob/master/tools/clang-format/git-clang-format) 75*81ef45edSWarner Loshcommand can help minimize churn by only formatting the areas nearby the changes. While 76*81ef45edSWarner Loshnot perfect, using these tools will maximize your chances of not having style 77*81ef45edSWarner Loshcomments on your pull requests. 78*81ef45edSWarner Losh 79*81ef45edSWarner LoshFor Makefiles changes, see 80*81ef45edSWarner Losh[style.Makefile(5)](https://man.freebsd.org/cgi/man.cgi?query=style.Makefile&sektion=5) 81*81ef45edSWarner Loshfor details. FreeBSD's base system uses the in-tree make, not GNU Make, so 82*81ef45edSWarner Losh[make(1)](https://man.freebsd.org/cgi/man.cgi?query=make&sektion=1) is another useful 83*81ef45edSWarner Loshresource. 84*81ef45edSWarner Losh 85*81ef45edSWarner LoshThe project uses mdoc for all its man pages. Changes should pass `mandoc -Tlint` and igor (install the latter with `pkg install igor`). 86*81ef45edSWarner LoshPlease be sure to observe the one-sentence-per-line rule so manual pages properly render. Any semantic changes to the manual pages should bump the date. 87*81ef45edSWarner Losh[style.mdoc(5)](https://man.freebsd.org/cgi/man.cgi?query=style.mdoc&sektion=5) has the all details. 88*81ef45edSWarner Losh 89*81ef45edSWarner LoshFor [Lua](https://www.lua.org), please see 90*81ef45edSWarner Losh[style.lua(9)](https://man.freebsd.org/cgi/man.cgi?query=style.lua&sektion=9) 91*81ef45edSWarner Loshfor details. Lua is used for the boot loader and a few scripts in the base system. 92*81ef45edSWarner Losh 93*81ef45edSWarner LoshFor shell scripts, avoid using bash. The system shell (/bin/sh) is preferred. 94*81ef45edSWarner LoshShell scripts in the base system cannot use bash or bash extensions 95*81ef45edSWarner Loshnot present in FreeBSD's [shell](https://man.freebsd.org/cgi/man.cgi?query=sh&sektion=1). 96*81ef45edSWarner Losh 97*81ef45edSWarner Losh## Signed-off-by 98*81ef45edSWarner Losh 99*81ef45edSWarner LoshOther projects use Signed-off-by to create a paper trail for contributions they 100*81ef45edSWarner Loshreceive. The Developer Certificate of Origin is an attestation that the person 101*81ef45edSWarner Loshmaking the contribution can do it under the current license of the file. Other 102*81ef45edSWarner Loshprojects that have 'delegated' hierarchies also use it when maintainers 103*81ef45edSWarner Loshintegrate these patches and submit them upstream. 104*81ef45edSWarner Losh 105*81ef45edSWarner LoshRight now, pull requests on GitHub are an experimental feature. We strongly 106*81ef45edSWarner Loshsuggest that people add this line. It creates a paper trail for infrequent 107*81ef45edSWarner Loshcontributors. Also, developers that are landing a pull request will use a 108*81ef45edSWarner LoshSigned-off-by line to set the author for the commit. 109*81ef45edSWarner Losh 110*81ef45edSWarner LoshThese lines are easy to add with `git commit -s`. 111