https://github.com/push-based/nx-verdaccio
Enterprise E2E setup for Nx and Verdaccio
https://github.com/push-based/nx-verdaccio
Last synced: 8 months ago
JSON representation
Enterprise E2E setup for Nx and Verdaccio
- Host: GitHub
- URL: https://github.com/push-based/nx-verdaccio
- Owner: push-based
- License: mit
- Created: 2024-08-31T12:40:20.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-29T17:24:09.000Z (9 months ago)
- Last Synced: 2025-06-29T17:35:17.782Z (9 months ago)
- Language: TypeScript
- Size: 2.75 MB
- Stars: 17
- Watchers: 2
- Forks: 4
- Open Issues: 20
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Enterprise Grade Testing with Verdaccio and Nx
### π Enterprise Grade Testing with Verdaccio and Nx β‘
[](https://www.npmjs.com/package/@push-based/nx-verdaccio)
[](https://github.com/push-based/nx-verdaccio/releases)
[](https://opensource.org/licenses/MIT)
[](https://github.com/push-based/nx-verdaccio/pulse/monthly)
[](https://github.com/push-based/nx-verdaccio/actions/workflows/ci.yml?query=branch%3Amain)
Welcome to the **Verdaccio Testing Environments Nx Plugin** β your one-stop solution for running **blazingly fast**, **isolated**, and **scalable** end-to-end (e2e) tests with zero configuration. Yeah, you heard that right: **ZERO configuration**.
With this plugin, say goodbye to the old days of waiting around for your tests and hello to _next-level speed_. Plug it in, and you're good to go.
## Why You NEED This Plugin π₯
**Key Features:**
- βοΈ **ZERO Config** β You wonβt need any global setup or teardown scripts.
- π₯ **BRUTALLY FAST** β Up to **β‘110x fasterβ‘** than traditional setups. Yes, you read that right.
- π‘οΈ **Isolated** β No more conflicts with local file systems. Everythingβs clean.
- π **Scalable** β Run your tests in parallel, no matter how big your project.
- π **Optimized** β We cache everything we can, so your tests run faster over time.
- β‘ **Developer Experience** β Streamlined and simplified. You focus on the code, we handle the setup.
- π§ͺ **Easier Debugging** β Debugging e2e tests is now a piece of cake π°.
---
### ποΈ **Speed Benchmarks** ποΈ
| Small Project (4 packages) | Common Setup | Optimized Setup | [x] times faster | [%] percent faster |
| ----------------------------- | ------------ | --------------- | ---------------- | ------------------ |
| **Worst Case** Execution Time | 110 s | 13 s | 8.46x faster | 746% |
| **Best Case** Execution Time | 110 s | 1 s | 110x faster | 11000% |
### π§ͺ **Test Architecture Comparison** π
| Default Test Architecture | Decoupled Test Architecture |
| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
|  |  |
### π **Tasks Architecture Comparison** π
| Default Task Architecture | Decoupled Task Architecture |
| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
|  |  |
### π **Testing Dx Comparison** π€
| Default Testing Dx | Cacheable Testing Dx |
| ---------------------------------------------------------------- | ------------------------------------------------------------------ |
|  |  |
### π **Debug Dx Comparison** π
| Default Debug Dx | Excellent Debug Dx |
| ------------------------------------------------------------ | -------------------------------------------------------------- |
|  |  |
---
## Getting Started π
### Step 1: Register and Configure in `nx.json`:
```jsonc
{
"plugins": [
{
"plugin": "@push-based/nx-verdaccio",
"options": {
"environments": {
"environmentsDir": "tmp/environments", // Optional
"targetNames": ["e2e"] // Optional
}
}
}
]
}
```
> [!NOTE]
> Your configured targets now has a new dependency configured:
>
> ```jsonc
> {
> "name": "utils-e2e",
> "targets": {
> "e2e": {
> "dependsOn": [
> // dynamically added
> { "target": "env-setup", "params": "forward" }
> ]
> // ...
> }
> }
> // ...
> }
> ```
### Optional: Add the Package Under Test as implicitDependencies
Let the plugin detect your implicit dependencies:
```jsonc
// projects/utils-e2e/project.json
{
"name": "utils-e2e",
"implicitDependencies": ["utils"]
}
```
### Step 3: Run the E2E Test
```bash
nx run utils-e2e:e2e
```
Tadaaaa! π Youβre now testing at light speed!
## Configuration Options π οΈ
| Name | type | description |
| -------------------------------- | --------------------------------------- | -------------------------------------------------------------- |
| **environments.environmentsDir** | `string` (DEFAULT `'tmp/environments'`) | Directory for environment storage. |
| **environments.targetNames** | `string[]` (REQUIRED) | Target names for environment-based projects. |
| **environments.filterByTag** | `string[]` (REQUIRED) | Only consider projects with these tags for environment setup. |
| **publishable.filterByTag** | `string[]` (REQUIRED) | Only consider projects with these tags for publishing targets. |
### Fine-Grained Control for Publishable Projects π
Out of the box, all library-type projects get these targets:
- `nx-verdaccio--pkg-publish`
- `nx-verdaccio--pkg-install`
But if you want to narrow it down:
```jsonc
{
"plugins": [
{
"plugin": "@push-based/nx-verdaccio",
"options": {
"packages": {
"filterByTags": ["publishable"]
}
}
}
]
}
```
Tag your projects accordingly:
```jsonc
// projects/utils/project.json
{
"name": "utils",
//
"tags": ["publishable"]
// ...
}
```
### Custom Test Environment Setup π§ͺ
#### Filter by target names
Want more control over which projects get their environments set up?
```jsonc
{
"plugins": [
{
"plugin": "@push-based/nx-verdaccio",
"options": {
"environments": {
"targetNames": ["e2e", "e2e-static"]
}
}
}
]
}
```
### Filter by tags
Filter projects by tags to apply environment setup:
```jsonc
{
"plugins": [
{
"plugin": "@push-based/nx-verdaccio",
"options": {
"environments": {
"filterByTags": ["npm-env"]
}
}
}
]
}
```
Tag those projects accordingly:
```jsonc
// projects/utils/project.json
{
"name": "lib-e2e",
//
"tags": ["npm-env"]
// ...
}
```
**Example Usage:**
- Run the E2E test for`utils-e2e`:
`nx run utils-e2e:e2e`
- Run E2E with specific environments:
`nx run utils-static-e2e:e2e --environmentRoot static-environments/user-lists`
### Customize inferred target names
The inferred Nx targets are prefixed by `nxv-`, e.g. `nxv-e2e` will run your test target (by default `e2e`) and ensure cleanup is done afterwards (`nxv-teardown`).
Other inferred targets include `nxv-env-setup`, `nxv-env-bootstrap`, `nxv-env-install`, `nxv-pkg-install`, `nxv-verdaccio-start`, etc.
You can find all these targets in the Nx graph (run `npx nx graph`).
You may prefer to infer different target names, e.g. so you can run `e2e-test` instead of `nxv-e2e`. All target names may be customized for both environment and package targets.
```jsonc
{
"plugins": [
{
"plugin": "@push-based/nx-verdaccio",
"options": {
"environments": {
"inferredTargets": {
"e2e": "e2e-test", // default is "nxv-e2e"
"setup": "e2e-test-setup" // default is "nxv-e2e-setup"
}
},
"packages": {
"inferredTargets": {
"install": "npm-install" // default is "nxv-pkg-install"
}
}
}
}
]
}
```
## Benchmarks
This is a first draft of how the benchmarks will look. ATM the data set it not big enough.
> β οΈ
> The data is a first draft of the structure and does not reflect a clean data set.
> Work on the real benchmark data in progress
| cli:e2e | Common | Optimized | [x] times faster | [%] percent faster |
| :---------------------------: | :----: | :-------: | :---------------: | :----------------: |
| Execution Time - _Worse case_ | 110 s | 13 s | 8.46 times faster | 746% |
| Execution Time - _Best case_ | 110 s | 1 s | 110 | 11000% |
| Download Volume | 381 MB | 381 MB | 0% | 0% |
| Cacheable | β | β
| n/a | n/a |
| Graph Nodes | 1 | 13 | n/a | n/a |
| Parallelism | β | β
| n/a | n/a |
## Next Steps
- [Configure cacheable environments](./docs/benefits.md#-task-performance---optimized-execution)
- [Configure Static environments](./projects/nx-verdaccio/docs/static-environments.md)
- [Debugging](./projects/nx-verdaccio/README.md#debugging-e2e-environments)
## Stay Connected! π
- [Check out our services](https://push-based.io)
- [Follow us on Twitter](https://twitter.com/pushbased)