2021-06-15 17:47:11 +08:00
|
|
|
# Contributing Guidelines
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
Ref: <https://openwrt.org/docs/guide-developer/packages> for overall format and construction
|
2020-07-08 14:18:52 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
## Basic guidelines
|
|
|
|
|
|
|
|
All packages you commit or submit by pull-request should follow these simple
|
|
|
|
guidelines:
|
|
|
|
|
|
|
|
- Package a version which is still maintained by the upstream author and will
|
|
|
|
be updated regularly with supported versions.
|
|
|
|
- Have no dependencies outside the OpenWrt core packages or this repository
|
|
|
|
feed.
|
|
|
|
- Have been tested to compile with the correct includes and dependencies.
|
|
|
|
Please also test with "Compile with full language support" found under
|
|
|
|
"General Build Settings" set if language support is relevant to your package.
|
|
|
|
- Best of all -- it works as expected!
|
|
|
|
|
|
|
|
## Package Sources (archives and repositories)
|
|
|
|
|
|
|
|
- PKG_SOURCE should reference the smallest available archive. In order of
|
|
|
|
preference: xz (most compressed), bzip2, gz and zip. As a last resort,
|
|
|
|
downloads from source repositories can be used.
|
|
|
|
- PKG_SOURCE_URL should link to an official release archive. Use of HTTPS:
|
|
|
|
is preferred. If a source archive is not available, a locally generated
|
|
|
|
archive fetched using git, svn, cvs or in rare circumstances, hg or bzr.
|
|
|
|
- Convenience macros for popular mirrors are defined. Using these macros will
|
|
|
|
make your package downloads more robust by mapping to a list of possible
|
|
|
|
source mirrors for archive availability.
|
|
|
|
- @SF - Sourceforge (downloads.sourceforge.net) with 5 retries due to
|
|
|
|
re-directs
|
|
|
|
- @GITHUB - Github (raw.githubusercontent.com) with 5 retries due to
|
|
|
|
re-directs
|
|
|
|
- @GNU - 8 regional servers
|
|
|
|
- @GNOME - 8 regional servers
|
|
|
|
- @SAVANNAH - 8 regional servers
|
|
|
|
- @APACHE - 8 regional servers
|
|
|
|
- @KERNEL - Linux kernel archives & mirrors
|
|
|
|
- Please _DO NOT_ use an archive which changes over time. A version labeled
|
|
|
|
"latest" is not constant each download. Also, using the head of a branch will
|
|
|
|
create unpredictable results which can be different each build.
|
|
|
|
|
|
|
|
### Makefile contents should contain
|
|
|
|
|
|
|
|
- Provide an up-to-date Copyright notice or **none**. Copyright should not be
|
|
|
|
assigned to OpenWrt unless you are explicitly requested by or working under
|
|
|
|
contract to OpenWrt. Assigning a Copyright to yourself or organization you
|
|
|
|
represent is acceptable.
|
|
|
|
- A (PKG\_)MAINTAINER definition listing either yourself and/or another person
|
|
|
|
responsible for this package (E.g.: PKG_MAINTAINER:= Joe D. Hacker
|
|
|
|
`<jdh@jdhs-email-provider.org`>). Listing multiple maintainers is encouraged in
|
|
|
|
order to keep the package active and up-to-date. Leaving this blank will also
|
|
|
|
be accepted, however the review process may not be as quick as one with a
|
|
|
|
maintainer.
|
|
|
|
- A PKG_LICENSE tag declaring the main license of the package. (E.g.:
|
|
|
|
PKG_LICENSE:=GPL-2.0-or-later) Please use SPDX identifiers if possible (see
|
|
|
|
list at the bottom).
|
|
|
|
- An optional PKG_LICENSE_FILES tag including the filenames of the
|
|
|
|
license-files in the source-package. (E.g.: PKG_LICENSE_FILES:=COPYING)
|
|
|
|
- PKG_RELEASE should be initially set to 1 or reset to 1 if the software
|
|
|
|
version is changed. You should increment it if the package itself has
|
|
|
|
changed. For example, modifying a support script, changing configure options
|
|
|
|
like --disable_ or --enable\_ switches, or if you changed something in the
|
|
|
|
package which causes the resulting binaries to be different. Changes like
|
|
|
|
correcting md5sums, changing mirror URLs, adding a maintainer field or updating
|
|
|
|
a comment or copyright year in a Makefile do not require a change to
|
|
|
|
PKG_RELEASE.
|
|
|
|
- Avoid reuse of PKG_NAME in call, define and eval lines to improve
|
|
|
|
readability.
|
|
|
|
|
|
|
|
### Commits in your pull-requests should
|
|
|
|
|
|
|
|
- Have a useful description prefixed with the package name (E.g.: "foopkg: Add
|
|
|
|
libzot dependency")
|
|
|
|
- Include Signed-off-by tag in the commit comments. See: [Sign your
|
|
|
|
work](https://openwrt.org/submitting-patches#sign_your_work)
|
|
|
|
|
|
|
|
## Advice on pull requests
|
|
|
|
|
|
|
|
Pull requests are the easiest way to contribute changes to git repos at Github.
|
|
|
|
They are the preferred contribution method, as they offer a nice way for
|
|
|
|
commenting and amending the proposed changes.
|
|
|
|
|
|
|
|
- You need a local "fork" of the Github repo.
|
|
|
|
|
|
|
|
- Use a "feature branch" for your changes. That separates the changes in the
|
|
|
|
pull request from your other changes and makes it easy to edit/amend commits
|
|
|
|
in the pull request. Workflow using "feature_x" as the example:
|
2018-10-18 16:56:47 +08:00
|
|
|
- Update your local git fork to the tip (of the master, usually)
|
|
|
|
- Create the feature branch with `git checkout -b feature_x`
|
|
|
|
- Edit changes and commit them locally
|
2021-06-15 17:47:11 +08:00
|
|
|
- Push them to your Github fork by `git push -u origin feature_x`. That
|
|
|
|
creates the "feature_x" branch at your Github fork and sets it as the
|
|
|
|
remote of this branch
|
|
|
|
- When you now visit Github, you should see a proposal to create a pull
|
|
|
|
request
|
|
|
|
|
|
|
|
- If you later need to add new commits to the pull request, you can simply
|
|
|
|
commit the changes to the local branch and then use `git push` to
|
|
|
|
automatically update the pull request.
|
|
|
|
|
|
|
|
- If you need to change something in the existing pull request (e.g. to add a
|
|
|
|
missing signed-off-by line to the commit message), you can use `git push -f`
|
|
|
|
to overwrite the original commits. That is easy and safe when using a feature
|
|
|
|
branch. Example workflow:
|
2018-10-18 16:56:47 +08:00
|
|
|
- Checkout the feature branch by `git checkout feature_x`
|
2021-06-15 17:47:11 +08:00
|
|
|
- Edit changes and commit them locally. If you are just updating the commit
|
|
|
|
message in the last commit, you can use `git commit --amend` to do that
|
|
|
|
- If you added several new commits or made other changes that require
|
|
|
|
cleaning up, you can use `git rebase -i HEAD~X` (X = number of commits to
|
|
|
|
edit) to possibly squash some commits
|
|
|
|
- Push the changed commits to Github with `git push -f` to overwrite the
|
|
|
|
original commits in the "feature_x" branch with the new ones. The pull
|
|
|
|
request gets automatically updated
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
## If you have commit access
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
- Do NOT use git push --force.
|
|
|
|
- Do NOT commit to other maintainer's packages without their consent.
|
|
|
|
- Use Pull Requests if you are unsure and to suggest changes to other
|
|
|
|
maintainers.
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
### Gaining commit access
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
- We will gladly grant commit access to responsible contributors who have made
|
2018-10-18 16:56:47 +08:00
|
|
|
useful pull requests and / or feedback or patches to this repository or
|
2021-06-15 17:47:11 +08:00
|
|
|
OpenWrt in general. Please include your request for commit access in your next
|
|
|
|
pull request or ticket.
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
## Release Branches
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
- Old stable branches were named after the following pattern "for-XX.YY" (e.g.
|
|
|
|
for-14.07) before the LEDE split. During the LEDE split there was only one
|
|
|
|
release branch with the name "lede-17.01". After merging the LEDE fork with
|
|
|
|
OpenWrt the release branches are named according to the following pattern
|
|
|
|
"openwrt-XX.YY" (e.g. openwrt-18.06).
|
|
|
|
- These branches are built with the respective OpenWrt release and are created
|
2018-10-18 16:56:47 +08:00
|
|
|
during the release stabilisation phase.
|
2021-06-15 17:47:11 +08:00
|
|
|
- Please ONLY cherry-pick or commit security and bug-fixes to these branches.
|
|
|
|
- Do NOT add new packages and do NOT do major upgrades of packages here.
|
|
|
|
- If you are unsure if your change is suitable, please use a pull request.
|
|
|
|
|
|
|
|
## Common LICENSE tags (short list)
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2020-07-08 14:18:52 +08:00
|
|
|
(Complete list can be found at: <https://spdx.org/licenses>)
|
2018-10-18 16:56:47 +08:00
|
|
|
|
2021-06-15 17:47:11 +08:00
|
|
|
| Full Name | Identifier |
|
|
|
|
| ------------------------------------------------ | :----------------------- |
|
|
|
|
| Apache License 1.0 | Apache-1.0 |
|
|
|
|
| Apache License 1.1 | Apache-1.1 |
|
|
|
|
| Apache License 2.0 | Apache-2.0 |
|
|
|
|
| Artistic License 1.0 | Artistic-1.0 |
|
|
|
|
| Artistic License 1.0 w/clause 8 | Artistic-1.0-cl8 |
|
|
|
|
| Artistic License 1.0 (Perl) | Artistic-1.0-Perl |
|
|
|
|
| Artistic License 2.0 | Artistic-2.0 |
|
|
|
|
| BSD 2-Clause "Simplified" License | BSD-2-Clause |
|
|
|
|
| BSD 2-Clause FreeBSD License | BSD-2-Clause-FreeBSD |
|
|
|
|
| BSD 2-Clause NetBSD License | BSD-2-Clause-NetBSD |
|
|
|
|
| BSD 3-Clause "New" or "Revised" License | BSD-3-Clause |
|
|
|
|
| BSD with attribution | BSD-3-Clause-Attribution |
|
|
|
|
| BSD 3-Clause Clear License | BSD-3-Clause-Clear |
|
|
|
|
| BSD 4-Clause "Original" or "Old" License | BSD-4-Clause |
|
|
|
|
| BSD-4-Clause (University of California-Specific) | BSD-4-Clause-UC |
|
|
|
|
| BSD Protection License | BSD-Protection |
|
|
|
|
| GNU General Public License v1.0 only | GPL-1.0-only |
|
|
|
|
| GNU General Public License v1.0 or later | GPL-1.0-or-later |
|
|
|
|
| GNU General Public License v2.0 only | GPL-2.0-only |
|
|
|
|
| GNU General Public License v2.0 or later | GPL-2.0-or-later |
|
|
|
|
| GNU General Public License v3.0 only | GPL-3.0-only |
|
|
|
|
| GNU General Public License v3.0 or later | GPL-3.0-or-later |
|
|
|
|
| GNU Lesser General Public License v2.1 only | LGPL-2.1-only |
|
|
|
|
| GNU Lesser General Public License v2.1 or later | LGPL-2.1-or-later |
|
|
|
|
| GNU Lesser General Public License v3.0 only | LGPL-3.0-only |
|
|
|
|
| GNU Lesser General Public License v3.0 or later | LGPL-3.0-or-later |
|
|
|
|
| GNU Library General Public License v2 only | LGPL-2.0-only |
|
|
|
|
| GNU Library General Public License v2 or later | LGPL-2.0-or-later |
|
|
|
|
| Fair License | Fair |
|
|
|
|
| ISC License | ISC |
|
|
|
|
| MIT License | MIT |
|
|
|
|
| No Limit Public License | NLPL |
|
|
|
|
| OpenSSL License | OpenSSL |
|
|
|
|
| X11 License | X11 |
|
|
|
|
| zlib License | Zlib |
|
|
|
|
|
|
|
|
## Continuous Integration
|
|
|
|
|
|
|
|
To simplify review and require less human resources, a CI tests all packages.
|
|
|
|
Passing CI tests are not a hard requirement but a good indicator what the
|
|
|
|
Buildbots will think about the proposed patch.
|
|
|
|
|
|
|
|
The CI builds modified packages for multiple architectures using the latest
|
|
|
|
snapshot SDK. For supported architectures (`aarch64_generic`,
|
|
|
|
`arm_cortex-a15_neon-vfpv4`, `i386_pentium4` and `x86_64`) an additional
|
|
|
|
runtime test is executed. A running OpenWrt is simulated which tries to install
|
|
|
|
created packages and runs a script called `test.sh` located next to the package
|
|
|
|
Makefile. The script is executed with the two arguments `PKG_NAME` and
|
|
|
|
`PKG_VERSION`. The `PKG_NAME` can be used to distinguish package variants, e.g.
|
|
|
|
`foobar` vs. `foobar-full`. The `PKG_VERSION` can be used for a trivial test
|
|
|
|
checking if `foobar --version` prints the correct version. `PKG_VERSION` is the
|
|
|
|
OpenWrt version and therefore includes the `PKG_RELEASE`, which isn't usually
|
|
|
|
part of the running programs version.
|
|
|
|
|
|
|
|
The following snippet show a script that tests different binaries, depending
|
|
|
|
what IPK package was installed. The `gpsd` Makefile produces both a `gpsd` and
|
|
|
|
a `gpsd-clients` IPK package.
|
|
|
|
|
|
|
|
```shell
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
"gpsd")
|
|
|
|
gpsd -V 2>&1 | grep "$2"
|
|
|
|
;;
|
|
|
|
"gpsd-clients")
|
|
|
|
cgps -V 2>&1 | grep "$2"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
```
|