mcpField
D
deployment

deployment

github.com/digitalocean-labsCloud & DevOps3895 installsUpdated 6d ago
Repository

About deployment

A skill for deploying applications to DigitalOcean App Platform through GitHub Actions and `app_action`, using an app spec stored in the repository. It guides teams through environment setup, workflow selection, validation, and troubleshooting.

Key features

  1. 01GitHub Actions deployment workflows
  2. 02App spec creation and updates
  3. 03Staging and production setup
  4. 04Pull request preview guidance
  5. 05Deployment troubleshooting

Use cases

  1. 01Deploying app spec and code changes from GitHub
  2. 02Separating staging and production deployments
  3. 03Previewing changes before merging
  4. 04Diagnosing failed App Platform builds

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/digitalocean-labs/do-app-platform-skills --skill deployment

After installing, type/deploymentin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

README.md
reference/
command-reference.md
debug-container-deployment.md
initial-setup.md
workflow-templates.md

Details

From the project README

Deployment Skill

Deploy to App Platform using GitHub Actions and the app_action workflow.

Philosophy: PUSH Mode Deployment

This skill focuses on PUSH mode — where you define infrastructure as code and GitHub Actions drives deployment.

PULL MODE (Console-driven) — NOT covered by this skill
• Go to DigitalOcean Console → Create App → Point to GitHub
• App Platform auto-generates app spec
• Good for: Quick starts, manual one-offs

PUSH MODE (CLI/Actions-driven) — THIS SKILL
• Define app spec in repo (.do/app.yaml)
• Use GitHub Actions + app_action to deploy
• Good for: CI/CD, automation, GitOps, multi-environment

Tip: For complex projects, consider the planner skill for staged approaches. See root SKILL.md for all skills.


Quick Decision

Using GitHub Actions? (RECOMMENDED)
├── YES → Use digitalocean/app_action/deploy@v2
│         • Handles spec updates AND code deployments
│         • Manages app creation if doesn't exist
│         • Supports PR previews
│
└── NO (Manual/Scripting)
    ├── Spec changed? → doctl apps update --spec
    └── Code only? → doctl apps create-deployment
CommandPurposeWhen to Use
doctl apps create --specCreate new appFirst deployment only
doctl apps update --specUpdate app specConfig changes
doctl apps create-deploymentTrigger rebuildCode changes only
app_action v2Both spec + rebuildRecommended: Handles everything

Quick Start: Environment Setup

# 1. Create DigitalOcean projects
doctl projects create --name "myapp-staging" --environment "Staging"
doctl projects create --name "myapp-production" --environment "Production"

# 2. Create GitHub environments
gh api --method PUT repos/:owner/:repo/environments/staging
gh api --method PUT repos/:owner/:repo/environments/production

# 3. Set secrets per environment (user fills in values)
gh secret set DIGITALOCEAN_ACCESS_TOKEN --env staging
gh secret set DIGITALOCEAN_ACCESS_TOKEN --env production
gh variable set DO_PROJECT_ID --env staging --body "PROJECT_ID"
gh variable set DO_PROJECT_ID --env production --body "PROJECT_ID"

Full setup guide: See initial-setup.md


Quick Start: Basic Workflow

# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: staging
    steps:
      - uses: actions/checkout@v4
      - uses: digitalocean/app_action/deploy@v2
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
        with:
          token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
          project_id: ${{ vars.DO_PROJECT_ID }}

All workflow templates: See workflow-templates.md


Workflow Selection

ScenarioWorkflowReference
Simple single-environmentMinimum viableworkflow-templates.md
Staging + productionEnvironment-basedworkflow-templates.md
Production needs approvalProtected environmentworkflow-templates.md
Test PRs before mergePR previewsworkflow-templates.md
Multiple envs, one workflowUnified workflowworkflow-templates.md
Need to revertRollbackworkflow-templates.md

Quick Start: Debug Container

For complex apps with multiple integrations, deploy a debug container first:

# Add to .do/app.yaml temporarily
workers:
  - name: debug
    image:
      registry_type: GHCR
      registry: ghcr.io
      repository: bikramkgupta/do-app-debug-container-python
      tag: latest
    instance_size_slug: apps-s-1vcpu-2gb
    envs:
      - key: DATABASE_URL
        scope: RUN_TIME
        value: ${db.DATABASE_URL}
# Connect and verify
doctl apps console $APP_ID debug
./diagnose.sh

Full guide: See debug-container-deployment.md


Quick Command Reference

TaskCommand
Validate specdoctl apps spec validate .do/app.yaml
Create appdoctl apps create --spec .do/app.yaml --project-id $PROJECT_ID
Update appdoctl apps update $APP_ID --spec .do/app.yaml
Redeploydoctl apps create-deployment $APP_ID
View logsdoctl apps logs $APP_ID --type run
Set secretgh secret set NAME --env staging
List secretsgh secret list --env staging

Full reference: See command-reference.md


Reference Files

FileContent
initial-setup.mdProjects, environments, secrets, app spec setup
workflow-templates.mdAll GitHub Actions workflow YAML templates
debug-container-deployment.mdDebug container for infrastructure verification
command-reference.mdComplete doctl and gh CLI commands

Quick Troubleshooting

IssueSymptomFix
App spec not foundError: spec file not foundEnsure .do/app.yaml exists
Invalid token401 UnauthorizedCheck DIGITALOCEAN_ACCESS_TOKEN secret
Project not foundproject_id is invalidVerify DO_PROJECT_ID variable
Build failsBuildJobFailedCheck build logs: doctl apps logs $APP_ID --type build
Env vars literalValues show ${...}Check bindable variable names match

Opinionated Defaults

DecisionDefaultRationale
CI PlatformGitHub ActionsBest DO integration via app_action
Deploy Actionapp_action/deploy@v2Handles spec + deploy in one step
SecretsGitHub Secrets per environmentSecure, AI never sees values
deploy_on_pushfalse in app specLet GitHub Actions control deploys
App spec location.do/app.yamlConventional, matches DO button

Integration with Other Skills

  • ← designer: Creates .do/app.yaml that deployment consumes
  • ← postgres: Handles database setup, stores DATABASE_URL in GitHub Secrets
  • → troubleshooting: Debug deployment failures
  • ← devcontainers: Ensure local dev matches production

Production Checklist

  • DO Projects created with environment tags
  • GitHub environments created (staging, production)
  • DIGITALOCEAN_ACCESS_TOKEN secret set per environment
  • DO_PROJECT_ID variable set per environment
  • .do/app.yaml with deploy_on_push: false
  • .github/workflows/deploy.yml created
  • Production protection rules enabled
  • Staging deployment tested
  • Production deployment tested

Documentation Links

Comments

Markdown supported