# Contributing to node-core-utils This document will guide you through the contribution process. ### Step 1: Fork Fork the project [on GitHub](https://github.com/nodejs/node-core-utils) and check out your copy locally. ```bash $ git clone git@github.com:username/node-core-utils.git $ cd node-core-utils $ git remote add upstream git@github.com:nodejs/node-core-utils.git ``` #### Which branch? For developing new features and bug fixes, the `main` branch should be pulled and built upon. ### Step 2: Branch Create a feature branch and start hacking: ```bash $ git checkout -b my-feature-branch -t origin/my-feature-branch ``` ### Step 3: Commit Make sure git knows your name and email address: ```bash # In the project directory $ git config user.name "J. Random User" $ git config 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 a short description of the change (e.g. "get-metadata: check if the committer matches the author"). 2. Keep the second line blank. 3. Wrap all lines at 72 columns. The header line should be meaningful; it is what other people see when they run `git shortlog` or `git log --oneline`. 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: ``` Fixes: https://github.com/nodejs/node-core-utils/issues/1 ``` ### Step 4: Rebase Use `git rebase` (not `git merge`) to sync your work from time to time. ```bash $ git checkout my-feature-branch $ git fetch upstream $ git rebase upstream/main ``` ### Step 5: Test Bug fixes and features should come with tests. Add your tests in the `test` directory. The general rule is, if the test does not need to send any requests to external servers, put it in `test/unit`. Otherwise put it in `test/integration`. Test fixtures should be placed in `test/fixtures`. ```bash $ npm install # To run the unit tests $ npm test # To run all the tests $ npm run test-all ``` Make sure the linter is happy and that all tests pass before submitting a pull request. ### Step 6: Push ```bash $ git push origin my-feature-branch # Or if you have pushed before and have rebased after that, # do git push --force origin my-feature-branch instead ``` Go to https://github.com/yourusername/node-core-utils and select your feature branch. Click the 'Pull Request' button and fill out the form. 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. ## Code of Conduct We follow the [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/main/CODE_OF_CONDUCT.md) in this project. ## Developer's Certificate of Origin 1.1 By making a contribution to this project, I certify that: * (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or * (b) The contribution is based upon previous work that, to the best 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 * (c) The contribution was provided directly to me by some other 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.