composable-data-stack 0.8.0__tar.gz → 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {composable_data_stack-0.8.0/composable_data_stack.egg-info → composable_data_stack-0.9.0}/PKG-INFO +49 -9
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/README.md +45 -6
- composable_data_stack-0.9.0/cli/k8s_renderer.py +1471 -0
- composable_data_stack-0.9.0/cli/k8s_runner.py +211 -0
- composable_data_stack-0.9.0/cli/k8s_security.py +125 -0
- composable_data_stack-0.9.0/cli/loader.py +341 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/main.py +387 -11
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/planner.py +21 -2
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/preflight.py +7 -1
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/renderer.py +74 -9
- composable_data_stack-0.9.0/cli/resolver.py +71 -0
- composable_data_stack-0.9.0/cli/resources/module.schema.json +705 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/state.py +51 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/up_runner.py +50 -7
- composable_data_stack-0.9.0/cli/utils.py +35 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/validator.py +29 -4
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0/composable_data_stack.egg-info}/PKG-INFO +49 -9
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/SOURCES.txt +19 -1
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/requires.txt +4 -2
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/pyproject.toml +6 -4
- composable_data_stack-0.9.0/tests/test_ai_profile_review.py +113 -0
- composable_data_stack-0.9.0/tests/test_compose_to_module.py +310 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_entrypoint_backend_guard.py +48 -0
- composable_data_stack-0.9.0/tests/test_dbt_hardening.py +132 -0
- composable_data_stack-0.9.0/tests/test_dlt_postgres_wiring.py +145 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_getter.py +30 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_image_verification.py +105 -0
- composable_data_stack-0.9.0/tests/test_k3d_e2e_profile.py +52 -0
- composable_data_stack-0.9.0/tests/test_k3d_exposure.py +134 -0
- composable_data_stack-0.9.0/tests/test_k8s_renderer.py +577 -0
- composable_data_stack-0.9.0/tests/test_k8s_runner.py +124 -0
- composable_data_stack-0.9.0/tests/test_k8s_security.py +127 -0
- composable_data_stack-0.9.0/tests/test_loader.py +210 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_main.py +725 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_planner.py +268 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_preflight.py +39 -1
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_publish_images_workflow.py +68 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_render_example_profile.py +4 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_renderer.py +219 -0
- composable_data_stack-0.9.0/tests/test_resolver.py +87 -0
- composable_data_stack-0.9.0/tests/test_secrets.py +160 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_security.py +163 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_state.py +48 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_superset_hardening.py +56 -14
- composable_data_stack-0.9.0/tests/test_tender_analytics.py +186 -0
- composable_data_stack-0.9.0/tests/test_tender_dashboard.py +175 -0
- composable_data_stack-0.9.0/tests/test_test_runner_timeout.py +69 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_up_runner.py +27 -0
- composable_data_stack-0.9.0/tests/test_utils.py +101 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_validator.py +62 -0
- composable_data_stack-0.9.0/tests/test_vendored_llm_client.py +89 -0
- composable_data_stack-0.8.0/cli/loader.py +0 -179
- composable_data_stack-0.8.0/cli/resolver.py +0 -28
- composable_data_stack-0.8.0/cli/resources/module.schema.json +0 -204
- composable_data_stack-0.8.0/cli/utils.py +0 -22
- composable_data_stack-0.8.0/tests/test_resolver.py +0 -53
- composable_data_stack-0.8.0/tests/test_secrets.py +0 -48
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/LICENSE +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/__init__.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/constants.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/diagnostics.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/getter.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/graph.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/image_updates.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/image_verification.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/overlay.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/__init__.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/contract.schema.json +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/profile.schema.json +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/rule-schema.json +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/rule-set.json +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/secrets.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/security.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/security_common.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/dependency_links.txt +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/entry_points.txt +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/top_level.txt +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/setup.cfg +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_cds_workflow.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_completion.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_compose_runtime_smoke.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_config_generation.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_definitions_uri.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_hardening.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_duckdb_hardening.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_environment_classification.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_environment_cli.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_graph.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_image_security_scan_workflow.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_image_updates.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_markdown_mermaid_blocks.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_module_isolation.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_modules_no_committed_secrets.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_mvp_proof_workflow.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_overlay.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_python_version_alignment.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_release_version_check.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_resolve_profile_path.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_smoke_example_profile.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_standalone_module_profile.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_trivyignore.py +0 -0
- {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_upstream_image_hardening.py +0 -0
{composable_data_stack-0.8.0/composable_data_stack.egg-info → composable_data_stack-0.9.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: composable-data-stack
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: CLI for validating and composing composable data stack profiles
|
|
5
5
|
Author: Ronald Hensbergen
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -22,16 +22,17 @@ Description-Content-Type: text/markdown
|
|
|
22
22
|
License-File: LICENSE
|
|
23
23
|
Requires-Dist: PyYAML>=6.0
|
|
24
24
|
Requires-Dist: jsonschema>=4.22.0
|
|
25
|
-
Requires-Dist: jinja2>=3.0
|
|
26
25
|
Requires-Dist: packaging>=23.0
|
|
27
26
|
Requires-Dist: rich>=15.0
|
|
28
27
|
Provides-Extra: completion
|
|
29
28
|
Requires-Dist: argcomplete<4,>=3.0.0; extra == "completion"
|
|
29
|
+
Provides-Extra: test
|
|
30
|
+
Requires-Dist: jinja2>=3.0; extra == "test"
|
|
30
31
|
Provides-Extra: dev
|
|
31
32
|
Requires-Dist: coverage>=7.6; extra == "dev"
|
|
32
33
|
Requires-Dist: bandit>=1.7; extra == "dev"
|
|
33
34
|
Requires-Dist: pip-audit>=2.7; extra == "dev"
|
|
34
|
-
Requires-Dist: ruff==0.16.
|
|
35
|
+
Requires-Dist: ruff==0.16.7; extra == "dev"
|
|
35
36
|
Dynamic: license-file
|
|
36
37
|
|
|
37
38
|
# 🚀 Composable Data Stack (CDS)
|
|
@@ -41,6 +42,31 @@ Dynamic: license-file
|
|
|
41
42
|
|
|
42
43
|

|
|
43
44
|
|
|
45
|
+
Project:
|
|
46
|
+
|
|
47
|
+
[](https://github.com/RonaldHensbergen/composable-data-stack/actions/workflows/ci.yml)
|
|
48
|
+
[](https://pypi.org/project/composable-data-stack/)
|
|
49
|
+
[](LICENSE)
|
|
50
|
+
|
|
51
|
+
SonarCloud — Quality Gate & Ratings:
|
|
52
|
+
|
|
53
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
54
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
55
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
56
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
57
|
+
|
|
58
|
+
SonarCloud — Issues:
|
|
59
|
+
|
|
60
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
61
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
62
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
63
|
+
|
|
64
|
+
SonarCloud — Metrics:
|
|
65
|
+
|
|
66
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
67
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
68
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
69
|
+
|
|
44
70
|
---
|
|
45
71
|
|
|
46
72
|
## 🧠 What Is CDS (In 1 Minute)
|
|
@@ -252,6 +278,7 @@ When you run CDS:
|
|
|
252
278
|
- resolved contract bindings
|
|
253
279
|
- dependency-aware execution plan
|
|
254
280
|
- generated Docker Compose configuration
|
|
281
|
+
- generated Helm chart for Kubernetes
|
|
255
282
|
- reproducible stack definition
|
|
256
283
|
|
|
257
284
|
This allows you to go from a declarative profile to a runnable local data stack.
|
|
@@ -284,6 +311,10 @@ The `cds up` command and generated local profiles additionally require:
|
|
|
284
311
|
- Write access to the checkout for `.env`, `docker-compose.yml`, and workdir
|
|
285
312
|
data
|
|
286
313
|
|
|
314
|
+
For Kubernetes, install Helm and kubectl and provide an explicit kube context.
|
|
315
|
+
The local k3s workflow uses k3d and is documented in
|
|
316
|
+
[docs/kubernetes.md](docs/kubernetes.md).
|
|
317
|
+
|
|
287
318
|
Docker Desktop on Windows must use the WSL 2 backend. See the
|
|
288
319
|
[support policy](docs/support-policy.md) for supported operating systems and
|
|
289
320
|
runtime versions. For platform-specific setup from an empty machine, follow
|
|
@@ -448,6 +479,12 @@ cds render local-dagster-postgres-superset
|
|
|
448
479
|
|
|
449
480
|
By default, this writes `docker-compose.yml` to the project root.
|
|
450
481
|
|
|
482
|
+
Render the same plan as a Helm chart with:
|
|
483
|
+
|
|
484
|
+
```bash
|
|
485
|
+
cds render local-dagster-postgres-superset --target helm
|
|
486
|
+
```
|
|
487
|
+
|
|
451
488
|
Use a custom location when needed:
|
|
452
489
|
|
|
453
490
|
```bash
|
|
@@ -714,12 +751,13 @@ runs, with a dedicated diagnostic code:
|
|
|
714
751
|
|cds get \<profile\> [--remote \<owner/repo\>] [--ref \<ref\>] [--local \<dir\>] [--into \<dir\>]|Fetch a profile plus its dependent module/runtime assets from GitHub into a local CDS layout|
|
|
715
752
|
|cds list profiles\|modules\|images [--remote \<owner/repo\>] [--ref \<ref\>] [--local \<dir\>]|List available profiles, module sources, or module images and check for newer versions; add `--remote`/`--local` to inspect another repository before fetching from it|
|
|
716
753
|
|cds init [profile]|Generate a project `.env` template from profile secret definitions|
|
|
717
|
-
|cds validate [profile]|Validate modules and contracts|
|
|
754
|
+
|cds validate [profile]|Validate modules and contracts; use `--target helm` for Kubernetes checks|
|
|
718
755
|
|cds preflight [profile]|Check runtime tools, required environment values, and host ports without starting services|
|
|
719
756
|
|cds plan [profile]|Resolve dependencies and generate an execution plan|
|
|
720
|
-
|cds render [profile]|Generate Docker Compose
|
|
721
|
-
|cds up [profile]|Validate, plan, render,
|
|
722
|
-
|cds
|
|
757
|
+
|cds render [profile]|Generate Docker Compose or a Helm chart from a resolved plan|
|
|
758
|
+
|cds up [profile]|Validate, plan, render, and start the Compose or Helm target; use `--target helm` for Kubernetes|
|
|
759
|
+
|cds down [profile]|Stop Compose or uninstall a Helm release; Helm PVCs are retained by default|
|
|
760
|
+
|cds state [profile]|Show Compose services or Kubernetes workloads grouped by health|
|
|
723
761
|
|cds test [profile]|One-shot smoke validation: validate, security, plan, and render|
|
|
724
762
|
|cds security [profile]|Run rule-based security validation on a profile|
|
|
725
763
|
|cds diff [profile] --from \<env\> --to \<env\>|Show effective configuration differences between two environment overlays, secrets never included|
|
|
@@ -937,11 +975,11 @@ MVP ready:
|
|
|
937
975
|
- security checks
|
|
938
976
|
- profile composition
|
|
939
977
|
- Docker Compose rendering
|
|
978
|
+
- Kubernetes Helm rendering and local k3s lifecycle
|
|
979
|
+
- runtime startup, health state, and shutdown
|
|
940
980
|
|
|
941
981
|
Next:
|
|
942
982
|
|
|
943
|
-
- runtime orchestration
|
|
944
|
-
- Kubernetes support
|
|
945
983
|
- advanced secret providers
|
|
946
984
|
- stack bootstrap and health checks
|
|
947
985
|
|
|
@@ -976,6 +1014,8 @@ Good first contributions:
|
|
|
976
1014
|
## 📖 Documentation
|
|
977
1015
|
|
|
978
1016
|
- [Quickstart](README.md#-quickstart) — get running in 5 minutes
|
|
1017
|
+
- [How CDS Works](docs/how-it-works.md) — C4 + sequence diagrams of the validate → plan → render engine
|
|
1018
|
+
- [Kubernetes Target](docs/kubernetes.md): Helm rendering and isolated local k3s workflow
|
|
979
1019
|
- [From Docker Compose to CDS Profile](docs/from-docker-to-cds-profile.md) — complete transformation guide
|
|
980
1020
|
- [Architecture](docs/architecture.md) — design and core concepts
|
|
981
1021
|
- [Modules](docs/modules.md) — how to structure reusable components
|
|
@@ -5,6 +5,31 @@
|
|
|
5
5
|
|
|
6
6
|

|
|
7
7
|
|
|
8
|
+
Project:
|
|
9
|
+
|
|
10
|
+
[](https://github.com/RonaldHensbergen/composable-data-stack/actions/workflows/ci.yml)
|
|
11
|
+
[](https://pypi.org/project/composable-data-stack/)
|
|
12
|
+
[](LICENSE)
|
|
13
|
+
|
|
14
|
+
SonarCloud — Quality Gate & Ratings:
|
|
15
|
+
|
|
16
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
17
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
18
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
19
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
20
|
+
|
|
21
|
+
SonarCloud — Issues:
|
|
22
|
+
|
|
23
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
24
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
25
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
26
|
+
|
|
27
|
+
SonarCloud — Metrics:
|
|
28
|
+
|
|
29
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
30
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
31
|
+
[](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
|
|
32
|
+
|
|
8
33
|
---
|
|
9
34
|
|
|
10
35
|
## 🧠 What Is CDS (In 1 Minute)
|
|
@@ -216,6 +241,7 @@ When you run CDS:
|
|
|
216
241
|
- resolved contract bindings
|
|
217
242
|
- dependency-aware execution plan
|
|
218
243
|
- generated Docker Compose configuration
|
|
244
|
+
- generated Helm chart for Kubernetes
|
|
219
245
|
- reproducible stack definition
|
|
220
246
|
|
|
221
247
|
This allows you to go from a declarative profile to a runnable local data stack.
|
|
@@ -248,6 +274,10 @@ The `cds up` command and generated local profiles additionally require:
|
|
|
248
274
|
- Write access to the checkout for `.env`, `docker-compose.yml`, and workdir
|
|
249
275
|
data
|
|
250
276
|
|
|
277
|
+
For Kubernetes, install Helm and kubectl and provide an explicit kube context.
|
|
278
|
+
The local k3s workflow uses k3d and is documented in
|
|
279
|
+
[docs/kubernetes.md](docs/kubernetes.md).
|
|
280
|
+
|
|
251
281
|
Docker Desktop on Windows must use the WSL 2 backend. See the
|
|
252
282
|
[support policy](docs/support-policy.md) for supported operating systems and
|
|
253
283
|
runtime versions. For platform-specific setup from an empty machine, follow
|
|
@@ -412,6 +442,12 @@ cds render local-dagster-postgres-superset
|
|
|
412
442
|
|
|
413
443
|
By default, this writes `docker-compose.yml` to the project root.
|
|
414
444
|
|
|
445
|
+
Render the same plan as a Helm chart with:
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
cds render local-dagster-postgres-superset --target helm
|
|
449
|
+
```
|
|
450
|
+
|
|
415
451
|
Use a custom location when needed:
|
|
416
452
|
|
|
417
453
|
```bash
|
|
@@ -678,12 +714,13 @@ runs, with a dedicated diagnostic code:
|
|
|
678
714
|
|cds get \<profile\> [--remote \<owner/repo\>] [--ref \<ref\>] [--local \<dir\>] [--into \<dir\>]|Fetch a profile plus its dependent module/runtime assets from GitHub into a local CDS layout|
|
|
679
715
|
|cds list profiles\|modules\|images [--remote \<owner/repo\>] [--ref \<ref\>] [--local \<dir\>]|List available profiles, module sources, or module images and check for newer versions; add `--remote`/`--local` to inspect another repository before fetching from it|
|
|
680
716
|
|cds init [profile]|Generate a project `.env` template from profile secret definitions|
|
|
681
|
-
|cds validate [profile]|Validate modules and contracts|
|
|
717
|
+
|cds validate [profile]|Validate modules and contracts; use `--target helm` for Kubernetes checks|
|
|
682
718
|
|cds preflight [profile]|Check runtime tools, required environment values, and host ports without starting services|
|
|
683
719
|
|cds plan [profile]|Resolve dependencies and generate an execution plan|
|
|
684
|
-
|cds render [profile]|Generate Docker Compose
|
|
685
|
-
|cds up [profile]|Validate, plan, render,
|
|
686
|
-
|cds
|
|
720
|
+
|cds render [profile]|Generate Docker Compose or a Helm chart from a resolved plan|
|
|
721
|
+
|cds up [profile]|Validate, plan, render, and start the Compose or Helm target; use `--target helm` for Kubernetes|
|
|
722
|
+
|cds down [profile]|Stop Compose or uninstall a Helm release; Helm PVCs are retained by default|
|
|
723
|
+
|cds state [profile]|Show Compose services or Kubernetes workloads grouped by health|
|
|
687
724
|
|cds test [profile]|One-shot smoke validation: validate, security, plan, and render|
|
|
688
725
|
|cds security [profile]|Run rule-based security validation on a profile|
|
|
689
726
|
|cds diff [profile] --from \<env\> --to \<env\>|Show effective configuration differences between two environment overlays, secrets never included|
|
|
@@ -901,11 +938,11 @@ MVP ready:
|
|
|
901
938
|
- security checks
|
|
902
939
|
- profile composition
|
|
903
940
|
- Docker Compose rendering
|
|
941
|
+
- Kubernetes Helm rendering and local k3s lifecycle
|
|
942
|
+
- runtime startup, health state, and shutdown
|
|
904
943
|
|
|
905
944
|
Next:
|
|
906
945
|
|
|
907
|
-
- runtime orchestration
|
|
908
|
-
- Kubernetes support
|
|
909
946
|
- advanced secret providers
|
|
910
947
|
- stack bootstrap and health checks
|
|
911
948
|
|
|
@@ -940,6 +977,8 @@ Good first contributions:
|
|
|
940
977
|
## 📖 Documentation
|
|
941
978
|
|
|
942
979
|
- [Quickstart](README.md#-quickstart) — get running in 5 minutes
|
|
980
|
+
- [How CDS Works](docs/how-it-works.md) — C4 + sequence diagrams of the validate → plan → render engine
|
|
981
|
+
- [Kubernetes Target](docs/kubernetes.md): Helm rendering and isolated local k3s workflow
|
|
943
982
|
- [From Docker Compose to CDS Profile](docs/from-docker-to-cds-profile.md) — complete transformation guide
|
|
944
983
|
- [Architecture](docs/architecture.md) — design and core concepts
|
|
945
984
|
- [Modules](docs/modules.md) — how to structure reusable components
|