Skip to content

Commit 2b4bec8

Browse files
committed
Create draft contributing.md document
This change establishes a draft for the Contribution Guidelines document. More changes will be added later to provide better formatting and internal linking between sections.
1 parent be7f864 commit 2b4bec8

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

docs/contributing.md

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
# Contribution Guidelines
2+
3+
We welcome many kinds of community contributions to this project! Whether it's a feature implementation,
4+
bug fix, or a good idea, please create an issue so that we can discuss it. It is not necessary to create an
5+
issue before sending a pull request but it may speed up the process if we can discuss your idea before
6+
you start implementing it.
7+
8+
Because this project exposes a couple different public APIs, we must be very mindful of any potential breaking
9+
changes. Some contributions may not be accepted if they risk introducing breaking changes or if they
10+
don't match the goals of the project. The core maintainer team has the right of final approval over
11+
any contribution to this project. However, we are very happy to hear community feedback on any decision
12+
so that we can ensure we are solving the right problems in the right way. Check out our [governance]
13+
(governance.md) page to learn more about how we run this project.
14+
15+
## Ways to Contribute
16+
17+
- File a bug or feature request as an [issue](https://github.com/PowerShell/PowerShellEditorServices/issues)
18+
- Comment on existing issues to give your feedback on how they should be fixed/implemented
19+
- Contribute a bug fix or feature implementation by submitting a pull request
20+
- Contribute more unit tests for feature areas that lack good coverage
21+
- Review the pull requests that others submit to ensure they follow [established guidelines]
22+
(#pull-request-guidelines)
23+
- Help others gets started with the project by contributing documentation or hanging out
24+
in the Slack chatroom [**TODO: Need to set this up!**]
25+
26+
## Code Contribution Guidelines
27+
28+
Here's a high level list of guidelines to follow to ensure your code contribution is accepted:
29+
30+
- Make sure your change aligns with project goals
31+
- Follow established guidelines for coding style and design
32+
- Follow established guidelines for commit hygiene
33+
- Write unit tests to validate new features and bug fixes
34+
- Ensure that the 'Release' build and unit tests pass locally
35+
- Ensure that the AppVeyor build passes for your change
36+
- Respond to all review feedback and final commit cleanup
37+
38+
### Practice Good Commit Hygiene
39+
40+
First of all, make sure you are practicing [good commit hygiene](http://blog.ericbmerritt.com/2011/09/21/commit-hygiene-and-git.html)
41+
so that your commits provide a good history of the changes you are making. To be more specific:
42+
43+
- **Write good commit messages**
44+
45+
Commit messages should be clearly written so that a person can look at the commit log and understand
46+
how and why a given change was made. Here is a great model commit message taken from a [blog post
47+
by Tim Pope](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html):
48+
49+
Capitalized, short (50 chars or less) summary
50+
51+
More detailed explanatory text, if necessary. Wrap it to about 72
52+
characters or so. In some contexts, the first line is treated as the
53+
subject of an email and the rest of the text as the body. The blank
54+
line separating the summary from the body is critical (unless you omit
55+
the body entirely); tools like rebase can get confused if you run the
56+
two together.
57+
58+
Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
59+
or "Fixes bug." This convention matches up with commit messages generated
60+
by commands like git merge and git revert.
61+
62+
Further paragraphs come after blank lines.
63+
64+
- Bullet points are okay, too
65+
66+
- Typically a hyphen or asterisk is used for the bullet, followed by a
67+
single space, with blank lines in between, but conventions vary here
68+
69+
- Use a hanging indent
70+
71+
A change that fixes a known bug with an issue filed should use the proper syntax so that the [issue
72+
is automatically closed](https://help.github.com/articles/closing-issues-via-commit-messages/) once
73+
your change is merged. Here's an example of what such a commit message should look like:
74+
75+
Fix #3: Catch NullReferenceException from DoThing
76+
77+
This change adds a try/catch block to catch a NullReferenceException that
78+
gets thrown by DoThing [...]
79+
80+
- **Squash your commits**
81+
82+
If you are introducing a new feature but have implemented it over multiple commits,
83+
please [squash those commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
84+
into a single commit that contains all the changes in one place. This especially applies to any "oops"
85+
commits where a file is forgotten or a typo is being fixed. Following this approach makes it a lot easier
86+
to pull those changes to other branches or roll back the change if necessary.
87+
88+
- **Keep individual commits for larger changes**
89+
90+
You can certainly maintain individual commits for different phases of a big change. For example, if
91+
you want to reorganize some files before adding new functionality, have your first commit contain all
92+
of the file move changes and then the following commit can have all of the feature additions. We
93+
highly recommend this approach so that larger commits don't turn into a jumbled mess.
94+
95+
### Add Unit Tests for New Code
96+
97+
If you're adding a new feature to the project, please make sure to include adequate [xUnit](http://xunit.github.io/)
98+
tests with your change. In this project, we have chosen write out unit tests in a way that uses the
99+
actual PowerShell environment rather than extensive interface mocking. This allows us to be sure that
100+
our features will work in practice.
101+
102+
We do both component-level and scenario-level testing depending on what code is being tested. We don't
103+
expect contributors to test every possible edge case. Testing mainline scenarios and the most common
104+
failure scenarios is often good enough.
105+
106+
We are very happy to accept unit test contributions for any feature areas that are more error-prone than
107+
others. Also, if you find that a feature fails for you in a specific case, please feel free to file an issue
108+
that includes a unit test which reproduces the problem. This will allow us to quickly implement a fix
109+
that resolves the problem.
110+
111+
### Build 'Release' Before Submitting
112+
113+
Before you send out your pull request, make sure that you have run a Release configuration build of the
114+
project and that all new and existing tests are passing. The Release configuration build ensures that
115+
all public API interfaces have been documented correctly otherwise it throws an error. We have turned
116+
on this check so that our project will always have good generated documentation.
117+
118+
### Follow the Pull Request Process
119+
120+
- **Create your pull request**
121+
122+
Use the [typical process](https://help.github.com/articles/using-pull-requests/) to send a pull request
123+
from your fork of the project. In your pull request message, please give a high-level summary of the
124+
changes that you have made so that reviewers understand the intent of the changes. You should receive
125+
initial comments within a day or two, but please feel free to ping if things are taking longer than
126+
expected.
127+
128+
- **The build and unit tests must run green**
129+
130+
When you submit your pull request, our automated build system on AppVeyor will attempt to run a
131+
Release build of your changes and then run all unit tests against the build. If you notice that
132+
any of your unit tests have failed, please fix them by creating a new commit and then pushing it
133+
to your branch. If you see that some unrelated test has failed, try re-running the build for your
134+
pull request. If you continue to see issues, write a comment on the pull request and we will
135+
look into it.
136+
137+
- **Respond to code review feedback**
138+
139+
If the reviewers ask you to make changes, make them as a new commit to your branch and push them so
140+
that they are made available for a final review pass. Do not rebase the fixes just yet so that the
141+
commit hash changes don't upset GitHub's pull request UI.
142+
143+
- **If necessary, do a final rebase**
144+
145+
Once your final changes have been accepted, we may ask you to do a final rebase to have your commits
146+
so that they follow our commit guidelines. If specific guidance is given, please follow it when
147+
rebasing your commits. Once you do your final push and we see the AppVeyor build pass, we will
148+
merge your changes!
149+

0 commit comments

Comments
 (0)