app-platform-migration
About app-platform-migration
app-platform-migration is a skill for moving existing applications to DigitalOcean App Platform. It supports teams migrating from several cloud platforms or Docker configurations by analyzing and mapping the architecture, identifying incompatibilities, and generating an app specification and migration checklist.
Key features
- 01Detect source platforms and configuration files
- 02Analyze architecture and map app components
- 03Generate an App Platform specification
- 04Create migration checklists and environment templates
- 05Identify incompatibilities and migration limits
Use cases
- 01Migrate a Heroku app to App Platform
- 02Move a Docker Compose application
- 03Assess a Render, Railway, or Fly.io project
- 04Plan an AWS ECS or App Runner migration
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ digitalocean-labs/ do-app-platform-skills --skill app-platform-migrationAfter installing, type/app-platform-migrationin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
README.mdreference/app-spec-generation.mdcode-refactoring.mdplatform-mappings.mdworkflow-examples.mdreference/heroku/heroku-addons.mdheroku-concepts.mdheroku-mapping.mdheroku-overview.mdheroku-workflows.mdscripts/analyze_architecture.pydetect_platform.pygenerate_app_spec.pygenerate_checklist.pytemplates/env-mapping.mdservice-mapping.mdDetails
From the project READMEApp Platform Migration Skill
Migrate existing applications to DigitalOcean App Platform with honest capability assessment.
Philosophy
This skill is an honest partner, not a magic wand. It:
- Analyzes thoroughly before proposing changes
- Maps what it can with confidence
- Acknowledges gaps clearly and specifically
- Asks before proceeding when uncertain
- Never guesses or ignores incompatibilities
Tip: For complex multi-step migrations, use the planner skill first. For all available skills, see root SKILL.md.
Quick Decision
What's your source platform?
├── Heroku (Procfile, app.json, heroku.yml) → See Heroku Deep Chapter below
├── Docker Compose → See Quick Start below
├── Render/Railway/Fly.io → See Quick Start below
├── AWS ECS/App Runner → Complex migration, see reference
└── Just Dockerfile → See Quick Start below
Supported Platforms
| Platform | Config Files | Support Level |
|---|---|---|
| Heroku | Procfile, app.json, heroku.yml | Full (deep chapter) |
| Docker Compose | docker-compose.yml | Full |
| Render | render.yaml | Full |
| Railway | railway.json, railway.toml | Full |
| Fly.io | fly.toml | Full |
| AWS ECS | Task Definition JSON | Partial |
| AWS App Runner | apprunner.yaml | Partial |
| Generic Docker | Dockerfile only | Full |
Migration Workflow
Phase 1: DISCOVERY
├── Clone/access repository
├── Detect source platform
├── Analyze architecture
└── Inventory all services
Phase 2: MAPPING
├── Map services → App Platform components
├── Map databases → Managed databases
├── Map storage → Spaces
├── Map secrets → GitHub Secrets
└── Identify unmappable items → REPORT TO USER
Phase 3: REFACTORING
├── Create target branch(es)
├── Update environment variables
├── Remove platform-specific code
├── Update Dockerfile if needed
└── Generate app spec
Phase 4: VALIDATION
├── Validate: doctl apps spec validate
├── Review changes with user
└── Generate migration checklist
Phase 5: HANDOFF
├── Push branches to repo
├── Provide manual steps checklist
└── Suggest deployment skill
Quick Start
Basic Migration
# User provides repo URL
"Migrate this app to App Platform: https://github.com/myorg/myapp"
# AI will:
# 1. Clone and analyze
# 2. Detect platform
# 3. Present mapping proposal
# 4. Ask for approval
# 5. Create branch with refactored code + app spec
With Branch Specification
"Migrate my Heroku app. Put test config in 'migrate/test', prod in 'migrate/prod'"
Full workflows: See workflow-examples.md
Heroku Migration (Deep Chapter)
For Heroku-specific migrations, a comprehensive chapter is available with deep knowledge of Procfile, app.json, heroku.yml, buildpacks, pipelines, add-ons, and CLI mapping.
Start here: Read heroku-overview.md to determine the migration mode (Q&A, Guided, or Auto-Migrate), then follow the routing to:
- heroku-concepts.md — Heroku config file schemas, CLI commands, buildpack detection, pipeline structure
- heroku-mapping.md — Component types, build config, env vars, instance sizes, networking, regions
- heroku-addons.md — Add-on detection from app.json, DO managed service equivalents, external alternatives
- heroku-workflows.md — Step-by-step procedures for Q&A, Guided, and Auto-Migrate modes
Quick Mapping (Heroku)
| Heroku | App Platform |
|---|---|
web process | services |
worker process | workers |
release phase | jobs (PRE_DEPLOY) |
heroku-postgresql | Managed Postgres |
heroku-redis | Managed Valkey |
| Config Vars | GitHub Secrets |
| Pipelines | GitHub Actions |
| Review Apps | Preview environments |
| Heroku Scheduler | jobs (CRON_TRIGGER) |
Full mapping: See heroku-mapping.md
Quick Mapping Reference
Docker Compose
| Docker Compose | App Platform |
|---|---|
services.<name>.ports | services |
services.<name> (no ports) | workers |
services.postgres | Managed Postgres |
services.redis | Managed Valkey |
volumes | Spaces (no persistent volumes) |
Full mapping tables: See platform-mappings.md
Unmappable Items (Quick Reference)
| Source | Issue | Options |
|---|---|---|
| CloudFront CDN | No DO CDN | External CDN (Cloudflare) or skip |
| AWS Secrets Manager | Different model | GitHub Secrets |
| Persistent volumes | Not supported | Spaces for files, managed DB for data |
| ARM containers | AMD64 only | Rebuild for AMD64 |
Full list: See platform-mappings.md
Output Artifacts
| File | Purpose |
|---|---|
.do/app.yaml | App Platform specification |
.do/deploy.template.yaml | Deploy to DO button |
MIGRATION.md | Migration checklist and status |
.env.example | Environment variable template |
App spec templates: See app-spec-generation.md
Scripts
| Script | Purpose |
|---|---|
scripts/detect_platform.py | Detect source platform from files |
scripts/analyze_architecture.py | Analyze application architecture |
scripts/generate_app_spec.py | Generate .do/app.yaml |
scripts/generate_checklist.py | Generate migration checklist |
Reference Files
Heroku (Deep Chapter)
- heroku-overview.md - Entry point: read first for any Heroku migration
- heroku-concepts.md - Procfile, app.json, heroku.yml, pipelines, CLI
- heroku-mapping.md - Deep Heroku → App Platform feature mapping
- heroku-addons.md - Add-on ecosystem mapping (Postgres, Redis, etc.)
- heroku-workflows.md - Migration workflows: Q&A, Guided, Auto-Migrate
General
- platform-mappings.md - All platform detection, mapping tables, gotchas
- code-refactoring.md - Env var updates, S3/Valkey migration, data migration
- workflow-examples.md - Docker Compose, AWS ECS walkthroughs
- app-spec-generation.md - Test/prod spec templates, defaults
Common Issues (Quick Fixes)
| Issue | Cause | Fix |
|---|---|---|
| App spec validation fails | Invalid YAML | Check indentation, doctl apps spec validate |
| Database connection fails | Wrong URL format | Use ${db.DATABASE_URL} binding |
| Build fails | Missing dependencies | Check Dockerfile build deps |
| Port binding fails | Wrong PORT handling | Bind to $PORT or 0.0.0.0:8080 |
| Health check fails | Wrong path | Verify /health endpoint exists |
Full troubleshooting: See code-refactoring.md
Integration with Other Skills
- → deployment: GitHub Actions workflow after migration
- → postgres: Complex database setup, schema isolation
- → devcontainers: Local dev environment post-migration
- → troubleshooting: Debug container for migration issues