Skip to content

Merge stacked PRs: SLIP-71, SLIP-72, SLIP-73#16

Merged
mitchelljphayes merged 3 commits into
mainfrom
slip-73-worker-app-kind
Jun 21, 2026
Merged

Merge stacked PRs: SLIP-71, SLIP-72, SLIP-73#16
mitchelljphayes merged 3 commits into
mainfrom
slip-73-worker-app-kind

Conversation

@mitchelljphayes

Copy link
Copy Markdown
Owner

This PR merges the stacked branch (slip-73) into main, bringing in:

  • SLIP-71: Recreate deploy strategy (commit 008584f)
  • SLIP-72: Persistent volume support (commit e9a4e5b)
  • SLIP-73: Worker / no-route app kind (commit 8a0a1dc)

These were previously merged as stacked PRs (#13#14#15) but need to be merged into main.

Add 'recreate' strategy (stop-old → start-new → health-check → route-update)
as alternative to blue-green. Old container is stopped but not removed
until new passes health check, enabling fast rollback via restart.

- RuntimeBackend trait: add start_container() and stop_container()
- DeployStatus: add StoppingOld, RemovingRoute, RestartingOld variants
- 3-tier rollback: restart old → recreate from previous_tag → alert
- Route removed during downtime (fast 502 > TCP timeout)
- Strategy validation: accept 'blue-green' and 'recreate' only
- drain_timeout warned (not errored) for recreate
- Works for both container and pod deploys
- inspect_container_port() added to trait for port re-discovery
- 14 new tests (303 total, 0 failures)

fix: SLIP-70 nit fixes for DeployStatus variants and rollback_failed field

- Add recreate DeployStatus variants to api.rs status handler
- Add rollback_failed field to DeployContext in db.rs and test helpers
- Update deploy.rs test helpers for new DeployStatus variants

fix: add recreate DeployStatus variants to api.rs and db.rs

- api.rs: map StoppingOld/RemovingRoute/RestartingOld to status strings
- api.rs: use spawn_blocking for SQLite deploy status reads
- db.rs: add rollback_failed field to test helpers
- deploy.rs: update test helpers for new DeployStatus variants
Add host-path bind mount support for apps that need persistent state
across redeploys. Server config provides host_path, repo config declares
mount_path and read_only. Volumes are injected into both container and
pod deploys.

- VolumeConfig, RepoVolume, MergedVolume structs
- Config merge: match by mount_path, error on missing host_path
- Security blocklist: refuse /, /etc, /proc, /sys, /dev, /boot, /var/run,
  /run, Docker/Podman socket and storage paths
- Path traversal protection: canonicalize before blocklist check
- Container deploy: structured Mount API (HostConfig.mounts)
- Pod deploy: inject hostPath volumes into manifest YAML
- Preview isolation: {base}/previews/{id}/ path derivation
- Deploy-time validation in addition to slip validate
- Includes SLIP-71 nit fixes (DeployStatus variants, rollback_failed)
- 42 new tests (345 total, 0 failures)

fix: SLIP-71 nit fixes (DeployStatus variants, rollback_failed field)

- api.rs: map StoppingOld/RemovingRoute/RestartingOld to status strings
- api.rs: use spawn_blocking for SQLite deploy status reads
- db.rs: add rollback_failed field to test helpers
- deploy.rs: update test helpers for new DeployStatus variants
Add 'worker' app kind for background processors, queue consumers, and
pipelines that have no HTTP endpoint. Workers skip Caddy route creation,
port mapping, and HTTP health checks — using container_is_running() instead.

- RoutingConfig.domain and port become Option (backward compatible)
- Worker health check = container_is_running() (already on RuntimeBackend)
- Docker/Podman skip port binding when container_port == 0
- All deploy paths (blue-green/recreate, container/pod) guard route ops
- PreviewState.domain becomes Option<String> for worker previews
- Kind field added to AppStatusResponse, AppRuntimeState, PersistedAppState
- Kind persisted across daemon restarts
- Unknown app kinds now produce validation errors
- 4 new tests (349 total, 0 failures)
@mitchelljphayes mitchelljphayes merged commit 45b7ded into main Jun 21, 2026
1 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant