diff --git a/docs/workflows/overview.mdx b/docs/workflows/overview.mdx
index fcf66c5c3..f728d3e6e 100644
--- a/docs/workflows/overview.mdx
+++ b/docs/workflows/overview.mdx
@@ -10,7 +10,7 @@ In this section we will review the Workflow components.
## Triggers
When you run alert with the CLI using `keep run`, the CLI run the alert regardless of the triggers.
A trigger is an event that starts the workflow. It could be a manual trigger, an alert, or an interval depending on your use case.
-Keep support three types of triggers:
+Keep support four types of triggers:
### Manual trigger
```
# run manually
@@ -28,6 +28,17 @@ triggers:
value: cloudwatch
```
+### Incident trigger
+```
+# run when incident get created, update or deleted
+# You can use multiple events, but at least one is required
+triggers:
+ - type: incident
+ events:
+ - created
+ - deleted
+```
+
### Interval trigger
```
# run every 10 seconds
diff --git a/keep-ui/app/workflows/[workflow_id]/workflow-execution-table.tsx b/keep-ui/app/workflows/[workflow_id]/workflow-execution-table.tsx
index 6ca7c1748..1a66001ee 100644
--- a/keep-ui/app/workflows/[workflow_id]/workflow-execution-table.tsx
+++ b/keep-ui/app/workflows/[workflow_id]/workflow-execution-table.tsx
@@ -113,6 +113,7 @@ function getTriggerIcon(triggered_by: string) {
case "Manual": return FaHandPointer;
case "Scheduler": return PiDiamondsFourFill;
case "Alert": return HiBellAlert;
+ case "Incident": return HiBellAlert;
default: return PiDiamondsFourFill;
}
}
@@ -159,6 +160,9 @@ export function ExecutionTable({
case triggered_by.substring(0, 6) === "manual":
valueToShow = "Manual";
break;
+ case triggered_by.substring(0, 8) === "incident":
+ valueToShow = "Incident";
+ break;
}
}
diff --git a/keep-ui/app/workflows/builder/CustomNode.tsx b/keep-ui/app/workflows/builder/CustomNode.tsx
index 8d7e43ea9..c98d868fa 100644
--- a/keep-ui/app/workflows/builder/CustomNode.tsx
+++ b/keep-ui/app/workflows/builder/CustomNode.tsx
@@ -16,6 +16,7 @@ import { toast } from "react-toastify";
function IconUrlProvider(data: FlowNode["data"]) {
const { componentType, type } = data || {};
if (type === "alert" || type === "workflow" || type === "trigger" || !type) return "/keep.png";
+ if (type === "incident" || type === "workflow" || type === "trigger" || !type) return "/keep.png";
return `/icons/${type
?.replace("step-", "")
?.replace("action-", "")
diff --git a/keep-ui/app/workflows/builder/ReactFlowEditor.tsx b/keep-ui/app/workflows/builder/ReactFlowEditor.tsx
index 19e192798..3cbea77ea 100644
--- a/keep-ui/app/workflows/builder/ReactFlowEditor.tsx
+++ b/keep-ui/app/workflows/builder/ReactFlowEditor.tsx
@@ -25,7 +25,7 @@ const ReactFlowEditor = ({
const [isOpen, setIsOpen] = useState(false);
const stepEditorRef = useRef(null);
const containerRef = useRef(null);
- const isTrigger = ['interval', 'manual', 'alert'].includes(selectedNode || '')
+ const isTrigger = ['interval', 'manual', 'alert', 'incident'].includes(selectedNode || '')
const saveRef = useRef(false);
useEffect(()=>{
if(saveRef.current && synced){
@@ -34,7 +34,6 @@ const ReactFlowEditor = ({
}
}, [saveRef?.current, synced])
-
useEffect(() => {
setIsOpen(true);
if (selectedNode) {
@@ -123,11 +122,11 @@ const ReactFlowEditor = ({