🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Caprover CI Deployments

by @guim4dev

Deploy apps to CapRover and set up GitHub Actions CI/CD workflows for new or existing projects. Use when the user says things like "deploy X", "trigger a dep...

Versionv1.0.0
Downloads723
TERMINAL
clawhub install caprover-ci-deploys

πŸ“– About This Skill


name: caprover-deploy description: Deploy apps to CapRover and set up GitHub Actions CI/CD workflows for new or existing projects. Use when the user says things like "deploy X", "trigger a deploy of X", "deploy branch Y to Z", "set up CI/CD for this project", "configure CapRover deploy workflow", "add deploy workflow to my repo", or asks about deployment status. Supports GitHub workflow triggers, CapRover webhook triggers, and direct CLI deploys. Also helps scaffold .github/workflows/deploy.yml, captain-definition, and GitHub secrets for any new project.

CapRover Deploy

Overview

This skill enables deploying apps to CapRover just by asking. It supports two primary strategies: 1. GitHub workflow_dispatch β€” triggers an existing CI/CD workflow (build + deploy) 2. CapRover App Token / Webhook β€” directly triggers a CapRover build/deploy

Configuration

All credentials live in a config.json file in the skill directory (gitignored).

config.json Format

{
  "caprover": {
    "url": "https://captain.example.com",
    "password": "YOUR_MASTER_PASSWORD"
  },
  "github": {
    "token": "ghp_YOUR_GITHUB_PAT",
    "owner": "your-github-username"
  },
  "apps": {
    "myapp": {
      "caprover_app_name": "myapp",
      "github_repo": "your-username/myapp",
      "github_workflow": "deploy.yml",
      "default_branch": "main",
      "caprover_app_token": "OPTIONAL_PER_APP_TOKEN",
      "caprover_webhook_url": "OPTIONAL_WEBHOOK_URL_FROM_CAPROVER_DASHBOARD"
    }
  }
}

What each credential does

| Credential | Where to get it | Purpose | |---|---|---| | caprover.url | Your CapRover server | Base URL for API calls | | caprover.password | CapRover dashboard | Master password for API auth | | github.token | GitHub β†’ Settings β†’ Developer Settings β†’ PAT | For triggering workflow_dispatch | | apps.*.caprover_app_token | App β†’ Deployment tab β†’ Enable App Token | Per-app deploy without master password | | apps.*.caprover_webhook_url | App β†’ Deployment tab β†’ Webhook URL | Trigger rebuild from configured git repo | | apps.*.github_workflow | .github/workflows/ filename | Which workflow to trigger |

Deploy Decision Flow

When user says "deploy X" (optionally "to branch Y"):

1. Read config.json
2. Look up app by name (fuzzy match)
3. Choose strategy:
   a. If github.token + github_repo + github_workflow β†’ use GitHub workflow_dispatch
   b. Else if caprover_webhook_url β†’ POST to webhook URL
   c. Else if caprover_app_token β†’ use caprover CLI
   d. Ask user for missing config
4. Execute and report result

Strategy 1: GitHub Workflow Dispatch (Recommended)

curl -X POST \
  -H "Authorization: Bearer $GITHUB_TOKEN" \
  -H "Accept: application/vnd.github+json" \
  https://api.github.com/repos/OWNER/REPO/actions/workflows/deploy.yml/dispatches \
  -d '{"ref":"main"}'

Check run status:

curl -H "Authorization: Bearer $GITHUB_TOKEN" \
  https://api.github.com/repos/OWNER/REPO/actions/runs?per_page=1

Strategy 2: CapRover Webhook Trigger

curl -X POST "WEBHOOK_URL_FROM_CONFIG"

The webhook URL is found in: CapRover Dashboard β†’ Apps β†’ [App Name] β†’ Deployment Tab β†’ Webhook URL

Strategy 3: CapRover App Token (CLI Deploy)

caprover deploy \
  --caproverUrl https://captain.example.com \
  --appToken "APP_TOKEN" \
  --appName "myapp" \
  --imageName "ghcr.io/owner/myapp:latest"

Conversational Triggers

| User says | Action | |---|---| | "deploy myapp" | Deploy default branch via best available strategy | | "deploy myapp to main" | Deploy main branch | | "deploy branch feat/ui to myapp" | GitHub dispatch with ref=feat/ui | | "trigger a deploy of myapp" | Same as deploy | | "check deploy status of myapp" | Fetch latest GitHub Actions run status | | "what apps can I deploy?" | List apps from config.json |

Setting Up a New Project for CapRover Deploy

Step 1: Choose the right workflow template

| Scenario | Template | |---|---| | Has Dockerfile, push image to ghcr.io | assets/templates/deploy-image.yml | | Node build step + tar deploy | assets/templates/deploy-tar.yml | | Staging + production environments | assets/templates/deploy-multi-env.yml |

Step 2: Create workflow file in the project

mkdir -p PROJECT/.github/workflows
cp assets/templates/deploy-image.yml PROJECT/.github/workflows/deploy.yml

Replace __APP_NAME__ with actual CapRover app name

sed -i 's/__APP_NAME__/myapp/g' PROJECT/.github/workflows/deploy.yml

Step 3: Add captain-definition (if needed for tar-based deploy)

cp assets/templates/captain-definition.json PROJECT/captain-definition

Step 4: Configure GitHub Secrets

Add these in GitHub β†’ Repo β†’ Settings β†’ Secrets and variables β†’ Actions:

| Secret name | Value | |---|---| | CAPROVER_HOST | CapRover URL, e.g. https://captain.example.com | | CAPROVER_APP_TOKEN | From CapRover App β†’ Deployment β†’ Enable App Token |

For multi-env:

  • CAPROVER_APP_PROD, CAPROVER_APP_TOKEN_PROD
  • CAPROVER_APP_STAGING, CAPROVER_APP_TOKEN_STAGING
  • Step 5: Commit and push

    cd PROJECT
    git add .github/workflows/deploy.yml captain-definition
    git commit -m "ci: add CapRover deploy workflow"
    git push
    

    Notes

  • The caprover CLI may not be installed: npm install -g caprover
  • For private repos, the GitHub token needs repo + workflow scopes
  • Always confirm the deploy was triggered (check API response or GitHub Actions UI)
  • See assets/templates/ for workflow templates
  • βš™οΈ Configuration

    All credentials live in a config.json file in the skill directory (gitignored).

    config.json Format

    {
      "caprover": {
        "url": "https://captain.example.com",
        "password": "YOUR_MASTER_PASSWORD"
      },
      "github": {
        "token": "ghp_YOUR_GITHUB_PAT",
        "owner": "your-github-username"
      },
      "apps": {
        "myapp": {
          "caprover_app_name": "myapp",
          "github_repo": "your-username/myapp",
          "github_workflow": "deploy.yml",
          "default_branch": "main",
          "caprover_app_token": "OPTIONAL_PER_APP_TOKEN",
          "caprover_webhook_url": "OPTIONAL_WEBHOOK_URL_FROM_CAPROVER_DASHBOARD"
        }
      }
    }
    

    What each credential does

    | Credential | Where to get it | Purpose | |---|---|---| | caprover.url | Your CapRover server | Base URL for API calls | | caprover.password | CapRover dashboard | Master password for API auth | | github.token | GitHub β†’ Settings β†’ Developer Settings β†’ PAT | For triggering workflow_dispatch | | apps.*.caprover_app_token | App β†’ Deployment tab β†’ Enable App Token | Per-app deploy without master password | | apps.*.caprover_webhook_url | App β†’ Deployment tab β†’ Webhook URL | Trigger rebuild from configured git repo | | apps.*.github_workflow | .github/workflows/ filename | Which workflow to trigger |

    πŸ“‹ Tips & Best Practices

  • The caprover CLI may not be installed: npm install -g caprover
  • For private repos, the GitHub token needs repo + workflow scopes
  • Always confirm the deploy was triggered (check API response or GitHub Actions UI)
  • See assets/templates/ for workflow templates