Несколько раз перечитал, но всё равно непонятно.
finalizedBy, похоже, является единственным способом что-то сделать после падения таски.
Я когда-то предлагал --continue, но оно продложит выполнять _оставшиеся_ таски, а те, которые зависели от упавшей не будут.
при этом, configure { if(state.executed) работать не будет, т.к. ваш if выполнится в момент конфигурации проекта, ещё до запуска тасок, и на статусы смотреть ещё рано. Статусы нужно где-то в onlyIf проверять.
Поэтому, да, ваш выбор, похоже:
a) finalizedBy + onlyIf с проверкой на статус smokeTest (сходу не скажу, но, да, нужно играться с state.executed, state.failure и т.п. — надо проверить как там в случае up-to-date, from-cache и т.п.)
б) добавлять try-catch в саму smoke test таску
в) бахнуть какой-нибудь gradle.taskGraph.afterTask