-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Skeleton code for `bun run --workspace` * Update run_command.zig * implement directory traversal to find workspace root * finish --workspace implementation * clean up changes in run_command.zig * add workspace tests, update harness to handle nested dirs * [autofix.ci] apply automated fixes * basic filtering * [autofix.ci] apply automated fixes * working filter without patterns * update tests, filter mostly working * simplify package name parsing, commit tests * support filter even without workspace setup * move filter arg handling to separate source file * use bun.sys.chdir, match root package for scripts * fix exit code handling * ignore node_modules and directories starting with . in --filter * progress converting --filter to use iterators * convert filtering to use iterators * cleanup * implement DirEntry access method for glob (currently crashing) * cleanup and fixes * run js files in subprocess when filter flag passed * clean up dead code * fix fd leak in run_command.zig * [autofix.ci] apply automated fixes * fix issues after merge * use posix-spawn in runBinary, fix resource PATH variable resource leak * move filter argument to runtime category * fix test harness * add js and binary tests to filter-workspace * [autofix.ci] apply automated fixes * fix compile after merge * [autofix.ci] apply automated fixes * clean up filter-workspace test * [autofix.ci] apply automated fixes * fixes to running binaries * fix actually setting cwd_override * windows fixes * address some review comments * handle malformed JSON * add various tests * [autofix.ci] apply automated fixes * update docs for filter * [autofix.ci] apply automated fixes * reset tinycc commit * filtered run prototype * make pretty * implement abort handler (not working) * make prettier * prep for windows * windows path and printing fixes * implement log-style output (not tui) * fix issues when logging to file * revert a bunch of unecessary changes * cleanup * implement dependency order execution * detect circular dependencies, fix cancel hang * Fix `$PATH` * ignore dep order on loop, stream on linux, sort pkgs * support pre and post scripts * add more filter tests, print elapsed time * enable 'bun --filter' without run * fix harness after merge * [autofix.ci] apply automated fixes * print number of scripts we're waiting for * update docs, fix windows build * fix tests on windows * [autofix.ci] apply automated fixes * fix uninitialized memory * use terminal synchronized update sequences * Add skip list * Preallocate * Use current bun in tests --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
- Loading branch information
1 parent
688844b
commit 545cb54
Showing
15 changed files
with
1,635 additions
and
82 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
Use the `--filter` flag to execute lifecycle scripts in multiple packages at once: | ||
|
||
```bash | ||
bun --filter <pattern> <script> | ||
``` | ||
|
||
Say you have a monorepo with two packages: `packages/api` and `packages/frontend`, both with a `dev` script that will start a local development server. Normally, you would have to open two separate terminal tabs, cd into each package directory, and run `bun dev`: | ||
|
||
```bash | ||
cd packages/api | ||
bun dev | ||
|
||
# in another terminal | ||
cd packages/frontend | ||
bun dev | ||
``` | ||
|
||
Using `--filter`, you can run the `dev` script in both packages at once: | ||
|
||
```bash | ||
bun --filter '*' dev | ||
``` | ||
|
||
Both commands will be run in parallel, and you will see a nice terminal UI showing their respective outputs: | ||
![Terminal Output](https://github.com/oven-sh/bun/assets/48869301/2a103e42-9921-4c33-948f-a1ad6e6bac71) | ||
|
||
|
||
## Matching | ||
|
||
`--filter` accepts a pattern to match specific packages, either by name or by path. Patterns have full support for glob syntax. | ||
|
||
### Package Name `--filter <pattern>` | ||
|
||
Name patterns select packages based on the package name, as specified in `package.json`. For example, if you have packages `pkga`, `pkgb` and `other`, you can match all packages with `*`, only `pkga` and `pkgb` with `pkg*`, and a specific package by providing the full name of the package. | ||
|
||
### Package Path `--filter ./<glob>` | ||
|
||
Path patterns are specified by starting the pattern with `./`, and will select all packages in directories that match the pattern. For example, to match all packages in subdirectories of `packages`, you can use `--filter './packages/**'`. To match a package located in `pkgs/foo`, use `--filter ./pkgs/foo`. | ||
|
||
## Workspaces | ||
|
||
Filters respect your [workspace configuration](/docs/install/workspaces.md): If you have a `package.json` file that specifies which packages are part of the workspace, | ||
`--filter` will be restricted to only these packages. Also, in a workspace you can use `--filter` to run scripts in packages that are located anywhere in the workspace: | ||
|
||
```bash | ||
# Packages | ||
# src/foo | ||
# src/bar | ||
|
||
# in src/bar: runs myscript in src/foo, no need to cd! | ||
bun run --filter foo myscript | ||
``` | ||
|
||
## Dependency Order | ||
Bun will respect package dependency order when running scripts. Say you have a package `foo` that depends on another package `bar` in your workspace, and both packages have a `build` script. When you run `bun --filter '*' build`, you will notice that `foo` will only start running once `bar` is done. | ||
|
||
### Cyclic Dependencies | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.