185 lines
9.0 KiB
Markdown
185 lines
9.0 KiB
Markdown
# Rebuilding and Retesting What is Affected
|
|
|
|
As with a regular CLI project, you can build and test apps and libs.
|
|
|
|
```console
|
|
ng g app myapp
|
|
ng g app myapp2 --directory=mydirectory
|
|
ng g lib mylib
|
|
ng g lib mylib2 --directory=mydirectory
|
|
|
|
ng build myapp
|
|
ng build mydirectory-myapp2
|
|
ng build mylib # work if the lib is marked as publishable
|
|
ng build mydirectory-mylib2 # work if the lib is marked as publishable
|
|
|
|
ng test myapp # runs unit tests for myapp
|
|
ng test mylib # runs unit tests for mylib
|
|
ng e2e myapp-e2e # runs e2e tests for myapp
|
|
```
|
|
|
|
Now imagine, `myapp` depends on `mylib`. If we make a change to `mylib`,
|
|
we need to make sure nothing in the workspace is affected.
|
|
Typically, you would do it like this:
|
|
|
|
```console
|
|
ng build mylib
|
|
ng test mylib
|
|
ng build myapp
|
|
ng test myapp
|
|
```
|
|
|
|
In many organizations, you would have dozens or hundreds of apps and libs.
|
|
To be productive in a monorepo, you need to be able to check that your
|
|
change is safe, and rebuilding and retesting everything on every change
|
|
won't scale, tracing the dependencies manually (as shown above) wont's
|
|
scale either. Nx uses code analysis to determine what needs to be rebuild
|
|
and retested, and it provides the following three commands you can use:
|
|
`affected:build`, `affected:test`, and `affected:e2e`.
|
|
|
|
- Rerunning build for all the projects affected by a PR
|
|
|
|
```console
|
|
yarn affected:build --base=master --head=HEAD
|
|
```
|
|
|
|
- Rerunning unit tests for all the projects affected by a PR
|
|
|
|
```console
|
|
yarn affected:test --base=master --head=HEAD
|
|
```
|
|
|
|
- Rerunning e2e tests for all the projects affected by a PR
|
|
|
|
```console
|
|
yarn affected:e2e --base=master --head=HEAD
|
|
```
|
|
|
|
When executing these commands, Nx will topologically sort the projects,
|
|
and will run what it can in parallel. But we can also explicitly pass
|
|
`--parallel` like so:
|
|
|
|
```console
|
|
yarn affected:build --base=master --parallel
|
|
yarn affected:test --base=master --parallel
|
|
yarn affected:e2e --base=master --parallel
|
|
```
|
|
|
|
We can also pass `--maxParallel` to specify the number of parallel processes.
|
|
|
|
## affected:build
|
|
|
|
Run `npm run affected:build -- --help` or `yarn affected:build --help` to see
|
|
the available options:
|
|
|
|
```console
|
|
Build applications affected by changes
|
|
|
|
Run command using --base=[SHA1] (affected by the committed, uncommitted and
|
|
untracked changes):
|
|
--base Base of the current branch (usually master) [string]
|
|
|
|
or using --base=[SHA1] --head=[SHA2] (affected by the committed changes):
|
|
--base Base of the current branch (usually master) [string]
|
|
--head Latest commit of the current branch (usually HEAD) [string]
|
|
|
|
or using:
|
|
--files A list of files delimited by commas [array]
|
|
--uncommitted Uncommitted changes
|
|
--untracked Untracked changes
|
|
|
|
Options:
|
|
--help Show help [boolean]
|
|
--version Show version number [boolean]
|
|
--parallel Parallelize the command [boolean] [default: false]
|
|
--maxParallel Max number of parallel processes [number] [default: 3]
|
|
--all All projects
|
|
--exclude Exclude certain projects from being processed
|
|
[array] [default: []]
|
|
--only-failed Isolate projects which previously failed
|
|
[boolean] [default: false]
|
|
```
|
|
|
|
- `npm run affected:build -- --base=[SHA1] --base=[SHA2]` or `yarn affected:build --base=[SHA1] --base=[SHA2]`. Nx will calculate what changed between the two SHAs, and will build the apps affected by the change. For instance, `yarn affected:build --base=origin/master --base=HEAD` will rebuild what is affected by a PR.
|
|
- `npm run affected:build -- --files=libs/mylib/src/index.ts,libs/mylib2/src/index.ts` or `yarn affected:build --files=libs/mylib/src/index.ts,libs/mylib2/src/index.ts`. Nx will build what is affected by changing the two index files.
|
|
- `npm run affected:build -- --uncommitted` or `yarn affected:build --uncommitted`. Nx will build what is affected by the uncommitted files (this is useful during development).
|
|
- `npm run affected:build -- --untracked` or `yarn affected:build --untracked`. Nx will build what is affected by the untracked files (this is useful during development).
|
|
|
|
All other options will be passed into the underlying build command (e.g., `yarn affected:build --base=origin/master --base=HEAD --prod`).
|
|
|
|
## affected:test
|
|
|
|
Run `npm run affected:test -- --help` or `yarn affected:test --help` to see the available options:
|
|
|
|
```console
|
|
Test applications affected by the change
|
|
|
|
Run command using --base=[SHA1] (affected by the committed, uncommitted and
|
|
untracked changes):
|
|
--base Base of the current branch (usually master) [string]
|
|
|
|
or using --base=[SHA1] --head=[SHA2] (affected by the committed changes):
|
|
--base Base of the current branch (usually master) [string]
|
|
--head Latest commit of the current branch (usually HEAD) [string]
|
|
|
|
or using:
|
|
--files A list of files delimited by commas [array]
|
|
--uncommitted Uncommitted changes
|
|
--untracked Untracked changes
|
|
|
|
Options:
|
|
--help Show help [boolean]
|
|
--version Show version number [boolean]
|
|
--parallel Parallelize the command [boolean] [default: false]
|
|
--maxParallel Max number of parallel processes [number] [default: 3]
|
|
--all All projects
|
|
--exclude Exclude certain projects from being processed
|
|
[array] [default: []]
|
|
--only-failed Isolate projects which previously failed
|
|
[boolean] [default: false]
|
|
```
|
|
|
|
- `npm run affected:test -- --base=[SHA1] --base=[SHA2]` or `yarn affected:test --base=[SHA1] --base=[SHA2]`. Nx will calculate what changed between the two SHAs, and will test the projects affected by the change. For instance, `yarn affected:test --base=origin/master --base=HEAD` will retest what is affected by a PR.
|
|
- `npm run affected:test -- --files=libs/mylib/src/index.ts,libs/mylib2/src/index.ts` or `yarn affected:test --files=libs/mylib/src/index.ts,libs/mylib2/src/index.ts`. Nx will test what is affected by changing the two index files.
|
|
- `npm run affected:test -- --uncommitted` or `yarn affected:test --uncommitted`. Nx will test what is affected by the uncommitted files (this is useful during development).
|
|
- `npm run affected:test -- --untracked` or `yarn affected:test --untracked`. Nx will test what is affected by the untracked files (this is useful during development).
|
|
|
|
All other options will be passed into the underlying test command (e.g., `yarn affected:test --base=origin/master --base=HEAD --sm=false`).
|
|
|
|
## affected:e2e
|
|
|
|
Run `npm run affected:e2e -- --help` or `yarn affected:e2e --help` to see the available options:
|
|
|
|
```console
|
|
Run e2e tests for the applications affected by changes
|
|
|
|
Run command using --base=[SHA1] (affected by the committed, uncommitted and
|
|
untracked changes):
|
|
--base Base of the current branch (usually master) [string]
|
|
|
|
or using --base=[SHA1] --head=[SHA2] (affected by the committed changes):
|
|
--base Base of the current branch (usually master) [string]
|
|
--head Latest commit of the current branch (usually HEAD) [string]
|
|
|
|
or using:
|
|
--files A list of files delimited by commas [array]
|
|
--uncommitted Uncommitted changes
|
|
--untracked Untracked changes
|
|
|
|
Options:
|
|
--help Show help [boolean]
|
|
--version Show version number [boolean]
|
|
--all All projects
|
|
--exclude Exclude certain projects from being processed
|
|
[array] [default: []]
|
|
--only-failed Isolate projects which previously failed
|
|
[boolean] [default: false]
|
|
```
|
|
|
|
- `npm run affected:e2e -- --base=[SHA1] --base=[SHA2]` or `yarn affected:e2e --base=[SHA1] --base=[SHA2]`. Nx will calculate what changed between the two SHAs, and will run e2e test for the apps affected by the change. For instance, `yarn affected:test --base=origin/master --base=HEAD` will retest what is affected by a PR.
|
|
- `npm run affected:e2e -- --files=libs/mylib/src/index.ts,libs/mylib2/src/index.ts` or `yarn affected:e2e --files=libs/mylib/src/index.ts,libs/mylib2/src/index.ts`. Nx will run e2e tests for what is affected by changing the two index files.
|
|
- `npm run affected:e2e -- --uncommitted` or `yarn affected:e2e --uncommitted`. Nx will run e2e tests for what is affected by the uncommitted files (this is useful during development).
|
|
- `npm run affected:e2e -- --untracked` or `yarn affected:e2e --untracked`. Nx will run e2e tests for what is affected by the untracked files (this is useful during development).
|
|
|
|
All other options will be passed into the underlying test command (e.g., `yarn affected:test --base=origin/master --base=HEAD --sm=false`).
|