xref: /freebsd/crypto/openssl/CONTRIBUTING.md (revision a7148ab39c03abd4d1a84997c70bf96f15dd2a09)
1b077aed3SPierre ProncheryHOW TO CONTRIBUTE TO OpenSSL
2b077aed3SPierre Pronchery============================
3b077aed3SPierre Pronchery
4b077aed3SPierre ProncheryPlease visit our [Getting Started] page for other ideas about how to contribute.
5b077aed3SPierre Pronchery
6*a7148ab3SEnji Cooper  [Getting Started]: <https://openssl-library.org/community/getting-started>
7b077aed3SPierre Pronchery
8b077aed3SPierre ProncheryDevelopment is done on GitHub in the [openssl/openssl] repository.
9b077aed3SPierre Pronchery
10b077aed3SPierre Pronchery  [openssl/openssl]: <https://github.com/openssl/openssl>
11b077aed3SPierre Pronchery
1244096ebdSEnji CooperTo request a new feature, ask a question, or report a bug,
13e0c4386eSCy Schubertplease open an [issue on GitHub](https://github.com/openssl/openssl/issues).
14b077aed3SPierre Pronchery
15e0c4386eSCy SchubertTo submit a patch or implement a new feature, please open a
16e0c4386eSCy Schubert[pull request on GitHub](https://github.com/openssl/openssl/pulls).
17e0c4386eSCy SchubertIf you are thinking of making a large contribution,
18e0c4386eSCy Schubertopen an issue for it before starting work, to get comments from the community.
19e0c4386eSCy SchubertSomeone may be already working on the same thing,
20e0c4386eSCy Schubertor there may be special reasons why a feature is not implemented.
21b077aed3SPierre Pronchery
22b077aed3SPierre ProncheryTo make it easier to review and accept your pull request, please follow these
23b077aed3SPierre Proncheryguidelines:
24b077aed3SPierre Pronchery
25b077aed3SPierre Pronchery 1. Anything other than a trivial contribution requires a [Contributor
26b077aed3SPierre Pronchery    License Agreement] (CLA), giving us permission to use your code.
27e0c4386eSCy Schubert    If your contribution is too small to require a CLA (e.g., fixing a spelling
28e0c4386eSCy Schubert    mistake), then place the text "`CLA: trivial`" on a line by itself below
29e0c4386eSCy Schubert    the rest of your commit message separated by an empty line, like this:
30e0c4386eSCy Schubert
31e0c4386eSCy Schubert    ```
32e0c4386eSCy Schubert        One-line summary of trivial change
33e0c4386eSCy Schubert
34e0c4386eSCy Schubert        Optional main body of commit message. It might contain a sentence
35e0c4386eSCy Schubert        or two explaining the trivial change.
36e0c4386eSCy Schubert
37e0c4386eSCy Schubert        CLA: trivial
38e0c4386eSCy Schubert    ```
39e0c4386eSCy Schubert
40e0c4386eSCy Schubert    It is not sufficient to only place the text "`CLA: trivial`" in the GitHub
41e0c4386eSCy Schubert    pull request description.
42b077aed3SPierre Pronchery
43b077aed3SPierre Pronchery    [Contributor License Agreement]: <https://www.openssl.org/policies/cla.html>
44b077aed3SPierre Pronchery
45b077aed3SPierre Pronchery    To amend a missing "`CLA: trivial`" line after submission, do the following:
46b077aed3SPierre Pronchery
47b077aed3SPierre Pronchery    ```
48b077aed3SPierre Pronchery        git commit --amend
49e0c4386eSCy Schubert        # add the line, save and quit the editor
50e0c4386eSCy Schubert        git push -f [<repository> [<branch>]]
51b077aed3SPierre Pronchery    ```
52b077aed3SPierre Pronchery
53b077aed3SPierre Pronchery 2. All source files should start with the following text (with
54b077aed3SPierre Pronchery    appropriate comment characters at the start of each line and the
55b077aed3SPierre Pronchery    year(s) updated):
56b077aed3SPierre Pronchery
57b077aed3SPierre Pronchery    ```
58b077aed3SPierre Pronchery        Copyright 20xx-20yy The OpenSSL Project Authors. All Rights Reserved.
59b077aed3SPierre Pronchery
60b077aed3SPierre Pronchery        Licensed under the Apache License 2.0 (the "License").  You may not use
61b077aed3SPierre Pronchery        this file except in compliance with the License.  You can obtain a copy
62b077aed3SPierre Pronchery        in the file LICENSE in the source distribution or at
63b077aed3SPierre Pronchery        https://www.openssl.org/source/license.html
64b077aed3SPierre Pronchery    ```
65b077aed3SPierre Pronchery
66b077aed3SPierre Pronchery 3. Patches should be as current as possible; expect to have to rebase
67b077aed3SPierre Pronchery    often. We do not accept merge commits, you will have to remove them
68b077aed3SPierre Pronchery    (usually by rebasing) before it will be acceptable.
69b077aed3SPierre Pronchery
7044096ebdSEnji Cooper 4. Code provided should follow our [coding style] and [documentation policy]
7144096ebdSEnji Cooper    and compile without warnings.
72e0c4386eSCy Schubert    There is a [Perl tool](util/check-format.pl) that helps
73e0c4386eSCy Schubert    finding code formatting mistakes and other coding style nits.
74e0c4386eSCy Schubert    Where `gcc` or `clang` is available, you should use the
75b077aed3SPierre Pronchery    `--strict-warnings` `Configure` option.  OpenSSL compiles on many varied
76e0c4386eSCy Schubert    platforms: try to ensure you only use portable features.
77e0c4386eSCy Schubert    Clean builds via GitHub Actions are required. They are started automatically
78e0c4386eSCy Schubert    whenever a PR is created or updated by committers.
79b077aed3SPierre Pronchery
80*a7148ab3SEnji Cooper    [coding style]: https://openssl-library.org/policies/technical/coding-style/
81*a7148ab3SEnji Cooper    [documentation policy]: https://openssl-library.org/policies/technical/documentation-policy/
82b077aed3SPierre Pronchery
83e0c4386eSCy Schubert 5. When at all possible, code contributions should include tests. These can
84b077aed3SPierre Pronchery    either be added to an existing test, or completely new.  Please see
85b077aed3SPierre Pronchery    [test/README.md](test/README.md) for information on the test framework.
86b077aed3SPierre Pronchery
87b077aed3SPierre Pronchery 6. New features or changed functionality must include
88e0c4386eSCy Schubert    documentation. Please look at the `.pod` files in `doc/man[1357]` for
89e0c4386eSCy Schubert    examples of our style. Run `make doc-nits` to make sure that your
90b077aed3SPierre Pronchery    documentation changes are clean.
91b077aed3SPierre Pronchery
92b077aed3SPierre Pronchery 7. For user visible changes (API changes, behaviour changes, ...),
93b077aed3SPierre Pronchery    consider adding a note in [CHANGES.md](CHANGES.md).
94b077aed3SPierre Pronchery    This could be a summarising description of the change, and could
95b077aed3SPierre Pronchery    explain the grander details.
96b077aed3SPierre Pronchery    Have a look through existing entries for inspiration.
97b077aed3SPierre Pronchery    Please note that this is NOT simply a copy of git-log one-liners.
98b077aed3SPierre Pronchery    Also note that security fixes get an entry in [CHANGES.md](CHANGES.md).
99e0c4386eSCy Schubert    This file helps users get more in-depth information of what comes
100b077aed3SPierre Pronchery    with a specific release without having to sift through the higher
101b077aed3SPierre Pronchery    noise ratio in git-log.
102b077aed3SPierre Pronchery
103b077aed3SPierre Pronchery 8. For larger or more important user visible changes, as well as
104b077aed3SPierre Pronchery    security fixes, please add a line in [NEWS.md](NEWS.md).
105b077aed3SPierre Pronchery    On exception, it might be worth adding a multi-line entry (such as
106b077aed3SPierre Pronchery    the entry that announces all the types that became opaque with
107b077aed3SPierre Pronchery    OpenSSL 1.1.0).
108b077aed3SPierre Pronchery    This file helps users get a very quick summary of what comes with a
109b077aed3SPierre Pronchery    specific release, to see if an upgrade is worth the effort.
110b077aed3SPierre Pronchery
111b077aed3SPierre Pronchery 9. Guidelines how to integrate error output of new crypto library modules
112b077aed3SPierre Pronchery    can be found in [crypto/err/README.md](crypto/err/README.md).
113