We use Terraform to declare the services and jobs. We can share the config files, ofc.
There is a gotcha for a clean upgrade path between ZITADEL versions, which we can describe as well.
We run zitadel setup in a separate cloud run job, but with Terraform, we can't directly execute the job easily.