parent
6e8d7e9744
commit
e74797f557
1 changed files with 195 additions and 0 deletions
195
CONTRIBUTING.md
Normal file
195
CONTRIBUTING.md
Normal file
|
@ -0,0 +1,195 @@
|
|||
# How to Contribute
|
||||
|
||||
Thank you for your interest in making ddclient better! This document
|
||||
provides guidelines to make the contribution process as smooth as
|
||||
possible.
|
||||
|
||||
To contribute changes, please open a pull request against the
|
||||
[ddclient GitHub project](https://github.com/ddclient/ddclient/pulls).
|
||||
|
||||
## Style
|
||||
|
||||
* Above all else, try to match the existing style surrounding your
|
||||
edits.
|
||||
* No trailing whitespace.
|
||||
* Use spaces, not tabs.
|
||||
* Indentation level is 4 spaces.
|
||||
* Use parentheses for Perl function invocations: `print($fh "foo")`
|
||||
not `print $fh "foo"`
|
||||
* When reasonable, break lines longer than 99 characters. Rationale:
|
||||
- Imposing a limit makes it practical to open many side-by-side
|
||||
files or terminals without worrying about horizontal scrolling.
|
||||
- 99 is used instead of 100 so that the +/- column added by
|
||||
unified diff does not cause wrapping in 100 column wide
|
||||
terminals.
|
||||
* Add spaces to vertically align adjacent lines of code when doing
|
||||
so improves readability.
|
||||
|
||||
The following [perltidy](https://metacpan.org/pod/perltidy) command is
|
||||
not perfect but it can get you close to our preferred style:
|
||||
|
||||
```shell
|
||||
perltidy -l=99 -conv -ci=4 -ola -ce -nbbc -kis -pt=2 -b ddclient
|
||||
```
|
||||
|
||||
## Git Hygiene
|
||||
|
||||
* Please keep your pull request commits rebased on top of master.
|
||||
* Please use `git rebase -i` to make your commits easy to review:
|
||||
- Put unrelated changes in separate commits
|
||||
- Squash you fixup commits
|
||||
* Write your commit message in imperative mood, and explain *why*
|
||||
the change is made (unless obvious) in addition to *what* is
|
||||
changed.
|
||||
|
||||
If you are not very comfortable with Git, we encourage you to read
|
||||
[Pro Git](https://git-scm.com/book) by Scott Chacon and Ben Straub
|
||||
(freely available online).
|
||||
|
||||
## Compatibility
|
||||
|
||||
We strive to make ddclient usable on a wide variety of platforms.
|
||||
Please limit yourself to Perl language features and modules available
|
||||
on the following platforms:
|
||||
|
||||
* Debian oldstable and newer
|
||||
* Ubuntu, [all maintained
|
||||
releases](https://ubuntu.com/about/release-cycle)
|
||||
* Fedora, [all maintained
|
||||
releases](https://fedoraproject.org/wiki/Fedora_Release_Life_Cycle)
|
||||
* CentOS, [all maintained
|
||||
releases](https://wiki.centos.org/About/Product)
|
||||
* Red Hat Enterprise Linux, [all maintained
|
||||
releases](https://access.redhat.com/support/policy/updates/errata/)
|
||||
|
||||
See https://pkgs.org for available modules and versions.
|
||||
|
||||
Exception: You may depend on modern language features or modules for
|
||||
new functionality when no feasible alternative exists, as long as the
|
||||
new dependency does not break existing functionality on old plaforms.
|
||||
|
||||
All shell scripts should conform with [POSIX Issue 7 (2018
|
||||
edition)](https://pubs.opengroup.org/onlinepubs/9699919799/) or later.
|
||||
|
||||
## Prefer Revert and Redo, Not Fix
|
||||
|
||||
Suppose a recent change broke something or otherwise needs
|
||||
refinement. It is tempting to simply push a fix, but it is usually
|
||||
better to revert the original change then redo it:
|
||||
|
||||
* There is less subjectivity with a revert, so you are more likely
|
||||
to get a quick approval and merge. You can quickly "stop the
|
||||
bleeding" while you and the project maintainers debate about the
|
||||
best way to fix the problem with the original commit.
|
||||
* It is easier and less mistake-prone to cherry-pick a single commit
|
||||
(the redo commit) than two commits (the original commit plus the
|
||||
required fix).
|
||||
* Someone using blame to review the history will see the redo
|
||||
commit, not the buggy original commit.
|
||||
|
||||
## For ddclient Project Maintainers
|
||||
|
||||
### Merging Pull Requests
|
||||
|
||||
To facilitate reviews and code archaeology, `master` should have a
|
||||
semi-linear commit history like this:
|
||||
|
||||
```
|
||||
* f4e6e90 sandro.jaeckel@gmail.com 2020-05-31 07:29:51 +0200 (master)
|
||||
|\ Merge pull request #142 from rhansen/config-line-format
|
||||
| * 30180ed rhansen@rhansen.org 2020-05-30 13:09:38 -0400
|
||||
|/ Expand comment documenting config line format
|
||||
* 01a746c rhansen@rhansen.org 2020-05-30 23:47:54 -0400
|
||||
|\ Merge pull request #138 from rhansen/dyndns-za-net
|
||||
| * 08c2b6c rhansen@rhansen.org 2020-05-29 14:44:57 -0400
|
||||
|/ Replace dydns.za.net with dyndns.za.net
|
||||
* d65805b rhansen@rhansen.org 2020-05-30 22:30:04 -0400
|
||||
|\ Merge pull request #140 from ddclient/fix-interpolation
|
||||
| * babbef1 sandro.jaeckel@gmail.com 2020-05-30 04:03:44 +0200
|
||||
|/ Fix here doc interpolation
|
||||
* 6ae69a1 rhansen@rhansen.org 2020-05-30 22:23:57 -0400
|
||||
|\ Merge pull request #141 from ddclient/show-debug-ssl
|
||||
| * 096288e sandro.jaeckel@gmail.com 2020-05-30 04:42:27 +0200
|
||||
| | Expand tabs to spaces in vim
|
||||
| * 0206262 sandro.jaeckel@gmail.com 2020-05-30 04:40:58 +0200
|
||||
|/ Show debug connection settings after evaluating use-ssl
|
||||
...
|
||||
```
|
||||
|
||||
See https://stackoverflow.com/a/15721436 for an explanation of the
|
||||
benefits.
|
||||
|
||||
This semi-linear style is mostly useful for multi-commit pull
|
||||
requests. For single-commit pull requests, GitHub's "Squash and merge"
|
||||
and "Rebase and merge" options are fine, though this approach still
|
||||
has value:
|
||||
|
||||
* The merge commit's commit message can link to the pull request
|
||||
or contain other contextual information.
|
||||
* It's easier to see who merged the PR (just look at the merge
|
||||
commit author.)
|
||||
* You can easily see both the original author timestamp (when the
|
||||
change was made) and the merge timestamp (when it went live).
|
||||
|
||||
To achieve a history like the above, the pull request must be rebased
|
||||
onto `master` before merging. Unfortunately, GitHub does not have a
|
||||
one-click way to do this (the "Rebase and merge" option does a
|
||||
fast-forward merge, which is not what we want). See
|
||||
[isaacs/github#1143](https://github.com/isaacs/github/issues/1143) and
|
||||
[isaacs/github#1017](https://github.com/isaacs/github/issues/1017). Until
|
||||
GitHub adds that feature, it has to be done manually:
|
||||
|
||||
```shell
|
||||
# Set this to the name of the GitHub user or project that owns the
|
||||
# fork used for the pull request:
|
||||
PR_USER=
|
||||
|
||||
# Set this to the name of the branch in the fork used for the pull
|
||||
# request:
|
||||
PR_BRANCH=
|
||||
|
||||
# The commands below assume that `origin` refers to the
|
||||
# ddclient/ddclient repository
|
||||
git remote set-url origin git@github.com:ddclient/ddclient.git
|
||||
|
||||
# Add a remote for the fork used in the PR
|
||||
git remote add "${PR_USER:?}" git@github.com:"${PR_USER:?}"/ddclient
|
||||
|
||||
# Fetch the latest commits for the PR and ddclient master
|
||||
git remote update -p
|
||||
|
||||
# Switch to the pull request branch
|
||||
git checkout -b "${PR_USER:?}-${PR_BRANCH:?}" "${PR_USER:?}/${PR_BRANCH:?}"
|
||||
|
||||
# Rebase the commits (optionally using -i to clean up history) onto
|
||||
# the current ddclient master branch
|
||||
git rebase origin/master
|
||||
|
||||
# Force update the contributor's fork. This will only work if the
|
||||
# contributor has checked the "Allow edits by maintainers" box in the
|
||||
# PR. If not, you will have to manually merge the rebased commits.
|
||||
git push -f
|
||||
|
||||
# If the force push was successful, you can now go into the GitHub UI
|
||||
# and merge using the "Create a merge request" option.
|
||||
#
|
||||
# If the force push failed because the contributor did not check
|
||||
# "Allow edits by maintainers", or if you prefer to merge manually,
|
||||
# continue with the next steps.
|
||||
|
||||
# Switch to the local master branch
|
||||
git checkout master
|
||||
|
||||
# Make sure the local master branch is up to date
|
||||
git merge --ff-only origin/master
|
||||
|
||||
# Merge in the rebased pull request branch **WITHOUT DOING A
|
||||
# FAST-FORWARD MERGE**
|
||||
git merge --no-ff "${PR_USER:?}-${PR_BRANCH:?}"
|
||||
|
||||
# Review the commits before pushing
|
||||
git log --graph --oneline --decorate origin/master..
|
||||
|
||||
# Push to ddclient master
|
||||
git push origin master
|
||||
```
|
Loading…
Reference in a new issue