An open API service indexing awesome lists of open source software.

https://github.com/framequery/liftoff

Simple split traffic rolling deployments for GCP cloud runs
https://github.com/framequery/liftoff

canary-deployment gcp gcp-cloud-run go-cli

Last synced: about 1 month ago
JSON representation

Simple split traffic rolling deployments for GCP cloud runs

Awesome Lists containing this project

README

          


Centered Image

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 ๐ŸŽ‰.




Build badge

MIT


### ๐Ÿ“ฅ Pre-requisites

This CLI heavily relies on the GCLOUD cli tool. You must have it installed.
If you don't, follow [this guide](https://cloud.google.com/sdk/docs/install)

### ๐Ÿ› ๏ธ Installation

Make sure you have Go 1.20+ installed and your `GOPATH` configured. Then:

```bash
# Install the CLI
go install github.com/framequery/liftoff/cmd/liftoff@latest

# Verify installation
liftoff --help
```

You can also build from source:

```bash
git clone https://github.com/framequery/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` |
| `--ingress` | `LIFTOFF_INGRESS` | Kinds of allowed ingress | `internal-only` |
| `--env-vars` | `LIFTOFF_ENV_VARS` | Comma-separated KEY=VALUE pairs | **none** |

---

Once you have **liftoff** installed, here are some example workflows:

### ๐ŸŽฏ Default canary rollout

```bash
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

```bash
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

```bash
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

```bash
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.
### โš™๏ธ Config & Defaults
```bash
# 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
```
- You can set/view default config settings per service video with the config command
---

### ๐Ÿ” 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!
1. Fork โœ…
2. Create a feature branch ๐ŸŒฟ
3. Write tests ๐Ÿงช
4. Send PR ๐Ÿ“ฌ

Please follow our [Contributing Guidelines](CONTRIBUTING.md).

---

### ๐Ÿ“œ License

[MIT](LICENSE)

Enjoy safe liftoffs! ๐Ÿš€
Made by [Framequery](https://www.framequery.com/)