Skip to content

Latest commit

 

History

History
110 lines (74 loc) · 8.25 KB

CONTRIBUTING.adoc

File metadata and controls

110 lines (74 loc) · 8.25 KB

Contributing

The Substrate project is an OPENISH Open Source Project

What?

Individuals making significant and valuable contributions are given commit-access to a project to contribute as they see fit. A project is more like an open wiki than a standard guarded open source project.

Rules

There are a few basic ground-rules for contributors (including the maintainer(s) of the project):

  1. No --force pushes or modifying the master branch history in any way. If you need to rebase, ensure you do it in your own repo. No rewriting of the history after the code has been shared (e.g. through a Pull-Request).

  2. Non-master branches, prefixed with a short name moniker (e.g. gav-my-feature) must be used for ongoing work.

  3. All modifications must be made in a pull-request to solicit feedback from other contributors.

  4. A pull-request must not be merged until CI has finished successfully.

  5. Contributors should adhere to the house coding style.

Merge Process

In General

A PR needs to be reviewed and approved by project maintainers unless:

  • it does not alter any logic (e.g. comments, dependencies, docs), then it may be tagged insubstantial and merged by its author once CI is complete.

  • it is an urgent fix with no large change to logic, then it may be merged after a non-author contributor has approved the review once CI is complete.

Labels TLDR:

  • A-* Pull request status. ONE REQUIRED.

  • B-* Changelog and/or Runtime-upgrade post composition markers. ONE REQUIRED. (used by automation)

  • C-* Release notes release-priority markers. EXACTLY ONE REQUIRED. (used by automation)

  • D-* More general tags on the PR denoting various implications and requirements.

Process:

  1. Please tag each PR with exactly one A, B and C label at the minimum.

  2. Once a PR is ready for review please add the A0-pleasereview label. Generally PRs should sit with this label for 48 hours in order to garner feedback. It may be merged before if all relevant parties had a look at it.

  3. If the first review is not an approval, swap A0-pleasereview to any label [A3, A7] to indicate that the PR has received some feedback, but needs further work. For example. A3-inprogress is a general indicator that the PR is work in progress and A4-gotissues means that it has significant problems that need fixing. Once the work is done, change the label back to A0-pleasereview. You might end up swapping a few times back and forth to climb up the A label group. Once a PR is A8-mergeoncegreen, it is ready to merge.

  4. PRs must be tagged with respect to release notes with B0-silent and B1-... The former indicates that no changes should be mentioned in any release notes. The latter indicates that the changes should be reported in the corresponding release note

  5. PRs that break the external API must be tagged with D2-breaksapi, when it changes the FRAME or consensus of running system with B3-breaksconsensus.

  6. PRs should be labeled with their release importance via the C1-C9.

  7. PRs should be categorized into projects.

  8. No PR should be merged until all reviews' comments are addressed and CI is successful.

Reviewing pull requests:

When reviewing a pull request, the end-goal is to suggest useful changes to the author. Reviews should finish with approval unless there are issues that would result in:

  1. Buggy behavior.

  2. Undue maintenance burden.

  3. Breaking with house coding style.

  4. Pessimization (i.e. reduction of speed as measured in the projects benchmarks).

  5. Feature reduction (i.e. it removes some aspect of functionality that a significant minority of users rely on).

  6. Uselessness (i.e. it does not strictly add a feature or fix a known issue).

Reviews may not be used as an effective veto for a PR because:

  1. There exists a somewhat cleaner/better/faster way of accomplishing the same feature/fix.

  2. It does not fit well with some other contributors' longer-term vision for the project.

Updating Polkadot as well

All pull requests will be checked against either Polkadot master, or your provided Polkadot companion PR. That is, If your PR changes the external APIs or interfaces used by Polkadot. If you tagged the PR with breaksapi or breaksconsensus this is most certainly the case, in all other cases check for it by running step 1 below.

To create a Polkadot companion PR:

  1. Pull latest Polkadot master (or clone it, if you haven’t yet).

  2. Override your local cargo config to point to your local substrate (pointing to your WIP branch): place paths = ["path/to/substrate"] in ~/.cargo/config.

  3. Make the changes required and build polkadot locally.

  4. Submit all this as a PR against the Polkadot Repo. Link to your Polkadot PR in the description of your Substrate PR as "polkadot companion: [URL]"

  5. Now you should see that the check_polkadot CI job will build your Substrate PR agains the mentioned Polkadot branch in your PR description.

  6. Wait for reviews on both the Substrate and the Polkadot pull request.

  7. Once the Substrate pull request runs green, a member of the parity github group can comment on the Substrate pull request with bot merge which will:

    • Merge the Substrate pull request.

    • In case the pull request origins from https://github.com/paritytech/polkadot directly and not from a fork:

    • The bot will push a commit to the Polkadot pull request updating its Substrate reference.

    • The bot will merge the Polkadot pull request once all its CI checks are green.

    • In case the pull request origins from a fork (relevant for pull requests by external contributors):

    • You need to push a commit to the Polkadot pull request updating the Substrate reference.

    • You need to merge by commenting bot merge on the Polkadot pull request once all CI checks on the pull request are green.

If your PR is reviewed well, but a Polkadot PR is missing, signal it with A7-needspolkadotpr to prevent it from getting automatically merged.

As there might be multiple pending PRs that might conflict with one another, a) you should not merge the substrate PR until the Polkadot PR has also been reviewed and b) both should be merged pretty quickly after another to not block others.

Helping out

We use labels to manage PRs and issues and communicate state of a PR. Please familiarize yourself with them. Furthermore we are organizing issues in milestones. Best way to get started is to a pick a ticket from the current milestone tagged easy or medium and get going or mentor and get in contact with the mentor offering their support on that larger task.

Issues

Please label issues with the following labels:

  1. I-* Issue severity and type. EXACTLY ONE REQUIRED.

  2. P-* Issue priority. AT MOST ONE ALLOWED.

  3. Q-* Issue difficulty. AT MOST ONE ALLOWED.

  4. Z-* More general tags on the issue, denoting context and resolution.

Releases

Declaring formal releases remains the prerogative of the project maintainer(s).

Changes to this arrangement

This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change.

Heritage

These contributing guidelines are modified from the "OPEN Open Source Project" guidelines for the Level project: https://github.com/Level/community/blob/master/CONTRIBUTING.md