title |
---|
Contributing |
Welcome to Interledger.rs!
Interledger.rs is an implementation of the Interledger Protocol (ILP) written in the Rust programming language. Contributions are very welcome and if you're interested in getting involved, this document provides some background on the project and how we work.
Before diving in to Interledger.rs, you may find it helpful to familiarize yourself with some aspects of the Interledger Protocol itself and the Rust-based technologies we use:
- Knowledge about the Interledger Protocol itself
- Knowledge about Interledger.rs
- Knowledge about the Rust language
- Knowledge about crates used in Interledger.rs
- On Interledger
- If you have questions about how Interledger works or ideas for new features, please visit the Interledger Forum and post your questions or comments.
- On Interledger.rs
- If you have any opinion on the features of Interledger.rs, please open issues describing what you think we need.
We welcome pull requests (PRs) that address reported issues. You can find appropriate issues by bug
or help-wanted
labels. To avoid multiple PRs for a single issue, please let us know that you are working on it by a comment for the issue. Also we recommend to make discussions on the issue of how to address the issue, methodology towards the resolution or the architecture of your code, in order to avoid writing inefficient or inappropriate code.
Please follow the instruction below when making pull requests. These will be checked by our PR CI process where applicable, so don't worry about getting it wrong.
- Make sure that your branch is forked from the latest
master
branch. - Make sure that you wrote tests, ran it and the results were all green (required to pass CI).
- Make sure to run
cargo fmt
before you commit (required to pass CI).- To install rustfmt, run
rustup component add rustfmt
. - To run rustfmt, use
cargo fmt -- --check
. - If you would like to make your local setup reject unformatted commits, you can add the command as a pre-commit hook in the file
interledger-rs/.git/hooks/pre-commit
.
- To install rustfmt, run
- Make sure to run
cargo clippy
before you commit (required to pass CI).- To install clippy, run
rustup component add clippy
. - To run clippy, use
cargo clippy --all-targets --all-features -- -D warnings
. - If you would like to make your local setup reject unformatted commits, you can add the command as a pre-commit hook in the file
interledger-rs/.git/hooks/pre-commit
.
- To install clippy, run
- Make sure to commit using
-s
or--signoff
option likegit cz -s
(required to pass CI).cz
means using the commitizen explained below.- Why we use the option is explained later in the Signing-off section.
- Make sure that you committed using the commitizen format (commit messages should start with
feat:
,docs:
,refactor:
,chore:
, etc) (required to pass CI). PRs may contain multiple commits but they should generally be squashed into one or a small number of complete change sets (for example, a feature followed by multiple refactors and another commit to add tests and docs should be combined into a single commit for that feature).- If you would like to make your local setup reject improperly formatted commit headers, you can add the following code to
interledger-rs/.git/hooks/commit-msg
:
- If you would like to make your local setup reject improperly formatted commit headers, you can add the following code to
if head -n 1 "$1" | grep -vqE "^(feat|fix|docs|style|refactor|perf|test|chore|ci|build)(\(.{1,30}\))?:[ ].{5,100}$"; then
echo "Commit message rejected, commit aborted" && exit 1
fi
- Make pull requests against
master
branch of this repository (interledger-rs/interledger-rs) from your repository. - The pull request should contain no merge commits (required to pass CI).
- If reviewers request some changes, please follow the instruction or make discussions if you have any constructive opinions on the PRs you made.
- Then if you want to make some changes on your PRs,
push -f
is allowed to renew your branch after squashing your new commits. You don't need to open new PRs.
- Then if you want to make some changes on your PRs,
- For our examples, we adopted a literate programming approach. The examples are described in Markdown with shell commands included. The
run-md.sh
script parses the commands out of the Markdown file and runs them. If you want to add examples, please make sure your instruction file can be parsed and run by that script.- You can check if it is correct with running
../../scripts/run-md.sh README.md
(in your example directory).
- You can check if it is correct with running
By using -s
or --signoff
option, you agree to the following agreement (Developer Certificate of Origin) which assures that your commits consist of your own code and/or code which you have rights to submit.
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
If you find any bugs, please feel free to report them by opening an issue. Please look through existing issues before posting to avoid duplicating other bug reports.
To resolve the problem we need a detailed report of the bug. When you report your bugs, refer to the following example of a report.
Short summary: <summary>
Commit hash or branch: <hash or branch> (or even tag etc. to determine exact version)
How to reproduce the bug: <how to reproduce the bug> (procedure or sample code)
Description: <description> (explanation and/or backtrace)
If you have any questions, you can get in touch with us by posting on the Interledger Forum or in the #rust channel of the Interledger Slack (to join Interledger's Slack workspace, follow this link).
Once again, welcome to Interledger.rs -- we look forward to working with you!