Hey Frappe Community,
We were shipping at a fast pace across multiple apps, and one recurring bottleneck was the deployment feedback loop. A single Frappe Cloud deployment can take ~20–40 minutes (sometimes more). If another app update was ready during that window, we’d either wait or lose momentum/context.
To solve this, we built a small “deployment middleware” service that automates the cycle and improves visibility:
What it does
-
Runs an automated deployment cycle on a schedule (hourly).
-
Uses the Press API to pick the latest available updates for allowed apps and triggers a deploy/update.
-
Listens to Frappe Cloud webhooks (bench/site/deploy candidate build events) to track progress.
-
Sends structured Google Chat cards (and replies in the same thread) so stakeholders can see:
-
which environment is deploying
-
which apps are included in this cycle
-
live status updates and failure details
-
GitHub integration
-
GitHub webhook events (PR opened/closed/merged + workflow results) are posted into a dedicated Chat thread per PR.
-
When a PR is merged, the next deployment cycle thread provides the “what’s deploying now” context, closing the loop from merge → deploy → status.
Stack
-
Python + Flask, SQLAlchemy + Postgres (Neon), deployed on Render
-
Simple DB-backed locking/state to avoid overlapping deployments and keep Chat thread IDs
If anyone has feedback or best practices around webhook reliability, deployment locking patterns, or linking PRs to deploy cycles in Frappe Cloud, I’d love to learn.