diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index af2383c465..7735cd304b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,35 +1,93 @@ -Contributing -============ +Contributing to graphql-js +========================== -After cloning this repo, ensure dependencies are installed by running: +We want to make contributing to this project as easy and transparent as +possible. Hopefully this document makes the process for contributing clear and +answers any questions you may have. If not, feel free to open an +[Issue](https://github.com/facebook/graphql/issues). -```sh -npm install -``` +## Getting Started -GraphQL is written in ES6 using [Babel](http://babeljs.io/), widely consumable -JavaScript can be produced by running: +1. Fork this repo by using the "Fork" button in the upper-right -```sh -npm run build -``` +2. Check out your fork -Once `npm run build` has run, you may `import` or `require()` directly from -node. + ```sh + git clone git@github.com:yournamehere/graphql-js.git + ``` -The full test suite can be evaluated by running: +3. Install all dependencies -```sh -npm test -``` + ```sh + npm install + ``` -While actively developing, we recommend running +4. Get coding! If you've added code, add tests. If you've changed APIs, update + any relevant documentation or tests. -```sh -npm run watch -``` +5. Ensure all tests pass -in a terminal. This will watch the file system run lint, tests, and type -checking automatically whenever you save a js file. + ```sh + npm test + ``` -To lint the JS files and type interface checks run `npm run lint`. +### Live Feedback + +While actively developing, we recommend running `npm run watch` in a terminal. +This will watch the file system run any relevant lint, tests, and type checks automatically whenever you save a `.js` file. + +### Release on NPM + +*Only core contributors may release to NPM.* + +To release a new version on NPM, use `npm version patch|minor|major` in order +to increment the version in package.json and tag and commit a release. Then +`git push --tags` this change so Travis CI can deploy to NPM. *Do not run +`npm publish` directly.* Once published, add +[release notes](https://github.com/graphql/graphql-js/tags). Use [semver](http://semver.org/) to determine which version to increment. + +## Pull Requests + +All active development of graphql-js happens on GitHub. We actively welcome +your [pull requests](https://help.github.com/articles/creating-a-pull-request). + +### Considered Changes + +Since graphql-js is a reference implementation of the +[GraphQL spec](https://facebook.github.io/graphql/), only changes which comply +with this spec will be considered. If you have a change in mind which requires a +change to the spec, please first open an +[issue](https://github.com/facebook/graphql/issues/) against the spec. + +### Contributor License Agreement ("CLA") + +In order to accept your pull request, we need you to submit a CLA. You only need +to do this once to work on any of Facebook's open source projects. + +Complete your CLA here: + +## Issues + +We use GitHub issues to track public bugs and requests. Please ensure your bug +description is clear and has sufficient instructions to be able to reproduce the +issue. The best way is to provide a reduced test case on jsFiddle or jsBin. + +Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe +disclosure of security bugs. In those cases, please go through the process +outlined on that page and do not file a public issue. + +## Coding Style + +* 2 spaces for indentation (no tabs) +* 80 character line length strongly preferred. +* Prefer `'` over `"` +* ES6 syntax when possible. +* Use [Flow types](http://flowtype.org/). +* Use semicolons; +* Trailing commas, +* Avd abbr wrds. + +## License + +By contributing to graphql-js, you agree that your contributions will be +licensed under its BSD license. diff --git a/package.json b/package.json index 58d880845e..45d9ebe509 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "watch": "babel scripts/watch.js | node", "cover": "babel-node node_modules/.bin/isparta cover --root src --report html node_modules/.bin/_mocha -- $npm_package_options_mocha", "coveralls": "babel-node node_modules/.bin/isparta cover --root src --report lcovonly node_modules/.bin/_mocha -- $npm_package_options_mocha && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", - "prepublish": "babel src --ignore __tests__ --out-dir ./" + "preversion": "npm test", + "prepublish": "if [ '$CI' = true ]; then babel src --ignore __tests__ --out-dir ./; else echo 'Only CI can publish. Read CONTRIBUTING.md' 1>&2; exit 1; fi;" }, "dependencies": { "babel-runtime": "5.8.3"