v0.3.0
Production Export release. Adds the export: manifest section and the lightshuttle export <target> command, which transpiles a manifest to Docker Compose, plain Kubernetes manifests or a Helm chart. Ships two new published crates, a full offline validation CI job and a round of documentation harmonisation.
Added
- New crate
lightshuttle-spec(#105): extractsContainerSpec,from_resourceresolution andSpecErrorfromlightshuttle-runtimeinto a dedicated, dependency-light crate, enabling downstream consumers (the export crate) to perform lowering without pulling in the full runtime. - New crate
lightshuttle-export(#87): manifest-to-artifact transpilation pipeline.lower()converts a resolved manifest to a target-neutralExportModel(reusesfrom_resourcefromlightshuttle-spec, zero drift).Emittertrait with three implementations: Compose, Kubernetes and Helm.resolvemodule: six pure helper functions shared across emitters (port defaults, image tags, DNS-1123 normalisation, healthcheck command extraction, volume mount classification, secret heuristic).- Secret heuristic: environment variable names containing
PASSWORD,PASSWD,SECRET,TOKENorKEYare classified asSecretin Kubernetes and Helm output.
export:typed manifest section with per-target overrides for Compose, Kubernetes and Helm (#86).lightshuttle export <target> [--output <dir>] [--force]CLI command (#88): guards against overwriting a non-empty output directory without--force, prints a summary of emitted files.- Docker Compose emitter (#89): emits a
docker-compose.ymlwith typed service model,depends_on: condition: service_healthy, top-level named volumes and loopback port bindings by default. - Kubernetes manifests emitter (#90): emits
Deployment,Service,ConfigMap,SecretandPersistentVolumeClaimresources plus anamespace.yaml; maps healthcheck probes to liveness/readiness probes; DNS-1123 name normalisation. - Helm chart emitter (#91): emits
Chart.yaml,values.yamland per-resourcetemplates/*.yaml; parametrised viaindex .Values.services; full parity with the Kubernetes emitter. - External validation CI job
validate-export(#92): probes tool availability with--helpbefore running; validates Compose output withdocker compose config, Kubernetes withkubeconformand Helm withhelm lint; non-blocking, runs offline.
Fixed
- Relative host volume paths (e.g.
./data:/var/lib/data) are now resolved to absolute paths at manifest load time viaManifest::resolve_host_volume_paths(base_dir), so emitted artefacts are portable across working directories (#107).
Documentation
docs/spec/export.md:export:section schema, target matrix and per-target mapping rules (Compose, Kubernetes, Helm), cross-cutting rules (secret heuristic, DNS-1123 names, built images, reproducibility).docs/tutorial/export.md: end-to-end walkthrough oflightshuttle exportagainst a runnable four-service manifest.examples/04-export: runnable manifest demonstrating theexport:section and all three targets.- Full doc-set harmonisation: README and getting-started dropped pre-alpha framing and now install from crates.io; Commands table and Documentation index added to README; manifest spec moved
dashboard:andexport:out of future-reserved; release process lists all seven crates; semver policy names thelightshuttleCLI.
Notes for upgraders
- Two new crates are published:
lightshuttle-specandlightshuttle-export. - The
export:manifest key is no longer future-reserved; it is parsed and validated. - Relative host volume paths in
volumesare now resolved at manifest load time. Manifests that relied on the raw relative form being forwarded as-is should switch to absolute paths or keep using relative paths (they will be resolved correctly from the manifest's directory).