summaryrefslogtreecommitdiffstats
path: root/CONTRIBUTING.md
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CONTRIBUTING.md201
1 files changed, 201 insertions, 0 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..3a7f3ff
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,201 @@
+# Contributing to Undici
+
+* [Guides](#guides)
+ * [Update `llhttp`](#update-llhttp)
+ * [Lint](#lint)
+ * [Test](#test)
+ * [Coverage](#coverage)
+ * [Update `WPTs`](#update-wpts)
+* [Developer's Certificate of Origin 1.1](#developers-certificate-of-origin)
+ * [Moderation Policy](#moderation-policy)
+
+<a id="guides"></a>
+## Guides
+
+<a id="update-llhttp"></a>
+### Update `llhttp`
+
+The HTTP parser used by `undici` is a WebAssembly build of [`llhttp`](https://github.com/nodejs/llhttp).
+
+While the project itself provides a way to compile targeting WebAssembly, at the moment we embed the sources
+directly and compile the module in `undici`.
+
+The `deps/llhttp/include` folder contains the C header files, while the `deps/llhttp/src` folder contains
+the C source files needed to compile the module.
+
+The `lib/llhttp` folder contains the `.js` transpiled assets required to implement a parser.
+
+The following are the steps required to perform an update.
+
+#### Clone the [llhttp](https://github.com/nodejs/llhttp) project
+
+```bash
+git clone git@github.com:nodejs/llhttp.git
+
+cd llhttp
+```
+#### Checkout a `llhttp` release
+
+```bash
+git checkout <tag>
+```
+
+#### Install the `llhttp` dependencies
+
+```bash
+npm i
+```
+
+#### Run the wasm build script
+
+> This requires [docker](https://www.docker.com/) installed on your machine.
+
+```bash
+npm run build-wasm
+```
+
+#### Copy the sources to `undici`
+
+```bash
+cp build/wasm/*.js <your-path-to-undici>/lib/llhttp/
+
+cp build/wasm/*.js.map <your-path-to-undici>/lib/llhttp/
+
+cp build/wasm/*.d.ts <your-path-to-undici>/lib/llhttp/
+
+cp src/native/api.c src/native/http.c build/c/llhttp.c <your-path-to-undici>/deps/llhttp/src/
+
+cp src/native/api.h build/llhttp.h <your-path-to-undici>/deps/llhttp/include/
+```
+
+#### Build the WebAssembly module in `undici`
+
+> This requires [docker](https://www.docker.com/) installed on your machine.
+
+```bash
+cd <your-path-to-undici>
+
+npm run build:wasm
+```
+
+#### Commit the contents of lib/llhttp
+
+Create a commit which includes all of the updated files in lib/llhttp.
+
+<a id="update-wpts"></a>
+### Update `WPTs`
+
+`undici` runs a subset of the [`web-platform-tests`](https://github.com/web-platform-tests/wpt).
+
+Here are the steps to update them.
+
+<details>
+<summary>Skip the tutorial</summary>
+
+```bash
+git clone --depth 1 --single-branch --branch epochs/daily --filter=blob:none --sparse https://github.com/web-platform-tests/wpt.git test/wpt/tests
+cd test/wpt/tests
+
+git sparse-checkout add /resources
+git sparse-checkout add /interfaces
+git sparse-checkout add /common
+git sparse-checkout add /fetch
+git sparse-checkout add /FileAPI
+git sparse-checkout add /xhr
+git sparse-checkout add /websockets
+git sparse-checkout add /mimesniff
+git sparse-checkout add /storage
+git sparse-checkout add /service-workers
+```
+</details>
+
+#### Sparse-clone the [wpt](https://github.com/web-platform-tests/wpt) repo
+
+```bash
+git clone --depth 1 --single-branch --branch epochs/daily --filter=blob:none --sparse https://github.com/web-platform-tests/wpt.git test/wpt/tests
+
+cd test/wpt/tests
+
+```
+
+#### Checkout the tests
+
+Only run the commands for the folder(s) you want to update.
+
+```bash
+git sparse-checkout add /fetch
+git sparse-checkout add /FileAPI
+git sparse-checkout add /xhr
+git sparse-checkout add /websockets
+git sparse-checkout add /resources
+git sparse-checkout add /common
+
+# etc
+```
+
+#### Run the tests
+
+Run the tests to ensure that any new failures are marked as such.
+
+You can mark tests as failing in their corresponding [status](./test/wpt/status) file.
+
+```bash
+npm run test:wpt
+```
+
+<a id="lint"></a>
+
+### Lint
+
+```bash
+npm run lint
+```
+
+<a id="test"></a>
+### Test
+
+```bash
+npm run test
+```
+
+<a id="coverage"></a>
+### Coverage
+
+```bash
+npm run coverage
+```
+
+<a id="developers-certificate-of-origin"></a>
+## 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.
+
+<a id="moderation-policy"></a>
+### Moderation Policy
+
+The [Node.js Moderation Policy] applies to this project.
+
+[Node.js Moderation Policy]:
+https://github.com/nodejs/admin/blob/main/Moderation-Policy.md