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, recursivelyDeletePackage() builds the trigger reference for each rule with the wrong field name:
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):
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:
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:
- The package itself is never deleted when this happens (not just the feed deregistration).
- 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
- Deploy a manifest with an action, a feed-backed trigger, and a rule connecting them, e.g.:
triggers:
every-5-min:
feed: /whisk.system/alarms/interval
inputs:
minutes: 5
rules:
fire-every-5-min:
trigger: every-5-min
action: someAction
aio app deploy (or aio rt trigger create + aio rt rule create directly).
aio rt package delete <packageName> --recursive
- 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:
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
Bug report
aio rt package delete --recursivefails 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
Root cause
In
src/commands/runtime/package/delete.js,recursivelyDeletePackage()builds the trigger reference for each rule with the wrong field name:This object is passed straight into
ow.triggers.delete(...), which resolves to@adobe/aio-lib-runtime's wrappedTriggers.delete()(src/triggers.js):Since the passed-in object only has
triggerName(notname),options.nameisundefined. This is then passed toopenwhisk-client-js'sFeeds.feed(), which validates thetriggerparam and throws:Impact
Because
Promise.all(deleteEntitiesPromises)rejects as soon as any one deletion throws, the trailingow.packages.delete(pkg)call inrecursivelyDeletePackagenever executes. This means:feeds.delete()call throws before reaching the underlying HTTP call.Repro steps
aio app deploy(oraio rt trigger create+aio rt rule createdirectly).aio rt package delete <packageName> --recursiveError: failed to delete the package: Missing mandatory trigger parameter from options.Suggested fix
In
recursivelyDeletePackage, usenameinstead oftriggerNamewhen building the trigger reference:Environment
aio-cli-plugin-app: 14.8.1 (observed viaaio info)aio-cli: 11.1.2