diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 13a6bb39a..2ac7f14dd 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -8,7 +8,7 @@ improving the documentation,
submitting bug reports and feature requests or writing code.
## Repository structure
-The `master` branch is considered unstable, and it's compatible with Elasticsearch master. Unless you are patching an issue, new features should always be sent to the `master` branch, in case of a bugfix, it depends if the bug affects all the release lines.
+The `main` branch is considered unstable, and it's compatible with Elasticsearch main. Unless you are patching an issue, new features should always be sent to the `main` branch, in case of a bugfix, it depends if the bug affects all the release lines.
There is a branch for every supported release line, such as `7.x` or `6.x`. We release bugfixes as soon as possible, while minor and major releases are published at the same time of the Elastic Stack.
Usually for every release line there will be a *published* version and a *next* version. Eg: the `7.x` branch contains the version published on npm, and bugfixes should be sent there, while `7.2` *(assuming that 7.1.x is released)* contains the next version, and new features should be sent there.
@@ -31,7 +31,7 @@ Once your changes are ready to submit for review:
1. Test your changes
Run the test suite to make sure that nothing is broken.
- Usually run `npm test` is enough, our CI will take care of running the integration test. If you want to run the integration test yourself, see the *Testing* section below.
+ Usually running `npm test` is enough; our CI will take care of running the integration tests. If you want to run the integration tests yourself, see [the *Testing* section](#testing) below.
2. Submit a pull request
@@ -58,36 +58,50 @@ Once your changes are ready to submit for review:
### Code generation
-The entire content of the API folder is generated as well as the `docs/reference.asciidoc` file.
-If you want to run the code generation you should run the following command:
-```sh
-node scripts/generate --tag
-# or
-node scripts/generate --branch
-```
-Then you should copy the content of `api/generated.d.ts` into the `index.d.ts` file *(automate this step would be a nice pr!)*.
+The entire content of the `src/api/` directory is automatically generated from [the Elasticsearch specification](https://github.com/elastic/elasticsearch-specification), as is the `docs/reference.asciidoc` file.
+This code generation is done using a separate repository that is not currently available to the public.
+
+If you find discrepancies between this client's API code and what you see when actually interacting with an Elasticsearch API, you can open a pull request here to fix it.
+For API fixes, it's likely a change will need to be made to the specification as well, to ensure your fix is not undone by the code generation process.
+We will do our best to make sure this is addressed when reviewing and merging your changes.
+
+PRs to improve the specification are also welcome!
+It is implemented in TypeScript, so JavaScript devs should be able to understand it fairly easily.
+Spec fixes are particularly helpful, as they will be reflected in ALL official Elasticsearch clients, not just this one.
### Testing
-There are different test scripts, usually during development you only need to run `npm test`, but if you want you can run just a part of the suite, following you will find all the testing scripts and what they do.
+
+There are a few different test scripts.
+Usually during development you only need to run `npm test`, but if you want you can run just a part of the suite:
| Script | Description |
|---|---|
| `npm run test:unit` | Runs the content of the `test/unit` folder. |
-| `npm run test:behavior` | Runs the content of the `test/behavior` folder. |
-| `npm run test:types` | Runs the content of the `test/types` folder. |
-| `npm run test:unit -- --cov --coverage-report=html` | Runs the content of the `test/unit` folder and calculates the code coverage. |
-| `npm run test:integration` | Runs the integration test runner.
*Note: it requires a living instance of Elasticsearch.* |
-| `npm run lint` | Run the [linter](https://standardjs.com/). |
-| `npm run lint:fix` | Fixes the lint errors. |
-| `npm test` | Runs lint, unit, behavior, and types test. |
+| `npm run test:coverage-100` | Runs unit tests enforcing 100% coverage. |
+| `npm run test:coverage-report` | Runs unit tests and generates an `lcov` coverage report. |
+| `npm run test:coverage-ui` | Runs unit tests and generates an HTML coverage report. |
+| `npm run test:integration` | Runs the integration test runner.
**Note: requires a living instance of Elasticsearch.** |
+| `npm run lint` | Run the [linter](https://github.com/standard/ts-standard). |
+| `npm run lint:fix` | Fixes linter errors. |
+| `npm run license-checker` | Checks that all dependencies have acceptable open source licenses. |
+
+| `npm test` | Runs `lint` and `test:unit`. |
#### Integration test
-The integration test are generated on the fly by the runner you will find inside `test/integration`, once you execute it, it will clone the Elasticsearch repository and checkout the correct version to grab the [OSS yaml files](https://github.com/elastic/elasticsearch/tree/master/rest-api-spec/src/main/resources/rest-api-spec/test) and the [Elastic licensed yaml files](https://github.com/elastic/elasticsearch/tree/master/x-pack/plugin/src/test/resources/rest-api-spec/test) that will be used for generating the test.
-Usually this step is executed by CI since it takes some time, but you can easily run this yourself! Just follow this steps:
-1. Boot an Elasticsearch instance, you can do that by running `./scripts/es-docker.sh` or `./scripts/es-docker-platinum.sh`, the first one will work only with the OSS APIs, while the second will work also with the Elastic licensed APIs;
-1. If you are running the OSS test, you should use `npm run test:integration`, otherwise use `TEST_ES_SERVER=https://elastic:changeme@localhost:9200 npm run test:integration`. You can also pass a `-b` parameter if you want the test to bail out at the first failure: `npm run test:integration -- -b`;
-1. Grab a coffee, it will take some time ;)
+The integration tests are generated on the fly by the runner you will find inside `test/integration`.
+Once you execute it, it will fetch the [YAML REST test files](https://github.com/elastic/elasticsearch/tree/main/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test) from our artifacts API.
+These are used to generate the integration tests.
+
+Usually this step is executed by CI since it takes some time, but you can easily run this yourself!
+Just follow this steps:
+1. Boot a fresh Elasticsearch instance, which can be done in a Docker container by running `STACK_VERSION=8.10.0 DETACH=true .buildkite/run-elasticsearch.sh`, where `STACK_VERSION` and `DETACH` environment variables can be adjusted to your needs. A `TEST_SUITE` env var can also be set to `free` or `platinum`, and defaults to `free`.
+1. Run `npm run test:integration` to run the whole suite, or `npm run test:integration -- --bail` to stop after the first failure.
+1. Grab a coffee, it will take some time. ;)
+
+This suite is very large, and not all tests will pass.
+This is fine.
+This suite is mostly used to identify notable changes in success/fail rate over time as we make changes to the client.
### Releasing