liftoff
Welcome to liftoff ๐ Your goโto CLI for multiโregion Cloud Run canary deployments! This README will guide you through installation, configuration, and usage with plenty of examples and emojis to keep things fun ๐.
๐ ๏ธ Installation
Make sure you have Go 1.20+ installed and your GOPATH configured. Then:
# Install the CLI
go install github.com/yourorg/liftoff/cmd/liftoff@latest
# Verify installation
liftoff --help
You can also build from source:
git clone https://github.com/yourorg/liftoff.git
cd liftoff
go build -o liftoff ./cmd/liftoff
โ๏ธ Configuration
By default, liftoff saves your settings to $TMP/liftoff_config.json. You can override options via flags or environment variables.
| Option |
Env Var |
Description |
Default |
--project |
LIFTOFF_PROJECT |
GCP project ID |
none (required) |
--service |
LIFTOFF_SERVICE |
Cloud Run service name |
none (required) |
--image |
LIFTOFF_IMAGE |
Container image URL for the canary revision |
none (required) |
--regions |
LIFTOFF_REGIONS |
Commaโseparated GCP regions (e.g. europe-west2,europe-west4) |
europe-west2,europe-west4 |
--percentages |
LIFTOFF_PCTS |
Traffic percentages (e.g. 10,50,100) |
10,50,100 |
--intervals |
LIFTOFF_INTVLS |
Seconds between rollout steps (e.g. 300,300) |
300,300 |
--env-vars |
LIFTOFF_ENV_VARS |
Comma-separated KEY=VALUE pairs |
none (required) |
Once you have liftoff installed, here are some example workflows:
๐ฏ Default canary rollout
liftoff canary \
--project=my-gcp-project \
--service=my-service \
--image=gcr.io/my-gcp-project/my-app:canary
- Deploys no-traffic revisions in
europe-west2 & europe-west4.
- Routes 10% โ wait 5m โ 50% โ wait 5m โ 100%.
๐ Custom regions & speed
liftoff canary \
--project=my-gcp-project \
--service=api-service \
--image=gcr.io/my-gcp-project/api:v2 \
--regions=us-central1,asia-northeast1 \
--percentages=5,25,50,100 \
--intervals=60,120,180
- Targets
us-central1 and asia-northeast1.
- Gradually shifts traffic 5% โ wait 1m โ 25% โ wait 2m โ 50% โ wait 3m โ 100%.
๐ณ Environment variables
liftoff canary \
--project=my-gcp-project \
--service=api-service \
--image=gcr.io/my-gcp-project/api:v2 \
--regions=us-central1,asia-northeast1 \
--percentages=5,25,50,100 \
--intervals=60,120,180 \
--env-vars=GOOGLE_PROJECT_ID=canary,DEBUG=true"
โก Instant full rollout
liftoff canary \
--project=my-gcp-project \
--service=static-site \
--image=gcr.io/my-gcp-project/site:latest \
--percentages=100 \
--intervals=0
- Skips staging phases and sends 100% traffic immediately.
๐ ๏ธ Saving defaults per service
# Save defaults for 'internal-api'
liftoff config set internal-api \
--project=my-gcp-project \
--image=gcr.io/my-gcp-project/internal-api:canary \
--regions=europe-west2,europe-west4 \
--percentages=10,50,100 \
--intervals=300,300
# View all saved configs
liftoff config view
๐ Flags & Commands Reference
liftoff --help
liftoff canary --help
Key flags for canary:
--project, -p : GCP project ID (required)
--service, -s : Cloud Run service name (required)
--image, -i : Container image URL (required)
--regions : Regions list
--percentages : Traffic split percentages
--intervals : Seconds between shifts
โค๏ธ Contributing
We โค๏ธ pull requests!
- Fork โ
- Create a feature branch ๐ฟ
- Write tests ๐งช
- Send PR ๐ฌ
Please follow our Contributing Guidelines.
๐ License
MIT
Enjoy safe liftoffs! ๐