As a member contributor, here are the guidelines that you should follow.
Use this repository to contribute to this project as easy and transparent as possible, whether it's:
- Reporting a bug
- Discussing the current state of the ToIP Deliverable
- Submitting a fix
- Proposing process recommendations
- other
Our GitHub Repo is used to host all the deliverables of the ToIP Foundation. We standard GitHub activities to track issues and feature requests, as well as accept all Pull Requests (PR's) related to the deliverables we manage.
| Term | Abbreviation |
|---|---|
| Work Group | WG |
| Task Force | TF |
- Issue Submission / Tracking
- Pull requests
- Organization Resources
- General GitHub Resources
Before proposing a new deliverable, consider the following preparatory actions:
- Exploring the idea in the appropriate WG Slack Channel.
- Socialize the idea during a WG meeting.
- Make use of the mailing lists to socialize the idea and to make an assessment that your proposal is novel and you will not be overlapping work already proposed. Encouraging feedback from maintainers is a good sign that you're on the right track.
- Make use of the Deliverables Index for a current listing of all work product efforts and their statuses so that you can appropriately position your proposal as unique.
- Make a decision as to the type of deliverable you will be proposing.
- Fork Deliverables Repo.
- Decide which parent folder is appropriate for your new deliverable. See ToIP Deliverables - Table 1.
- In a terminal window, change directories to the
<parent folder name>
- In a terminal window, change directories to the
- Pick a descriptive folder name for your new deliverable. Don't pick a number yet.
- Decide on a clear and simple name that is descriptive, yet not verbose or vague.
- Create a new folder under the appropriate deliverable type folder:
<your folder name> - Navigate into your new folder.
- Copy the appropriate deliverable guide for your type of deliverable to your new folder. See sample guides.
- Fill in the deliverable guide. Use MUST and SHOULD per standard conventions. Put care into the details: Deliverable submissions that do not present sufficient information as requested by the deliverable guide tend to be poorly received. You can add supporting artifacts and organize your folder as desired. You MAY want to:
- Create an
imagesfolder - Leverage PlantUML tools for the generation of UML diagrams. When doing so, you MUST include in your folder:
- Source:
.pumlfiles - Output:
.jpgor.pngfiles
- Source:
- Leverage presentation tools (i.e.: PowerPoint, Keynote). When doing so, you MUST include in your folder:
- Source:
.pptor.keyfiles - Output:
.jpgor.pngfiles
- Source:
- Create an
- Consider how your new proposal should be tagged.
- Assign a number to your deliverable submission. Get the number by loading this web page (or,
if you want to do it the hard way, by inspecting open and closed PRs against
this repo to figure out what the next PR number will be). Rename your folder from
<your folder name>to<your 4-digit number>-<your folder name>. At the top of your README.md, modify the title so it is in the form:<your 4-digit number>: Friendly Version of Your Title. Commit your changes. - In the root of the repo, run
python code/generate_index.pyto update the index with your new Deliverable proposal. - In the root of your repo, run
pytest codeto see whether your Deliverable passes all automated tests. The tests are simple. They just check for things like naming conventions and hyperlink correctness. - Commit the updated version of
/index.mdand push your changes. - Submit a pull request.
- Make sure that all of your commits satisfy the DCO requirements of the repo and conform to the license restrictions noted below.
- The ToIP Deliverable Maintainers will check to see if the process has been followed, and request any process changes before merging the PR.
- When the PR is merged, your RFC is now formally in the Proposed state.
Most of our deliverable types are managed within the trustoverip/deliverables repo as folders within a parent deliverable type folder. For example:
/deliverables
/plans
/0001-healthcare-provider
/specs
/0001-toip-stack
...
However, a few of our deliverable types are managed in independent repos to address the simplification of multiple content rendering formats (PDF, Website, Markdown, etc). These special case deliverable types are:
Each Glossary will be managed in its own dedicated repo that uses the following convention:
<glossary-name>-glossary
where <glossary-name> refers to the unique name of the glossary.
Note: The Concept and Terminology WG has outlined a high priority issue associated with the process for generating glossaries. The resolution to this issue will impact these instructions.
Each White Paper will be managed in its own dedicated repo that uses the following convention:
<wp-name>-white-paper
where <wp-name> refers to the unique name of the White Paper.
The lifecycle of a deliverable is driven by the author or current champion of the deliverable.
To modify the state of a deliverable, submit a PR with the following characteristics:
- The PR should ONLY change the deliverable status. Note that this requires refreshing the index (
python code/generate_index.py && pytest code). - The title of the PR should include a deadline date for merging the PR and the referenced deliverable.
- Example:
Status to Accepted, deadline 2019.08.15, PLAN 999-cool-stuff
- Example:
- The PR comment should document why the status is being changed.
- The deadline date should be 2 weeks after announcing the proposed status change on an ToIP SC call. The PR should also be announced on the appropriate WG Slack channel.
- Barring negative feedback from the community, the repo's maintainers should merge the PR after the deadline.
- The deadline should be moved by two weeks after addressing each substantive change to the deliverable made during the status change review period.
Work through the incubation process defined by the WG that is sponsoring your deliverable.
An accepted deliverable is a standards-track document. It becomes an acknowledged standard and/or Foundation-level work product.
This repository is licensed under an Apache 2 License. It is protected by a Developer Certificate of Origin on every commit. This means that any contributions you make must be licensed in an Apache-2-compatible way, and must be free from patent encumbrances or additional terms and conditions. By raising a PR, you certify that this is the case for your contribution.
If you are here because you forgot to sign off your commits, fear not. Check out how to sign off previous commits
We use developer certificate of origin (DCO) in all Hyperledger repositories, so to get your pull requests accepted, you must certify your commits by signing off on each commit.
$ git commit -s -m "your commit message"- To see if your commits have been signed off, run
$ git log. Any commits including a line withSigned-off-by: Example Author <author.email@example.com>are signed off. - If you need to re-sign the most current commit, use
$ git commit --amend --no-edit -s.
The -s flag signs off the commit message with your name and email.
-
Use
$ git logto see which commits need to be signed off. Any commits missing a line withSigned-off-by: Example Author <author.email@example.com>need to be re-signed. -
Go into interactive rebase mode using
$ git rebase -i HEAD~Xwhere X is the number of commits up to the most current commit you would like to see. -
You will see a list of the commits in a text file. On the line after each commit you need to sign off, add
exec git commit --amend --no-edit -swith the lowercase-sadding a text signature in the commit body. Example that signs both commits:pick 12345 commit message exec git commit --amend --no-edit -s pick 67890 commit message exec git commit --amend --no-edit -s -
If you need to re-sign a bunch of previous commits at once, find the earliest commit missing the sign off line using
$ git logand use that the HASH of the commit before it in this command:$ git rebase --exec 'git commit --amend --no-edit -n -s' -i HASH.This will sign off every commit from most recent to right before the HASH.
-
You will probably need to do a force push (
$ git push -f) if you had previously pushed unsigned commits to remote.
