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.
Files changed (102) hide show
  1. {composable_data_stack-0.8.0/composable_data_stack.egg-info → composable_data_stack-0.9.0}/PKG-INFO +49 -9
  2. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/README.md +45 -6
  3. composable_data_stack-0.9.0/cli/k8s_renderer.py +1471 -0
  4. composable_data_stack-0.9.0/cli/k8s_runner.py +211 -0
  5. composable_data_stack-0.9.0/cli/k8s_security.py +125 -0
  6. composable_data_stack-0.9.0/cli/loader.py +341 -0
  7. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/main.py +387 -11
  8. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/planner.py +21 -2
  9. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/preflight.py +7 -1
  10. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/renderer.py +74 -9
  11. composable_data_stack-0.9.0/cli/resolver.py +71 -0
  12. composable_data_stack-0.9.0/cli/resources/module.schema.json +705 -0
  13. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/state.py +51 -0
  14. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/up_runner.py +50 -7
  15. composable_data_stack-0.9.0/cli/utils.py +35 -0
  16. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/validator.py +29 -4
  17. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0/composable_data_stack.egg-info}/PKG-INFO +49 -9
  18. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/SOURCES.txt +19 -1
  19. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/requires.txt +4 -2
  20. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/pyproject.toml +6 -4
  21. composable_data_stack-0.9.0/tests/test_ai_profile_review.py +113 -0
  22. composable_data_stack-0.9.0/tests/test_compose_to_module.py +310 -0
  23. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_entrypoint_backend_guard.py +48 -0
  24. composable_data_stack-0.9.0/tests/test_dbt_hardening.py +132 -0
  25. composable_data_stack-0.9.0/tests/test_dlt_postgres_wiring.py +145 -0
  26. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_getter.py +30 -0
  27. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_image_verification.py +105 -0
  28. composable_data_stack-0.9.0/tests/test_k3d_e2e_profile.py +52 -0
  29. composable_data_stack-0.9.0/tests/test_k3d_exposure.py +134 -0
  30. composable_data_stack-0.9.0/tests/test_k8s_renderer.py +577 -0
  31. composable_data_stack-0.9.0/tests/test_k8s_runner.py +124 -0
  32. composable_data_stack-0.9.0/tests/test_k8s_security.py +127 -0
  33. composable_data_stack-0.9.0/tests/test_loader.py +210 -0
  34. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_main.py +725 -0
  35. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_planner.py +268 -0
  36. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_preflight.py +39 -1
  37. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_publish_images_workflow.py +68 -0
  38. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_render_example_profile.py +4 -0
  39. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_renderer.py +219 -0
  40. composable_data_stack-0.9.0/tests/test_resolver.py +87 -0
  41. composable_data_stack-0.9.0/tests/test_secrets.py +160 -0
  42. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_security.py +163 -0
  43. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_state.py +48 -0
  44. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_superset_hardening.py +56 -14
  45. composable_data_stack-0.9.0/tests/test_tender_analytics.py +186 -0
  46. composable_data_stack-0.9.0/tests/test_tender_dashboard.py +175 -0
  47. composable_data_stack-0.9.0/tests/test_test_runner_timeout.py +69 -0
  48. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_up_runner.py +27 -0
  49. composable_data_stack-0.9.0/tests/test_utils.py +101 -0
  50. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_validator.py +62 -0
  51. composable_data_stack-0.9.0/tests/test_vendored_llm_client.py +89 -0
  52. composable_data_stack-0.8.0/cli/loader.py +0 -179
  53. composable_data_stack-0.8.0/cli/resolver.py +0 -28
  54. composable_data_stack-0.8.0/cli/resources/module.schema.json +0 -204
  55. composable_data_stack-0.8.0/cli/utils.py +0 -22
  56. composable_data_stack-0.8.0/tests/test_resolver.py +0 -53
  57. composable_data_stack-0.8.0/tests/test_secrets.py +0 -48
  58. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/LICENSE +0 -0
  59. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/__init__.py +0 -0
  60. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/constants.py +0 -0
  61. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/diagnostics.py +0 -0
  62. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/getter.py +0 -0
  63. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/graph.py +0 -0
  64. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/image_updates.py +0 -0
  65. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/image_verification.py +0 -0
  66. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/overlay.py +0 -0
  67. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/__init__.py +0 -0
  68. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/contract.schema.json +0 -0
  69. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/profile.schema.json +0 -0
  70. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/rule-schema.json +0 -0
  71. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/resources/rule-set.json +0 -0
  72. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/secrets.py +0 -0
  73. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/security.py +0 -0
  74. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/cli/security_common.py +0 -0
  75. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/dependency_links.txt +0 -0
  76. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/entry_points.txt +0 -0
  77. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/composable_data_stack.egg-info/top_level.txt +0 -0
  78. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/setup.cfg +0 -0
  79. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_cds_workflow.py +0 -0
  80. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_completion.py +0 -0
  81. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_compose_runtime_smoke.py +0 -0
  82. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_config_generation.py +0 -0
  83. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_definitions_uri.py +0 -0
  84. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_dagster_hardening.py +0 -0
  85. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_duckdb_hardening.py +0 -0
  86. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_environment_classification.py +0 -0
  87. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_environment_cli.py +0 -0
  88. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_graph.py +0 -0
  89. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_image_security_scan_workflow.py +0 -0
  90. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_image_updates.py +0 -0
  91. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_markdown_mermaid_blocks.py +0 -0
  92. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_module_isolation.py +0 -0
  93. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_modules_no_committed_secrets.py +0 -0
  94. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_mvp_proof_workflow.py +0 -0
  95. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_overlay.py +0 -0
  96. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_python_version_alignment.py +0 -0
  97. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_release_version_check.py +0 -0
  98. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_resolve_profile_path.py +0 -0
  99. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_smoke_example_profile.py +0 -0
  100. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_standalone_module_profile.py +0 -0
  101. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_trivyignore.py +0 -0
  102. {composable_data_stack-0.8.0 → composable_data_stack-0.9.0}/tests/test_upstream_image_hardening.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: composable-data-stack
3
- Version: 0.8.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.6; extra == "dev"
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
  ![Composable Data Stack logo](assets/branding/logo.svg)
43
44
 
45
+ Project:
46
+
47
+ [![CI](https://github.com/RonaldHensbergen/composable-data-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/RonaldHensbergen/composable-data-stack/actions/workflows/ci.yml)
48
+ [![PyPI](https://img.shields.io/pypi/v/composable-data-stack.svg)](https://pypi.org/project/composable-data-stack/)
49
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
50
+
51
+ SonarCloud — Quality Gate & Ratings:
52
+
53
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
54
+ [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
55
+ [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
56
+ [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
57
+
58
+ SonarCloud — Issues:
59
+
60
+ [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=bugs)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
61
+ [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
62
+ [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
63
+
64
+ SonarCloud — Metrics:
65
+
66
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=coverage)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
67
+ [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
68
+ [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=sqale_index)](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 configuration from a resolved plan|
721
- |cds up [profile]|Validate, plan, render, build, and start services with docker compose; logs output to a file and shows a live `cds state` view until the stack settles (use `--no-build` to skip build, `--detach` to skip the live view, `--log-file`/`--timeout`/`--no-color` to override defaults)|
722
- |cds state [profile]|Show running service status grouped by health (use `--no-color` to disable colored labels)|
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
  ![Composable Data Stack logo](assets/branding/logo.svg)
7
7
 
8
+ Project:
9
+
10
+ [![CI](https://github.com/RonaldHensbergen/composable-data-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/RonaldHensbergen/composable-data-stack/actions/workflows/ci.yml)
11
+ [![PyPI](https://img.shields.io/pypi/v/composable-data-stack.svg)](https://pypi.org/project/composable-data-stack/)
12
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
13
+
14
+ SonarCloud — Quality Gate & Ratings:
15
+
16
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
17
+ [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
18
+ [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
19
+ [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
20
+
21
+ SonarCloud — Issues:
22
+
23
+ [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=bugs)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
24
+ [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
25
+ [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
26
+
27
+ SonarCloud — Metrics:
28
+
29
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=coverage)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
30
+ [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=RonaldHensbergen_composable-data-stack)
31
+ [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=RonaldHensbergen_composable-data-stack&metric=sqale_index)](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 configuration from a resolved plan|
685
- |cds up [profile]|Validate, plan, render, build, and start services with docker compose; logs output to a file and shows a live `cds state` view until the stack settles (use `--no-build` to skip build, `--detach` to skip the live view, `--log-file`/`--timeout`/`--no-color` to override defaults)|
686
- |cds state [profile]|Show running service status grouped by health (use `--no-color` to disable colored labels)|
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