2015-01-02 11:52:50 +00:00
|
|
|
# Contributing to io.js
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
## Issue Contributions
|
2014-12-02 01:31:19 +00: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-01-02 11:52:50 +00:00
|
|
|
io.js software.
|
2014-12-02 01:31:19 +00:00
|
|
|
|
|
|
|
Discussion of non-technical topics including subjects like intellectual
|
|
|
|
property, trademark and high level project questions should move to the
|
2015-01-02 11:52:50 +00:00
|
|
|
[node-forward discussions repository](https://github.com/node-forward/discussions)
|
|
|
|
instead.
|
2014-12-02 01:31:19 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
## Code Contributions
|
2014-12-02 01:31:19 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
The io.js project has an open governance model and welcomes new contributors.
|
|
|
|
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-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
This document will guide you through the contribution process.
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
### Step 1: Fork
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
Fork the project [on GitHub](https://github.com/iojs/io.js) and check out your
|
|
|
|
copy locally.
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
```text
|
2014-12-02 17:39:39 +00:00
|
|
|
$ git clone git@github.com:username/io.js.git
|
|
|
|
$ cd io.js
|
|
|
|
$ git remote add upstream git://github.com/iojs/io.js.git
|
2012-12-30 23:36:47 +00:00
|
|
|
```
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
#### Which branch?
|
|
|
|
|
2012-12-30 23:36:47 +00:00
|
|
|
Now decide if you want your feature or bug fix to go into the master branch
|
|
|
|
or the stable branch. As a rule of thumb, bug fixes go into the stable branch
|
|
|
|
while new features go into the master branch.
|
|
|
|
|
2014-12-03 16:45:44 +00:00
|
|
|
The stable branch is effectively frozen; patches that change the io.js
|
2015-01-02 11:52:50 +00:00
|
|
|
API/ABI or affect the run-time behavior of applications get rejected. The
|
|
|
|
current stable branch is set as the default branch on GitHub.
|
|
|
|
|
|
|
|
#### Respect the stability index
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
The rules for the master branch are less strict; consult the
|
2015-01-02 11:52:50 +00:00
|
|
|
[stability index](./doc/api/documentation.markdown#stability-index) for details.
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
In a nutshell, modules are at varying levels of API stability. Bug fixes are
|
2015-01-02 11:52:50 +00:00
|
|
|
always welcome but API or behavioral changes to modules at stability level 3
|
2012-12-30 23:36:47 +00:00
|
|
|
and up are off-limits.
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
#### Dependencies
|
|
|
|
|
|
|
|
io.js has several bundled dependencies in the *deps/* and the *tools/*
|
2013-02-14 11:42:54 +00:00
|
|
|
directories that are not part of the project proper. Any changes to files
|
|
|
|
in those directories or its subdirectories should be sent to their respective
|
|
|
|
projects. Do not send your patch to us, we cannot accept it.
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
In case of doubt, open an issue in the
|
|
|
|
[issue tracker](https://github.com/iojs/io.js/issues/) or contact one of the
|
|
|
|
[project Collaborators](https://github.com/iojs/io.js/#Current-Project-Team-Members)
|
|
|
|
([IRC](http://webchat.freenode.net/?channels=io.js) is often the best medium.)Especially do so if you plan to work on something big. Nothing is more
|
2012-12-30 23:36:47 +00:00
|
|
|
frustrating than seeing your hard work go to waste because your vision
|
2015-01-02 11:52:50 +00:00
|
|
|
does not align with the project team.
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
### Step 2: Branch
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
Create a feature branch and start hacking:
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
```text
|
|
|
|
$ git checkout -b my-feature-branch -t origin/v1.x
|
2012-12-30 23:36:47 +00:00
|
|
|
```
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
(Where `v1.x` is the latest stable branch as of this writing.)
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
### Step 3: Commit
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
Make sure git knows your name and email address:
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
```text
|
2012-12-30 23:36:47 +00:00
|
|
|
$ git config --global user.name "J. Random User"
|
|
|
|
$ git config --global user.email "j.random.user@example.com"
|
|
|
|
```
|
|
|
|
|
|
|
|
Writing good commit logs is important. A commit log should describe what
|
|
|
|
changed and why. Follow these guidelines when writing one:
|
|
|
|
|
|
|
|
1. The first line should be 50 characters or less and contain a short
|
2013-03-24 12:22:01 +00:00
|
|
|
description of the change prefixed with the name of the changed
|
|
|
|
subsystem (e.g. "net: add localAddress and localPort to Socket").
|
2012-12-30 23:36:47 +00:00
|
|
|
2. Keep the second line blank.
|
|
|
|
3. Wrap all other lines at 72 columns.
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
A good commit log can look something like this:
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
```
|
2013-03-24 12:22:01 +00:00
|
|
|
subsystem: explaining the commit in one line
|
2012-12-30 23:36:47 +00: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 11:52:50 +00:00
|
|
|
being fixed, etc. etc.
|
2012-12-30 23:36:47 +00: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 10:31:38 +00:00
|
|
|
Check the output of `git log --oneline files_that_you_changed` to find out
|
|
|
|
what subsystem (or subsystems) your changes touch.
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
### Step 4: Rebase
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
Use `git rebase` (not `git merge`) to sync your work from time to time.
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
```text
|
2012-12-30 23:36:47 +00:00
|
|
|
$ git fetch upstream
|
2015-01-02 11:52:50 +00:00
|
|
|
$ git rebase upstream/v1.x # or upstream/master
|
2012-12-30 23:36:47 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
### Step 5: Test
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
Bug fixes and features **should come with tests**. Add your tests in the
|
2012-12-30 23:36:47 +00:00
|
|
|
test/simple/ directory. Look at other tests to see how they should be
|
|
|
|
structured (license boilerplate, common includes, etc.).
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
```text
|
2012-12-30 23:36:47 +00:00
|
|
|
$ make jslint test
|
|
|
|
```
|
|
|
|
|
|
|
|
Make sure the linter is happy and that all tests pass. Please, do not submit
|
|
|
|
patches that fail either check.
|
|
|
|
|
2014-05-13 02:30:58 +00: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 11:52:50 +00:00
|
|
|
```text
|
|
|
|
$ python tools/test.py -v --mode=release simple/test-stream2-transform
|
2014-05-13 02:30:58 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
You can run tests directly with node:
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
```text
|
|
|
|
$ node ./test/simple/test-streams2-transform.js
|
2014-05-13 02:30:58 +00:00
|
|
|
```
|
|
|
|
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
### Step 6: Push
|
2012-12-30 23:36:47 +00:00
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
```text
|
2012-12-30 23:36:47 +00:00
|
|
|
$ git push origin my-feature-branch
|
|
|
|
```
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
Go to https://github.com/yourusername/io.js and select your feature branch.
|
|
|
|
Click the 'Pull Request' button and fill out the form.
|
2012-12-30 23:36:47 +00:00
|
|
|
|
|
|
|
Pull requests are usually reviewed within a few days. If there are comments
|
|
|
|
to address, apply your changes in a separate commit and push that to your
|
|
|
|
feature branch. Post a comment in the pull request afterwards; GitHub does
|
|
|
|
not send out notifications when you add commits.
|
|
|
|
|
|
|
|
|
2015-01-02 11:52:50 +00:00
|
|
|
## Caine's Requirements
|
2014-12-08 02:36:03 +00:00
|
|
|
|
|
|
|
Hello!
|
|
|
|
|
|
|
|
I am pleased to see your valuable contribution to this project. Would you
|
|
|
|
please mind answering a couple of questions to help me classify this submission
|
|
|
|
and/or gather required information for the core team members?
|
|
|
|
|
|
|
|
### Questions:
|
|
|
|
|
|
|
|
* _Issue-only_ Does this issue happen in core, or in some user-space
|
|
|
|
module from npm or other source? Please ensure that the test case
|
|
|
|
that reproduces this problem is not using any external dependencies.
|
|
|
|
If the error is not reproducible with just core modules - it is most
|
|
|
|
likely not a io.js problem. _Expected: `yes`_
|
|
|
|
* Which part of core do you think it might be related to?
|
2014-12-08 15:02:30 +00:00
|
|
|
_One of: `debugger, http, assert, buffer, child_process, cluster, crypto,
|
|
|
|
dgram, dns, domain, events, fs, http, https, module, net, os, path,
|
|
|
|
querystring, readline, repl, smalloc, stream, timers, tls, url, util, vm,
|
|
|
|
zlib, c++, docs, other`_ (_label_)
|
2014-12-08 02:36:03 +00:00
|
|
|
* Which versions of io.js do you think are affected by this?
|
|
|
|
_One of: `v0.10, v0.12, v1.0.0`_ (_label_)
|
|
|
|
* _PR-only_ Does `make test` pass after applying this Pull Request.
|
|
|
|
_Expected: `yes`_
|
|
|
|
* _PR-only_ Is the commit message properly formatted? (See
|
|
|
|
CONTRIBUTING.md for more information)
|
|
|
|
_Expected: `yes`_
|
|
|
|
|
|
|
|
Please provide the answers in an ordered list like this:
|
|
|
|
|
|
|
|
1. Answer for the first question
|
|
|
|
2. Answer for the second question
|
|
|
|
3. ...
|
|
|
|
|
|
|
|
Note that I am just a bot with a limited human-reply parsing abilities,
|
|
|
|
so please be very careful with numbers and don't skip the questions!
|
|
|
|
|
|
|
|
_In case of success I will say:_ `...summoning the core team devs!`.
|
|
|
|
|
|
|
|
_In case of validation problem I will say:_ `Sorry, but something is not right
|
|
|
|
here:`.
|
|
|
|
|
|
|
|
Truly yours,
|
|
|
|
Caine.
|
|
|
|
|
|
|
|
### Responsibilities
|
|
|
|
|
|
|
|
* indutny: crypto, tls, https, child_process, c++
|
|
|
|
* trevnorris: buffer, http, https, smalloc
|
|
|
|
* bnoordhuis: http, cluster, child_process, dgram
|