# Discourse Workflows

**URL:** <https://meta.discourse.org/t/discourse-workflows/407100>\
**Category:** Plugin\
**Tags:** official, included-in-core, workflows\
**Created:** [July 13, 2026, 1:54am UTC](https://meta.discourse.org/t/discourse-workflows/407100 "2026-07-13T01:54:16Z")\
**Posts on this page:** 1\
**Showing post:** 35

<div class="post-metadata">

**Author:** ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)\
**Post date:** [August 26, 2026, 6:46pm UTC](https://meta.discourse.org/t/discourse-workflows/407100/35 "2026-08-26T18:46:09Z")

</div>

@j.jaffeux Following up on my question above, I’ve opened a PR which adds an Event action to Workflows:

> <https://github.com/discourse/discourse/pull/42932>
>
> \## What does this change?
> 
> Adds an \`Event\` action to Discourse Workflows, allo…wing a workflow to:
> 
> \- Close an event
> \- Open an event
> 
> The action accepts a topic ID and optional actor. The event is resolved from the
> topic's first post, consistent with the Events plugin's existing requirement that
> an event belongs to the first post.
> 
> Rather than updating the event record directly, the action updates the \`\[event\]\`
> block in the post raw using the normal workflow post-editing path. This allows the
> existing Events post-edit synchronization to update the persisted event state.
> 
> Edits use the workflow execution context's \`edit\_post\`, which applies the actor's
> normal post-edit permissions and uses \`skip\_workflows: true\` to avoid recursively
> triggering workflows from the event state change.
> 
> The action is idempotent when the event is already in the requested state.
> 
> \## Example
> 
> A \`Post created\` trigger can use:
> 
> \- Action: \`Event\` → \`Close event\`
> \- Topic ID: \`Input → topic.id\`
> \- Performed by user: System user
> 
> This allows, for example, a reply to an event topic to automatically close the
> event without closing the topic itself.
> 
> \## Testing
> 
> \- RuboCop: no offenses
> \- Syntax Tree: all files match expected format
> \- New Event workflow specs after final rebase: 8 examples, 0 failures
> \- Full \`discourse-events\` suite before final formatting/rebase: 1124 examples, 0 failures
> \- Manual browser test confirmed:
> - \`Post created\` → \`Event / Close event\`
> - dynamic \`topic.id\`
> - System user actor
> - replying to the topic immediately changed the event to \`Closed\`
> - the topic itself remained open
> - the change appeared live without a page refresh
> - workflow execution completed successfully
> 
> \## Screenshots
> 
> \### Event workflow actions
> 
> \<img width="1920" height="965" alt="workflow\_screen\_with\_events\_menu" src="https://github.com/user-attachments/assets/d283e9e6-e1db-4f5e-8cf9-3ed5c31f55fc" /\>
> 
> \### Configuring the Event action with the triggering topic
> 
> \<img width="1921" height="1003" alt="configuring\_events\_step" src="https://github.com/user-attachments/assets/725e28ca-f8f2-45f3-b124-4c3310c69eb9" /\>
> 
> \### Event automatically closed after the workflow runs
> 
> \<img width="1920" height="1000" alt="event\_topic\_after\_auto\_close" src="https://github.com/user-attachments/assets/a66138ad-bbaa-498a-9d87-2bd1eef9e495" /\>

It adds:

- Event → Close event
- Event → Open event

The action takes a topic ID, resolves the event from the topic’s first post, and updates the event through the normal post-edit/Event synchronisation path.

I’ve tested the original direction of the use case with:

Post created → Event / Close event

using `Input → topic.id`.

A reply to the event topic then closes the event while leaving the topic itself open, and the change appears live in the UI.

The PR includes unit/integration coverage, and the full discourse-events suite passed with 1124 examples / 0 failures.

This addresses the Event action side of the use case I mentioned above. The user/category/email-origin conditions can then be handled separately by the workflow trigger/conditions.

---

_[View the full topic](https://meta.discourse.org/t/discourse-workflows/407100)._
