2015-08-13 19:14:34 +03:00
|
|
|
# Contributing to Node.js
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-11-11 18:33:43 +03:00
|
|
|
## Code of Conduct
|
|
|
|
|
|
|
|
The Code of Conduct explains the *bare minimum* behavior
|
|
|
|
expectations the Node Foundation requires of its contributors.
|
|
|
|
[Please read it before participating.](./CODE_OF_CONDUCT.md)
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
## Issue Contributions
|
2014-12-02 04:31:19 +03:00
|
|
|
|
|
|
|
When opening new issues or commenting on existing issues on this repository
|
|
|
|
please make sure discussions are related to concrete technical issues with the
|
2015-08-13 19:14:34 +03:00
|
|
|
Node.js software.
|
2014-12-02 04:31:19 +03:00
|
|
|
|
2015-10-07 08:47:49 +03:00
|
|
|
For general help using Node.js, please file an issue at the
|
|
|
|
[Node.js help repository](https://github.com/nodejs/help/issues).
|
|
|
|
|
2014-12-02 04:31:19 +03:00
|
|
|
Discussion of non-technical topics including subjects like intellectual
|
|
|
|
property, trademark and high level project questions should move to the
|
2016-02-13 20:30:49 +03:00
|
|
|
[Technical Steering Committee (TSC)](https://github.com/nodejs/TSC/issues)
|
2015-01-02 14:52:50 +03:00
|
|
|
instead.
|
2014-12-02 04:31:19 +03:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
## Code Contributions
|
2014-12-02 04:31:19 +03:00
|
|
|
|
2015-08-13 19:14:34 +03:00
|
|
|
The Node.js project has an open governance model and welcomes new contributors.
|
2015-01-02 14:52:50 +03:00
|
|
|
Individuals making significant and valuable contributions are made
|
|
|
|
_Collaborators_ and given commit-access to the project. See the
|
|
|
|
[GOVERNANCE.md](./GOVERNANCE.md) document for more information about how this
|
|
|
|
works.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
This document will guide you through the contribution process.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
### Step 1: Fork
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-08-13 19:14:34 +03:00
|
|
|
Fork the project [on GitHub](https://github.com/nodejs/node) and check out your
|
2015-01-02 14:52:50 +03:00
|
|
|
copy locally.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2015-08-13 19:14:34 +03:00
|
|
|
$ git clone git@github.com:username/node.git
|
|
|
|
$ cd node
|
|
|
|
$ git remote add upstream git://github.com/nodejs/node.git
|
2012-12-31 03:36:47 +04:00
|
|
|
```
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
#### Which branch?
|
|
|
|
|
2015-04-18 21:11:52 +03:00
|
|
|
For developing new features and bug fixes, the `master` branch should be pulled
|
|
|
|
and built upon.
|
2015-01-02 14:52:50 +03:00
|
|
|
|
|
|
|
#### Respect the stability index
|
2012-12-31 03:36:47 +04:00
|
|
|
|
|
|
|
The rules for the master branch are less strict; consult the
|
2016-04-22 04:11:03 +03:00
|
|
|
[stability index](./doc/api/documentation.md#stability-index) for details.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-10-30 00:52:36 +03:00
|
|
|
In a nutshell, modules are at varying levels of API stability. Bug fixes are
|
2015-01-02 14:52:50 +03:00
|
|
|
always welcome but API or behavioral changes to modules at stability level 3
|
2015-04-18 21:11:52 +03:00
|
|
|
(Locked) are off-limits.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
#### Dependencies
|
|
|
|
|
2015-08-13 19:14:34 +03:00
|
|
|
Node.js has several bundled dependencies in the *deps/* and the *tools/*
|
2015-10-30 00:52:36 +03:00
|
|
|
directories that are not part of the project proper. Any changes to files
|
2013-02-14 15:42:54 +04:00
|
|
|
in those directories or its subdirectories should be sent to their respective
|
2015-10-30 00:52:36 +03:00
|
|
|
projects. Do not send your patch to us, we cannot accept it.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
In case of doubt, open an issue in the
|
2015-08-13 19:14:34 +03:00
|
|
|
[issue tracker](https://github.com/nodejs/node/issues/) or contact one of the
|
|
|
|
[project Collaborators](https://github.com/nodejs/node/#current-project-team-members).
|
2015-09-08 23:25:57 +03:00
|
|
|
Especially do so if you plan to work on something big. Nothing is more
|
2012-12-31 03:36:47 +04:00
|
|
|
frustrating than seeing your hard work go to waste because your vision
|
2015-09-08 23:25:57 +03:00
|
|
|
does not align with the project team. Node.js has two IRC channels,
|
|
|
|
[#Node.js](http://webchat.freenode.net/?channels=node.js) for general help and questions, and
|
|
|
|
[#Node-dev](http://webchat.freenode.net/?channels=node-dev) for development of node core specifically.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
### Step 2: Branch
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2016-08-20 07:57:51 +03:00
|
|
|
Create a branch and start hacking:
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2016-08-20 07:57:51 +03:00
|
|
|
$ git checkout -b my-branch -t origin/master
|
2012-12-31 03:36:47 +04:00
|
|
|
```
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
### Step 3: Commit
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-03-26 22:03:11 +03:00
|
|
|
Make sure git knows your name and email address:
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2015-03-26 22:03:11 +03:00
|
|
|
$ git config --global user.name "J. Random User"
|
|
|
|
$ git config --global user.email "j.random.user@example.com"
|
2012-12-31 03:36:47 +04:00
|
|
|
```
|
|
|
|
|
2016-10-19 17:14:14 +03:00
|
|
|
Add and commit:
|
|
|
|
|
|
|
|
```text
|
|
|
|
$ git add my/changed/files
|
|
|
|
$ git commit
|
|
|
|
```
|
|
|
|
|
2015-10-30 00:52:36 +03:00
|
|
|
Writing good commit logs is important. A commit log should describe what
|
|
|
|
changed and why. Follow these guidelines when writing one:
|
2012-12-31 03:36:47 +04:00
|
|
|
|
|
|
|
1. The first line should be 50 characters or less and contain a short
|
2016-09-15 15:35:19 +03:00
|
|
|
description of the change. All words in the description should be in
|
|
|
|
lowercase with the exception of proper nouns, acronyms, and the ones that
|
|
|
|
refer to code, like function/variable names. The description should
|
|
|
|
be prefixed with the name of the changed subsystem and start with an
|
|
|
|
imperative verb, for example, "net: add localAddress and localPort
|
|
|
|
to Socket".
|
2012-12-31 03:36:47 +04:00
|
|
|
2. Keep the second line blank.
|
|
|
|
3. Wrap all other lines at 72 columns.
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
A good commit log can look something like this:
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2016-07-14 12:55:30 +03:00
|
|
|
```txt
|
2016-09-15 15:35:19 +03:00
|
|
|
subsystem: explain the commit in one line
|
2012-12-31 03:36:47 +04:00
|
|
|
|
|
|
|
Body of commit message is a few lines of text, explaining things
|
|
|
|
in more detail, possibly giving some background about the issue
|
2015-01-02 14:52:50 +03:00
|
|
|
being fixed, etc. etc.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
|
|
|
The body of the commit message can be several paragraphs, and
|
|
|
|
please do proper word-wrap and keep columns shorter than about
|
|
|
|
72 characters or so. That way `git log` will show things
|
|
|
|
nicely even when it is indented.
|
|
|
|
```
|
|
|
|
|
|
|
|
The header line should be meaningful; it is what other people see when they
|
|
|
|
run `git shortlog` or `git log --oneline`.
|
|
|
|
|
2013-05-14 14:31:38 +04:00
|
|
|
Check the output of `git log --oneline files_that_you_changed` to find out
|
|
|
|
what subsystem (or subsystems) your changes touch.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2016-06-05 16:25:56 +03:00
|
|
|
If your patch fixes an open issue, you can add a reference to it at the end
|
|
|
|
of the log. Use the `Fixes:` prefix and the full issue URL. For example:
|
|
|
|
|
2016-07-14 12:55:30 +03:00
|
|
|
```txt
|
2016-06-05 16:25:56 +03:00
|
|
|
Fixes: https://github.com/nodejs/node/issues/1337
|
|
|
|
```
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
### Step 4: Rebase
|
2012-12-31 03:36:47 +04:00
|
|
|
|
|
|
|
Use `git rebase` (not `git merge`) to sync your work from time to time.
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2012-12-31 03:36:47 +04:00
|
|
|
$ git fetch upstream
|
2015-04-18 21:11:52 +03:00
|
|
|
$ git rebase upstream/master
|
2012-12-31 03:36:47 +04:00
|
|
|
```
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
### Step 5: Test
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-10-30 00:52:36 +03:00
|
|
|
Bug fixes and features **should come with tests**. Add your tests in the
|
2016-05-26 03:33:21 +03:00
|
|
|
`test/parallel/` directory. For guidance on how to write a test for the Node.js
|
|
|
|
project, see this [guide](./doc/guides/writing_tests.md). Looking at other tests
|
|
|
|
to see how they should be structured can also help.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2016-07-18 18:58:05 +03:00
|
|
|
To run the tests on Unix / OS X:
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2015-06-24 21:35:43 +03:00
|
|
|
$ ./configure && make -j8 test
|
2012-12-31 03:36:47 +04:00
|
|
|
```
|
|
|
|
|
2016-07-18 18:58:05 +03:00
|
|
|
Windows:
|
|
|
|
|
|
|
|
```text
|
|
|
|
> vcbuild test
|
|
|
|
```
|
|
|
|
|
|
|
|
(See the [BUILDING.md](./BUILDING.md) for more details.)
|
|
|
|
|
2015-10-30 00:52:36 +03:00
|
|
|
Make sure the linter is happy and that all tests pass. Please, do not submit
|
2012-12-31 03:36:47 +04:00
|
|
|
patches that fail either check.
|
|
|
|
|
2016-07-18 18:58:05 +03:00
|
|
|
Running `make test`/`vcbuild test` will run the linter as well unless one or
|
|
|
|
more tests fail.
|
|
|
|
|
|
|
|
If you want to run the linter without running tests, use
|
|
|
|
`make lint`/`vcbuild jslint`.
|
2016-07-04 19:42:20 +03:00
|
|
|
|
2014-05-13 06:30:58 +04:00
|
|
|
If you are updating tests and just want to run a single test to check it, you
|
|
|
|
can use this syntax to run it exactly as the test harness would:
|
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2015-03-17 22:46:32 +03:00
|
|
|
$ python tools/test.py -v --mode=release parallel/test-stream2-transform
|
2014-05-13 06:30:58 +04:00
|
|
|
```
|
|
|
|
|
2015-08-13 19:14:34 +03:00
|
|
|
You can run tests directly with node:
|
2014-05-13 06:30:58 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2015-08-13 19:14:34 +03:00
|
|
|
$ ./node ./test/parallel/test-stream2-transform.js
|
2014-05-13 06:30:58 +04:00
|
|
|
```
|
|
|
|
|
2015-06-24 21:35:43 +03:00
|
|
|
Remember to recompile with `make -j8` in between test runs if you change
|
|
|
|
core modules.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
### Step 6: Push
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2015-01-02 14:52:50 +03:00
|
|
|
```text
|
2016-08-20 07:57:51 +03:00
|
|
|
$ git push origin my-branch
|
2012-12-31 03:36:47 +04:00
|
|
|
```
|
|
|
|
|
2016-08-20 07:57:51 +03:00
|
|
|
Go to https://github.com/yourusername/node and select your branch.
|
2015-01-02 14:52:50 +03:00
|
|
|
Click the 'Pull Request' button and fill out the form.
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2016-10-19 17:14:14 +03:00
|
|
|
Pull requests are usually reviewed within a few days.
|
|
|
|
|
|
|
|
### Step 7: Discuss and update
|
|
|
|
|
|
|
|
You will probably get feedback or requests for changes to your Pull Request.
|
|
|
|
This is a big part of the submission process, so don't be disheartened!
|
|
|
|
|
|
|
|
To make changes to an existing Pull Request, make the changes to your branch.
|
|
|
|
When you push that branch to your fork, GitHub will automatically update the
|
|
|
|
Pull Request.
|
|
|
|
|
|
|
|
You can push more commits to your branch:
|
|
|
|
|
|
|
|
```text
|
|
|
|
$ git add my/changed/files
|
|
|
|
$ git commit
|
|
|
|
$ git push origin my-branch
|
|
|
|
```
|
|
|
|
|
|
|
|
Or you can rebase against master:
|
|
|
|
|
|
|
|
```text
|
|
|
|
$ git fetch --all
|
|
|
|
$ git rebase origin/master
|
|
|
|
$ git push --force-with-lease origin my-branch
|
|
|
|
```
|
|
|
|
|
|
|
|
Or you can amend the last commit (for example if you want to change the commit
|
|
|
|
log).
|
|
|
|
|
|
|
|
```text
|
|
|
|
$ git add any/changed/files
|
|
|
|
$ git commit --amend
|
|
|
|
$ git push --force-with-lease origin my-branch
|
|
|
|
```
|
|
|
|
|
|
|
|
**Important:** The `git push --force-with-lease` command is one of the few ways
|
|
|
|
to delete history in git. Before you use it, make sure you understand the risks.
|
|
|
|
If in doubt, you can always ask for guidance in the Pull Request or on
|
|
|
|
[IRC in the #node-dev channel](https://webchat.freenode.net?channels=node-dev&uio=d4).
|
|
|
|
|
|
|
|
Feel free to post a comment in the Pull Request to ping reviewers if you are
|
|
|
|
awaiting an answer on something.
|
|
|
|
|
|
|
|
|
|
|
|
### Step 8: Landing
|
|
|
|
|
|
|
|
Once your Pull Request has been reviewed and approved by at least one Node.js
|
|
|
|
Collaborators (often by saying LGTM, or Looks Good To Me), and as long as
|
|
|
|
there is consensus (no objections from a Collaborator), a
|
|
|
|
Collaborator can merge the Pull Request . GitHub often shows the Pull Request as
|
|
|
|
`Closed` at this point, but don't worry. If you look at the branch you raised
|
|
|
|
your Pull Request against (probably `master`), you should see a commit with
|
|
|
|
your name on it. Congratulations and thanks for your contribution!
|
2012-12-31 03:36:47 +04:00
|
|
|
|
2016-04-18 20:01:51 +03:00
|
|
|
<a id="developers-certificate-of-origin"></a>
|
2016-02-10 01:07:49 +03:00
|
|
|
## Developer's Certificate of Origin 1.1
|
2014-10-02 00:40:32 +04:00
|
|
|
|
|
|
|
By making a contribution to this project, I certify that:
|
|
|
|
|
|
|
|
* (a) The contribution was created in whole or in part by me and I
|
2016-02-10 01:07:49 +03:00
|
|
|
have the right to submit it under the open source license
|
|
|
|
indicated in the file; or
|
|
|
|
|
2014-10-02 00:40:32 +04:00
|
|
|
* (b) The contribution is based upon previous work that, to the best
|
2016-02-10 01:07:49 +03:00
|
|
|
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
|
|
|
|
|
2014-10-02 00:40:32 +04:00
|
|
|
* (c) The contribution was provided directly to me by some other
|
2016-02-10 01:07:49 +03:00
|
|
|
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.
|