adobe / adobe/aio-cli-plugin-runtime

rt package delete --recursive fails for packages with feed-backed triggers (wrong field name in recursivelyDeletePackage)

Đang mở Phù hợp với người mới
#431 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
JavaScript
Star
21
Fork
33
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

## Bug report

`aio rt package delete --recursive` fails to delete a package when one of its actions is bound (via a rule) to a **feed-backed trigger** (e.g. `/whisk.system/alarms/interval`, `/whisk.system/alarms/alarm`).

### Observed error

```
Error: failed to delete the package: Missing mandatory trigger parameter from options.
```

### Root cause

In [`src/commands/runtime/package/delete.js`](https://github.com/adobe/aio-cli-plugin-runtime/blob/master/src/commands/runtime/package/delete.js), `recursivelyDeletePackage()` builds the trigger reference for each rule with the wrong field name:

```js
const ruleData = {
ruleName: rule.name,
trigger: {
namespace: rule.trigger.path,
triggerName: rule.trigger.name // <-- should be `name`, not `triggerName`
}
}
...
deleteEntitiesPromises.push(ow.triggers.delete(actionRule.trigger), ow.rules.delete(actionRule.ruleName))
```

This object is passed straight into `ow.triggers.delete(...)`, which resolves to `@adobe/aio-lib-runtime`'s wrapped `Triggers.delete()` (src/triggers.js):

```js
async delete (options) {
const retTrigger = await this.owclient.triggers.get(options) // succeeds: raw openwhisk client accepts `triggerName` as a fallback identifier
if (retTrigger.annotations) {
for (const annotation of retTrigger.annotations) {
if (annotation.key === 'feed') {
await this.owclient.feeds.delete({ name: annotation.value, trigger: options.name }) // <-- reads options.name specifically
}
}
}
return this.owclient.triggers.delete(options)
}
```

Since the passed-in object only has `triggerName` (not `name`), `options.name` is `undefined`. This is then passed to `openwhisk-client-js`'s `Feeds.feed()`, which validates the `trigger` param and throws:

```js
if (!this.triggerName(options)) {
throw new Error(messages.MISSING_FEED_TRIGGER_ERROR) // 'Missing mandatory trigger parameter from options.'
}
```

### Impact

Because `Promise.all(deleteEntitiesPromises)` rejects as soon as any one deletion throws, the trailing `ow.packages.delete(pkg)` call in `recursivelyDeletePackage` never executes. This means:

1. The package itself is never deleted when this happens (not just the feed deregistration).
2. The feed (e.g. the alarms provider registration backing an interval/alarm trigger) is never properly deregistered via this path, since the `feeds.delete()` call throws before reaching the underlying HTTP call.

### Repro steps

1. Deploy a manifest with an action, a feed-backed trigger, and a rule connecting them, e.g.:
```yaml
triggers:
every-5-min:
feed: /whisk.system/alarms/interval
inputs:
minutes: 5
rules:
fire-every-5-min:
trigger: every-5-min
action: someAction
```
2. `aio app deploy` (or `aio rt trigger create` + `aio rt rule create` directly).
3. `aio rt package delete --recursive`
4. Observe: `Error: failed to delete the package: Missing mandatory trigger parameter from options.`

### Suggested fix

In `recursivelyDeletePackage`, use `name` instead of `triggerName` when building the trigger reference:

```js
trigger: {
namespace: rule.trigger.path,
name: rule.trigger.name
}
```

### Environment

- `aio-cli-plugin-app`: 14.8.1 (observed via `aio info`)
- `aio-cli`: 11.1.2
- Node: 24.6.0

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu tại src/commands/runtime/package/delete.js ở recursivelyDeletePackage(), sau đó lần theo lệnh gọi xóa trigger và hành vi của Triggers.delete() trong src/triggers.js. Tái hiện với một trigger được feed hỗ trợ và thao tác xóa package đệ quy; hoàn tất khi package, rule, trigger và feed được xóa mà không gặp lỗi thiếu tham số trigger.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
javascript
Lĩnh vực
cli
Loại issue
Lỗi
Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
76/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.