From 8381619c525b2cbc4e59decb7fd276c2f3eb83b7 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 09:40:17 +0300 Subject: [PATCH 01/10] docs: add more on the motivation --- docs/motivation.md | 88 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 10 deletions(-) diff --git a/docs/motivation.md b/docs/motivation.md index e57b0255..85f4ebf0 100644 --- a/docs/motivation.md +++ b/docs/motivation.md @@ -1,13 +1,24 @@ # Motivation -The following document explains the motivation behind this library and the problems it solves. -We will discuss common e2e setups in the wild, what problems they have and why they are pretty limited in their scalability and performance. +The following document explains the motivation behind this library and the problem it solves. +We will discuss [common E2e setup for publishable packages](#Common-E2E-setup-for-publishable-packages) in the wild, what problems they have and why they are pretty limited in their scalability and performance. -What is not covered in this document is basic knowledge about Verdaccio as wel as Nx. +> [!NOTE] +> What is not covered in this document is basic knowledge about Verdaccio as well as Nx. -Let's start of by explaining the common e2e setups. +Before we go into more detail let's quickly list the problems here to later on dive into each of them individually: -## Common e2e setup for publishable packages +**The problems:** + +- πŸšͺ **Isolation** - Conflicts the file system as well as changes in the local configuration of the developer machine. +- πŸ“‰ **Scalability** - The setup can only run in sequence and after every test we have to run a lot of cleanup scripts. In case of an error the whole chain has to rerun. +- 🐒 **Task Performance** - The test environment setup in not cacheable and as the server has to run while the tests execute, it slows done the whole task. +- πŸ”« **DX** - In case of an error there is no easy way to debug the test setup independent of the test. +- πŸ§Ÿβ€ **Maintainability** - It is very hard to maintain the test setup as it is very complex and has a lot of moving partsnthat are hard to understand and debug. + +Let's start off by explaining the common e2e setups. + +## Common E2E setup for publishable packages To get e2e tests setup with Verdaccio we typically need the following building blocks: @@ -64,12 +75,14 @@ export async function teardown() { Now you could run `nx run my-lib-e2e:e2e` which would start the server publish and install, executes the tests and runs the cleanup logic. Viola, you have a working e2e setup for your package. πŸŽ‰ -But wait! There is are MANY caveats with this setup. Let's discuss them one by one. +But wait! There are MANY caveats with this setup. We mentioned them already in the beginning, now let's discuss them one by one. -## File system changes while running the e2e test +## Problems + +### πŸšͺ Isolation of the E2E tests The following file tree is a result of running our e2e setup. -It is particular bad as it interfere with your local package manager configuration. +It is particular bad as it interfere with your local package manager configuration as well as conflicts with other tests if not run in sequence. ```sh User/ @@ -94,9 +107,56 @@ User/ └── package.json # πŸ”“ npm install/uninstall installs into workspace root ``` -### Task Performance +As the tests change the local configuration of the package manager, it is not possible to run multiple tests in parallel. +Installing/uninstalling or publishing a package will end up in conflicts with other tests. +You are forced to run the tests in sequence. + +**Publish conflict:** + +1. Test A: `npm publish @org/pkg@0.0.1 --registry=http://localhost:4873` # βœ… +2. Test B: `npm publish @org/pkg@0.0.1 --registry=http://localhost:4873` # ❌ package already exists in registry + +**Install/uninstall conflict:** + +1. Test A: `npm install @org/pkg@0.0.1 --registry=http://localhost:4873` # βœ… +2. Test B: `npm install @org/pkg@0.0.1 --registry=http://localhost:4873` # βœ… +3. Test B: `nx e2e pkg` # βœ… +4. Test B: `npm uninstall @org/pkg@0.0.1 --registry=http://localhost:4873` # βœ… +5. Test A: `nx e2e pkg` # ❌ package not installed + +### πŸ“‰ Scalability + +As mentioned the tests don't scale, which is mostly related to the first problem. + +To run 1 E2E test the following chain has to happen: -To elaborate on the performance issues, we show the different cases while writing tests. +- Start Verdaccio server - to be able to publish packages to and install from +- NPM publish the package to the Verdaccio server +- NPM install the package to the Start Verdaccio server +- Execute the actual e2e tests over playwrite, vitest, jest or other test runner +- NPM uninstall the package from the local setup +- Stop the Verdaccio server +- Delete the storage folder + +As you can see, the majority of the tasks are just here as we can't parallelize. :( + +### 🐒 Task Performance + +We already scratched that topic a bit, but in this chapter we can go in full detail. +Let's start with looking at the steps from above. + +If we could run them in parallel the following steps would not need to happen: + +- 🐒 NPM uninstall the package from the local setup +- 🐒 Delete the storage folder + +If we would not have to keep the server running for the whole test we can also: + +- 🐒 Stop wasting CPU power and memory that is consumed by the server +- 🐒 Think about options to cache parts of the steps + +Especially the caching is interesting to dive deeper in. +Let's look at different scenarios and what they miss. #### Changes in source @@ -124,6 +184,14 @@ P[project-e2e:e2e]:::e2e-.implicit.->E[project:build]:::build; classDef e2e stroke:#f00 ``` +### πŸ”« DX + +TBD + +### πŸ§Ÿβ€ Maintainability + +TBD + ## Solution This workspace provides a scalable and maintainable E2E setup for Vite tests and Verdaccio. From 44b33036d81328ca6b68df7d5bc18db45fc94ca1 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 13:43:29 +0200 Subject: [PATCH 02/10] docs: add maintainability section ot motivation --- docs/motivation.md | 82 +++++++++------------------------------------- 1 file changed, 16 insertions(+), 66 deletions(-) diff --git a/docs/motivation.md b/docs/motivation.md index 85f4ebf0..c98b615e 100644 --- a/docs/motivation.md +++ b/docs/motivation.md @@ -158,7 +158,7 @@ If we would not have to keep the server running for the whole test we can also: Especially the caching is interesting to dive deeper in. Let's look at different scenarios and what they miss. -#### Changes in source +#### Changes in the source ```mermaid flowchart TB @@ -176,7 +176,7 @@ classDef e2e stroke:#f00 classDef build stroke:#f00 ``` -#### Changes in tests +#### Changes in the tests ```mermaid flowchart TB @@ -186,71 +186,21 @@ classDef e2e stroke:#f00 ### πŸ”« DX -TBD +As the logic that starts and stops Verdaccio is backed into the setup script it is very hard and cumbersome to debug or even see what is going on. -### πŸ§Ÿβ€ Maintainability - -TBD - -## Solution - -This workspace provides a scalable and maintainable E2E setup for Vite tests and Verdaccio. -It isolates all involved files into an isolated environment for each e2e project. +- Server always stops after test. There is no way to keep it running and look at the published packages +- After an error the server keeps running and there is no way to manually stop it again. A reboot or terminal command is necessary. +- Another thing related to errors is the configuration for the local registry is made in the users setup and therefore if not reverted manually no other package can be installed. Not even running `npm ci` -### Changes files during e2e - -The changed files during testing, are all in one isolated folder and don't interfere with your local setup. - -```sh -Root/ # πŸ‘ˆ this is your CWD -β”œβ”€β”€ dist/ -β”‚ └── packages/ -β”‚ └── /... -└── tmp/ - └── e2e/ - └── / # e2e setup - β”œβ”€β”€ storage/... # npm publish/unpublish - β”œβ”€β”€ node_modules/ - β”‚ └── - β”‚ └── /... # npm install/uninstall - β”œβ”€β”€ __test__/... - β”‚ └── /... # e2e beforeEach - β”‚ └── /... - β”œβ”€β”€ .npmrc # local npm config configured for project specific verdaccio registry - β”œβ”€β”€ package-lock.json # npm install/uninstall - └── package.json # npm install/uninstall -``` - -### Task Performance - -To elaborate on the performance improvements, we show the different cases while writing tests. - -#### Changes in source - -```mermaid -flowchart TB -P[project-e2e:e2e]:::e2e-.implicit.->S[project-e2e:setup-env]:::build; -S-.implicit.->E[project:build]:::build; -classDef e2e stroke:#f00 -classDef setup-env stroke:#f00 -classDef build stroke:#f00 -``` - -#### Changes in the test environments - -```mermaid -flowchart TB -P[project-e2e:e2e]:::e2e-.implicit.->S[project-e2e:setup-env]:::setup-env; -S-.implicit.->E[project:build]:::build; -classDef e2e stroke:#f00 -classDef setup-env stroke:#f00 -``` +### πŸ§Ÿβ€ Maintainability -#### Changes in tests +As mentioned the logic to set up and teardown the test environment is backed into the e2e tests global setup scripts. -```mermaid -flowchart TB -P[project-e2e:e2e]:::e2e-.implicit.->S[project-e2e:setup-env]:::build; -S-.implicit.->E[project:build]:::build; -classDef e2e stroke:#f00 -``` +This has several downsides when maintaining the code: +- Since the setup and teardown processes are baked into the scripts, they are not visible in the task graph, making it difficult for developers to see the dependencies and relationships between tasks. + This results in unnecessary time spent digging into the code to understand the setup. +- With a large number of interconnected parts, updating the test environment or adjusting for new features can introduce bugs or cause existing tests to fail, increasing the chance for breaking changes. +- When an error occurs, it is not easy to isolate the issue or see which part of the setup failed. + Developers have to manually step through the complex code to identify the problem, which slows down the development process a lot. +- The configuration for the local registry and other components is spread across different parts of the setup, adding to the complexity. + This makes it harder to ensure that the environment is correctly configured across all tests. From 92e498b4dd32b385d990bad424ea8f22a57ae4b8 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 14:24:36 +0200 Subject: [PATCH 03/10] docs: polish main readme --- README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5955dc37..0c84e08e 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ # Buildable Test Environment Plugin -This plugin provides a way zeros configuration setup to run e2e tests in a package manager environment. +This plugin provides a zeros configuration setup to run e2e tests in a package manager environment. ## Getting started 1. Register and configure the plugins in `nx.json`: -```json +```jsonc { "plugins": [ { "plugin": "@org/build-env", "options": { - "environmentsDir": "tmp/environments" + "environmentsDir": "tmp/environments" // Optional } } ] @@ -21,20 +21,21 @@ This plugin provides a way zeros configuration setup to run e2e tests in a packa Now you can configure the project you want to e2e test as published package. -2. Add a `publishable` tag to the package under test +2. Add a `publishable` tag to the package under test to tell the plugin which projects it should consider as publishable ```jsonc // projects/my-lib/project.json { "name": "my-lib", - "tags": ["publishable"] + "targets": ["publish", "nx-release-publish"] + "tags": ["publishable"] // Optionally filter projects by tags for a more finegrained control // ... } ``` -Next you need to configure the e2e project to use the package under test. +Next you need to configure the e2e project that uses the package under test. -3. Add the package under test as `implicitDependency` to your e2e project. +3. Add the package under test as `implicitDependency` to your e2e project. The plugin will detect implicit dependencies and use them for the environment setup. ```jsonc // projects/my-lib-e2e/project.json @@ -71,7 +72,7 @@ Now you are ready to go. Tadaaaa! πŸŽ‰ -## DX while debuggins e2e tests +## DX while debugging e2e tests ### Production usage: @@ -98,6 +99,71 @@ Debug packages: - `nx run utils:npm-install --environmentProject cli-e2e` - installs `utils` and `models` from the verdaccio registry configured for `cli-e2e` - `nx run cli-e2e:stop-verdaccio` - stops the verdaccio server for `cli-e2e` + + +## Solution + +This workspace provides a scalable and maintainable E2E setup for Vite tests and Verdaccio. +It isolates all involved files into an isolated environment for each e2e project. + +### Changes files during e2e + +The changed files during testing, are all in one isolated folder and don't interfere with your local setup. + +```sh +Root/ # πŸ‘ˆ this is your CWD +β”œβ”€β”€ dist/ +β”‚ └── packages/ +β”‚ └── /... +└── tmp/ + └── e2e/ + └── / # e2e setup + β”œβ”€β”€ storage/... # npm publish/unpublish + β”œβ”€β”€ node_modules/ + β”‚ └── + β”‚ └── /... # npm install/uninstall + β”œβ”€β”€ __test__/... + β”‚ └── /... # e2e beforeEach + β”‚ └── /... + β”œβ”€β”€ .npmrc # local npm config configured for project specific verdaccio registry + β”œβ”€β”€ package-lock.json # npm install/uninstall + └── package.json # npm install/uninstall +``` + +### Task Performance + +To elaborate on the performance improvements, we show the different cases while writing tests. + +#### Changes in source + +```mermaid +flowchart TB +P[project-e2e:e2e]:::e2e-.implicit.->S[project-e2e:setup-env]:::build; +S-.implicit.->E[project:build]:::build; +classDef e2e stroke:#f00 +classDef setup-env stroke:#f00 +classDef build stroke:#f00 +``` + +#### Changes in the test environments + +```mermaid +flowchart TB +P[project-e2e:e2e]:::e2e-.implicit.->S[project-e2e:setup-env]:::setup-env; +S-.implicit.->E[project:build]:::build; +classDef e2e stroke:#f00 +classDef setup-env stroke:#f00 +``` + +#### Changes in tests + +```mermaid +flowchart TB +P[project-e2e:e2e]:::e2e-.implicit.->S[project-e2e:setup-env]:::build; +S-.implicit.->E[project:build]:::build; +classDef e2e stroke:#f00 +``` + ## Connect with us! - [Check out our services](https://push-based.io) From b4690495e579cbef55036efaba04262cf3ff31f4 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 17:07:08 +0200 Subject: [PATCH 04/10] docs: polish main readme add images --- README.md | 115 ++++++++++++++++++++---------- docs/motivation.md | 28 +++++--- docs/utils-project-graph-idle.png | Bin 0 -> 71345 bytes docs/utils-task-graph-idle.png | Bin 0 -> 140547 bytes 4 files changed, 96 insertions(+), 47 deletions(-) create mode 100644 docs/utils-project-graph-idle.png create mode 100644 docs/utils-task-graph-idle.png diff --git a/README.md b/README.md index 0c84e08e..3db98c58 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Buildable Test Environment Plugin +# Nx Verdaccio Environment Plugin This plugin provides a zeros configuration setup to run e2e tests in a package manager environment. @@ -72,67 +72,87 @@ Now you are ready to go. Tadaaaa! πŸŽ‰ -## DX while debugging e2e tests +**Example usage:** +- `nx run cli-e2e:e2e` - setup environment and then run E2E tests for `cli-e2e` +- `nx run cli-static-e2e:e2e --environmentRoot static-environments/user-lists` - setup NPM in existing environment and then run E2E tests for `cli-static-e2e` -### Production usage: -- `nx run cli-e2e:e2e` - setup environment and then run E2E tests for `cli-e2e` - @TODO figure out why we can't set the environmentRoot in the target options in `project.json` -- `nx run cli-static-e2e:e2e --environmentRoot static-environments/user-lists` - setup NPM stuff in existing environment and then run E2E tests for `cli-static-e2e` +## DX while debugging e2e tests Debug full environment in 1 setup: - `nx run cli-e2e:setup-env` - setup environment for `cli-e2e` - - `nx run cli-e2e:setup-env --keepServerRunning` - keeps verdaccio running after setup -- `nx run cli-e2e:stop-verdaccio` - stops the verdaccio server for `cli-e2e` + - `nx run cli-e2e:setup-env --keepServerRunning` - keeps Verdaccio running after setup +- `nx run cli-e2e:stop-verdaccio` - stops the Verdaccio server for `cli-e2e` Debug full environment in 2 steps: -- `nx run cli-e2e:bootstrap-env` - setup folders and starts verdaccio for `cli-e2e` +- `nx run cli-e2e:bootstrap-env` - setup folders and starts Verdaccio for `cli-e2e` - `nx run cli-e2e:install-env` - bootstraps and installs all dependencies for `cli-e2e` -- `nx run cli-e2e:stop-verdaccio` - stops the verdaccio server for `cli-e2e` +- `nx run cli-e2e:stop-verdaccio` - stops the Verdaccio server for `cli-e2e` Debug packages: -- `nx run cli-e2e:bootstrap-env` - setup folders and starts verdaccio for `cli-e2e` -- `nx run utils:npm-publish --environmentProject cli-e2e` - publishes `utils` and `models` to the verdaccio registry configured for `cli-e2e` -- `nx run utils:npm-install --environmentProject cli-e2e` - installs `utils` and `models` from the verdaccio registry configured for `cli-e2e` -- `nx run cli-e2e:stop-verdaccio` - stops the verdaccio server for `cli-e2e` - +- `nx run cli-e2e:bootstrap-env` - setup folders and starts Verdaccio for `cli-e2e` +- `nx run utils:npm-publish --environmentProject cli-e2e` - publishes `utils` and `models` to the Verdaccio registry configured for `cli-e2e` +- `nx run utils:npm-install --environmentProject cli-e2e` - installs `utils` and `models` from the Verdaccio registry configured for `cli-e2e` +- `nx run cli-e2e:stop-verdaccio` - stops the Verdaccio server for `cli-e2e` +## Benefits in depth -## Solution +In the below we point out a **scalable** and **maintainable** setup for Verdaccio environments. -This workspace provides a scalable and maintainable E2E setup for Vite tests and Verdaccio. -It isolates all involved files into an isolated environment for each e2e project. +### πŸ›‘οΈ Isolation of Files During E2E Tests -### Changes files during e2e +All files that change during testing are contained within an isolated folder, ensuring they don't interfere with your local setup or other tests. -The changed files during testing, are all in one isolated folder and don't interfere with your local setup. +By isolating the environment for each E2E project, you avoid conflicts with the local file system and package manager configurations, enabling parallel test execution without issues like publish, install or file conflicts. ```sh -Root/ # πŸ‘ˆ this is your CWD +Root/ β”œβ”€β”€ dist/ β”‚ └── packages/ β”‚ └── /... -└── tmp/ - └── e2e/ - └── / # e2e setup - β”œβ”€β”€ storage/... # npm publish/unpublish - β”œβ”€β”€ node_modules/ - β”‚ └── - β”‚ └── /... # npm install/uninstall - β”œβ”€β”€ __test__/... - β”‚ └── /... # e2e beforeEach - β”‚ └── /... - β”œβ”€β”€ .npmrc # local npm config configured for project specific verdaccio registry - β”œβ”€β”€ package-lock.json # npm install/uninstall - └── package.json # npm install/uninstall +β”œβ”€β”€ tmp/ +β”‚ └── e2e/ +β”‚ └── / +β”‚ β”œβ”€β”€ storage/... # npm publish/unpublish +β”‚ β”‚ └── @my-org +β”‚ β”‚ └── my-lib/... +β”‚ β”œβ”€β”€ node_modules/ +β”‚ β”‚ └── +β”‚ β”‚ └── /... # npm install/uninstall +β”‚ β”œβ”€β”€ __test__/... +β”‚ β”‚ └── /... +β”‚ β”‚ └── /... +β”‚ β”‚ └── test.file.ts +β”‚ β”œβ”€β”€ .npmrc # local npm config configured for project specific Verdaccio registry +β”‚ β”œβ”€β”€ package-lock.json # skipped creation by default +β”‚ └── package.json # npm install/uninstall +└── packages/ + └── /... ``` -### Task Performance +### πŸš€ Scalability - A Parallel-Friendly Setup + +This solution allows for **parallel execution** of tests, which was not possible before due to conflicts with file systems and package managers. + +- ⏱️No more waiting for tests to run sequentially. With isolated environments, each E2E test can run independently without interfering with others. +- ⏱️Environment setup and test setup are separated, which means **significantly faster execution** of the tests and less overhead in CPU and general runtime. + +### ⚑ Task Performance - Optimized Execution + +To further improve task performance, we can now treat the E2E environment as **build output**. +No need for a running server anymore. + +This allows us to **cache** the environment and **reuse** it across tests, leading to faster performance: -To elaborate on the performance improvements, we show the different cases while writing tests. +- πŸ”₯ As it is decoupled from the running server we can now save cache the target +- πŸ”₯ No need to stop and restart the server between tests, saving CPU and memory +- πŸ”₯ No need to uninstall packages or delete storage folders manually. We can simply delete the isolated folder when needed. +- πŸ”₯ The system only installs the necessary packages, further reducing time and resource usage. + +![utils-project-graph-idle.png](docs%2Futils-project-graph-idle.png) #### Changes in source @@ -164,6 +184,29 @@ S-.implicit.->E[project:build]:::build; classDef e2e stroke:#f00 ``` +### ✨ DX - Developer Experience Simplified + +The **NX task graph** makes it easier to discover and understand the setup. Instead of relying on complex global setup scripts: + +- 🀌 No need for global setup files teardown or setup at all. The only connection to the tests files is just another target that runs before the E2E tests. +- 🀌 The process is faster because the test environment doesn’t require ongoing CPU or memory once set up. +- 🀌 Errors are easier to debug. Every step is on its own debugable. + +### πŸ”§ Maintainability - Easy to Update and Manage + +This approach makes the E2E setup more **maintainable** and easier to serve edge cases: + +- A fine-grained task graph makes it easy to understand the project +- Since the environment doesn’t require a constantly running server, maintaining the setup becomes much simpler. The environment can be cached as a build output, reducing complexity. +- as the cleanup logic of a test is just deleting the files this debug effort is gone completely +- The NX task graph provides a clear visual overview of the process, making it easy to see what runs when and how the environment is set up. +- Configuring a test setup is in a single place and provides fine-grained configuration + +![utils-task-graph-idle.png](docs%2Futils-task-graph-idle.png) + +In summary, this new setup offers a more scalable, maintainable, and performant way to handle E2E testing. +By isolating environments and using NX’s powerful tools, it becomes easier to run, manage, and debug E2E tests across projects. + ## Connect with us! - [Check out our services](https://push-based.io) diff --git a/docs/motivation.md b/docs/motivation.md index c98b615e..dea15494 100644 --- a/docs/motivation.md +++ b/docs/motivation.md @@ -46,18 +46,18 @@ export async function setup() { // `npm config set //localhost:${verdaccioPort}:_authToken "my-auth-token"` configureRegistry(verdaccioPort); - // Publish the package to test to the Verdacio storage (local-registry/storage) - // `npm publish @my-org/my-lib@0.0.1 --registry=http://localhost:${verdaccioPort}` + // Publish all packages to the Verdacio storage (local-registry/storage) + // `npm publish --registry=http://localhost:${verdaccioPort}` await publishProject('my-lib'); - // Install the package locally - // `npm install my-lib --registry=http://localhost:${verdaccioPort}` + // Install all packages locally + // `npm install --registry=http://localhost:${verdaccioPort}` await installProject('my-lib'); } export async function teardown() { - // Uninstall the package from the Verdacio storage (local-registry/storage) - // `npm uninstall my-lib` + // Uninstall all package from the Verdacio storage (local-registry/storage) + // `npm uninstall ` await uninstallProject('my-lib'); // Revert configure npm with form the created Verdaccio registry @@ -99,10 +99,14 @@ User/ β”‚ └── my-lib-e2e/ β”‚ └── some.test.ts β”œβ”€β”€ tmp/ - β”‚ └── local-registry/ - β”‚ └── storage/ - β”‚ └── @my-org - β”‚ └── my-lib/... # npm publish saves the package's tarball here + β”‚ β”œβ”€β”€ e2e/... + β”‚ β”‚ └── /... + β”‚ β”‚ └── /... + β”‚ β”‚ └── test.file.ts + β”‚ └── local-registry/ + β”‚ └── storage/ + β”‚ └── @my-org + β”‚ └── my-lib/... # npm publish saves the package's tarball here β”œβ”€β”€ package-lock.json # πŸ”“ npm install/uninstall installs into workspace root └── package.json # πŸ”“ npm install/uninstall installs into workspace root ``` @@ -140,7 +144,9 @@ To run 1 E2E test the following chain has to happen: As you can see, the majority of the tasks are just here as we can't parallelize. :( -### 🐒 Task Performance +### 🐒 Task Graph & Performance + +Due to above reasons the project graph is hard to optimize and opaque as everything is hidden in 2 nodes We already scratched that topic a bit, but in this chapter we can go in full detail. Let's start with looking at the steps from above. diff --git a/docs/utils-project-graph-idle.png b/docs/utils-project-graph-idle.png new file mode 100644 index 0000000000000000000000000000000000000000..67413698784e6705ec9c702c9b9c1d5d54a2fd8b GIT binary patch literal 71345 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 z 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%0ArBR4ZoI?w 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 Date: Sun, 15 Sep 2024 23:07:51 +0200 Subject: [PATCH 05/10] perf: setup code-pushup and add nx-perf plugin --- code-pushup.config.ts | 11 + package-lock.json | 940 +++++++++++++++++- package.json | 1 + project.json | 13 +- .../audit/project-graph.audit.ts | 43 + .../audit/project-task.audit.ts | 86 ++ tooling/measures/nx-performance/constant.ts | 1 + tooling/measures/nx-performance/index.ts | 1 + .../nx-performance/nx-performance.plugin.ts | 46 + 9 files changed, 1136 insertions(+), 6 deletions(-) create mode 100644 code-pushup.config.ts create mode 100644 tooling/measures/nx-performance/audit/project-graph.audit.ts create mode 100644 tooling/measures/nx-performance/audit/project-task.audit.ts create mode 100644 tooling/measures/nx-performance/constant.ts create mode 100644 tooling/measures/nx-performance/index.ts create mode 100644 tooling/measures/nx-performance/nx-performance.plugin.ts diff --git a/code-pushup.config.ts b/code-pushup.config.ts new file mode 100644 index 00000000..f326110e --- /dev/null +++ b/code-pushup.config.ts @@ -0,0 +1,11 @@ +import {CoreConfig} from "@code-pushup/models"; +import nxPerformancePlugin from "./tooling/measures/nx-performance/nx-performance.plugin"; + +const tasks = ['cli-e2e:e2e', 'cli-e2e-original:original-e2e']; +export default { + plugins: [ + nxPerformancePlugin({ + tasks + }) + ], +} satisfies CoreConfig; diff --git a/package-lock.json b/package-lock.json index 6cf43064..264212d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "yargs": "^17.7.2" }, "devDependencies": { + "@code-pushup/cli": "^0.50.0", "@nx/devkit": "^19.6.5", "@nx/esbuild": "18.2.4", "@nx/eslint": "18.2.4", @@ -1990,6 +1991,85 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@code-pushup/cli": { + "version": "0.50.0", + "resolved": "http://localhost:4877/@code-pushup/cli/-/cli-0.50.0.tgz", + "integrity": "sha512-54BBwdeGDZKwT+FNaBuJatMmc7leSmHNzKkGqJV9AY3GRDVBXEicR4whwJXMCzxqg/ljPetvTmUeF/QLPdg3XQ==", + "dev": true, + "dependencies": { + "@code-pushup/core": "0.50.0", + "@code-pushup/models": "0.50.0", + "@code-pushup/utils": "0.50.0", + "ansis": "^3.3.0", + "simple-git": "^3.20.0", + "yargs": "^17.7.2" + }, + "bin": { + "code-pushup": "index.js" + } + }, + "node_modules/@code-pushup/core": { + "version": "0.50.0", + "resolved": "http://localhost:4877/@code-pushup/core/-/core-0.50.0.tgz", + "integrity": "sha512-E+xF2+siH0siunl8Pfp5t+3cJXVaK6jgeUz4DvtFAB3XSCmICB93276Ib4I5OWrPc7aNOoBZoacO7NwjJM8OEw==", + "dev": true, + "dependencies": { + "@code-pushup/models": "0.50.0", + "@code-pushup/portal-client": "^0.9.0", + "@code-pushup/utils": "0.50.0", + "ansis": "^3.3.0" + } + }, + "node_modules/@code-pushup/models": { + "version": "0.50.0", + "resolved": "http://localhost:4877/@code-pushup/models/-/models-0.50.0.tgz", + "integrity": "sha512-61ljJ4ko5yjddwT6OIbcX/VrrsLRhMQ2pKQnR88v1E0NOf59TXcPEqyYdjwdGZS+q4l3q5hOmAkOEsEnr9Tq/w==", + "dev": true, + "dependencies": { + "vscode-material-icons": "^0.1.0", + "zod": "^3.22.1" + } + }, + "node_modules/@code-pushup/portal-client": { + "version": "0.9.0", + "resolved": "http://localhost:4877/@code-pushup/portal-client/-/portal-client-0.9.0.tgz", + "integrity": "sha512-ABQlc6x24UflEm7uO7Tt9KlU0NnhbmbAj7lUv7H9dgxgJ0fcK5R3rSp7hYab3npawb2nX+6+aG2OaPSiYsFPBQ==", + "dev": true, + "dependencies": { + "graphql": "^16.6.0", + "graphql-request": "^6.1.0", + "graphql-tag": "^2.12.6", + "vscode-material-icons": "^0.1.0" + } + }, + "node_modules/@code-pushup/utils": { + "version": "0.50.0", + "resolved": "http://localhost:4877/@code-pushup/utils/-/utils-0.50.0.tgz", + "integrity": "sha512-gnlydlQGQsU6NdUV40cD/NGhoXIudQ6OCjJHHMA2szj8dfguFwD5s921MkgqYXgWUWD5X5KKe/anZCSItD5pBA==", + "dev": true, + "dependencies": { + "@code-pushup/models": "0.50.0", + "@isaacs/cliui": "^8.0.2", + "@poppinss/cliui": "^6.4.0", + "ansis": "^3.3.0", + "build-md": "^0.4.2", + "bundle-require": "^4.0.1", + "esbuild": "^0.19.2", + "multi-progress-bars": "^5.0.3", + "semver": "^7.6.0", + "simple-git": "^3.20.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "http://localhost:4877/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2587,6 +2667,15 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "http://localhost:4877/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -2644,6 +2733,102 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "http://localhost:4877/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "http://localhost:4877/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "http://localhost:4877/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "http://localhost:4877/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "http://localhost:4877/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "http://localhost:4877/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "http://localhost:4877/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -3068,6 +3253,21 @@ "tslib": "2" } }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "http://localhost:4877/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "http://localhost:4877/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, "node_modules/@mole-inc/bin-wrapper": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz", @@ -4899,6 +5099,110 @@ "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", "dev": true }, + "node_modules/@poppinss/cliui": { + "version": "6.4.1", + "resolved": "http://localhost:4877/@poppinss/cliui/-/cliui-6.4.1.tgz", + "integrity": "sha512-tdV3QpAfrPFRLPOh98F8QxWBvwYF3ziWGGtpVqfZtFNTFkC7nQnVQlUW55UtQ7rkeMmFohxfDI+2JNWScGJ1jQ==", + "dev": true, + "dependencies": { + "@poppinss/colors": "^4.1.3", + "cli-boxes": "^3.0.0", + "cli-table3": "^0.6.4", + "cli-truncate": "^4.0.0", + "log-update": "^6.0.0", + "pretty-hrtime": "^1.0.3", + "string-width": "^7.1.0", + "supports-color": "^9.4.0", + "terminal-size": "^4.0.0", + "wordwrap": "^1.0.0" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/@poppinss/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "http://localhost:4877/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@poppinss/cliui/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "http://localhost:4877/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/@poppinss/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "http://localhost:4877/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@poppinss/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "http://localhost:4877/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@poppinss/cliui/node_modules/supports-color": { + "version": "9.4.0", + "resolved": "http://localhost:4877/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@poppinss/colors": { + "version": "4.1.3", + "resolved": "http://localhost:4877/@poppinss/colors/-/colors-4.1.3.tgz", + "integrity": "sha512-A0FjJ6x14donWDN3bHAFFjJaPWTwM2PgWT834+bPKVK6Xukf25CscoRqCPYI939a8yuJFX9PYWWnVbUVI0E2Cg==", + "dev": true, + "dependencies": { + "kleur": "^4.1.5" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/@poppinss/colors/node_modules/kleur": { + "version": "4.1.5", + "resolved": "http://localhost:4877/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", @@ -7763,6 +8067,27 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/build-md": { + "version": "0.4.2", + "resolved": "http://localhost:4877/build-md/-/build-md-0.4.2.tgz", + "integrity": "sha512-w1ZnCgPqrzd9ZM/LZD+FxtflKWRN+KmcWOHcLH485jQGQLNcbcNqslunUgGkdCfW0GRSj6cb4njMQ/Fr2mhGkQ==", + "dev": true + }, + "node_modules/bundle-require": { + "version": "4.2.1", + "resolved": "http://localhost:4877/bundle-require/-/bundle-require-4.2.1.tgz", + "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==", + "dev": true, + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.17" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -7981,6 +8306,18 @@ "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", "dev": true }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "http://localhost:4877/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -8005,6 +8342,87 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "http://localhost:4877/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "http://localhost:4877/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "http://localhost:4877/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "http://localhost:4877/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "http://localhost:4877/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "http://localhost:4877/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/clipanion": { "version": "4.0.0-rc.3", "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-4.0.0-rc.3.tgz", @@ -8329,6 +8747,15 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "http://localhost:4877/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8701,6 +9128,12 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "http://localhost:4877/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -8818,6 +9251,18 @@ "node": ">=4" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "http://localhost:4877/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9955,6 +10400,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "http://localhost:4877/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -10183,8 +10640,45 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/gunzip-maybe": { - "version": "1.4.2", + "node_modules/graphql": { + "version": "16.9.0", + "resolved": "http://localhost:4877/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-request": { + "version": "6.1.0", + "resolved": "http://localhost:4877/graphql-request/-/graphql-request-6.1.0.tgz", + "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", + "dev": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.2.0", + "cross-fetch": "^3.1.5" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "http://localhost:4877/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/gunzip-maybe": { + "version": "1.4.2", "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", "dev": true, @@ -11922,6 +12416,15 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "http://localhost:4877/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/local-pkg": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", @@ -12041,6 +12544,208 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "http://localhost:4877/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "http://localhost:4877/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "http://localhost:4877/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "http://localhost:4877/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "http://localhost:4877/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "http://localhost:4877/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "http://localhost:4877/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "http://localhost:4877/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "http://localhost:4877/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "http://localhost:4877/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "http://localhost:4877/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "http://localhost:4877/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "http://localhost:4877/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "http://localhost:4877/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -12264,6 +12969,18 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "http://localhost:4877/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -12336,6 +13053,82 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/multi-progress-bars": { + "version": "5.0.3", + "resolved": "http://localhost:4877/multi-progress-bars/-/multi-progress-bars-5.0.3.tgz", + "integrity": "sha512-/EzDF3NVeYTFLoLQ33fgvM6933rS2MZlEPWBivsc94Y/lj2xpWOs/DpJrCG+XrPOo4/P6DW+oxZyKnRKw0d/nQ==", + "dev": true, + "dependencies": { + "chalk": "^5.2.0", + "string-width": "5.1.2", + "strip-ansi": "7.0.1" + }, + "engines": { + "node": ">14.18.0" + } + }, + "node_modules/multi-progress-bars/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "http://localhost:4877/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/multi-progress-bars/node_modules/chalk": { + "version": "5.3.0", + "resolved": "http://localhost:4877/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/multi-progress-bars/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "http://localhost:4877/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/multi-progress-bars/node_modules/string-width": { + "version": "5.1.2", + "resolved": "http://localhost:4877/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multi-progress-bars/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "http://localhost:4877/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/mv": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", @@ -12473,9 +13266,9 @@ "optional": true }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "http://localhost:4877/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -13365,6 +14158,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "http://localhost:4877/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", @@ -14113,6 +14915,21 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-git": { + "version": "3.26.0", + "resolved": "http://localhost:4877/simple-git/-/simple-git-3.26.0.tgz", + "integrity": "sha512-5tbkCSzuskR6uA7uA23yjasmA0RzugVo8QM2bpsnxkrgP13eisFT7TMS4a+xKEJvbmr4qf+l0WT3eKa9IxxUyw==", + "dev": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -14142,6 +14959,46 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "http://localhost:4877/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "http://localhost:4877/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "http://localhost:4877/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/sonic-boom": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz", @@ -14358,6 +15215,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "http://localhost:4877/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -14369,6 +15241,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "http://localhost:4877/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -14518,6 +15403,18 @@ "node": ">=6" } }, + "node_modules/terminal-size": { + "version": "4.0.0", + "resolved": "http://localhost:4877/terminal-size/-/terminal-size-4.0.0.tgz", + "integrity": "sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -16142,6 +17039,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/vscode-material-icons": { + "version": "0.1.1", + "resolved": "http://localhost:4877/vscode-material-icons/-/vscode-material-icons-0.1.1.tgz", + "integrity": "sha512-GsoEEF8Tbb0yUFQ6N6FPvh11kFkL9F95x0FkKlbbfRQN9eFms67h+L3t6b9cUv58dSn2gu8kEhNfoESVCrz4ag==", + "dev": true + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -16289,6 +17192,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "http://localhost:4877/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -16421,6 +17342,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "http://localhost:4877/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index d86615a0..7dd31b4a 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "yargs": "^17.7.2" }, "devDependencies": { + "@code-pushup/cli": "^0.50.0", "@nx/devkit": "^19.6.5", "@nx/esbuild": "18.2.4", "@nx/eslint": "18.2.4", diff --git a/project.json b/project.json index 5bb5eaf4..e78a9b43 100644 --- a/project.json +++ b/project.json @@ -2,5 +2,16 @@ "name": "workspace-source", "$schema": "node_modules/nx/schemas/project-schema.json", "// targets": "to see all targets run: nx show project workspace-source --web", - "targets": {} + "targets": { + "code-push": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npx code-pushup" + } + ] + } + } + } } diff --git a/tooling/measures/nx-performance/audit/project-graph.audit.ts b/tooling/measures/nx-performance/audit/project-graph.audit.ts new file mode 100644 index 00000000..afdeb05c --- /dev/null +++ b/tooling/measures/nx-performance/audit/project-graph.audit.ts @@ -0,0 +1,43 @@ +import {AuditOutput, PluginReport} from "@code-pushup/models"; +import {execFile} from "node:child_process"; + +export const DEFAULT_MAX_PROJECT_GRAPH_TIME = 300; + +export const PROJECT_GRAPH_PERFORMANCE_AUDIT = { + slug: 'project-graph-performance', + title: 'Nx project graph performance audit', + description: 'An audit to check performance of the Nx project graph', +} + +export type ProjectGraphAuditOptions = { + maxDuration?: number; +} + +export async function projectGraphAudit(options?: ProjectGraphAuditOptions): Promise { + const {maxDuration = DEFAULT_MAX_PROJECT_GRAPH_TIME} = options ?? {}; + const {duration} = await projectGraphTiming(); + + return { + slug: 'project-graph-performance', + score: scoreProjectGraphDuration(duration, maxDuration), + value: duration, + displayValue: `${duration.toFixed(2)} ms`, + details: {} + }; +} + + +export function scoreProjectGraphDuration(duration: number, maxDuration: number): number { + // Ensure duration is capped at maxDuration for the scoring + if (duration >= maxDuration) return 0; + + // A simple linear score where a lower duration gives a higher score. + // When duration == 0, score is 1 (perfect). When duration == maxDuration, score is 0 (poor). + return 1 - duration / maxDuration; +} + +export async function projectGraphTiming(): Promise<{ duration: number }> { + const start = performance.now(); + await execFile('npx nx show projects'); + return {duration: Number((performance.now() - start).toFixed(3))}; +} diff --git a/tooling/measures/nx-performance/audit/project-task.audit.ts b/tooling/measures/nx-performance/audit/project-task.audit.ts new file mode 100644 index 00000000..0a6d9993 --- /dev/null +++ b/tooling/measures/nx-performance/audit/project-task.audit.ts @@ -0,0 +1,86 @@ +import {AuditOutput, Audit} from "@code-pushup/models"; +import {executeProcess, slugify} from "@code-pushup/utils"; +import {logger, readJsonFile} from "@nx/devkit"; + + +export const DEFAULT_MAX_PROJECT_TARGET_TIME = 300; + +export function getAuditSlug(task: string): string { + return `nx-${slugify(task)}-performance` +} + +export const getTaskPerformanceAudits = (tasks: string[]): Audit[] => { + return tasks.map((task) => ({ + slug: getAuditSlug(task), // Unique slug for each task + title: `Nx nx-${task} performance audit`, + description: 'An audit to check performance of the Nx task.', + })) +} + +export type ProjectTaskAuditOptions = { + tasks: string[] + maxDuration?: number; +} + +export async function projectTaskAudits(options?: ProjectTaskAuditOptions): Promise { + const {tasks, maxDuration = DEFAULT_MAX_PROJECT_TARGET_TIME} = options ?? {}; + + // Get the timings for each task + const timings: Record[] = await projectTaskTiming(tasks); + + // Return an array of audits, one per task + return timings + // [{task-a:duration}, {task-b:duration}] -> [[task-a, duration], [task-b, duration]] + .map((allTaskTimes): [string, number] => { + const allTaskEntries = Object.entries(allTaskTimes); + return [ + allTaskEntries?.at(-1)?.at(0) as string, // Get the last task name + allTaskEntries.reduce((acc, [task, duration]) => acc + duration, 0) + ]; + }) + .map(([task, duration]) => ({ + slug: getAuditSlug(task), // Unique slug for each task + score: scoreProjectTaskDuration(duration, maxDuration), + value: duration, + displayValue: `${duration.toFixed(2)} ms`, + details: {} + })); +} + +export function scoreProjectTaskDuration(duration: number, maxDuration: number): number { + // Ensure duration is capped at maxDuration for the scoring + if (duration >= maxDuration) return 0; + + // A simple linear score where a lower duration gives a higher score. + // When duration == 0, score is 1 (perfect). When duration == maxDuration, score is 0 (poor). + return 1 - duration / maxDuration; +} + +export async function projectTaskTiming(tasks: T[]): Promise[]> { + const results: Record[] = []; + + for (const task of tasks) { + + await executeProcess({ + command: `NX_PERF_LOGGING=true NX_DAEMON=false NX_PROFILE=tmp/nx-task-performance/${slugify(task)}-profile.json npx`, + args: [ + 'nx', 'run', task, '--parallel=1', '--verbose', '--skipNxCache' + ], + observer: { + onStdout: (stdout) => logger.info(stdout), + onStderr: (stderr) => logger.error(stderr) + } + }); + + const taskPerfJson = readJsonFile(`./tmp/nx-task-performance/${slugify(task)}-profile.json`); + results.push(taskPerfJson + .filter(({args}) => args.target && `${args.target.project}:${args.target.target}` === task) + .map(({args, dur}) => { + return { + [`${args.target.project}:${args.target.target}`]: dur/1000 + } + }).at(0) + ); + } + return results; +} diff --git a/tooling/measures/nx-performance/constant.ts b/tooling/measures/nx-performance/constant.ts new file mode 100644 index 00000000..73cf483e --- /dev/null +++ b/tooling/measures/nx-performance/constant.ts @@ -0,0 +1 @@ +export const PLUGIN_SLUG = 'nx-perf'; diff --git a/tooling/measures/nx-performance/index.ts b/tooling/measures/nx-performance/index.ts new file mode 100644 index 00000000..d15483f1 --- /dev/null +++ b/tooling/measures/nx-performance/index.ts @@ -0,0 +1 @@ +export {nxPerformanceAudits, nxPerformancePlugin, nxPerformanceCategoryRefs} from './nx-performance.plugin'; diff --git a/tooling/measures/nx-performance/nx-performance.plugin.ts b/tooling/measures/nx-performance/nx-performance.plugin.ts new file mode 100644 index 00000000..0965b33f --- /dev/null +++ b/tooling/measures/nx-performance/nx-performance.plugin.ts @@ -0,0 +1,46 @@ +import {PluginConfig, AuditOutputs, CategoryRef} from "@code-pushup/models"; +import {PLUGIN_SLUG} from "./constant"; +import { + PROJECT_GRAPH_PERFORMANCE_AUDIT, + projectGraphAudit, + ProjectGraphAuditOptions +} from "./audit/project-graph.audit"; +import {getTaskPerformanceAudits, ProjectTaskAuditOptions, projectTaskAudits} from "./audit/project-task.audit"; + +export const nxPerformanceAudits = ({tasks}: {tasks: string[]}) => ([ + PROJECT_GRAPH_PERFORMANCE_AUDIT, + ...(tasks ? getTaskPerformanceAudits(tasks) : [] ) +]) + +export const nxPerformanceCategoryRefs = (options: {tasks: string[]} ): CategoryRef[] => nxPerformanceAudits(options).map(({ slug }) => ({ + type: 'audit', + plugin: PLUGIN_SLUG, + slug, + weight: 1, +})); + +export type NxPerfPluginConfig = ProjectGraphAuditOptions & ProjectTaskAuditOptions; + +export function nxPerformancePlugin(options?: NxPerfPluginConfig): PluginConfig { + + return { + slug: PLUGIN_SLUG, + title: 'Nx Performance Checks', + icon: 'flash', + description: 'A plugin to measure and assert performance of Nx workspace.', + runner: () => runnerFunction(options), + audits: nxPerformanceAudits(options) + }; +} + +export default nxPerformancePlugin; + +export type NxPerfRunnerOptions = NxPerfPluginConfig; +export async function runnerFunction( + options: NxPerfRunnerOptions, +): Promise { + return [ + await projectGraphAudit(options), + ...(await projectTaskAudits(options)) + ]; +} From 1b9b74dee66fead60c2289fe0a6131d90882826b Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 23:10:21 +0200 Subject: [PATCH 06/10] ci: adjust .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6e8472b9..5d42c986 100644 --- a/.gitignore +++ b/.gitignore @@ -38,5 +38,6 @@ testem.log .DS_Store Thumbs.db +.code-pushup .nx .nx/cache From 7b3ecdac8500c83eae31b49b4a80cfb0497f353f Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 23:12:38 +0200 Subject: [PATCH 07/10] ci: targets --- e2e-examples/cli-e2e-original/setup/global-setup.ts | 1 - project.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/e2e-examples/cli-e2e-original/setup/global-setup.ts b/e2e-examples/cli-e2e-original/setup/global-setup.ts index 1ed75eda..9374c92d 100644 --- a/e2e-examples/cli-e2e-original/setup/global-setup.ts +++ b/e2e-examples/cli-e2e-original/setup/global-setup.ts @@ -43,7 +43,6 @@ export async function setup() { _: ['run-many'], targets: 'original-npm-install', exclude: 'tag:type:testing', - parallel: 1, skipNxCache: true, verbose: isVerbose }), diff --git a/project.json b/project.json index e78a9b43..5dfa8f42 100644 --- a/project.json +++ b/project.json @@ -3,7 +3,7 @@ "$schema": "node_modules/nx/schemas/project-schema.json", "// targets": "to see all targets run: nx show project workspace-source --web", "targets": { - "code-push": { + "code-pushup": { "executor": "nx:run-commands", "options": { "commands": [ From 4a822bda8ccb82ce8dc814104dc73bb77927a5f2 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 23:23:02 +0200 Subject: [PATCH 08/10] try hack teardown --- e2e-examples/cli-e2e-original/setup/global-setup.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/e2e-examples/cli-e2e-original/setup/global-setup.ts b/e2e-examples/cli-e2e-original/setup/global-setup.ts index 9374c92d..34d10fcb 100644 --- a/e2e-examples/cli-e2e-original/setup/global-setup.ts +++ b/e2e-examples/cli-e2e-original/setup/global-setup.ts @@ -9,6 +9,7 @@ import { const isVerbose = process.env['NX_VERBOSE_LOGGING'] === 'true' ?? false; const projectName = process.env['NX_TASK_TARGET_PROJECT']; +let stopFn: () => void export async function setup() { if (projectName == null) { @@ -44,15 +45,22 @@ export async function setup() { targets: 'original-npm-install', exclude: 'tag:type:testing', skipNxCache: true, + parallel: 1, verbose: isVerbose }), verbose: isVerbose }); // @TODO figure out why named exports don't work https://vitest.dev/config/#globalsetup - return () => teardownSetup(registryResult); + stopFn = () => teardownSetup(registryResult) + return () => stopFn(); } + + +export async function teardown() { + stopFn() +} export async function teardownSetup({ registry, stop }: RegistryResult) { console.info(`Teardown ${projectName}`); // uninstall all projects From 32ce5a5f8cbee8e3f78f5d5138b4bccaea467a0d Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 23:38:12 +0200 Subject: [PATCH 09/10] disable example CI --- .github/{workflows => disabled}/ci-examples.yml | 0 .github/workflows/ci.yml | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) rename .github/{workflows => disabled}/ci-examples.yml (100%) diff --git a/.github/workflows/ci-examples.yml b/.github/disabled/ci-examples.yml similarity index 100% rename from .github/workflows/ci-examples.yml rename to .github/disabled/ci-examples.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4be856df..242f366d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,7 @@ jobs: cache: npm - name: Audit production dependencies run: npm audit --omit=dev --omit=optional + unit-test: strategy: fail-fast: false @@ -45,7 +46,7 @@ jobs: - name: Install dependencies run: npm ci - name: Unit test affected projects - run: npx nx affected -t unit-test --parallel=3 --coverage.enabled + run: npx nx affected -t unit-test --parallel=3 --verbose --coverage.enabled e2e: strategy: From 820760869ef7888af1fa7139bf8a0ee9da2b7e45 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Sep 2024 23:39:08 +0200 Subject: [PATCH 10/10] add code-pushup to CI --- .github/workflows/code-pushup.yml | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/code-pushup.yml diff --git a/.github/workflows/code-pushup.yml b/.github/workflows/code-pushup.yml new file mode 100644 index 00000000..cc135147 --- /dev/null +++ b/.github/workflows/code-pushup.yml @@ -0,0 +1,39 @@ +name: Code PushUp + +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + NX_NON_NATIVE_HASHER: true + +permissions: + pull-requests: write + +jobs: + code-pushup: + runs-on: ubuntu-latest + name: Code PushUp + # ignore PRs from forks, handled by code-pushup-fork.yml + if: ${{ !github.event.pull_request.head.repo.fork }} + env: + CP_SERVER: ${{ secrets.CP_SERVER }} + CP_API_KEY: ${{ secrets.CP_API_KEY }} + CP_ORGANIZATION: code-pushup + CP_PROJECT: cli + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: npm + - name: Install dependencies + run: npm ci + - name: Run Code PushUp action + uses: code-pushup/github-action@v0 + with: + bin: npx nx code-pushup --