NWylynko/deployinfra

★ 0Forks 0TypeScriptGitHub ↗Compare

README

DeployInfra

One API to deploy to Vercel, Netlify, Cloudflare Pages, AWS Amplify, and Firebase Hosting.

import { createDeployer } from '@deployinfra/sdk'
import { vercel } from '@deployinfra/vercel'

const deployer = createDeployer({
  provider: vercel({ token: process.env.VERCEL_TOKEN! }),
})

const result = await deployer.deploy('./dist', { name: 'my-app' })
// → { deploymentId, url, status: 'ready', … }

Install

pnpm add @deployinfra/sdk @deployinfra/vercel
# or: @deployinfra/netlify | @deployinfra/cloudflare
# or: @deployinfra/aws | @deployinfra/firebase

Requires Node.js ≥ 22.12.

Providers

Package Auth Notes
@deployinfra/vercel Access token Optional teamId. GitHub deploy needs the Vercel GitHub app (else archive fallback).
@deployinfra/netlify Personal access token Pass siteId or name on deploy(). Zip passthrough supported.
@deployinfra/cloudflare API token (Pages Write) + account id Wrangler-compatible direct upload.
@deployinfra/aws AWS credential chain / explicit keys Amplify Hosting manual zip deploy. Pass appId or name on deploy().
@deployinfra/firebase ADC or service account Firebase Hosting REST (v1beta1). Pass projectId on deploy().

Capability matrix

Source Vercel Netlify Cloudflare Pages AWS Amplify Firebase Hosting
dir native (sha1 upload) native (digest deploy) native (direct upload) zip (fflate) gzip + sha256
zip core unzips zip passthrough core unzips zip passthrough core unzips
github native gitSource (needs GH app) or archive archive archive archive archive

Quickstart

import { createDeployer } from '@deployinfra/sdk'
import { netlify } from '@deployinfra/netlify'

const deployer = createDeployer({
  provider: netlify({ token: process.env.NETLIFY_TOKEN! }),
})

const result = await deployer.deploy('./dist', {
  name: 'my-site',
  waitUntil: 'ready',
  onStatus: (r) => console.log(r.status),
})

console.log(result.url)

Sources can be a local directory, zip path/URL, GitHub repo URL, or an explicit descriptor ({ kind: 'files', files: { … } }). Project and site names are passed per deployment as deploy(source, { name }); when omitted, createDeployer() generates a dashed slug.

Packages

Guides

License

Apache-2.0

Contributors

NWylynko

Issues