Permalink
Browse files

[docs] added guidelines for new and existing contributors

  • Loading branch information...
1 parent 89922b2 commit b96042d439b2e2062741dcb039b808029bac1433 @ghuntley ghuntley committed on GitHub Aug 26, 2016
Showing with 191 additions and 26 deletions.
  1. +191 −26 CONTRIBUTING.md
View
@@ -1,35 +1,200 @@
-## The quick version
+# Contributing to ReactiveUI
-1. Open `ReactiveUI.sln` in VS2012 / VS2013
-1. Run tests, build ReactiveUI.sln in VS2012 on Win8
-1. Submit PR
+We'd love for you to contribute to our source code and to make reactiveui even better than it is
+today! Here are the guidelines we'd like you to follow:
+ - [Code of Conduct](#coc)
+ - [Question or Problem?](#question)
+ - [Issues and Bugs](#issue)
+ - [Feature Requests](#feature)
+ - [Submission Guidelines](#submit)
+ - [Coding Rules](#rules)
+ - [Commit Message Guidelines](#commit)
-## How to start hacking on ReactiveUI (the more verbose version)
+## <a name="coc"></a> Code of Conduct
-1. Fork and Clone the source
-1. Create a new branch for your feature / bugfix
-1. Open the ReactiveUI.sln solution - this is the one you should use unless you're hacking on platform-specific code.
-1. Run all the tests, make sure they pass.
-1. Write some new tests that fail
-1. Make your change
-1. See those same tests pass! Hurrah!
-1. Push that branch to GitHub (`git push -u origin my-cool-new-feature`)
-1. Go to your fork on GitHub, you should see a button with your branch next to it labeled 'Pull Request'
-1. Type up some information about your change
+Help us keep the project open and inclusive. Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md).
-## To make a new NuGet release for private use
+## <a name="question"></a> Got a Question or Problem?
-*This looks hard, but once you get your environment set up, it's really only 'Build in VS, build in Mono, run script'*
+If you have questions about how to use reactiveui, please direct these to [StackOverflow](https://stackoverflow.com/questions/tagged/reactiveui). The project maintainers hang out in this [Slack](https://github.com/reactiveui/reactiveui#slack) channel.
-1. Put the source into DropBox or another way you can share the same folder between a Mac and a PC (Parallels Shared Folders works too)
-1. Edit `/CommonAssemblyInfo.cs` and bump the version
-1. Open ReactiveUI.sln and build it in Release mode under VS2012 on Windows 8 / Win8.1 with the WP8 SDK installed (nothing earlier is supported)
-1. Open MonoDevelop, and build ReactiveUI_XSAll.sln in Release mode
-1. Back on the PC, run `MakeRelease.ps1` and specify a NuGet SemVer, like `MakeRelease.ps1 -version "5.5.0-beta1"`
-1. You'll end up with two new folders, `Release` and `Nuget-Release`, as well as the `.nupkg` files in the root directory.
+## <a name="issue"></a> Found an Issue?
-## Some quirks
+If you find a bug in the source code or a mistake in the documentation, you can help us by
+submitting an issue to our [GitHub Repository](https://github.com/reactiveui/reactiveui). Even better you can submit a Pull Request
+with a fix.
-* The only 100% guaranteed .sln files to be maintained are ReactiveUI.sln and ReactiveUI_XSAll.sln - the others may be missing projects
-* Please follow my coding convention when submitting PRs - `if` statements have the brackets on the same line, non-public methods shouldBeCasedLikeThis, etc etc. I know I'm weird, Deal With It(tm).
+**Please see the [Submission Guidelines](#submit) below.**
+
+## <a name="feature"></a> Want a Feature?
+
+You can request a new feature by submitting an issue to our [GitHub Repository](https://github.com/reactiveui/reactiveui). If you
+would like to implement a new feature then consider what kind of change it is:
+
+* **Major Changes** that you wish to contribute to the project should be discussed first in [Slack](https://github.com/reactiveui/reactiveui#slack) so that we can better coordinate our efforts,
+ prevent duplication of work, and help you to craft the change so that it is successfully accepted
+ into the project.
+* **Small Changes** can be crafted and submitted to the [GitHub Repository](https://github.com/reactiveui/reactiveui) as a Pull
+ Request.
+
+## <a name="submit"></a> Submission Guidelines
+
+### Submitting an Issue
+
+If your issue appears to be a bug, and hasn't been reported, open a new issue. Help us to maximize
+the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
+
+Providing the following information will increase the chances of your issue being dealt with
+quickly:
+
+* **Overview of the Issue** - if an error is being thrown a stack trace helps
+* **Motivation for or Use Case** - explain why this is a bug for you
+* **reactiveui Version(s)** - is it a regression?
+* **Operating System** - is this a problem with all browsers or only specific ones?
+* **Reproduce the Error** - provide a example or an unambiguous set of steps.
+* **Related Issues** - has a similar issue been reported before?
+* **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be
+ causing the problem (line of code or commit)
+
+**If you get help, help others. Good karma rulez!**
+
+### Submitting a Pull Request
+Before you submit your pull request consider the following guidelines:
+
+* Search [GitHub](https://github.com/reactiveui/reactiveui/pulls) for an open or closed Pull Request
+ that relates to your submission. You don't want to duplicate effort.
+* Make your changes in a new git branch:
+
+ ```shell
+ git checkout -b my-fix-branch master
+ ```
+
+* Create your patch, **including appropriate test cases**.
+* Follow our [Coding Rules](#rules).
+* Run the test suite, as described below.
+* Commit your changes using a descriptive commit message that follows our
+ [commit message conventions](#commit).
+
+ ```shell
+ git commit -a
+ ```
+ Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files.
+
+* Build your changes locally to ensure all the tests pass:
+
+ ```shell
+ build.cmd
+ ```
+
+* Push your branch to GitHub:
+
+ ```shell
+ git push origin my-fix-branch
+ ```
+
+In GitHub, send a pull request to `reactiveui:master`.
+
+If we suggest changes, then:
+
+* Make the required updates.
+* Re-run the test suite to ensure tests are still passing.
+* Commit your changes to your branch (e.g. `my-fix-branch`).
+* Push the changes to your GitHub repository (this will update your Pull Request).
+
+If the PR gets too outdated we may ask you to rebase and force push to update the PR:
+
+```shell
+git rebase master -i
+git push origin my-fix-branch -f
+```
+
+_WARNING: Squashing or reverting commits and force-pushing thereafter may remove GitHub comments
+on code that were previously made by you or others in your commits. Avoid any form of rebasing
+unless necessary._
+
+That's it! Thank you for your contribution!
+
+#### After your pull request is merged
+
+After your pull request is merged, you can safely delete your branch and pull the changes
+from the main (upstream) repository:
+
+* Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows:
+
+ ```shell
+ git push origin --delete my-fix-branch
+ ```
+
+* Check out the master branch:
+
+ ```shell
+ git checkout master -f
+ ```
+
+* Delete the local branch:
+
+ ```shell
+ git branch -D my-fix-branch
+ ```
+
+* Update your master with the latest upstream version:
+
+ ```shell
+ git pull --ff upstream master
+ ```
+
+## <a name="rules"></a> Coding Rules
+
+To ensure consistency throughout the source code, keep these rules in mind as you are working:
+
+* All features or bug fixes **must be tested** by one or more unit tests.
+* All public API methods **must be documented** with XML documentation.
+
+## <a name="commit"></a> Git Commit Guidelines
+
+Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
+format that includes a **type** and a **subject**:
+
+```
+<type>: <subject>
+<body>
+<BLANK LINE>
+<footer>
+```
+
+### Revert
+
+If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
+
+### Type
+
+Must be one of the following:
+
+* **feat**: A new feature
+* **fix**: A bug fix
+* **docs**: Documentation only changes
+* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing
+ semi-colons, etc)
+* **refactor**: A code change that neither fixes a bug nor adds a feature
+* **perf**: A code change that improves performance
+* **test**: Adding missing tests
+* **chore**: Changes to the build process or auxiliary tools and libraries such as documentation
+ generation
+
+### Subject
+The subject contains succinct description of the change:
+
+* use the imperative, present tense: "change" not "changed" nor "changes"
+* don't capitalize first letter
+* no dot (.) at the end
+
+### Body
+Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
+The body should include the motivation for the change and contrast this with previous behavior.
+
+### Footer
+The footer should contain any information about **Breaking Changes** and is also the place to
+reference GitHub issues that this commit **Closes**.
+
+**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.

0 comments on commit b96042d

Please sign in to comment.