Deployment turns a resolved application graph into cloud infrastructure and running code. It also changes durable state: database migrations and published images are part of the operation. Start with a working local application.
#Understand: source, plan, and running state
These are separate checkpoints:
| Checkpoint | What it establishes |
|---|---|
| SDK generation | Application code has clients for the declared runtime grants |
| Deployment preview | The proposed infrastructure changes have been inspected |
| Deployment apply | Fluffy attempts the infrastructure, build, migration, and activation stages |
| Validation | Source correspondence, generated output, and cloud readiness pass the selected check |
| Application request | Your own route and business behavior work against that deployment |
Generating an SDK does not grant cloud access. A successful preview does not apply its changes. If a deployment fails halfway through, earlier stages may have completed: use the reported stage to decide what to repair.
The workspace chooses the GCP project and placement. The active gcloud project does not override that configuration. Fluffy owns Pulumi execution, including when generated deployment code is checked into the application.
#Configure: prepare and deploy one application
Use the current source CLI from the start guide; no Fluffy release publication is required. Install Pulumi, Google Cloud CLI, and Docker with a running daemon. Authenticate Application Default Credentials (ADC):
gcloud auth application-default loginKeep a stable PULUMI_CONFIG_PASSPHRASE in your secret store and supply it to deployment commands. Do not put it in YAML. Retain a recoverable copy outside the repository: later operations need to read the same encrypted state.
Required IAM permissions depend on the selected graph. Publication also needs Docker authentication for the selected regional Artifact Registry host. Referenced Cloud SQL needs the provider's inspection tools, including psql; database configuration explains the managed/reference distinction.
#Select cloud placement
Merge this environment into fluffy-chainsaw.workspace.yaml, replacing the project with yours and preserving the workspace's resource types and defaults:
environments:
prod:
deployment: {provider: application}
providers:
application:
type: gcp
project: your-application-project
region: europe-west1
zone: europe-west1-bThe provider entry supplies placement. Resource defaults still determine how runtimes, databases, storage, messaging, and authentication are implemented. Review database recovery policy before applying stateful changes.
#Establish the shared foundation
From the exact workspace root:
fluffy-chainsaw deploy bootstrap --environment prod --check
fluffy-chainsaw deploy bootstrap --environment prodInspect the first command's plan before applying. Bootstrap owns shared deployment infrastructure and state. Project creation, billing, or API enablement may require a staged apply and a new preview; follow the output. The CLI reference lists organization and billing selection options.
#Generate clients and optional deployment code
Replace example-app with your application:
fluffy-chainsaw generate --application example-app --all --language typescriptFor reviewed, checked-in deployment code, declare the directory in that application's fluffy-chainsaw.yaml:
environments:
prod:
deployment: deployment/prodThen generate the environment project:
fluffy-chainsaw generate --application example-app --environment prodReview and commit generated output. Regenerate it after relevant source changes; do not hand-edit it or run Pulumi from that directory. Generated deployment code explains drift checks.
#Preview, apply, and verify
fluffy-chainsaw deploy --application example-app --environment prod --check
fluffy-chainsaw deploy --application example-app --environment prod
fluffy-chainsaw validate --application example-app --environment prodInteractive apply asks you to confirm the plan. Noninteractive application apply requires --yes; --check does not accept it.
Deployment rechecks the plan, reconciles infrastructure, builds and publishes images, performs database administration and migrations, activates services, publishes static hosting, and validates endpoints. Deploy other applications separately; there is no deploy-all command.
Use reported URLs to check a harmless health route and a real application operation. A database's local seed does not run in production: create test data through your application's normal flow instead of expecting local demonstration rows.
#Reference: incomplete deployment and ownership
| Outcome | What to do |
|---|---|
| Build failed | Correct the artifact source or builder input and preview again |
| Migration failed | Inspect the migration's result before retrying; later activation may not have run |
| Generated code drift | Regenerate the selected environment project and review the diff |
| Expired ADC | Refresh ADC and repeat the failed command |
| Action required | Follow the exact project/domain/permission in deployment actions |
| DNS correct, certificate pending | Wait for provider reconciliation, then validate again |
| Lock held | Establish that the owner stopped before using explicit stale-lock recovery |
Removing a declaration is not a request to erase its data. Protected resources can remain, and Fluffy has no public destroy command. Export and uninstall explains how to transfer ownership or remove Premium separately.