$npx -y skills add digitalocean-labs/do-app-platform-skills --skill migrationMigrate applications from Heroku, AWS, Render, Railway, Fly.io, or Docker Compose to DigitalOcean App Platform. Use when converting existing apps, mapping services, refactoring platform-specific code, or creating app specs from other platform configurations.
| 1 | # App Platform Migration Skill |
| 2 | |
| 3 | Migrate existing applications to DigitalOcean App Platform with honest capability assessment. |
| 4 | |
| 5 | ## Philosophy |
| 6 | |
| 7 | This skill is an honest partner, not a magic wand. It: |
| 8 | |
| 9 | 1. **Analyzes thoroughly** before proposing changes |
| 10 | 2. **Maps what it can** with confidence |
| 11 | 3. **Acknowledges gaps** clearly and specifically |
| 12 | 4. **Asks before proceeding** when uncertain |
| 13 | 5. **Never guesses** or ignores incompatibilities |
| 14 | |
| 15 | > **Tip**: For complex multi-step migrations, use the **planner** skill first. For all available skills, see [root SKILL.md](../../SKILL.md). |
| 16 | |
| 17 | --- |
| 18 | |
| 19 | ## Quick Decision |
| 20 | |
| 21 | ``` |
| 22 | What's your source platform? |
| 23 | ├── Heroku (Procfile, app.json, heroku.yml) → See Heroku Deep Chapter below |
| 24 | ├── Docker Compose → See Quick Start below |
| 25 | ├── Render/Railway/Fly.io → See Quick Start below |
| 26 | ├── AWS ECS/App Runner → Complex migration, see reference |
| 27 | └── Just Dockerfile → See Quick Start below |
| 28 | ``` |
| 29 | |
| 30 | --- |
| 31 | |
| 32 | ## Supported Platforms |
| 33 | |
| 34 | | Platform | Config Files | Support Level | |
| 35 | |----------|--------------|---------------| |
| 36 | | **Heroku** | `Procfile`, `app.json`, `heroku.yml` | Full (deep chapter) | |
| 37 | | **Docker Compose** | `docker-compose.yml` | Full | |
| 38 | | **Render** | `render.yaml` | Full | |
| 39 | | **Railway** | `railway.json`, `railway.toml` | Full | |
| 40 | | **Fly.io** | `fly.toml` | Full | |
| 41 | | **AWS ECS** | Task Definition JSON | Partial | |
| 42 | | **AWS App Runner** | `apprunner.yaml` | Partial | |
| 43 | | **Generic Docker** | `Dockerfile` only | Full | |
| 44 | |
| 45 | --- |
| 46 | |
| 47 | ## Migration Workflow |
| 48 | |
| 49 | ``` |
| 50 | Phase 1: DISCOVERY |
| 51 | ├── Clone/access repository |
| 52 | ├── Detect source platform |
| 53 | ├── Analyze architecture |
| 54 | └── Inventory all services |
| 55 | |
| 56 | Phase 2: MAPPING |
| 57 | ├── Map services → App Platform components |
| 58 | ├── Map databases → Managed databases |
| 59 | ├── Map storage → Spaces |
| 60 | ├── Map secrets → GitHub Secrets |
| 61 | └── Identify unmappable items → REPORT TO USER |
| 62 | |
| 63 | Phase 3: REFACTORING |
| 64 | ├── Create target branch(es) |
| 65 | ├── Update environment variables |
| 66 | ├── Remove platform-specific code |
| 67 | ├── Update Dockerfile if needed |
| 68 | └── Generate app spec |
| 69 | |
| 70 | Phase 4: VALIDATION |
| 71 | ├── Validate: doctl apps spec validate |
| 72 | ├── Review changes with user |
| 73 | └── Generate migration checklist |
| 74 | |
| 75 | Phase 5: HANDOFF |
| 76 | ├── Push branches to repo |
| 77 | ├── Provide manual steps checklist |
| 78 | └── Suggest deployment skill |
| 79 | ``` |
| 80 | |
| 81 | --- |
| 82 | |
| 83 | ## Quick Start |
| 84 | |
| 85 | ### Basic Migration |
| 86 | |
| 87 | ```bash |
| 88 | # User provides repo URL |
| 89 | "Migrate this app to App Platform: https://github.com/myorg/myapp" |
| 90 | |
| 91 | # AI will: |
| 92 | # 1. Clone and analyze |
| 93 | # 2. Detect platform |
| 94 | # 3. Present mapping proposal |
| 95 | # 4. Ask for approval |
| 96 | # 5. Create branch with refactored code + app spec |
| 97 | ``` |
| 98 | |
| 99 | ### With Branch Specification |
| 100 | |
| 101 | ```bash |
| 102 | "Migrate my Heroku app. Put test config in 'migrate/test', prod in 'migrate/prod'" |
| 103 | ``` |
| 104 | |
| 105 | **Full workflows**: See [workflow-examples.md](reference/workflow-examples.md) |
| 106 | |
| 107 | --- |
| 108 | |
| 109 | ## Heroku Migration (Deep Chapter) |
| 110 | |
| 111 | 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. |
| 112 | |
| 113 | **Start here**: Read **[heroku-overview.md](reference/heroku/heroku-overview.md)** to determine the migration mode (Q&A, Guided, or Auto-Migrate), then follow the routing to: |
| 114 | |
| 115 | - **[heroku-concepts.md](reference/heroku/heroku-concepts.md)** — Heroku config file schemas, CLI commands, buildpack detection, pipeline structure |
| 116 | - **[heroku-mapping.md](reference/heroku/heroku-mapping.md)** — Component types, build config, env vars, instance sizes, networking, regions |
| 117 | - **[heroku-addons.md](reference/heroku/heroku-addons.md)** — Add-on detection from app.json, DO managed service equivalents, external alternatives |
| 118 | - **[heroku-workflows.md](reference/heroku/heroku-workflows.md)** — Step-by-step procedures for Q&A, Guided, and Auto-Migrate modes |
| 119 | |
| 120 | ### Quick Mapping (Heroku) |
| 121 | |
| 122 | | Heroku | App Platform | |
| 123 | |--------|--------------| |
| 124 | | `web` process | `services` | |
| 125 | | `worker` process | `workers` | |
| 126 | | `release` phase | `jobs` (PRE_DEPLOY) | |
| 127 | | `heroku-postgresql` | Managed Postgres | |
| 128 | | `heroku-redis` | Managed Valkey | |
| 129 | | Config Vars | GitHub Secrets | |
| 130 | | Pipelines | GitHub Actions | |
| 131 | | Review Apps | Preview environments | |
| 132 | | Heroku Scheduler | `jobs` (CRON_TRIGGER) | |
| 133 | |
| 134 | **Full mapping**: See [heroku-mapping.md](reference/heroku/heroku-mapping.md) |
| 135 | |
| 136 | --- |
| 137 | |
| 138 | ## Quick Mapping Reference |
| 139 | |
| 140 | ### Docker Compose |
| 141 | |
| 142 | | Docker Compose | App Platform | |
| 143 | |----------------|--------------| |
| 144 | | `services.<name>.ports` | `services` | |
| 145 | | `services.<name>` (no ports) | `workers` | |
| 146 | | `services.postgres` | Managed Postgres | |
| 147 | | `services.redis` | Managed Valkey | |
| 148 | | `volumes` | Spaces (no persistent volumes) | |
| 149 | |
| 150 | **Full mapping tables**: See [platfo |