Pro & Business Feature

Hook into every deploy event

Run commands before and after every build and deploy. Notify your team on Slack, Discord, Telegram, or email. Automate migrations, tests, and cleanup -- zero scripting required.

What's included

Four hook stages plus five notification channels. Full control over your deploy lifecycle.

Pre-build commands
Run scripts before your app is built -- install tools, set variables
Post-build commands
Run scripts after a successful build -- lint, test, validate artifacts
Pre-deploy hooks
Execute commands before the new container goes live -- migrations, cache warm
Post-deploy hooks
Run tasks after deployment -- seed data, health checks, cleanup
Notification channels
Slack, Discord, Telegram, email -- get notified on every deploy
Webhook URLs
POST deploy events to any external URL for custom integrations

How it works

01

Add hooks to your deploy pipeline

Open any app in the dashboard and navigate to the Hooks tab. Define shell commands for each stage of the deploy lifecycle.

02

Set commands for pre/post build and deploy

Write the exact commands you need: run database migrations, compile assets, seed data, warm caches. Standard shell -- anything your container can run.

03

Configure notification channels

Connect Slack, Discord, Telegram, email, or any webhook URL. Choose which events to notify on: success, failure, or both.

04

Every deploy triggers your hooks automatically

Push to your repo, and sh0 runs your full pipeline: pre-build, build, post-build, pre-deploy, deploy, post-deploy, notify. Every time, no exceptions.

The deploy hook pipeline

Git Push
Pre-Build Hook
Build
Post-Build Hook
Pre-Deploy Hook
Deploy
Post-Deploy Hook
Notify

Every stage is optional -- configure only the hooks you need

Everything you need

4 hook stages

Pre-build, post-build, pre-deploy, post-deploy. Full control over every phase of your deployment lifecycle.

Shell command execution

Run any shell command your container supports. Database migrations, asset compilation, cache clearing -- whatever you need.

Configurable timeouts

Set a timeout per hook (default: 60 seconds). If a hook exceeds the limit, it fails gracefully and the deploy is halted or continued based on your config.

5 notification channels

Slack, Discord, Telegram, email, and generic webhooks. Get deploy status pushed to wherever your team already communicates.

Webhook integration

POST deploy events (start, success, failure) to any URL. Integrate with your issue tracker, analytics, or custom tooling.

Deploy status in Slack/Discord

Rich notifications with app name, commit hash, duration, and status. Your team sees deploy results in real time without leaving chat.

The old way

  • x Write CI/CD pipeline YAML
  • x Configure webhook integrations manually
  • x No standard hook points
  • x Build custom notification scripts
  • x Debug failed deploys blindly
  • x Multiple tools for one workflow

The sh0 way

  • 4 built-in hook stages
  • Shell commands with timeout
  • 5 channels pre-integrated
  • Deploy status automatic
  • One dashboard for everything
  • Failure alerts instant

Questions & answers

What hook stages are available? +
Four stages: pre-build (before the Docker image is built), post-build (after a successful build), pre-deploy (before the new container replaces the old one), and post-deploy (after the new container is live and healthy).
Can I run database migrations in a hook? +
Yes. The most common use case for pre-deploy hooks is running database migrations. The command executes inside your app's container with full access to your database. If the migration fails, the deploy is aborted and the old container stays live.
What happens if a hook fails? +
By default, a failed hook aborts the deploy pipeline. Pre-build or post-build failure stops the build. Pre-deploy failure prevents the new container from going live. Post-deploy failure triggers an alert but does not roll back (the container is already running). You can mark hooks as "continue on failure" if they are non-critical.
How do notifications work? +
You configure notification channels once in the dashboard (a Slack webhook URL, a Discord channel, an email address, etc.). Then you assign channels to apps. On every deploy, sh0 sends a status message with the app name, commit, duration, and result (success or failure with error details).
Can I use webhooks to integrate with external tools? +
Yes. Add any URL as a webhook endpoint. sh0 sends a POST request with a JSON payload containing the deploy event type, app metadata, commit info, and status. Use it to trigger CI jobs, update dashboards, or notify custom systems.
Is there a timeout for hooks? +
Yes. Each hook has a configurable timeout (default: 60 seconds, max: 600 seconds). If a hook exceeds its timeout, it is killed and treated as a failure. This prevents runaway scripts from blocking your deploy pipeline indefinitely.

Automate your deploy workflow

Pre/post build and deploy hooks with instant notifications. Run migrations, seed data, notify your team -- automatically.