Capgo Bundle Upload

September 23, 2025 ยท View on GitHub

Capgo - Instant updates for capacitor

โžก๏ธ Get Instant updates for your App with Capgo

Missing a feature? Weโ€™ll build the plugin for you ๐Ÿ’ช

Upload a new Capacitor app **bundle** to **Capgo Cloud** from CI. Supports TUS uploads, delta updates, external URLs, S3 storage, and v2 signing.

Version must be > 0.0.0 and unique. Deleted versions cannot be reused.

Quick start

name: Upload bundle

on:
  push:
    branches: [main]

jobs:
  upload:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build web assets
        run: npm ci && npm run build

      - name: Upload to Capgo
        uses: ./
        with:
          apikey: ${{ secrets.CAPGO_API_KEY }}
          appId: com.example.app
          path: ./dist
          channel: production
          bundle: 1.2.3
          message: "CI release from ${GITHUB_SHA}"
          tus: "true"
          delta: "true"
          versionExistsOk: "true"

Inputs

Required

  • apikey โ€” Capgo API key

Common

  • appId โ€” App id (positional)
  • path โ€” Folder to upload (defaults to webDir in capacitor.config)
  • channel โ€” Channel to link to
  • bundle โ€” Bundle version string
  • message โ€” Release notes
  • link โ€” External link

External bundle / encryption

  • external โ€” External bundle URL
  • ivSessionKey โ€” IV + session key
  • encryptedChecksum โ€” Signature for external bundle

Signing (v2)

  • keyV2 โ€” Path to private signing key
  • keyDataV2 โ€” Private key content

Upload behavior

  • tus โ€” Use TUS protocol
  • tusChunkSize โ€” Chunk size in bytes
  • zip โ€” Legacy zip upload
  • delta โ€” Differential updates
  • deltaOnly โ€” Only delta updates
  • encryptPartial โ€” Encrypt delta files

Checks & metadata

  • noCodeCheck โ€” Skip code checks
  • ignoreMetadataCheck โ€” Skip metadata check
  • ignoreChecksumCheck โ€” Skip checksum check

Min-update policy

  • minUpdateVersion โ€” Minimal version required to update
  • autoMinUpdateVersion โ€” Auto set from native packages

Compression

  • disableBrotli โ€” Disable brotli compression
  • noBrotliPatterns โ€” Comma-separated globs to exclude

S3

  • s3Region
  • s3Apikey
  • s3Apisecret
  • s3Endpoint
  • s3BucketName
  • s3Port
  • noS3Ssl

Misc

  • bundleUrl โ€” Print bundle URL
  • noKey โ€” Send clear update
  • displayIvSession โ€” Log IV/session key
  • autoSetBundle โ€” Write bundle back to capacitor.config.json
  • dryUpload โ€” Dry run, no file upload
  • packageJson โ€” Path to package.json
  • nodeModules โ€” Path to node_modules
  • deleteLinkedBundleOnUpload โ€” Delete linked bundle in channel
  • versionExistsOk โ€” Exit success if bundle already exists
  • selfAssign โ€” Allow devices to auto-join this channel
  • timeout โ€” Upload timeout in seconds

Booleans must be strings: "true" or "false"

Example: External bundle URL

- name: Upload external bundle
  uses: ./
  with:
    apikey: ${{ secrets.CAPGO_API_KEY }}
    appId: com.example.app
    channel: beta
    external: https://my-cdn.com/app/1.2.3.tar.gz
    encryptedChecksum: ${{ secrets.EXTERNAL_SIGNATURE }}
    ivSessionKey: ${{ secrets.IV_SESSION_KEY }}
    bundle: 1.2.3

Example: S3-backed upload

- name: Upload via S3
  uses: ./
  with:
    apikey: ${{ secrets.CAPGO_API_KEY }}
    appId: com.example.app
    path: ./dist
    channel: production
    s3Region: eu-west-1
    s3Endpoint: https://s3.my-provider.com
    s3BucketName: capgo-bundles
    s3Apikey: ${{ secrets.S3_KEY }}
    s3Apisecret: ${{ secrets.S3_SECRET }}
    noS3Ssl: "false"
    tus: "true"
    delta: "true"