Skip to content

Notification subscriptions (not released)

Shoehorn sends notifications for important events across the platform.

ChannelConfigurationUse Case
In-AppAlways enabledAll notifications
EmailSMTP configurationCritical alerts, governance deadlines
SlackIncoming webhook URL or bot tokenTeam channels, on-call alerts
WebhooksURL + secretExternal tool integration

These are the events Shoehorn can notify on. A subscription routes one or more of these to a channel.

Event typeDescription
k8s.workload.unhealthyA workload is unhealthy
k8s.workload.degradedA workload is running degraded
k8s.workload.high_restartsA workload is restarting more than expected
k8s.workload.oom_killA container was killed for running out of memory
k8s.workload.latest_tagA workload runs an image pinned to a mutable tag
manifest.invalidAn entity manifest failed validation
forge.run.failedA Forge workflow run failed
approval.pendingA Forge run is waiting for your approval
entity.license.expiring_soonAn entity’s license is close to expiry
entity.license.expiredAn entity’s license has expired
governance.action.requiredA governance action needs your attention
cloud.maintenance.scheduledA cloud provider scheduled maintenance
cloud.maintenance.urgentA cloud provider announced urgent maintenance
security.cveA CVE was found affecting an entity
security.secretA leaked secret was detected
scorecard.failedAn entity failed a scorecard
k8s.security.violationA Kubernetes security rule was violated
subscription.auto_pausedA subscription was paused after repeated delivery failures

To enable email notifications, configure SMTP:

Terminal window
SMTP_ENABLED=true
SMTP_HOST=mail.smtp2go.com
SMTP_PORT=587
SMTP_USERNAME=shoehorn
SMTP_PASSWORD=your-password
SMTP_FROM=noreply@shoehorn.example.com

Until SMTP is configured, the email channel is hidden in the subscription wizard and the API rejects email subscriptions.

A Slack channel runs in one of two modes. Pick the one that fits how your team works.

Webhook mode posts to a single Slack channel through an Incoming Webhook URL.

  1. Create a Slack app at api.slack.com/apps.
  2. Open Incoming Webhooks and turn it on.
  3. Add a new webhook and pick the channel it posts to.
  4. Copy the webhook URL into the subscription.

Bot mode uses a bot token, so one app can post to any channel you choose.

  1. Create a Slack app at api.slack.com/apps.
  2. Under OAuth & Permissions, add the bot token scopes chat:write and chat:write.public. The second scope lets the bot post to channels it hasn’t joined.
  3. Install the app to your workspace.
  4. Copy the bot token. It starts with xoxb-.
  5. Invite the bot to the target channel, then set the channel on the subscription.

A Slack or webhook channel needs a secret: a Slack webhook URL, a Slack bot token, or a webhook signing key. You can give it to Shoehorn two ways.

Save it in the portal. Paste the secret into the subscription. Shoehorn encrypts it before saving and never shows it again. After you save, the field just reads “secret is set”. This is the usual way.

Reference one from your Helm values. If the secret is already defined in your deployment’s Helm chart under notifications.secrets, point the subscription at it instead of pasting a value. Switch the field to “Reference an existing secret” and enter secret://<name>, using the name from your Helm values. The secret stays in your cluster and never reaches Shoehorn’s database.

Either way, Shoehorn never shows the secret value back in the UI.

Users can manage their notification preferences in Profile > Notification subscriptions.