DigitalOcean App Platform, from your iPhone
DigitalOcean App Platform is a fully managed platform as a service that deploys applications from Git repositories or container images. Duskwatch is an independent iPhone app for DigitalOcean, in development; it shows which version of each app is live, why a deploy failed and what changed, streams the logs, and lets you roll back, redeploy or restart behind Face ID.
Updated
What's live right now
The first question after a failed release is whether users are affected. Each app opens on a deploy card that answers it: the commit that is serving traffic, since when, and whether a newer deployment is building, failed or was cancelled. Below it sit the components, so you can see that the api service is healthy while a worker keeps restarting.
Still live: 3f2a91c · since 22:40
Latest deploy failed · Likely cause: api didn't pass its health check
Failed the same way 3 times in a row
When a deploy fails
If you turn on alerts, a failed deploy sends a push that says the important part first: the previous version is still live. Opening it shows the step that failed and a likely cause read from DigitalOcean's failure reason, the app spec and any logs you have opened. The cause is labelled as likely, never stated as fact. When the same reason repeats, the screen says how many deploys in a row failed that way, and a spec diff with a compare link to your Git host shows what changed.
| Likely cause | What it usually means |
|---|---|
| api ran out of memory | The instance size is too small for the new build or a leak appeared |
| api didn't pass its health check | The app started but did not answer on its health check in time |
| Build failed in web | The build step failed; nothing new reached users |
| Pre-deploy job migrate failed | Nothing was deployed; the live version is unchanged |
| worker crashed on start | The new version exits as soon as it runs |
"api-prod: deploy failed" · acme-prod · The previous version is still live.
App Platform alerts, including "Failed deployment", are sent by email or Slack. By default, a new app gets email alerts for failed deployments and failed domain configurations.
DigitalOcean docs: App Platform alerts (external link), verified
Logs and live tail
Logs open on the type that best explains the app's state: the build log after a build failure, the deploy log after a failed rollout, and the runtime log when the app is up. You can switch to crash logs, follow the runtime log live, and share a short excerpt instead of the whole log. Logs travel only between your iPhone and DigitalOcean. More on the logs page.
App Platform keeps build, deploy, runtime and crash logs. Build and deploy logs are retained for 90 days; to keep runtime logs, you forward them to an external provider.
DigitalOcean docs: view App Platform logs (external link), verified
Roll back, redeploy, restart or cancel
App actions follow the same rule as every write: a sheet names the action, the app and the team, and Face ID confirms it. Rolling back and reverting a rollback are armed with a swipe ("Swipe to roll back api-prod"); the rest are a tap.
| Action | Confirmed with | When to use it |
|---|---|---|
| Roll back | Swipe, then Face ID | A release broke something and the previous one worked |
| Commit the rollback | Tap, then Face ID | The older version is the one to keep; deploys resume |
| Revert the rollback | Swipe, then Face ID | Go back to the app spec from before the rollback |
| Redeploy | Tap, then Face ID | Build and deploy the latest commit on its branch, optionally with a forced rebuild |
| Restart | Tap, then Face ID | Components are stuck but the code is fine |
| Cancel deployment | Tap, then Face ID | Stop a deployment that should not go out |
You can roll back to any of the ten most recent successful deployments. A rollback restores the code, configuration and app spec, but not database data.
DigitalOcean docs: manage App Platform deployments (external link), verified
By default, a rollback pins the app to the rollback deployment, so no new deployments run, manual or on push, until the rollback is committed or reverted.
DigitalOcean docs: create an app rollback (external link), verified
Because a pinned app ignores your pushes, the app keeps a finding on it until you decide: "Pinned to a rollback: pushes won't deploy".
Health, workers and jobs
- "api isn't serving" or "api is unhealthy" when components stop passing health checks; with alerts on, this is a push, followed by one when it is healthy again.
- "worker keeps restarting" when a component restarts again and again.
- "Job nightly-report failed its last run" for scheduled jobs; a failed pre-deploy job shows as the deploy's likely cause instead.
- "Last deploy took 3× longer than usual", measured against the app's own recent deploys.
- Failed domains, so a custom domain that stopped serving is not a surprise.
What Duskwatch doesn't do here
- No creating, scaling or deleting apps.
- No editing the app spec or environment variables; their values are never read.
- No log storage: logs are fetched from DigitalOcean when you open them.
- No alerts on log lines or log patterns.
- No Functions or container registry views.
Questions
Does App Platform tell me when a deploy fails?
Yes, by email by default, and you can add Slack. Duskwatch adds a push on your iPhone that says whether the previous version is still live.
Is the previous version still live after a failed deploy?
Usually yes: a failed deployment does not replace the one serving traffic. The deploy card shows which commit is live and since when, for example "Still live: 3f2a91c · since 22:40".
How do I roll back an App Platform app from my phone?
Open the app, choose Roll back, swipe to arm it and confirm with Face ID. Afterwards, commit the rollback to resume deploys, or revert it.
Can I see what changed in a failed deploy?
Yes. The deployment shows a spec diff and a compare link to your Git host, next to the step that failed and its likely cause.
What about workers and jobs?
Workers that keep restarting and jobs that failed their last run appear as findings on the app. Their logs are one tap away.