Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,7 @@ DEPLOY.md
node_modules/
# Added by ork doctor init
.orkestra/bundle/
.orkestra/
.orkestra/

# Local ork-registry (published as OCI artifacts)
ork-registry/
18 changes: 9 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Changelog – Orkestra v0.3.8

### ork doctor + ork deploy — Local to production in minutes
### ork doctor + ork doctor deploy — Local to production in minutes

Developers can now deploy any project to Kubernetes with three commands, no operator knowledge required.

Expand All @@ -19,14 +19,14 @@ ork doctor init --name my-api --notify-me --add-ingress
- `.orkestra/app.yaml` — the ConfigMap CR the developer owns
- `.orkestra/values.yaml` — Helm values for the Orkestra operator

#### ork deploy
#### ork doctor deploy

Builds the Docker image, pushes it, runs `ork kompose` to merge all registered katalogs, generates the cluster bundle, installs or verifies the Orkestra operator via Helm, patches the image in the CR, and watches the rollout.

```bash
ork deploy --registry ghcr.io/myorg
ork deploy --registry ghcr.io/myorg --dev # spins up a local kind cluster
ork deploy --registry ghcr.io/myorg --dry-run
ork doctor deploy --registry ghcr.io/myorg
ork doctor deploy --registry ghcr.io/myorg --dev # spins up a local kind cluster
ork doctor deploy --registry ghcr.io/myorg --dry-run
```

Key behaviours:
Expand All @@ -38,18 +38,18 @@ Key behaviours:
- **Internal service URL checklist** printed after every deploy so developers can wire projects together (`export MY_API_URL=...`)
- **Control Center fallback**: when `controlCenterHost` is empty, prints the `kubectl port-forward` command for local access

#### ork deploy rollback
#### ork doctor deploy rollback

Restores the previous image by reading `~/.orkestra/deploy/state.json` (annotation fallback for backward compatibility). Swaps current and previous before patching so every rollback is reversible.

```bash
ork deploy rollback
ork deploy rollback --image ghcr.io/myorg/my-api:v1.2.0
ork doctor deploy rollback
ork doctor deploy rollback --image ghcr.io/myorg/my-api:v1.2.0
```

#### Out-of-the-box developer notifications

Every katalog generated by `ork doctor init` ships with a `notify:` block on the deployment readiness condition. When replicas are not ready within the notification interval (default 15 minutes), Orkestra sends the `developer` team the exact `kubectl logs` command and a `ork deploy rollback` hint.
Every katalog generated by `ork doctor init` ships with a `notify:` block on the deployment readiness condition. When replicas are not ready within the notification interval (default 15 minutes), Orkestra sends the `developer` team the exact `kubectl logs` command and a `ork doctor deploy rollback` hint.

Wire the `developer` team with `ork doctor init --notify-me`:
- Reads the developer's Git author email from `git log -1`
Expand Down
25 changes: 25 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,31 @@ runtime-reload: docker

@echo "✔ Runtime updated to image: $(ORK_IMAGE)-$(RUNTIME_TAG)"

CONTROL_CENTER_DEPLOYMENT ?= orkestra-cc
CONTROL_CENTER_CONTAINER_NAME ?= controlcenter
CONTROL_CENTER_NAMESPACE ?= orkestra-system

controlcenter-reload: docker-cc
@echo "Generating unique tag..."
$(eval CC_TAG := $(shell date +%s))
@echo "Tag: $(CC_TAG)"

@echo "Retagging image..."
docker tag $(ORK_CC_IMAGE) $(ORK_CC_IMAGE)-$(CC_TAG)

@echo "Loading image into kind cluster: $(KIND_CLUSTER)"
kind load docker-image $(ORK_CC_IMAGE)-$(CC_TAG) --name $(KIND_CLUSTER)
@echo "✔ Image loaded"

@echo "Updating deployment $(CONTROL_CENTER_DEPLOYMENT) in namespace $(CONTROL_CENTER_NAMESPACE)..."
kubectl -n $(CONTROL_CENTER_NAMESPACE) set image deploy/$(CONTROL_CENTER_DEPLOYMENT) \
$(CONTROL_CENTER_CONTAINER_NAME)=$(ORK_CC_IMAGE)-$(CC_TAG)

@echo "✔ Control Center updated to image: $(ORK_CC_IMAGE)-$(CC_TAG)"

orkestra-reload: runtime-reload controlcenter-reload
@echo "✔ Orkestra runtime and Control Center reloaded successfully"

# ── Primary targets ───────────────────────────────────────────────────────────

# Default: vet + unit tests. Fast, no external dependencies.
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ Every CRD declared in a Katalog becomes a complete, isolated operator:
| **Workqueue** | Per-CRD. Rate-limited. Deduplicated. Isolated from every other CRD. |
| **Worker pool** | Configurable. A panic in one CRD does not affect any other. |
| **Drift correction** | `reconcile: true` — desired state is enforced on every cycle. |
| **Safe reconcile** | Failures in one operatroBox is contained, logged and does not affect the runtime or other CRDs. |
| **Owner references** | Child resources deleted when the CR is deleted. |
| **Finalizers** | CRs protected from dirty deletion automatically. |
| **Events** | Every reconcile is a traceable Kubernetes event. |
Expand Down
Loading
Loading