These scripts standardize the off-node Pulumi workflow so the same deploy contract works from a maintainer laptop and from GitHub Actions.
layer_1layer_2platform
- Node.js
16(nvm useat repo root) - Pulumi CLI installed
jqinstalled for backend verification- Tailscale connected to the production tailnet
- SSH access to the Docker manager node
- Pulumi backend credentials in the shell
PULUMI_BACKEND_URLOptional but recommended. If set, scripts runpulumi loginexplicitly.DOCKER_HOSTPreferred. Example:ssh://deploy@sprocket-prod.PULUMI_REMOTE_DOCKER_USERandPULUMI_REMOTE_DOCKER_HOSTFallback if you want the runner to deriveDOCKER_HOST.PULUMI_CONFIG_PASSPHRASEOnly required if the selected stack still uses passphrase-based secrets.- Provider credentials used by the stack
Example:
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEYfor the current S3-compatible backend.
npm run infra:installnpm run infra:backend:verify -- platform prodThis exports state to infra/backups/ and writes a short report showing:
- selected project and stack
- current backend identity from
pulumi whoami -v - secrets provider metadata from
pulumi stack export - whether the local stack file still contains an
encryptionsalt
export DOCKER_HOST=ssh://deploy@sprocket-prod
export PULUMI_BACKEND_URL='s3://bucket/pulumi?endpoint=https://example.com'
npm run infra:preview -- platform prodnpm run infra:up -- platform prod --yesinfra:up runs a preview first by default. To bypass that behavior for an
explicitly non-production scenario:
PULUMI_SKIP_PREVIEW=1 npm run infra:up -- platform prod --yes