Architect#scheduleBuilder or context.scheduleBuilder results in incorrect target on context
- 主要语言
- TypeScript
- 星标
- 27k
- 派生
- 11.8k
- 平均合并
- 14 小时 23 分钟
- 30 天内合并 PR
- 162
描述
# 🐞 Bug report
### Command (mark with an `x`)
- [ ] new
- [ ] build
- [ ] serve
- [ ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [ ] update
- [ ] lint
- [ ] extract-i18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc
### Is this a regression?
Not that I know of
### Description
If a builder is executed via `architect.scheduleBuilder`, that builder is passed a context that doesn't match the declared interface in typescript. The same happens when using `context.scheduleBuilder` if no target is passed via the `scheduleOptions`.
```js
console.log(context.target);
// logs {project: undefined, target: undefined, configuration: undefined}
// but type is {project: string, target: string, configuration?: string} | undefined
```
## 🔬 Minimal Reproduction
Run `yarn bazel test //packages/angular_devkit/architect:architect_test` with the following patch:
```patch
diff --git a/packages/angular_devkit/architect/src/index_spec.ts b/packages/angular_devkit/architect/src/index_spec.ts
index 57d76c5a6..bbd59b3fc 100644
--- a/packages/angular_devkit/architect/src/index_spec.ts
+++ b/packages/angular_devkit/architect/src/index_spec.ts
@@ -36,10 +36,12 @@ describe('architect', () => {
options = {};
called = 0;
- testArchitectHost.addBuilder('package:test', createBuilder(async o => {
+ testArchitectHost.addBuilder('package:test', createBuilder(async (o, ctx) => {
called++;
options = o;
+ expect(ctx.target != null && ctx.target.target == null).toBe(false);
+
return new Promise(resolve => {
setTimeout(() => resolve({ success: true }), 10);
});
```
## 🔥 Exception or Error
Failures:
1) architect runs builders parallel
Message:
Expected true to be false.
Stack:
Error: Expected true to be false.
at
at packages/angular_devkit/architect/src/index_spec.ts:43:63
at onInput (packages/angular_devkit/architect/src/create-builder.ts:201:20)
at SafeSubscriber._next (packages/angular_devkit/architect/src/create-builder.ts:87:17)
## 🌍 Your Environment
Master branch on this repo
**Anything else relevant?**
贡献指南
调研方向
从 packages/angular_devkit/architect/src/index_spec.ts 开始,使用 yarn bazel test //packages/angular_devkit/architect:architect_test 重现失败。通过 packages/angular_devkit/architect/src/create-builder.ts 跟踪 builder context,stack 指向的就是这里,并验证 scheduleBuilder 提供的 target 与其声明的 TypeScript 接口匹配。当聚焦的 architect 测试使用有效的 target 通过时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- typescript
- 领域
- build-system
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 描述清楚
- 新手友好度
- 38/100