chore(nx-dev): switch e2e to playwright (#18629)

This commit is contained in:
Caleb Ukle 2023-08-22 19:02:45 -05:00 committed by GitHub
parent 9d5a3830be
commit d4ea8064ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 845 additions and 851 deletions

View File

@ -61,6 +61,7 @@ commands:
name: Install Dependencies name: Install Dependencies
command: | command: |
pnpm install --frozen-lockfile pnpm install --frozen-lockfile
pnpm playwright install --with-deps firefox webkit chrome
- save_cache: - save_cache:
name: Save pnpm Package Cache name: Save pnpm Package Cache
key: node-deps-{{ arch }}-v3-{{ checksum "pnpm-lock.yaml" }} key: node-deps-{{ arch }}-v3-{{ checksum "pnpm-lock.yaml" }}

View File

@ -134,7 +134,7 @@ if you are interested.
1. `SAML_CERT=<your-cert-string-from-above>` 1. `SAML_CERT=<your-cert-string-from-above>`
2. `SAML_ENTRY_POINT=<your-login-url-from-above>` 2. `SAML_ENTRY_POINT=<your-login-url-from-above>`
# Helm config ## Helm config
If you are using [Helm to deploy NxCloud](https://github.com/nrwl/nx-cloud-helm) you If you are using [Helm to deploy NxCloud](https://github.com/nrwl/nx-cloud-helm) you
will need to configure the below two values, as well as make the `SAML_CERT` and `SAML_ENTRY_POINT` will need to configure the below two values, as well as make the `SAML_CERT` and `SAML_ENTRY_POINT`

View File

@ -1,137 +1,139 @@
# `nx-cloud` - Release notes # `nx-cloud` - Release notes
## Nx Cloud package
{% callout type="check" title="@nrwl/nx-cloud was changed to nx-cloud" %} {% callout type="check" title="@nrwl/nx-cloud was changed to nx-cloud" %}
[Read more about the rescope ≫](/recipes/other/rescope) [Read more about the rescope ≫](/recipes/other/rescope)
{% /callout %} {% /callout %}
## 14.3.0 ### 14.3.0
- Fix: Resolve issue where sometimes cache hits would be reported as misses when paired with Nx 13.0-13.5 - Fix: Resolve issue where sometimes cache hits would be reported as misses when paired with Nx 13.0-13.5
- Fix: Correctly infer NX_BRANCH while running in Gitlab CI - Fix: Correctly infer NX_BRANCH while running in Gitlab CI
## 14.2.0 ### 14.2.0
- Feat: Add `NX_CLOUD_SILENT_RECORD` environment variable for use with `nx-cloud record` - Feat: Add `NX_CLOUD_SILENT_RECORD` environment variable for use with `nx-cloud record`
- Feat: Add `NX_CLOUD_AGENT_TIMEOUT_MS` environment variable to configure task timeouts - Feat: Add `NX_CLOUD_AGENT_TIMEOUT_MS` environment variable to configure task timeouts
## 14.1.2 ### 14.1.2
- Fix: Provider nicer failure message when version of Nx is incompatible with `@nx/nx-cloud` - Fix: Provider nicer failure message when version of Nx is incompatible with `@nx/nx-cloud`
- Fix: Use Nx task graph if provided - Fix: Use Nx task graph if provided
## 14.1.1 ### 14.1.1
- Fix: Handle **overrides_unparsed** property for nx:run-commands executor - Fix: Handle **overrides_unparsed** property for nx:run-commands executor
## 14.1.0 ### 14.1.0
- Fix: Gracefully handle errors with corrupted tarballs - Fix: Gracefully handle errors with corrupted tarballs
- Fix: Resolve issue where tasks run with read-only DTE would cause 404s on artifact retrieval - Fix: Resolve issue where tasks run with read-only DTE would cause 404s on artifact retrieval
- Feat: Allow specifying Nx Cloud installation source through generator - Feat: Allow specifying Nx Cloud installation source through generator
## 14.0.5 ### 14.0.5
- Fix: Workspace name for new Nx Cloud workspaces is pulled from `package.json` instead of `nx.json` - Fix: Workspace name for new Nx Cloud workspaces is pulled from `package.json` instead of `nx.json`
- Fix: `@nx/nx-cloud` can be run from directories other than workspace root - Fix: `@nx/nx-cloud` can be run from directories other than workspace root
- Fix: Correctly infer `NX_BRANCH` and `NX_RUN_GROUP` from Jenkins - Fix: Correctly infer `NX_BRANCH` and `NX_RUN_GROUP` from Jenkins
- Fix: Ignore errors related to excess whitespace in tarballs - Fix: Ignore errors related to excess whitespace in tarballs
## 14.0.3 ### 14.0.3
- Fix: Enable caching for all inner commands - Fix: Enable caching for all inner commands
## 14.0.2 ### 14.0.2
- Fix: Remove dependency on `@nx/devkit` for init generator - Fix: Remove dependency on `@nx/devkit` for init generator
## 14.0.1 ### 14.0.1
- Fix: Correctly infer `NX_BRANCH` and `NX_RUN_GROUP` from Vercel - Fix: Correctly infer `NX_BRANCH` and `NX_RUN_GROUP` from Vercel
## 14.0.0 ### 14.0.0
- Feat: Nx 14 Compatibility - Feat: Nx 14 Compatibility
- Fix: Exit with status code of child process when recording commands with `nx-cloud record` - Fix: Exit with status code of child process when recording commands with `nx-cloud record`
## 13.3.1 ### 13.3.1
- Feat: Store output for non-Nx commands in Nx Cloud. Check out https://nx.dev/nx-cloud/set-up/record-commands for more information. - Feat: Store output for non-Nx commands in Nx Cloud. Check out https://nx.dev/nx-cloud/set-up/record-commands for more information.
## 13.2.1 ### 13.2.1
- Fix: Newer version of chalk was required, so the package didn't work with older versions of Nx. - Fix: Newer version of chalk was required, so the package didn't work with older versions of Nx.
- Feat: Prepare the package to work with Nx 13.10.0 - Feat: Prepare the package to work with Nx 13.10.0
## 13.0.3 ### 13.0.3
Cleanup: Handle issues with the network and the api in a consistent fashion. Cleanup: Handle issues with the network and the api in a consistent fashion.
## 13.0.1 ### 13.0.1
- Fix: Print detailed errors when an agent is not able to upload file artifacts. - Fix: Print detailed errors when an agent is not able to upload file artifacts.
## 13.0.0 ### 13.0.0
- Feat: Support Nx 13.3 new life cycle API - Feat: Support Nx 13.3 new life cycle API
## 12.5.2 ### 12.5.2
- Feat: GitHub Actions handle DTE reruns without requiring `npx nx-cloud start-ci-run` - Feat: GitHub Actions handle DTE reruns without requiring `npx nx-cloud start-ci-run`
## 12.5.1 ### 12.5.1
- Fix: DTE main job properly copies files after DTE is finished - Fix: DTE main job properly copies files after DTE is finished
- Fix: Increased Node version compatibility for DTE Agents - Fix: Increased Node version compatibility for DTE Agents
## 12.5.0 ### 12.5.0
- Fix: Correctly print unexpected exceptions - Fix: Correctly print unexpected exceptions
- Fix: Gracefully handle the case when tasks-hashes are missing - Fix: Gracefully handle the case when tasks-hashes are missing
- Fix: Agents should wait for the main job to start a rerun of a run group - Fix: Agents should wait for the main job to start a rerun of a run group
- Fix: Retry requests if we receive a 503 - Fix: Retry requests if we receive a 503
## 12.3.13 ### 12.3.13
- Fix: DTE could get stuck when trying to execute tasks with different configurations - Fix: DTE could get stuck when trying to execute tasks with different configurations
# Docker Containers ## Docker Containers
## 2306.01.2.patch4 ### 2306.01.2.patch4
- Fixes an issue with new licenses expiring sooner than original end date - Fixes an issue with new licenses expiring sooner than original end date
## 2306.01.2.patch3 ### 2306.01.2.patch3
- Fixes an issue with multiple admin organizations being created on new installations - Fixes an issue with multiple admin organizations being created on new installations
- Fixes an issue where Enterprise licenses could not be applied on some new orgs - Fixes an issue where Enterprise licenses could not be applied on some new orgs
## 2306.01.2.patch2 ### 2306.01.2.patch2
- Fixes an issue with the `single-image` container where the aggregation would block the API from starting up - Fixes an issue with the `single-image` container where the aggregation would block the API from starting up
## 2306.01.2.patch1 ### 2306.01.2.patch1
- Fixes an issue where admin users were not being created on new installations. - Fixes an issue where admin users were not being created on new installations.
## 2306.01.2 ### 2306.01.2
This is one of our biggest NxCloud On-Prem releases. It also marks a change in our release process which will be explained at the end. This is one of our biggest NxCloud On-Prem releases. It also marks a change in our release process which will be explained at the end.
#### Brand new UI ##### Brand new UI
A few months ago we announced a complete re-design of the NxCloud UI! It's faster, easier to use and pleasant to look at! We're now bringing this to On-Prem users as well: A few months ago we announced a complete re-design of the NxCloud UI! It's faster, easier to use and pleasant to look at! We're now bringing this to On-Prem users as well:
You can read more about it in our [announcement blog post](https://blog.nrwl.io/nx-cloud-3-0-faster-more-efficient-modernized-36ac5ae33b86). You can read more about it in our [announcement blog post](https://blog.nrwl.io/nx-cloud-3-0-faster-more-efficient-modernized-36ac5ae33b86).
#### Pricing updates ##### Pricing updates
While before we provided you with a separate coupon for each workspace, we have now changed to "organization-wide licenses": you receive a single coupon for your whole organization, that gives you unlimited access for the agreed number of workspaces. You are then free to delete, create and re-shuffle your workspaces as often as you want without requiring new coupons for us (as long as you stay within your limit of workspaces). While before we provided you with a separate coupon for each workspace, we have now changed to "organization-wide licenses": you receive a single coupon for your whole organization, that gives you unlimited access for the agreed number of workspaces. You are then free to delete, create and re-shuffle your workspaces as often as you want without requiring new coupons for us (as long as you stay within your limit of workspaces).
You will see some updates in the UI to reflect this, however, **you don't need to do anything once you update your images!** We'll automatically migrate you to this, based on your current number of enabled workspaces! You will see some updates in the UI to reflect this, however, **you don't need to do anything once you update your images!** We'll automatically migrate you to this, based on your current number of enabled workspaces!
#### Proxy updates ##### Proxy updates
One of the features of NxCloud is its integrations with your repository hosting solution. When you open up a Pull Request, you can configure NxCloud to post a comment to it once your CI has finished running, with a summary of all the tasks that succeeded and failed on that code change, and a link to your branch on NxCloud so you can further analyse your run. Your developers save time, and allows them to skip digging through long CI logs. One of the features of NxCloud is its integrations with your repository hosting solution. When you open up a Pull Request, you can configure NxCloud to post a comment to it once your CI has finished running, with a summary of all the tasks that succeeded and failed on that code change, and a link to your branch on NxCloud so you can further analyse your run. Your developers save time, and allows them to skip digging through long CI logs.
@ -141,7 +143,7 @@ Before, if you had a self-hosted instance of Github, Gitlab or Bitbucket, calls
[We've also made updates to the runner, to support any internal proxies you might have within your intranet.](https://github.com/nrwl/nx-cloud-helm/blob/main/PROXY-GUIDE.md#supporting-self-signed-ssl-certificates) [We've also made updates to the runner, to support any internal proxies you might have within your intranet.](https://github.com/nrwl/nx-cloud-helm/blob/main/PROXY-GUIDE.md#supporting-self-signed-ssl-certificates)
#### DTE performance ##### DTE performance
We completely re-wrote our Task Distribution engine, which should result in much fewer errors due to agent timeouts, increased performance and more deterministic task distribution. We completely re-wrote our Task Distribution engine, which should result in much fewer errors due to agent timeouts, increased performance and more deterministic task distribution.
@ -149,18 +151,18 @@ We've also added a new internal task queueing system, which should further impro
You can read more about the recent DTE improvements in our [NxCloud 3.0 blog post](https://blog.nrwl.io/nx-cloud-3-0-faster-more-efficient-modernized-36ac5ae33b86). You can read more about the recent DTE improvements in our [NxCloud 3.0 blog post](https://blog.nrwl.io/nx-cloud-3-0-faster-more-efficient-modernized-36ac5ae33b86).
#### Misc updates ##### Misc updates
- We have fixed issues related to OpenShift deployments. [Special thanks to minijus](https://github.com/nrwl/nx-cloud-helm/pull/32) for his work on the Helm charts and helping us test the changes. - We have fixed issues related to OpenShift deployments. [Special thanks to minijus](https://github.com/nrwl/nx-cloud-helm/pull/32) for his work on the Helm charts and helping us test the changes.
#### Breaking changes ##### Breaking changes
NxCloud uses MongoDB internally as its data store. While we've always used Mongo 4.2, in the latest release we started targetting Mongo 6.0. It's a much lighter process, with improved performance, and quicker reads and writes. NxCloud uses MongoDB internally as its data store. While we've always used Mongo 4.2, in the latest release we started targetting Mongo 6.0. It's a much lighter process, with improved performance, and quicker reads and writes.
While you can still upgrade to this new image even if you are on Mongo 4.2 (nothing will break), **we strongly recommend you upgrade your Database to Mongo 6.0 to make sure nothing breaks in the future.** [We wrote a full guide on how you can approach the upgrade here](https://github.com/nrwl/nx-cloud-helm/blob/main/MONGO-OPERATOR-GUIDE.md#upgrading-to-mongo-6). While you can still upgrade to this new image even if you are on Mongo 4.2 (nothing will break), **we strongly recommend you upgrade your Database to Mongo 6.0 to make sure nothing breaks in the future.** [We wrote a full guide on how you can approach the upgrade here](https://github.com/nrwl/nx-cloud-helm/blob/main/MONGO-OPERATOR-GUIDE.md#upgrading-to-mongo-6).
If you need assistance, please get in touch at [cloud-support@nrwl.io](mailto:cloud-support@nrwl.io). If you need assistance, please get in touch at [cloud-support@nrwl.io](mailto:cloud-support@nrwl.io).
##### Migration from Community Edition to Enterprise ###### Migration from Community Edition to Enterprise
On May 16th, 2023 we announced our plans to sunset the Community Edition of NxCloud On-Prem to align with our new pricing plans. If you are on the Community Edition, please follow these steps to migrate: On May 16th, 2023 we announced our plans to sunset the Community Edition of NxCloud On-Prem to align with our new pricing plans. If you are on the Community Edition, please follow these steps to migrate:
@ -168,7 +170,7 @@ On May 16th, 2023 we announced our plans to sunset the Community Edition of NxCl
2. Switch to private Enterprise by setting `NX_CLOUD_MODE=private-enterprise` (or `mode: 'private-enterprise'` if using Helm). 2. Switch to private Enterprise by setting `NX_CLOUD_MODE=private-enterprise` (or `mode: 'private-enterprise'` if using Helm).
3. Reach out to us at [cloud-support@nrwl.io](mailto:cloud-support@nrwl.io). You will get a FREE, unlimited-use coupon for the next 3 months so you can trial Nx Enterprise. 3. Reach out to us at [cloud-support@nrwl.io](mailto:cloud-support@nrwl.io). You will get a FREE, unlimited-use coupon for the next 3 months so you can trial Nx Enterprise.
#### New release process ##### New release process
With this update, we are also changing our release process: With this update, we are also changing our release process:
@ -179,39 +181,39 @@ With this update, we are also changing our release process:
Any questions at all or to report issues with the new release [please get in touch!](mailto:cloud-support@nrwl.io) Any questions at all or to report issues with the new release [please get in touch!](mailto:cloud-support@nrwl.io)
## 13-02-2023T23-45-24 ### 13-02-2023T23-45-24
- Feat: Targettable agents for DTE. You can now ask specific agents to pick up specific tasks (via `--targets - Feat: Targettable agents for DTE. You can now ask specific agents to pick up specific tasks (via `--targets
- Fix: DTE fixes for 404 not found artefacts errors - Fix: DTE fixes for 404 not found artefacts errors
- Fix: issue when using Github integration with self-hosted Github instances - Fix: issue when using Github integration with self-hosted Github instances
## 26-01-2023T21-22-48 ### 26-01-2023T21-22-48
- Misc: Fixes to the Gitlab integration - Misc: Fixes to the Gitlab integration
## 05-01-2023T17-53-45 ### 05-01-2023T17-53-45
- Misc: This release contains small bug fixes and UI improvements. - Misc: This release contains small bug fixes and UI improvements.
## 14-12-2022T19-43-44 ### 14-12-2022T19-43-44
- Feat: IAM Role Auth. We have now deprecated "aws_access_key_id" and "aws_access_key_secret" in favor of service accounts and IAM roles for accessing AWS resources. See the [new guide here](https://github.com/nrwl/nx-cloud-helm/blob/main/aws-guide/AWS-GUIDE.md) for details. - Feat: IAM Role Auth. We have now deprecated "aws_access_key_id" and "aws_access_key_secret" in favor of service accounts and IAM roles for accessing AWS resources. See the [new guide here](https://github.com/nrwl/nx-cloud-helm/blob/main/aws-guide/AWS-GUIDE.md) for details.
## 13-10-2022T16-45-30 ### 13-10-2022T16-45-30
- Misc: This release mostly contains improvements that apply to the Public SASS version of NxCloud. No significant changes for the On-Prem version. - Misc: This release mostly contains improvements that apply to the Public SASS version of NxCloud. No significant changes for the On-Prem version.
## 13-10-2022T16-45-30 ### 13-10-2022T16-45-30
- Feat: Private Cloud now runs completely as Kubernetes cluster. See the [Helm example repo](https://github.com/nrwl/nx-cloud-helm) for more details - Feat: Private Cloud now runs completely as Kubernetes cluster. See the [Helm example repo](https://github.com/nrwl/nx-cloud-helm) for more details
## 05-08-2022T15-42-20 ### 05-08-2022T15-42-20
- Fix: issue with retrieving hashes during reads - Fix: issue with retrieving hashes during reads
- Feat: added route to display container version at `/version` - Feat: added route to display container version at `/version`
- Misc: forward api errors to stderr so k8s clusters can process them better - Misc: forward api errors to stderr so k8s clusters can process them better
## 02-08-2022T16-11-36 ### 02-08-2022T16-11-36
- Note: The version naming scheme for the containers was changed to better track date/time of releases and to support embedding of the version inside the web UI - Note: The version naming scheme for the containers was changed to better track date/time of releases and to support embedding of the version inside the web UI
- Feat: view the container version under the `/errors` route - Feat: view the container version under the `/errors` route
@ -219,20 +221,20 @@ Any questions at all or to report issues with the new release [please get in tou
- Feat: New system-ui font scheme - Feat: New system-ui font scheme
- Fix: branch screen sorting performance improvements - Fix: branch screen sorting performance improvements
## 2.4.11 ### 2.4.11
- Fixes an intermittent container start-up issue when running a self-contained Mongo instance - Fixes an intermittent container start-up issue when running a self-contained Mongo instance
- Fixes an issue with the self-hosted file-server where it would fail to create the initial directories - Fixes an issue with the self-hosted file-server where it would fail to create the initial directories
## 2.4.10 ### 2.4.10
- Fix an issue with the admin password not being set correctly - Fix an issue with the admin password not being set correctly
## 2.4.9 ### 2.4.9
- Align all NxCloud images to this version. No new fixes or features included. - Align all NxCloud images to this version. No new fixes or features included.
## 2.4.8 ### 2.4.8
{% callout type="caution" title="IMPORTANT" %} {% callout type="caution" title="IMPORTANT" %}
The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you are running a Community version of the container, you will need to make sure the `NX_CLOUD_MODE=private-community` is explicitly set (otherwise your container will fail to start-up). The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you are running a Community version of the container, you will need to make sure the `NX_CLOUD_MODE=private-community` is explicitly set (otherwise your container will fail to start-up).
@ -243,44 +245,44 @@ The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you
- Fix: issue with billing page when multiple access tokens were attached to the same org - Fix: issue with billing page when multiple access tokens were attached to the same org
- Fix: multiple Mongo DBs used to be created if a default DB was not provided in the connection string. Now it always defaults to the provided `NX_CLOUD_MONGO_DB_NAME` - Fix: multiple Mongo DBs used to be created if a default DB was not provided in the connection string. Now it always defaults to the provided `NX_CLOUD_MONGO_DB_NAME`
## 2.4.7 ### 2.4.7
- Misc: performance improvements to DB indexes - Misc: performance improvements to DB indexes
- Misc: improvements to hash differ to use regex - Misc: improvements to hash differ to use regex
- Misc: export more collections for debug purposes (workspaces and organizations) - Misc: export more collections for debug purposes (workspaces and organizations)
## 2.4.6 ### 2.4.6
- Fix: issue with navigating to organizations/workspaces in the web app - Fix: issue with navigating to organizations/workspaces in the web app
## 2.4.5 ### 2.4.5
- Feat: filters to branch and run list pages - Feat: filters to branch and run list pages
- Fix: improved `MD5` cache artifact archiving - Fix: improved `MD5` cache artifact archiving
- Misc: various UI and UX improvements to the NxCloud dashboards - Misc: various UI and UX improvements to the NxCloud dashboards
## 2.4.4 ### 2.4.4
- Fix: Missing artefact retrieval error when using read-tokens - Fix: Missing artefact retrieval error when using read-tokens
- Fix: Performance improvements to the branch page and run groups sorting - Fix: Performance improvements to the branch page and run groups sorting
- Fix: better handling of artefact `.tar` archiving - Fix: better handling of artefact `.tar` archiving
## 2.4.3 ### 2.4.3
- Feat: Billing page messaging improvements - Feat: Billing page messaging improvements
- Fix: runs sorting on branch page - Fix: runs sorting on branch page
## 2.4.2 ### 2.4.2
- Feat: DTE post-run report - Feat: DTE post-run report
- Feat: Hash Detail tool flow improvements - Feat: Hash Detail tool flow improvements
## 2.4.1 ### 2.4.1
- Feat: Admins can now easily export debug info for error investigation - Feat: Admins can now easily export debug info for error investigation
- Fix: branch screen run group sorting - Fix: branch screen run group sorting
## 2.4.0 ### 2.4.0
- Feat: [GitLab Auth Support](https://nx.app/docs/private-cloud-gitlab-auth)/private-cloud-gitlab-auth - Feat: [GitLab Auth Support](https://nx.app/docs/private-cloud-gitlab-auth)/private-cloud-gitlab-auth
- Feat: Hash diffing tool improvements - Feat: Hash diffing tool improvements
@ -292,57 +294,57 @@ The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you
- Fix: handle DTEs with no tasks - Fix: handle DTEs with no tasks
- Fix: await process checkout sessions - Fix: await process checkout sessions
## 2.3.1 ### 2.3.1
- Feat: Increase file-server default cached artifact limit. If you are not using an external file storage (such as S3), then the cached assets will now be kept by default from 2 weeks to 4 weeks, increasing the chance of cache hits. - Feat: Increase file-server default cached artifact limit. If you are not using an external file storage (such as S3), then the cached assets will now be kept by default from 2 weeks to 4 weeks, increasing the chance of cache hits.
- Feat: "Download cache usage" data from the "Time saved" workspace page - Feat: "Download cache usage" data from the "Time saved" workspace page
## 2.3.0 ### 2.3.0
- Feat: GitHub Integration - no token is now necessary in "`nx.json`" for the GitHub integration to work (you still need to provide as an env var for caching to work). To connect your workspace to GitHub without an access token in "`nx.json`" just pass in the "`NX_CLOUD_INTEGRATION_DEFAULT_WORKSPACE_ID=<your-workspace-id>`" env var - Feat: GitHub Integration - no token is now necessary in "`nx.json`" for the GitHub integration to work (you still need to provide as an env var for caching to work). To connect your workspace to GitHub without an access token in "`nx.json`" just pass in the "`NX_CLOUD_INTEGRATION_DEFAULT_WORKSPACE_ID=<your-workspace-id>`" env var
- Misc: better error handling (report less false positives) - Misc: better error handling (report less false positives)
- Fix: Scheduled tasks locking - Fix: Scheduled tasks locking
## 2.2.16 ### 2.2.16
- Misc: DB performance improvements (old records clean-up aggregator, indexes etc.) - Misc: DB performance improvements (old records clean-up aggregator, indexes etc.)
## 2.2.15 ### 2.2.15
- Feat: Add options to control database load - Feat: Add options to control database load
- Fix: Better exception handling in the API - Fix: Better exception handling in the API
## 2.2.14 ### 2.2.14
- Feat: Optimize event processing to increase the throughput of workspaces with a very high number of agents. - Feat: Optimize event processing to increase the throughput of workspaces with a very high number of agents.
- Fix: Gracefully recover when stats aggregation fails - Fix: Gracefully recover when stats aggregation fails
## 2.2.13 ### 2.2.13
- Feat: Hash diffing tool enhancements - Feat: Hash diffing tool enhancements
## 2.2.12 ### 2.2.12
- Feat: DTE visualisation improvements for larger workspaces - Feat: DTE visualisation improvements for larger workspaces
- Fix: billing page not displaying subscriptions for Private Community - Fix: billing page not displaying subscriptions for Private Community
## 2.2.11 ### 2.2.11
- Feat: Better error handling for scheduled tasks - Feat: Better error handling for scheduled tasks
- Fix: branch screen not loading - Fix: branch screen not loading
## 2.2.10 ### 2.2.10
- Feat: Various UI improvements to the NxCloud screens - Feat: Various UI improvements to the NxCloud screens
- Feat: Hash detail diff tool - Feat: Hash detail diff tool
- Feat: GitHub app comment revamp - Feat: GitHub app comment revamp
- Feat: DTE visualisation - Feat: DTE visualisation
## 2.2.9 ### 2.2.9
- Fix: DTE bug fixes caused by incorrectly batched tasks - Fix: DTE bug fixes caused by incorrectly batched tasks
## 2.2.8 ### 2.2.8
- Fix: various DTE bug fixes - Fix: various DTE bug fixes
- Feat: Add `NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT` env var for more explicitly optimising DTEs - Feat: Add `NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT` env var for more explicitly optimising DTEs
@ -354,20 +356,20 @@ The default container mode has changed from `COMMUNITY` to `ENTERPRISE`. If you
- Feat: billing estimator (on billing page) - Feat: billing estimator (on billing page)
- Fix: ignore ending slash on `NX_CLOUD_APP_URL` (in case it's added by mistake) - Fix: ignore ending slash on `NX_CLOUD_APP_URL` (in case it's added by mistake)
## 2.2.7 ### 2.2.7
- Feat: `VERBOSE=1` env variable option to output extra information during container initialisation - Feat: `VERBOSE=1` env variable option to output extra information during container initialisation
- Feat: `MONGO_REPAIR=1` env variable option to trigger a [Mongo Repair](https://docs.mongodb.com/manual/tutorial/recover-data-following-unexpected-shutdown/) if the container data gets corrupted - Feat: `MONGO_REPAIR=1` env variable option to trigger a [Mongo Repair](https://docs.mongodb.com/manual/tutorial/recover-data-following-unexpected-shutdown/) if the container data gets corrupted
## 2.2.3 ### 2.2.3
- Fix: Reset the memory limits to best work on an instance with 8GB of RAM. - Fix: Reset the memory limits to best work on an instance with 8GB of RAM.
- Fix: Set the default `NX_CLOUD_MODE` to "community". - Fix: Set the default `NX_CLOUD_MODE` to "community".
## 2.2 ### 2.2
- [Nx Cloud 2.2](https://blog.nrwl.io/%EF%B8%8F-nx-cloud-2-2-%EF%B8%8F-b7656ed5ce7c) - [Nx Cloud 2.2](https://blog.nrwl.io/%EF%B8%8F-nx-cloud-2-2-%EF%B8%8F-b7656ed5ce7c)
## 2.0 ### 2.0
- [Overview of Nx Cloud 2.0](https://blog.nrwl.io/introducing-nx-cloud-2-0-f1e5c2002a65) - [Overview of Nx Cloud 2.0](https://blog.nrwl.io/introducing-nx-cloud-2-0-f1e5c2002a65)

View File

@ -1,9 +1,9 @@
{ {
"extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], "extends": ["plugin:playwright/recommended", "../../.eslintrc.json"],
"ignorePatterns": ["!**/*"], "ignorePatterns": ["!**/*"],
"overrides": [ "overrides": [
{ {
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"], "files": ["src/**/*.{ts,js,tsx,jsx}"],
"rules": {} "rules": {}
} }
] ]

View File

@ -1,26 +0,0 @@
import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset';
import { defineConfig } from 'cypress';
const cypressJsonConfig = {
fileServerFolder: '.',
fixturesFolder: './src/fixtures',
video: true,
videosFolder: '../../dist/cypress/apps/nx-dev-e2e/videos',
screenshotsFolder: '../../dist/cypress/apps/nx-dev-e2e/screenshots',
chromeWebSecurity: false,
specPattern: 'src/e2e/**/*.cy.{js,jsx,ts,tsx}',
supportFile: 'src/support/e2e.ts',
};
export default defineConfig({
e2e: {
...nxE2EPreset(__dirname),
...cypressJsonConfig,
/**
* TODO(@nx/cypress): In Cypress v12,the testIsolation option is turned on by default.
* This can cause tests to start breaking where not indended.
* You should consider enabling this once you verify tests do not depend on each other
* More Info: https://docs.cypress.io/guides/references/migration-guide#Test-Isolation
**/
testIsolation: false,
},
});

View File

@ -0,0 +1,40 @@
import { defineConfig } from '@playwright/test';
import { nxE2EPreset } from '@nx/playwright/preset';
import { workspaceRoot } from '@nx/devkit';
// For CI, you may want to set BASE_URL to the deployed application.
const baseURL = process.env['BASE_URL'] || 'http://localhost:4200';
const preset = nxE2EPreset(__filename, { testDir: './src' });
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// require('dotenv').config();
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
...preset,
// CI default is 'dot', which doesn't show error output in CI.
// use list so errors are visible in CI logs
reporter: process.env.CI ? 'list' : preset.reporter,
// how long the entire suite can run, prevent CI from timing out
globalTimeout: process.env.CI ? 1_800_000 : undefined,
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
baseURL,
// how long each page.goto can take before timing out
navigationTimeout: process.env.CI ? 30_000 : undefined,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},
/* Run your local dev server before starting the tests */
webServer: {
command: 'pnpm exec nx run nx-dev:serve:production',
url: 'http://localhost:4200',
reuseExistingServer: !process.env.CI,
cwd: workspaceRoot,
},
});

View File

@ -4,6 +4,7 @@
"sourceRoot": "nx-dev/nx-dev-e2e/src", "sourceRoot": "nx-dev/nx-dev-e2e/src",
"projectType": "application", "projectType": "application",
"targets": { "targets": {
"lint": {},
"e2e": { "e2e": {
"dependsOn": [ "dependsOn": [
{ {
@ -11,14 +12,12 @@
"dependencies": true "dependencies": true
} }
], ],
"executor": "@nx/cypress:cypress", "executor": "@nx/playwright:playwright",
"outputs": ["{workspaceRoot}/dist/.playwright/nx-dev/nx-dev-e2e"],
"options": { "options": {
"cypressConfig": "nx-dev/nx-dev-e2e/cypress.config.ts", "config": "nx-dev/nx-dev-e2e/playwright.config.ts"
"devServerTarget": "nx-dev:serve:production", }
"testingType": "e2e"
} }
},
"lint": {}
}, },
"tags": ["scope:nx-dev", "type:e2e"], "tags": ["scope:nx-dev", "type:e2e"],
"implicitDependencies": ["nx-dev"] "implicitDependencies": ["nx-dev"]

View File

@ -0,0 +1,61 @@
import { assertTextOnPage } from './helpers';
import { Page, test, expect } from '@playwright/test';
const pages: Array<{ title: string; path: string }> = [
{ title: 'create-nx-workspace', path: '/cli/create-nx-workspace' },
{ title: 'generate', path: '/cli/generate' },
{ title: 'run', path: '/cli/run' },
{ title: 'daemon', path: '/cli/daemon' },
{ title: 'graph', path: '/cli/dep-graph' },
{ title: 'run-many', path: '/cli/run-many' },
{ title: 'affected', path: '/cli/affected' },
{ title: 'affected:graph', path: '/cli/affected-dep-graph' },
{ title: 'print-affected', path: '/cli/print-affected' },
{ title: 'format:check', path: '/cli/format-check' },
{ title: 'format:write', path: '/cli/format-write' },
{ title: 'migrate', path: '/cli/migrate' },
{ title: 'report', path: '/cli/report' },
{ title: 'list', path: '/cli/list' },
{ title: 'workspace-lint', path: '/cli/workspace-lint' },
{ title: 'workspace-generator', path: '/cli/workspace-generator' },
{ title: 'connect', path: '/cli/connect-to-nx-cloud' },
{ title: 'reset', path: '/cli/reset' },
{ title: 'Storybook', path: '/storybook/overview-react' },
{ title: 'Storybook', path: '/storybook/overview-angular' },
{
title: 'Nx React Storybook Addon',
path: '/storybook/migrate-webpack-final-react',
},
{
title: 'Storybook Migration to webpackFinal',
path: '/storybook/migrate-webpack-final-angular',
},
{
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
path: '/storybook/upgrade-storybook-v6-react',
},
{
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
path: '/storybook/upgrade-storybook-v6-angular',
},
{
title: 'Setting up Storybook Composition with Nx',
path: '/storybook/storybook-composition-setup',
},
{
title: '@nx/devkit',
path: '/devkit/index',
},
{
title: '@nx/devkit',
path: '/devkit/ngcli_adapter',
},
];
/**
* Asserting all the additional API references pages are accounted for and accessible.
* Generation of the pages is manual since we want to make sure the change is intended.
*/
test.describe('nx-dev: Additional API references section', () => {
pages.forEach((page) => assertTextOnPage(page.path, page.title));
});

View File

@ -0,0 +1,7 @@
import { test, expect } from '@playwright/test';
test('should display the primary heading', async ({ page }) => {
await page.goto('/');
const heading = page.locator('[data-cy="primary-heading"]');
await expect(heading).toContainText('Smart, FastExtensibleBuild System');
});

View File

@ -1,58 +0,0 @@
import { assertTextOnPage } from './helpers';
/**
* Asserting all the additional API references pages are accounted for and accessible.
* Generation of the pages is manual since we want to make sure the change is intended.
*/
describe('nx-dev: Additional API references section', () => {
(<{ title: string; path: string }[]>[
{ title: 'create-nx-workspace', path: '/cli/create-nx-workspace' },
{ title: 'generate', path: '/cli/generate' },
{ title: 'run', path: '/cli/run' },
{ title: 'daemon', path: '/cli/daemon' },
{ title: 'graph', path: '/cli/dep-graph' },
{ title: 'run-many', path: '/cli/run-many' },
{ title: 'affected', path: '/cli/affected' },
{ title: 'affected:graph', path: '/cli/affected-dep-graph' },
{ title: 'print-affected', path: '/cli/print-affected' },
{ title: 'format:check', path: '/cli/format-check' },
{ title: 'format:write', path: '/cli/format-write' },
{ title: 'migrate', path: '/cli/migrate' },
{ title: 'report', path: '/cli/report' },
{ title: 'list', path: '/cli/list' },
{ title: 'workspace-lint', path: '/cli/workspace-lint' },
{ title: 'workspace-generator', path: '/cli/workspace-generator' },
{ title: 'connect', path: '/cli/connect-to-nx-cloud' },
{ title: 'reset', path: '/cli/reset' },
{ title: 'Storybook', path: '/storybook/overview-react' },
{ title: 'Storybook', path: '/storybook/overview-angular' },
{
title: 'Nx React Storybook Addon',
path: '/storybook/migrate-webpack-final-react',
},
{
title: 'Storybook Migration to webpackFinal',
path: '/storybook/migrate-webpack-final-angular',
},
{
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
path: '/storybook/upgrade-storybook-v6-react',
},
{
title: 'Upgrading to Storybook 6 (and Nx versions >10.1.x and <14.0.0)',
path: '/storybook/upgrade-storybook-v6-angular',
},
{
title: 'Setting up Storybook Composition with Nx',
path: '/storybook/storybook-composition-setup',
},
{
title: '@nx/devkit',
path: '/devkit/index',
},
{
title: '@nx/devkit',
path: '/devkit/ngcli_adapter',
},
]).forEach((page) => assertTextOnPage(page.path, page.title));
});

View File

@ -1,10 +0,0 @@
describe('nx-dev', () => {
beforeEach(() => cy.visit('/'));
it('should display the primary heading', () => {
cy.get('[data-cy="primary-heading"]').should(
'contain',
'Smart, FastExtensibleBuild System'
);
});
});

View File

@ -1,18 +0,0 @@
/**
* Assert a text is present on the visited page.
* @param path
* @param title
* @param selector
*/
export function assertTextOnPage(
path: string,
title: string,
selector: string = 'h1'
): void {
describe(path, () =>
it(`should display "${title}"`, () => {
cy.visit(path);
cy.get(selector).should('contain.text', title);
})
);
}

View File

@ -1,87 +0,0 @@
import { assertTextOnPage } from './helpers';
/**
* Asserting all the additional API references pages are accounted for and accessible.
* Generation of the pages is manual since we want to make sure the change is intended.
*/
describe('nx-dev: Nx Cloud section', () => {
(<{ title: string; path: string }[]>[
{ title: 'What is Nx Cloud?', path: '/nx-cloud/intro/what-is-nx-cloud' },
{
title: 'Recording Non-Nx Commands',
path: '/nx-cloud/set-up/record-commands',
},
{
title: 'Enable GitHub PR Integration',
path: '/nx-cloud/set-up/github',
},
{
title: 'User Management',
path: '/nx-cloud/account/users',
},
{
title: 'Connecting Nx Cloud to your existing Google identity provider',
path: '/nx-cloud/account/google-auth',
},
{
title: 'Access Tokens',
path: '/nx-cloud/account/access-tokens',
},
{
title: 'Security Scenarios',
path: '/nx-cloud/account/scenarios',
},
{
title: 'End to End Encryption',
path: '/nx-cloud/account/encryption',
},
{
title: 'Running Nx Cloud Enterprise',
path: '/nx-cloud/private-cloud/get-started',
},
{
title: 'Auth (Basic)',
path: '/nx-cloud/private-cloud/auth-single-admin',
},
{
title: 'GitHub Auth',
path: '/nx-cloud/private-cloud/auth-github',
},
{
title: 'GitLab Auth',
path: '/nx-cloud/private-cloud/auth-gitlab',
},
{
title: 'Setting up a dedicated NxCloud VM',
path: '/nx-cloud/private-cloud/ami-setup',
},
{
title: 'BitBucket Auth',
path: '/nx-cloud/private-cloud/auth-bitbucket',
},
{
title: 'SAML Auth',
path: '/nx-cloud/private-cloud/auth-saml',
},
{
title: 'Advanced Configuration',
path: '/nx-cloud/private-cloud/advanced-config',
},
{
title: 'Configuring the Cloud Runner / Nx CLI',
path: '/nx-cloud/reference/config',
},
{
title: 'Environment Variables',
path: '/nx-cloud/reference/env-vars',
},
{
title: 'Nx Cloud Server API Reference',
path: '/nx-cloud/reference/server-api',
},
{
title: 'nx-cloud - Release notes',
path: '/nx-cloud/reference/release-notes',
},
]).forEach((page) => assertTextOnPage(page.path, page.title));
});

View File

@ -1,475 +0,0 @@
import { assertTextOnPage } from './helpers';
/**
* Asserting all the packages pages are accounted for and accessible.
* Generation of the pages is manual since we want to make sure the change is intended.
*/
describe('nx-dev: Packages Section', () => {
(<{ title: string; path: string }[]>[
{ title: '@nx/angular', path: '/packages/angular' },
{
title: '@nx/angular:add-linting',
path: '/packages/angular/generators/add-linting',
},
{
title: '@nx/angular:application',
path: '/packages/angular/generators/application',
},
{
title: '@nx/angular:component',
path: '/packages/angular/generators/component',
},
{
title: '@nx/angular:component-cypress-spec',
path: '/packages/angular/generators/component-cypress-spec',
},
{
title: '@nx/angular:component-story',
path: '/packages/angular/generators/component-story',
},
{
title: '@nx/angular:convert-tslint-to-eslint',
path: '/packages/angular/generators/convert-tslint-to-eslint',
},
{ title: '@nx/angular:init', path: '/packages/angular/generators/init' },
{
title: '@nx/angular:library',
path: '/packages/angular/generators/library',
},
{
title: '@nx/angular:library-secondary-entry-point',
path: '/packages/angular/generators/library-secondary-entry-point',
},
{
title: '@nx/angular:remote',
path: '/packages/angular/generators/remote',
},
{ title: '@nx/angular:move', path: '/packages/angular/generators/move' },
{
title: '@nx/angular:convert-to-with-mf',
path: '/packages/angular/generators/convert-to-with-mf',
},
{ title: '@nx/angular:host', path: '/packages/angular/generators/host' },
{
title: '@nx/angular:ng-add',
path: '/packages/angular/generators/ng-add',
},
{ title: '@nx/angular:ngrx', path: '/packages/angular/generators/ngrx' },
{ title: '@nx/angular:scam', path: '/packages/angular/generators/scam' },
{
title: '@nx/angular:scam-directive',
path: '/packages/angular/generators/scam-directive',
},
{
title: '@nx/angular:scam-pipe',
path: '/packages/angular/generators/scam-pipe',
},
{
title: '@nx/angular:setup-mf',
path: '/packages/angular/generators/setup-mf',
},
{
title: '@nx/angular:setup-tailwind',
path: '/packages/angular/generators/setup-tailwind',
},
{
title: '@nx/angular:stories',
path: '/packages/angular/generators/stories',
},
{
title: '@nx/',
path: '/packages/angular/generators/storybook-configuration',
},
{
title: '@nx/angular:web-worker',
path: '/packages/angular/generators/web-worker',
},
{
title: '@nx/angular:delegate-build',
path: '/packages/angular/executors/delegate-build',
},
{
title: '@nx/angular:ng-packagr-lite',
path: '/packages/angular/executors/ng-packagr-lite',
},
{
title: '@nx/angular:package',
path: '/packages/angular/executors/package',
},
{ title: 'create-nx-plugin', path: '/packages/create-nx-plugin' },
{
title: 'create-nx-workspace',
path: '/packages/create-nx-workspace',
},
{ title: '@nx/cypress', path: '/packages/cypress' },
{ title: '@nx/cypress:init', path: '/packages/cypress/generators/init' },
{
title: '@nx/cypress:cypress-project',
path: '/packages/cypress/generators/cypress-project',
},
{
title: '@nx/cypress:cypress',
path: '/packages/cypress/executors/cypress',
},
{ title: '@nx/detox', path: '/packages/detox' },
{ title: '@nx/detox:init', path: '/packages/detox/generators/init' },
{
title: '@nx/detox:application',
path: '/packages/detox/generators/application',
},
{ title: '@nx/detox:build', path: '/packages/detox/executors/build' },
{ title: '@nx/detox:test', path: '/packages/detox/executors/test' },
{ title: '@nx/devkit', path: '/packages/devkit' },
{ title: '@nx/esbuild', path: '/packages/esbuild' },
{
title: '@nx/esbuild:esbuild',
path: '/packages/esbuild/executors/esbuild',
},
{ title: '@nx/eslint-plugin', path: '/packages/eslint-plugin' },
{ title: '@nx/expo', path: '/packages/expo' },
{
title: '@nx/expo:init',
path: '/packages/expo/generators/init',
},
{
title: '@nx/expo:application',
path: '/packages/expo/generators/application',
},
{
title: '@nx/expo:library',
path: '/packages/expo/generators/library',
},
{
title: '@nx/expo:component',
path: '/packages/expo/generators/component',
},
{
title: '@nx/expo:start',
path: '/packages/expo/executors/start',
},
{
title: '@nx/expo:sync-deps',
path: '/packages/expo/executors/sync-deps',
},
{
title: '@nx/expo:ensure-symlink',
path: '/packages/expo/executors/ensure-symlink',
},
{ title: '@nx/express', path: '/packages/express' },
{ title: '@nx/express:init', path: '/packages/express/generators/init' },
{
title: '@nx/express:application',
path: '/packages/express/generators/application',
},
{ title: '@nx/jest', path: '/packages/jest' },
{ title: '@nx/jest:init', path: '/packages/jest/generators/init' },
{
title: '@nx/jest:configuration',
path: '/packages/jest/generators/configuration',
},
{ title: '@nx/jest', path: '/packages/jest/executors/jest' },
{ title: '@nx/js', path: '/packages/js' },
{ title: '@nx/js:library', path: '/packages/js/generators/library' },
{ title: '@nx/js:init', path: '/packages/js/generators/init' },
{
title: '@nx/js:convert-to-swc',
path: '/packages/js/generators/convert-to-swc',
},
{ title: '@nx/js:tsc', path: '/packages/js/executors/tsc' },
{ title: '@nx/js:swc', path: '/packages/js/executors/swc' },
{ title: '@nx/linter', path: '/packages/linter' },
{
title: '@nx/linter:workspace-rules-project',
path: '/packages/linter/generators/workspace-rules-project',
},
{
title: '@nx/linter',
path: '/packages/linter/generators/workspace-rule',
},
{ title: '@nx/linter', path: '/packages/linter/executors/eslint' },
{ title: '@nx/nest', path: '/packages/nest' },
{
title: '@nx/nest:application',
path: '/packages/nest/generators/application',
},
{
title: '@nx/nest:convert-tslint-to-eslint',
path: '/packages/nest/generators/convert-tslint-to-eslint',
},
{ title: '@nx/nest:init', path: '/packages/nest/generators/init' },
{ title: '@nx/nest:library', path: '/packages/nest/generators/library' },
{ title: '@nx/nest:class', path: '/packages/nest/generators/class' },
{
title: '@nx/nest:controller',
path: '/packages/nest/generators/controller',
},
{
title: '@nx/nest:decorator',
path: '/packages/nest/generators/decorator',
},
{ title: '@nx/nest:filter', path: '/packages/nest/generators/filter' },
{ title: '@nx/nest:gateway', path: '/packages/nest/generators/gateway' },
{ title: '@nx/nest:guard', path: '/packages/nest/generators/guard' },
{
title: '@nx/nest:interceptor',
path: '/packages/nest/generators/interceptor',
},
{
title: '@nx/nest:interface',
path: '/packages/nest/generators/interface',
},
{
title: '@nx/nest:middleware',
path: '/packages/nest/generators/middleware',
},
{ title: '@nx/nest:module', path: '/packages/nest/generators/module' },
{ title: '@nx/nest:pipe', path: '/packages/nest/generators/pipe' },
{
title: '@nx/nest:provider',
path: '/packages/nest/generators/provider',
},
{
title: '@nx/nest:resolver',
path: '/packages/nest/generators/resolver',
},
{
title: '@nx/nest:resource',
path: '/packages/nest/generators/resource',
},
{ title: '@nx/nest:service', path: '/packages/nest/generators/service' },
{ title: '@nx/next', path: '/packages/next' },
{ title: '@nx/next:init', path: '/packages/next/generators/init' },
{
title: '@nx/next:application',
path: '/packages/next/generators/application',
},
{ title: '@nx/next:page', path: '/packages/next/generators/page' },
{
title: '@nx/next:component',
path: '/packages/next/generators/component',
},
{ title: '@nx/next:library', path: '/packages/next/generators/library' },
{ title: '@nx/next:build', path: '/packages/next/executors/build' },
{ title: '@nx/next:server', path: '/packages/next/executors/server' },
{ title: '@nx/next:export', path: '/packages/next/executors/export' },
{ title: '@nx/node', path: '/packages/node' },
{ title: '@nx/node:init', path: '/packages/node/generators/init' },
{
title: '@nx/node:application',
path: '/packages/node/generators/application',
},
{ title: '@nx/node:library', path: '/packages/node/generators/library' },
{ title: 'nx', path: '/packages/nx' },
{ title: 'nx:noop', path: '/packages/nx/executors/noop' },
{
title: 'nx:run-commands',
path: '/packages/nx/executors/run-commands',
},
{ title: 'nx:run-script', path: '/packages/nx/executors/run-script' },
{ title: 'plugin', path: '/packages/plugin' },
{
title: '@nx/plugin:plugin',
path: '/packages/plugin/generators/plugin',
},
{
title: '@nx/plugin:e2e-project',
path: '/packages/plugin/generators/e2e-project',
},
{
title: '@nx/plugin:migration',
path: '/packages/plugin/generators/migration',
},
{
title: '@nx/plugin:generator',
path: '/packages/plugin/generators/generator',
},
{
title: '@nx/plugin:executor',
path: '/packages/plugin/generators/executor',
},
{ title: '@nx/plugin:e2e', path: '/packages/plugin/executors/e2e' },
{ title: '@nx/react', path: '/packages/react' },
{ title: '@nx/react:init', path: '/packages/react/generators/init' },
{
title: '@nx/react:application',
path: '/packages/react/generators/application',
},
{
title: '@nx/react:library',
path: '/packages/react/generators/library',
},
{
title: '@nx/react:component',
path: '/packages/react/generators/component',
},
{ title: '@nx/react:redux', path: '/packages/react/generators/redux' },
{
title: '@nx/react:storybook-configuration',
path: '/packages/react/generators/storybook-configuration',
},
{
title: '@nx/react:component-story',
path: '/packages/react/generators/component-story',
},
{
title: '@nx/react:stories',
path: '/packages/react/generators/stories',
},
{
title: '@nx/react:component-cypress-spec',
path: '/packages/react/generators/component-cypress-spec',
},
{ title: '@nx/react:hook', path: '/packages/react/generators/hook' },
{ title: '@nx/react:host', path: '/packages/react/generators/host' },
{ title: '@nx/react:remote', path: '/packages/react/generators/remote' },
{
title: '@nx/react:module-federation-dev-server',
path: '/packages/react/executors/module-federation-dev-server',
},
{ title: '@nx/react-native', path: '/packages/react-native' },
{
title: '@nx/react-native:init',
path: '/packages/react-native/generators/init',
},
{
title: '@nx/react-native:application',
path: '/packages/react-native/generators/application',
},
{
title: '@nx/react-native:library',
path: '/packages/react-native/generators/library',
},
{
title: '@nx/react-native:component',
path: '/packages/react-native/generators/component',
},
{
title: '@nx/',
path: '/packages/react-native/generators/storybook-configuration',
},
{
title: '@nx/react-native:component-story',
path: '/packages/react-native/generators/component-story',
},
{
title: '@nx/react-native:stories',
path: '/packages/react-native/generators/stories',
},
{
title: '@nx/react-native:upgrade-native',
path: '/packages/react-native/generators/upgrade-native',
},
{
title: '@nx/react-native:run-android',
path: '/packages/react-native/executors/run-android',
},
{
title: '@nx/react-native:run-ios',
path: '/packages/react-native/executors/run-ios',
},
{
title: '@nx/react-native:bundle',
path: '/packages/react-native/executors/bundle',
},
{
title: '@nx/react-native:build-android',
path: '/packages/react-native/executors/build-android',
},
{
title: '@nx/react-native:start',
path: '/packages/react-native/executors/start',
},
{
title: '@nx/react-native:sync-deps',
path: '/packages/react-native/executors/sync-deps',
},
{
title: '@nx/react-native:ensure-symlink',
path: '/packages/react-native/executors/ensure-symlink',
},
{
title: '@nx/react-native:storybook',
path: '/packages/react-native/executors/storybook',
},
{ title: '@nx/storybook', path: '/packages/storybook' },
{
title: '@nx/storybook:init',
path: '/packages/storybook/generators/init',
},
{
title: '@nx/storybook:configuration',
path: '/packages/storybook/generators/configuration',
},
{
title: '@nx/storybook:cypress-project',
path: '/packages/storybook/generators/cypress-project',
},
{
title: '@nx/storybook:storybook',
path: '/packages/storybook/executors/storybook',
},
{
title: '@nx/storybook:build',
path: '/packages/storybook/executors/build',
},
{ title: '@nx/web', path: '/packages/web' },
{ title: '@nx/web:init', path: '/packages/web/generators/init' },
{
title: '@nx/web:application',
path: '/packages/web/generators/application',
},
{
title: '@nx/webpack:webpack',
path: '/packages/webpack/executors/webpack',
},
{ title: '@nx/rollup:rollup', path: '/packages/rollup/executors/rollup' },
{
title: '@nx/webpack:dev-server',
path: '/packages/webpack/executors/dev-server',
},
{
title: '@nx/web:file-server',
path: '/packages/web/executors/file-server',
},
{
title: '@nx/workspace:preset',
path: '/packages/workspace/generators/preset',
},
{
title: '@nx/workspace:move',
path: '/packages/workspace/generators/move',
},
{
title: '@nx/workspace:remove',
path: '/packages/workspace/generators/remove',
},
{
title: '@nx/workspace:new',
path: '/packages/workspace/generators/new',
},
{
title: '@nx/workspace:workspace-generator',
path: '/packages/workspace/generators/workspace-generator',
},
{
title: '@nx/workspace:run-command',
path: '/packages/workspace/generators/run-commands',
},
{
title: '@nx/workspace:fix-configuration',
path: '/packages/workspace/generators/fix-configuration',
},
{
title: '@nx/workspace:npm-package',
path: '/packages/workspace/generators/npm-package',
},
{
title: '@nx/workspace:ci-workflow',
path: '/packages/workspace/generators/ci-workflow',
},
{
title: '@nx/workspace:counter',
path: '/packages/workspace/executors/counter',
},
]).forEach((page) => assertTextOnPage(page.path, page.title));
});

View File

@ -1,18 +0,0 @@
import { uniq } from '@nx/e2e/utils';
describe('nx-dev: Recipes pages', () => {
it('should list related recipes based on tags', () => {
const { map, uniq } = Cypress._;
cy.visit('/recipes/other/deno-deploy');
// All text content has to be different
cy.get('[data-document="related"] > article > ul > li').should(($list) => {
const values = map($list, 'innerText');
const distinct = uniq(values);
expect(distinct, 'all strings are different').to.have.length(
values.length
);
});
});
});

View File

@ -0,0 +1,21 @@
import { Page, test, expect } from '@playwright/test';
/**
* Assert a text is present on the visited page.
* @param page
* @param path
* @param title
* @param selector
*/
export function assertTextOnPage(
path: string,
title: string,
selector: string = 'h1'
): void {
test.describe(path, () =>
test(`should display "${title}"`, async ({ page }) => {
await page.goto(path);
const locator = page.locator(selector);
await expect(locator).toContainText(title);
})
);
}

View File

@ -0,0 +1,90 @@
import { assertTextOnPage } from './helpers';
import { test, expect } from '@playwright/test';
const pages: Array<{ title: string; path: string }> = [
{ title: 'What is Nx Cloud?', path: '/nx-cloud/intro/what-is-nx-cloud' },
{
title: 'Recording Non-Nx Commands',
path: '/nx-cloud/set-up/record-commands',
},
{
title: 'Enable GitHub PR Integration',
path: '/nx-cloud/set-up/github',
},
{
title: 'User Management',
path: '/nx-cloud/account/users',
},
{
title: 'Connecting Nx Cloud to your existing Google identity provider',
path: '/nx-cloud/account/google-auth',
},
{
title: 'Access Tokens',
path: '/nx-cloud/account/access-tokens',
},
{
title: 'Security Scenarios',
path: '/nx-cloud/account/scenarios',
},
{
title: 'End to End Encryption',
path: '/nx-cloud/account/encryption',
},
{
title: 'Running Nx Cloud Enterprise',
path: '/nx-cloud/private-cloud/get-started',
},
{
title: 'Auth (Basic)',
path: '/nx-cloud/private-cloud/auth-single-admin',
},
{
title: 'GitHub Auth',
path: '/nx-cloud/private-cloud/auth-github',
},
{
title: 'GitLab Auth',
path: '/nx-cloud/private-cloud/auth-gitlab',
},
{
title: 'Setting up a dedicated NxCloud VM',
path: '/nx-cloud/private-cloud/ami-setup',
},
{
title: 'BitBucket Auth',
path: '/nx-cloud/private-cloud/auth-bitbucket',
},
{
title: 'SAML Auth',
path: '/nx-cloud/private-cloud/auth-saml',
},
{
title: 'Advanced Configuration',
path: '/nx-cloud/private-cloud/advanced-config',
},
{
title: 'Configuring the Cloud Runner / Nx CLI',
path: '/nx-cloud/reference/config',
},
{
title: 'Environment Variables',
path: '/nx-cloud/reference/env-vars',
},
{
title: 'Nx Cloud Server API Reference',
path: '/nx-cloud/reference/server-api',
},
{
title: 'nx-cloud - Release notes',
path: '/nx-cloud/reference/release-notes',
},
];
/**
* Asserting all the additional API references pages are accounted for and accessible.
* Generation of the pages is manual since we want to make sure the change is intended.
*/
test.describe('nx-dev: Nx Cloud section', () => {
pages.forEach((page) => assertTextOnPage(page.path, page.title));
});

View File

@ -0,0 +1,477 @@
import { assertTextOnPage } from './helpers';
import { test } from '@playwright/test';
const pages: Array<{ title: string; path: string }> = [
{ title: '@nx/angular', path: '/packages/angular' },
{
title: '@nx/angular:add-linting',
path: '/packages/angular/generators/add-linting',
},
{
title: '@nx/angular:application',
path: '/packages/angular/generators/application',
},
{
title: '@nx/angular:component',
path: '/packages/angular/generators/component',
},
{
title: '@nx/angular:component-cypress-spec',
path: '/packages/angular/generators/component-cypress-spec',
},
{
title: '@nx/angular:component-story',
path: '/packages/angular/generators/component-story',
},
{
title: '@nx/angular:convert-tslint-to-eslint',
path: '/packages/angular/generators/convert-tslint-to-eslint',
},
{ title: '@nx/angular:init', path: '/packages/angular/generators/init' },
{
title: '@nx/angular:library',
path: '/packages/angular/generators/library',
},
{
title: '@nx/angular:library-secondary-entry-point',
path: '/packages/angular/generators/library-secondary-entry-point',
},
{
title: '@nx/angular:remote',
path: '/packages/angular/generators/remote',
},
{ title: '@nx/angular:move', path: '/packages/angular/generators/move' },
{
title: '@nx/angular:convert-to-with-mf',
path: '/packages/angular/generators/convert-to-with-mf',
},
{ title: '@nx/angular:host', path: '/packages/angular/generators/host' },
{
title: '@nx/angular:ng-add',
path: '/packages/angular/generators/ng-add',
},
{ title: '@nx/angular:ngrx', path: '/packages/angular/generators/ngrx' },
{ title: '@nx/angular:scam', path: '/packages/angular/generators/scam' },
{
title: '@nx/angular:scam-directive',
path: '/packages/angular/generators/scam-directive',
},
{
title: '@nx/angular:scam-pipe',
path: '/packages/angular/generators/scam-pipe',
},
{
title: '@nx/angular:setup-mf',
path: '/packages/angular/generators/setup-mf',
},
{
title: '@nx/angular:setup-tailwind',
path: '/packages/angular/generators/setup-tailwind',
},
{
title: '@nx/angular:stories',
path: '/packages/angular/generators/stories',
},
{
title: '@nx/',
path: '/packages/angular/generators/storybook-configuration',
},
{
title: '@nx/angular:web-worker',
path: '/packages/angular/generators/web-worker',
},
{
title: '@nx/angular:delegate-build',
path: '/packages/angular/executors/delegate-build',
},
{
title: '@nx/angular:ng-packagr-lite',
path: '/packages/angular/executors/ng-packagr-lite',
},
{
title: '@nx/angular:package',
path: '/packages/angular/executors/package',
},
{ title: 'create-nx-plugin', path: '/packages/create-nx-plugin' },
{
title: 'create-nx-workspace',
path: '/packages/create-nx-workspace',
},
{ title: '@nx/cypress', path: '/packages/cypress' },
{ title: '@nx/cypress:init', path: '/packages/cypress/generators/init' },
{
title: '@nx/cypress:cypress-project',
path: '/packages/cypress/generators/cypress-project',
},
{
title: '@nx/cypress:cypress',
path: '/packages/cypress/executors/cypress',
},
{ title: '@nx/detox', path: '/packages/detox' },
{ title: '@nx/detox:init', path: '/packages/detox/generators/init' },
{
title: '@nx/detox:application',
path: '/packages/detox/generators/application',
},
{ title: '@nx/detox:build', path: '/packages/detox/executors/build' },
{ title: '@nx/detox:test', path: '/packages/detox/executors/test' },
{ title: '@nx/devkit', path: '/packages/devkit' },
{ title: '@nx/esbuild', path: '/packages/esbuild' },
{
title: '@nx/esbuild:esbuild',
path: '/packages/esbuild/executors/esbuild',
},
{ title: '@nx/eslint-plugin', path: '/packages/eslint-plugin' },
{ title: '@nx/expo', path: '/packages/expo' },
{
title: '@nx/expo:init',
path: '/packages/expo/generators/init',
},
{
title: '@nx/expo:application',
path: '/packages/expo/generators/application',
},
{
title: '@nx/expo:library',
path: '/packages/expo/generators/library',
},
{
title: '@nx/expo:component',
path: '/packages/expo/generators/component',
},
{
title: '@nx/expo:start',
path: '/packages/expo/executors/start',
},
{
title: '@nx/expo:sync-deps',
path: '/packages/expo/executors/sync-deps',
},
{
title: '@nx/expo:ensure-symlink',
path: '/packages/expo/executors/ensure-symlink',
},
{ title: '@nx/express', path: '/packages/express' },
{ title: '@nx/express:init', path: '/packages/express/generators/init' },
{
title: '@nx/express:application',
path: '/packages/express/generators/application',
},
{ title: '@nx/jest', path: '/packages/jest' },
{ title: '@nx/jest:init', path: '/packages/jest/generators/init' },
{
title: '@nx/jest:configuration',
path: '/packages/jest/generators/configuration',
},
{ title: '@nx/jest', path: '/packages/jest/executors/jest' },
{ title: '@nx/js', path: '/packages/js' },
{ title: '@nx/js:library', path: '/packages/js/generators/library' },
{ title: '@nx/js:init', path: '/packages/js/generators/init' },
{
title: '@nx/js:convert-to-swc',
path: '/packages/js/generators/convert-to-swc',
},
{ title: '@nx/js:tsc', path: '/packages/js/executors/tsc' },
{ title: '@nx/js:swc', path: '/packages/js/executors/swc' },
{ title: '@nx/linter', path: '/packages/linter' },
{
title: '@nx/linter:workspace-rules-project',
path: '/packages/linter/generators/workspace-rules-project',
},
{
title: '@nx/linter',
path: '/packages/linter/generators/workspace-rule',
},
{ title: '@nx/linter', path: '/packages/linter/executors/eslint' },
{ title: '@nx/nest', path: '/packages/nest' },
{
title: '@nx/nest:application',
path: '/packages/nest/generators/application',
},
{
title: '@nx/nest:convert-tslint-to-eslint',
path: '/packages/nest/generators/convert-tslint-to-eslint',
},
{ title: '@nx/nest:init', path: '/packages/nest/generators/init' },
{ title: '@nx/nest:library', path: '/packages/nest/generators/library' },
{ title: '@nx/nest:class', path: '/packages/nest/generators/class' },
{
title: '@nx/nest:controller',
path: '/packages/nest/generators/controller',
},
{
title: '@nx/nest:decorator',
path: '/packages/nest/generators/decorator',
},
{ title: '@nx/nest:filter', path: '/packages/nest/generators/filter' },
{ title: '@nx/nest:gateway', path: '/packages/nest/generators/gateway' },
{ title: '@nx/nest:guard', path: '/packages/nest/generators/guard' },
{
title: '@nx/nest:interceptor',
path: '/packages/nest/generators/interceptor',
},
{
title: '@nx/nest:interface',
path: '/packages/nest/generators/interface',
},
{
title: '@nx/nest:middleware',
path: '/packages/nest/generators/middleware',
},
{ title: '@nx/nest:module', path: '/packages/nest/generators/module' },
{ title: '@nx/nest:pipe', path: '/packages/nest/generators/pipe' },
{
title: '@nx/nest:provider',
path: '/packages/nest/generators/provider',
},
{
title: '@nx/nest:resolver',
path: '/packages/nest/generators/resolver',
},
{
title: '@nx/nest:resource',
path: '/packages/nest/generators/resource',
},
{ title: '@nx/nest:service', path: '/packages/nest/generators/service' },
{ title: '@nx/next', path: '/packages/next' },
{ title: '@nx/next:init', path: '/packages/next/generators/init' },
{
title: '@nx/next:application',
path: '/packages/next/generators/application',
},
{ title: '@nx/next:page', path: '/packages/next/generators/page' },
{
title: '@nx/next:component',
path: '/packages/next/generators/component',
},
{ title: '@nx/next:library', path: '/packages/next/generators/library' },
{ title: '@nx/next:build', path: '/packages/next/executors/build' },
{ title: '@nx/next:server', path: '/packages/next/executors/server' },
{ title: '@nx/next:export', path: '/packages/next/executors/export' },
{ title: '@nx/node', path: '/packages/node' },
{ title: '@nx/node:init', path: '/packages/node/generators/init' },
{
title: '@nx/node:application',
path: '/packages/node/generators/application',
},
{ title: '@nx/node:library', path: '/packages/node/generators/library' },
{ title: 'nx', path: '/packages/nx' },
{ title: 'nx:noop', path: '/packages/nx/executors/noop' },
{
title: 'nx:run-commands',
path: '/packages/nx/executors/run-commands',
},
{ title: 'nx:run-script', path: '/packages/nx/executors/run-script' },
{ title: 'plugin', path: '/packages/plugin' },
{
title: '@nx/plugin:plugin',
path: '/packages/plugin/generators/plugin',
},
{
title: '@nx/plugin:e2e-project',
path: '/packages/plugin/generators/e2e-project',
},
{
title: '@nx/plugin:migration',
path: '/packages/plugin/generators/migration',
},
{
title: '@nx/plugin:generator',
path: '/packages/plugin/generators/generator',
},
{
title: '@nx/plugin:executor',
path: '/packages/plugin/generators/executor',
},
{ title: '@nx/plugin:e2e', path: '/packages/plugin/executors/e2e' },
{ title: '@nx/react', path: '/packages/react' },
{ title: '@nx/react:init', path: '/packages/react/generators/init' },
{
title: '@nx/react:application',
path: '/packages/react/generators/application',
},
{
title: '@nx/react:library',
path: '/packages/react/generators/library',
},
{
title: '@nx/react:component',
path: '/packages/react/generators/component',
},
{ title: '@nx/react:redux', path: '/packages/react/generators/redux' },
{
title: '@nx/react:storybook-configuration',
path: '/packages/react/generators/storybook-configuration',
},
{
title: '@nx/react:component-story',
path: '/packages/react/generators/component-story',
},
{
title: '@nx/react:stories',
path: '/packages/react/generators/stories',
},
{
title: '@nx/react:component-cypress-spec',
path: '/packages/react/generators/component-cypress-spec',
},
{ title: '@nx/react:hook', path: '/packages/react/generators/hook' },
{ title: '@nx/react:host', path: '/packages/react/generators/host' },
{ title: '@nx/react:remote', path: '/packages/react/generators/remote' },
{
title: '@nx/react:module-federation-dev-server',
path: '/packages/react/executors/module-federation-dev-server',
},
{ title: '@nx/react-native', path: '/packages/react-native' },
{
title: '@nx/react-native:init',
path: '/packages/react-native/generators/init',
},
{
title: '@nx/react-native:application',
path: '/packages/react-native/generators/application',
},
{
title: '@nx/react-native:library',
path: '/packages/react-native/generators/library',
},
{
title: '@nx/react-native:component',
path: '/packages/react-native/generators/component',
},
{
title: '@nx/',
path: '/packages/react-native/generators/storybook-configuration',
},
{
title: '@nx/react-native:component-story',
path: '/packages/react-native/generators/component-story',
},
{
title: '@nx/react-native:stories',
path: '/packages/react-native/generators/stories',
},
{
title: '@nx/react-native:upgrade-native',
path: '/packages/react-native/generators/upgrade-native',
},
{
title: '@nx/react-native:run-android',
path: '/packages/react-native/executors/run-android',
},
{
title: '@nx/react-native:run-ios',
path: '/packages/react-native/executors/run-ios',
},
{
title: '@nx/react-native:bundle',
path: '/packages/react-native/executors/bundle',
},
{
title: '@nx/react-native:build-android',
path: '/packages/react-native/executors/build-android',
},
{
title: '@nx/react-native:start',
path: '/packages/react-native/executors/start',
},
{
title: '@nx/react-native:sync-deps',
path: '/packages/react-native/executors/sync-deps',
},
{
title: '@nx/react-native:ensure-symlink',
path: '/packages/react-native/executors/ensure-symlink',
},
{
title: '@nx/react-native:storybook',
path: '/packages/react-native/executors/storybook',
},
{ title: '@nx/storybook', path: '/packages/storybook' },
{
title: '@nx/storybook:init',
path: '/packages/storybook/generators/init',
},
{
title: '@nx/storybook:configuration',
path: '/packages/storybook/generators/configuration',
},
{
title: '@nx/storybook:cypress-project',
path: '/packages/storybook/generators/cypress-project',
},
{
title: '@nx/storybook:storybook',
path: '/packages/storybook/executors/storybook',
},
{
title: '@nx/storybook:build',
path: '/packages/storybook/executors/build',
},
{ title: '@nx/web', path: '/packages/web' },
{ title: '@nx/web:init', path: '/packages/web/generators/init' },
{
title: '@nx/web:application',
path: '/packages/web/generators/application',
},
{
title: '@nx/webpack:webpack',
path: '/packages/webpack/executors/webpack',
},
{ title: '@nx/rollup:rollup', path: '/packages/rollup/executors/rollup' },
{
title: '@nx/webpack:dev-server',
path: '/packages/webpack/executors/dev-server',
},
{
title: '@nx/web:file-server',
path: '/packages/web/executors/file-server',
},
{
title: '@nx/workspace:preset',
path: '/packages/workspace/generators/preset',
},
{
title: '@nx/workspace:move',
path: '/packages/workspace/generators/move',
},
{
title: '@nx/workspace:remove',
path: '/packages/workspace/generators/remove',
},
{
title: '@nx/workspace:new',
path: '/packages/workspace/generators/new',
},
{
title: '@nx/workspace:workspace-generator',
path: '/packages/workspace/generators/workspace-generator',
},
{
title: '@nx/workspace:run-command',
path: '/packages/workspace/generators/run-commands',
},
{
title: '@nx/workspace:fix-configuration',
path: '/packages/workspace/generators/fix-configuration',
},
{
title: '@nx/workspace:npm-package',
path: '/packages/workspace/generators/npm-package',
},
{
title: '@nx/workspace:ci-workflow',
path: '/packages/workspace/generators/ci-workflow',
},
{
title: '@nx/workspace:counter',
path: '/packages/workspace/executors/counter',
},
];
/**
* Asserting all the packages pages are accounted for and accessible.
* Generation of the pages is manual since we want to make sure the change is intended.
*/
test.describe('nx-dev: Packages Section', () => {
pages.forEach((page) => assertTextOnPage(page.path, page.title));
});

View File

@ -0,0 +1,18 @@
import { test, expect } from '@playwright/test';
test.describe('nx-dev: Recipes pages', () => {
test('should list related recipes based on tags', async ({ page }) => {
await page.goto('/recipes/other/deno-deploy');
const relatedDocs = page.locator(
'[data-document="related"] > article > ul > li'
);
const relatedDocsText = await relatedDocs.allInnerTexts();
expect(relatedDocsText.length, 'has related docs').toBeGreaterThan(0);
// All text content has to be different
const distinct = new Set(relatedDocsText);
expect(distinct.size, 'all strings are different').toBe(
relatedDocsText.length
);
});
});

View File

@ -1,8 +0,0 @@
// ***********************************************
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
// eslint-disable-next-line @typescript-eslint/no-namespace
declare namespace Cypress {}

View File

@ -1,17 +0,0 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands';

View File

@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"sourceMap": false,
"outDir": "../dist/out-tsc",
"allowJs": true,
"types": ["cypress", "node"]
},
"include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"]
}

View File

@ -22,9 +22,8 @@
}, },
"sitemap": { "sitemap": {
"executor": "nx:run-commands", "executor": "nx:run-commands",
"outputs": ["{options.outputPath}"], "outputs": ["{workspaceRoot}/dist/nx-dev/nx-dev/public"],
"options": { "options": {
"outputPath": "dist/nx-dev/nx-dev/public",
"command": "pnpm next-sitemap --config ./nx-dev/nx-dev/next-sitemap.config.js" "command": "pnpm next-sitemap --config ./nx-dev/nx-dev/next-sitemap.config.js"
} }
}, },

View File

@ -72,6 +72,7 @@
"@nx/js": "16.7.0-rc.1", "@nx/js": "16.7.0-rc.1",
"@nx/linter": "16.7.0-rc.1", "@nx/linter": "16.7.0-rc.1",
"@nx/next": "16.7.0-rc.1", "@nx/next": "16.7.0-rc.1",
"@nx/playwright": "16.7.0-rc.1",
"@nx/react": "16.7.0-rc.1", "@nx/react": "16.7.0-rc.1",
"@nx/storybook": "16.7.0-rc.1", "@nx/storybook": "16.7.0-rc.1",
"@nx/web": "16.7.0-rc.1", "@nx/web": "16.7.0-rc.1",
@ -166,6 +167,7 @@
"eslint-plugin-cypress": "2.14.0", "eslint-plugin-cypress": "2.14.0",
"eslint-plugin-import": "2.26.0", "eslint-plugin-import": "2.26.0",
"eslint-plugin-jsx-a11y": "6.6.1", "eslint-plugin-jsx-a11y": "6.6.1",
"eslint-plugin-playwright": "^0.15.3",
"eslint-plugin-react": "7.31.11", "eslint-plugin-react": "7.31.11",
"eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-hooks": "4.6.0",
"eslint-plugin-storybook": "^0.6.12", "eslint-plugin-storybook": "^0.6.12",

94
pnpm-lock.yaml generated
View File

@ -1,9 +1,5 @@
lockfileVersion: '6.0' lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
overrides: overrides:
minimist: ^1.2.6 minimist: ^1.2.6
underscore: ^1.12.1 underscore: ^1.12.1
@ -301,6 +297,9 @@ devDependencies:
'@nx/next': '@nx/next':
specifier: 16.7.0-rc.1 specifier: 16.7.0-rc.1
version: 16.7.0-rc.1(@babel/core@7.22.9)(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(file-loader@6.2.0)(next@13.3.4)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0) version: 16.7.0-rc.1(@babel/core@7.22.9)(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(file-loader@6.2.0)(next@13.3.4)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0)
'@nx/playwright':
specifier: 16.7.0-rc.1
version: 16.7.0-rc.1(@playwright/test@1.36.1)(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)
'@nx/react': '@nx/react':
specifier: 16.7.0-rc.1 specifier: 16.7.0-rc.1
version: 16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0) version: 16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0)
@ -577,6 +576,9 @@ devDependencies:
eslint-plugin-jsx-a11y: eslint-plugin-jsx-a11y:
specifier: 6.6.1 specifier: 6.6.1
version: 6.6.1(eslint@8.46.0) version: 6.6.1(eslint@8.46.0)
eslint-plugin-playwright:
specifier: ^0.15.3
version: 0.15.3(eslint@8.46.0)
eslint-plugin-react: eslint-plugin-react:
specifier: 7.31.11 specifier: 7.31.11
version: 7.31.11(eslint@8.46.0) version: 7.31.11(eslint@8.46.0)
@ -3527,7 +3529,6 @@ packages:
/@emotion/memoize@0.7.4: /@emotion/memoize@0.7.4:
resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==}
requiresBuild: true
dev: false dev: false
optional: true optional: true
@ -6110,42 +6111,6 @@ packages:
- typescript - typescript
dev: true dev: true
/@nrwl/js@15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3):
resolution: {integrity: sha512-l2Q7oFpzx6ul7G0nKpMkrvnIEaOY+X8fc2g2Db5WqpnnBdfkrtWXZPg/O4DQ1p9O6BXrZ+Q2AK9bfgnliiwyEg==}
dependencies:
'@babel/core': 7.22.9
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9)
'@babel/plugin-proposal-decorators': 7.22.7(@babel/core@7.22.9)
'@babel/plugin-transform-runtime': 7.22.9(@babel/core@7.22.9)
'@babel/preset-env': 7.22.9(@babel/core@7.22.9)
'@babel/preset-typescript': 7.22.5(@babel/core@7.22.9)
'@babel/runtime': 7.22.6
'@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3)
'@nrwl/workspace': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(eslint@8.46.0)(prettier@2.7.1)(typescript@5.1.3)
'@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3)
babel-plugin-const-enum: 1.2.0(@babel/core@7.22.9)
babel-plugin-macros: 2.8.0
babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.22.9)
chalk: 4.1.2
fast-glob: 3.2.7
fs-extra: 11.1.1
ignore: 5.2.0
js-tokens: 4.0.0
minimatch: 3.0.5
source-map-support: 0.5.19
tree-kill: 1.2.2
tslib: 2.6.1
transitivePeerDependencies:
- '@babel/traverse'
- '@swc-node/register'
- '@swc/core'
- debug
- nx
- prettier
- supports-color
- typescript
dev: true
/@nrwl/js@16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4): /@nrwl/js@16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4):
resolution: {integrity: sha512-lEHp1o1KRfXWwK8SVRvCVHU6Am58UXb8XqgOvx/wO/0CHUqTg9JopZ0zlF6+58eeRubVZCEVsZDUeQwAFVMq8w==} resolution: {integrity: sha512-lEHp1o1KRfXWwK8SVRvCVHU6Am58UXb8XqgOvx/wO/0CHUqTg9JopZ0zlF6+58eeRubVZCEVsZDUeQwAFVMq8w==}
dependencies: dependencies:
@ -6172,7 +6137,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3) '@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3)
'@nrwl/js': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3) '@nrwl/js': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(eslint@8.46.0)(nx@16.7.0-rc.1)(prettier@2.7.1)(typescript@5.1.3)
'@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3) '@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3)
eslint: 8.46.0 eslint: 8.46.0
tmp: 0.2.1 tmp: 0.2.1
@ -7005,6 +6970,32 @@ packages:
dev: true dev: true
optional: true optional: true
/@nx/playwright@16.7.0-rc.1(@playwright/test@1.36.1)(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4):
resolution: {integrity: sha512-k8IV2/GyvWNuWnHNE9e4r57N2oxk7ZlnlZUg7x/xBSxghQh1WLlk+Qes1jnD3QLnZyC7BR61sF1RF8E4+ZkHjg==}
peerDependencies:
'@playwright/test': ^1.36.0
peerDependenciesMeta:
'@playwright/test':
optional: true
dependencies:
'@nx/devkit': 16.7.0-rc.1(nx@16.7.0-rc.1)
'@nx/linter': 16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)
'@playwright/test': 1.36.1
tslib: 2.6.1
transitivePeerDependencies:
- '@babel/traverse'
- '@swc-node/register'
- '@swc/core'
- '@swc/wasm'
- '@types/node'
- debug
- eslint
- nx
- supports-color
- typescript
- verdaccio
dev: true
/@nx/react@16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0): /@nx/react@16.7.0-rc.1(@swc-node/register@1.5.4)(@swc/core@1.3.51)(@types/node@18.16.9)(eslint@8.46.0)(nx@16.7.0-rc.1)(typescript@5.1.3)(verdaccio@5.15.4)(webpack@5.88.0):
resolution: {integrity: sha512-NdHFv1+w/B7+6hGX+ZVyjdy6MVYrPapfb+Va6iarPZLfkzsvSJWR9jAJEHU9PCKOucJ+OS1yZaa67EVwYpy35w==} resolution: {integrity: sha512-NdHFv1+w/B7+6hGX+ZVyjdy6MVYrPapfb+Va6iarPZLfkzsvSJWR9jAJEHU9PCKOucJ+OS1yZaa67EVwYpy35w==}
dependencies: dependencies:
@ -10295,7 +10286,6 @@ packages:
/@types/linkify-it@3.0.2: /@types/linkify-it@3.0.2:
resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==}
requiresBuild: true
dev: false dev: false
optional: true optional: true
@ -10327,7 +10317,6 @@ packages:
/@types/mdurl@1.0.2: /@types/mdurl@1.0.2:
resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
requiresBuild: true
dev: false dev: false
optional: true optional: true
@ -15551,6 +15540,18 @@ packages:
semver: 6.3.0 semver: 6.3.0
dev: true dev: true
/eslint-plugin-playwright@0.15.3(eslint@8.46.0):
resolution: {integrity: sha512-LQMW5y0DLK5Fnpya7JR1oAYL2/7Y9wDiYw6VZqlKqcRGSgjbVKNqxraphk7ra1U3Bb5EK444xMgUlQPbMg2M1g==}
peerDependencies:
eslint: '>=7'
eslint-plugin-jest: '>=25'
peerDependenciesMeta:
eslint-plugin-jest:
optional: true
dependencies:
eslint: 8.46.0
dev: true
/eslint-plugin-react-hooks@4.6.0(eslint@8.46.0): /eslint-plugin-react-hooks@4.6.0(eslint@8.46.0):
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -23766,7 +23767,6 @@ packages:
/prr@1.0.1: /prr@1.0.1:
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
requiresBuild: true
optional: true optional: true
/pseudomap@1.0.2: /pseudomap@1.0.2:
@ -28854,3 +28854,7 @@ packages:
name: tiny-invariant name: tiny-invariant
version: 1.3.1 version: 1.3.1
dev: true dev: true
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false