v0.9.0
Removed
- Removed
jinja2from the CLI package's runtime dependencies; it was only ever imported byimages/dagster/generate_config.py, a Docker build-time script, and is now installed explicitly inimages/dagster/requirements.txtinstead. Added a newtestextra (and updatedMakefile,CONTRIBUTING.md, and CI) since the test suite still exercisesgenerate_config.pydirectly (#470).
Added
- Added a Kubernetes runtime target:
cds render/cds validate/cds security/cds test/cds up/cds down/cds statenow accept--target helmalongside the existing Docker Compose target.cli/k8s_renderer.pyrenders the resolved plan as a Helm chart (Secrets, ConfigMaps, Deployments/StatefulSets and PVCs, release-scoped Services),cli/k8s_security.pyruns Kubernetes-specific security checks (effective per-container root/non-root posture), andcli/k8s_runner.pyprovides boundedhelm upgrade --installpluskubectl wait/rollout statuslifecycle operations. Includes a sibling-safe, per-worktree k3d local-dev harness (scripts/k8s/,make k3d-*) with an isolated k3s CI proof workflow, a TenderNed procurement-data Superset/Dagster analytics demo wired through the new target, anddocs/kubernetes.md(#608). - Added
scripts/ai_profile_review.py, an optional AI-assisted guardrail/simplification review for CDS profiles: it runscds validate/cds planand then asks an LLM to flag repository-convention violations and simplification opportunities not already covered by schema/contract validation, seeing only profile YAML and the resolved plan (secrets are always placeholders, never resolved values). Supports--jsonand--dry-run, and a vendored single-seam LLM client (scripts/_vendor/llm/) with three explicit providers (copilot_cli,azure_openai,ollama) and no silent fallback (#652). - Added
scripts/compose_to_module.py, a scaffolding tool that automates the mechanical parts ofdocs/from-docker-to-cds-profile.md: it converts an existingdocker-compose.ymlinto a startermodule.yaml, lifting ports/environment into aconfigSchema, replacing literal values with${config.*}placeholders, and detecting secret references, hardcoded connection strings, and dependencies on other compose services (flagging well-known infra images for binding to an existing shared contract and provider module instead of being scaffolded anew) (#670). - Added
config.image.registry(dockerhubdefault |ghcr) to theorchestration/dagsterandbi/supersetmodule schemas, soconfig.image.source: registrycan pull the same signed imagepublish-images.ymlalready publishes to GHCR, not just Docker Hub; existing profiles are unaffected since the default keeps them pointed at Docker Hub (#613). - Promoted the dbt transformation module from
modules-experimental/to
modules/transformation/, with production-suitable hardening and
PostgreSQL/DuckDB warehouse support (#594). - Added regression tests for planner default materialization in nested
configSchemastructures: array-item object defaults filled in per-item without overwriting explicitly provided sibling properties, and partially provided nested objects preserving explicit falsy values (False/0) while still materializing omitted siblings (#459). - Added CLI-level test coverage asserting
cds validatereports precise diagnostic codes and data paths for common validation failures: a module entry missing a required field (E010) and a consume binding with an unresolvablecontractRef(E041) (#460). - Added
cli.loader.save_generated_profile()andcli.main.generate_profile()so a runtime/programmatically composed profile can be persisted at its normalprofiles/<name>/profile.yamllocation (honoringCDS_PROFILE_PATH), then handed to the existingvalidate_profile()/build_plan()entry points completely unchanged -- same relative module-source resolution andextends/environment-overlay semantics as any hand-authored profile. Refuses to write outside the profiles root or silently overwrite an existing profile withoutforce=True. Exposed as a newcds generate-profile <file>CLI command (reads JSON/YAML from a file path or-for stdin, with--name/--forceoptions) (#349). - Added
test_fetch_profile_rejects_dockerfile_copy_traversal_escaping_source_repo, a regression test proving a DockerfileCOPY/ADDsource containing..thatPath.glob()matches outside the source repository is rejected as a stableGetError(via the existing_add_copy_actionguard from #454), not an unhandledValueError(#475). - Pinned
build,twine, andyamllint's CI-installed versions, and therenovatenpm package version used byrenovate-config-validator, matching this repo's existing exact-pin convention for CI-only tooling (e.g.ruff==0.16.6), addressing SonarCloud'sgithubactions:S8544findings triaged in #622. Added matching Renovate custom managers so these pins stay up to date automatically.
Fixed
- Set the Docker Hub short description for every published image (
dagster,superset,dbt,dlt) viapeter-evans/dockerhub-description'sshort-descriptioninput, instead of relying on it being set manually per repository.dbtanddltwere missing it entirely since their Docker Hub repositories were auto-created by CI without ever going through that manual step. - Fixed a quadratic (super-linear) regex backtracking hazard in
cli/preflight.py's_ENV_REFERENCEpattern, used to scan rendered Compose YAML for${VAR...}references: an unterminated reference could make the identifier and suffix capture groups' overlapping character classes retry every possible split point. Required the suffix group to start with one of its actual delimiters (:,?,-), making the two groups' character classes disjoint, flagged by SonarCloud aspython:S8786. images/superset/init.shnow uses[[ ... ]]instead of[ ... ]for its conditional tests, addressing SonarCloud'sshelldre:S7688findings triaged in #622.
Changed
- Raised the
coverage-enforcedcli/coverage gate from 65% to 80%, matching actual measured coverage and the industry norm for a security-focused tool (pyproject.toml's[tool.coverage.report]fail_under) (#471).
What's Changed
- docs(changelog): retroactively add the missing 0.8.0 release section by @RonaldHensbergen in #615
- Wire dbt module to optionally target DuckDB (#593) by @RonaldHensbergen in #599
- chore(images): refresh signed-images fixture by @github-actions[bot] in #617
- docs: soften dagster hardened-variant CVE-count claim by @RonaldHensbergen in #611
- ci(images): add alpine-latest/alpine- tag aliases for hardened publish by @RonaldHensbergen in #612
- chore(images): refresh signed-images fixture by @github-actions[bot] in #618
- Expand release-tag-reminder into a full release completeness checklist by @RonaldHensbergen in #614
- feat(images): support pulling published images from GHCR, not just Docker Hub by @RonaldHensbergen in #613
- chore(images): refresh signed-images fixture by @github-actions[bot] in #628
- fix(superset): use [[ ]] instead of [ ] in init.sh conditionals (#622) by @RonaldHensbergen in #627
- chore(images): refresh signed-images fixture by @github-actions[bot] in #630
- docs(readme): add SonarCloud, CI, PyPI, and license badges by @RonaldHensbergen in #629
- chore(ci): exact-pin CI-only tool versions flagged by SonarCloud (#622) by @RonaldHensbergen in #626
- ci: run SonarCloud scan on pushes to main, not just same-repo PRs by @RonaldHensbergen in #632
- ci(biweekly-issue-audit): install and authenticate Copilot CLI by @RonaldHensbergen in #631
- Add experimental ingestion module for dlt (data load tool) by @RonaldHensbergen in #592
- Raise coverage gate to 80% and close security-module test gaps by @RonaldHensbergen in #619
- fix(preflight): remove quadratic regex backtracking in _ENV_REFERENCE by @RonaldHensbergen in #635
- ci: set Docker Hub short description for all published images by @RonaldHensbergen in #636
- chore(images): refresh signed-images fixture by @github-actions[bot] in #638
- test: add planner default-materialization and validate diagnostics-path regression tests by @RonaldHensbergen in #637
- test(getter): add regression test for Dockerfile COPY traversal escape by @RonaldHensbergen in #633
- chore(deps): update all dependencies by @renovate[bot] in #639
- chore: remove jinja2 runtime dependency, unused by the CLI by @RonaldHensbergen in #634
- chore(images): refresh signed-images fixture by @github-actions[bot] in #640
- chore(images): refresh signed-images fixture by @github-actions[bot] in #641
- Promote dbt module out of modules-experimental/ to production-suitable by @RonaldHensbergen in #594
- Normalize Mako package name for Renovate by @RonaldHensbergen in #644
- chore(deps): update nginx docker tag to v1.31 by @renovate[bot] in #643
- chore(images): refresh signed-images fixture by @github-actions[bot] in #642
- chore(images): refresh signed-images fixture by @github-actions[bot] in #645
- chore(deps): update dependency renovate to v44.68.1 by @renovate[bot] in #646
- chore(deps): update dependency renovate to v44.69.6 by @renovate[bot] in #650
- chore(deps): update dependency renovate to v44.69.7 by @renovate[bot] in #651
- chore(deps): update all dependencies by @renovate[bot] in #653
- chore(images): refresh signed-images fixture by @github-actions[bot] in #654
- Batch renovate's own npm self-update into a weekly PR by @RonaldHensbergen in #658
- Fix/sonarcloud pinned java by @RonaldHensbergen in #659
- chore(deps): update actions/setup-java action to v6 by @renovate[bot] in #660
- chore(deps): update dependency psycopg2-binary to v2.9.13 by @renovate[bot] in #666
- chore(images): refresh signed-images fixture by @github-actions[bot] in #667
- Linefeeds between badge groups by @RonaldHensbergen in #671
- chore(deps): update dependency build to v1.6.1 by @renovate[bot] in #672
- fix(deps): update dependency ruff to v0.16.7 by @renovate[bot] in #673
- docs: add Haven parity plan by @RonaldHensbergen in #674
- chore(deps): update all dependencies by @renovate[bot] in #675
- chore(images): refresh signed-images fixture by @github-actions[bot] in #676
- Add AI-assisted guardrail/simplification review for CDS profiles by @RonaldHensbergen in #652
- feat: allow runtime-generated profiles for planning and composition by @RonaldHensbergen in #647
- Add scripts/compose_to_module.py: scaffold a module.yaml from docker-compose by @RonaldHensbergen in #670
- docs: group README badges into labeled categories by @RonaldHensbergen in #687
- fix: add trivyignore exceptions for new Debian trixie CVEs in dagster base image by @RonaldHensbergen in #688
- feat: add Kubernetes target and Tender analytics demo by @vanderheijden86 in #608
- chore(deps): update all dependencies by @renovate[bot] in #692
- chore(deps): update azure/setup-helm action to v5 by @renovate[bot] in #693
- chore(release): bump version to 0.9.0 by @github-actions[bot] in #623
New Contributors
- @vanderheijden86 made their first contribution in #608
Full Changelog: v0.8.0...v0.9.0
What's Changed
- docs(changelog): retroactively add the missing 0.8.0 release section by @RonaldHensbergen in #615
- Wire dbt module to optionally target DuckDB (#593) by @RonaldHensbergen in #599
- chore(images): refresh signed-images fixture by @github-actions[bot] in #617
- docs: soften dagster hardened-variant CVE-count claim by @RonaldHensbergen in #611
- ci(images): add alpine-latest/alpine- tag aliases for hardened publish by @RonaldHensbergen in #612
- chore(images): refresh signed-images fixture by @github-actions[bot] in #618
- Expand release-tag-reminder into a full release completeness checklist by @RonaldHensbergen in #614
- feat(images): support pulling published images from GHCR, not just Docker Hub by @RonaldHensbergen in #613
- chore(images): refresh signed-images fixture by @github-actions[bot] in #628
- fix(superset): use [[ ]] instead of [ ] in init.sh conditionals (#622) by @RonaldHensbergen in #627
- chore(images): refresh signed-images fixture by @github-actions[bot] in #630
- docs(readme): add SonarCloud, CI, PyPI, and license badges by @RonaldHensbergen in #629
- chore(ci): exact-pin CI-only tool versions flagged by SonarCloud (#622) by @RonaldHensbergen in #626
- ci: run SonarCloud scan on pushes to main, not just same-repo PRs by @RonaldHensbergen in #632
- ci(biweekly-issue-audit): install and authenticate Copilot CLI by @RonaldHensbergen in #631
- Add experimental ingestion module for dlt (data load tool) by @RonaldHensbergen in #592
- Raise coverage gate to 80% and close security-module test gaps by @RonaldHensbergen in #619
- fix(preflight): remove quadratic regex backtracking in _ENV_REFERENCE by @RonaldHensbergen in #635
- ci: set Docker Hub short description for all published images by @RonaldHensbergen in #636
- chore(images): refresh signed-images fixture by @github-actions[bot] in #638
- test: add planner default-materialization and validate diagnostics-path regression tests by @RonaldHensbergen in #637
- test(getter): add regression test for Dockerfile COPY traversal escape by @RonaldHensbergen in #633
- chore(deps): update all dependencies by @renovate[bot] in #639
- chore: remove jinja2 runtime dependency, unused by the CLI by @RonaldHensbergen in #634
- chore(images): refresh signed-images fixture by @github-actions[bot] in #640
- chore(images): refresh signed-images fixture by @github-actions[bot] in #641
- Promote dbt module out of modules-experimental/ to production-suitable by @RonaldHensbergen in #594
- Normalize Mako package name for Renovate by @RonaldHensbergen in #644
- chore(deps): update nginx docker tag to v1.31 by @renovate[bot] in #643
- chore(images): refresh signed-images fixture by @github-actions[bot] in #642
- chore(images): refresh signed-images fixture by @github-actions[bot] in #645
- chore(deps): update dependency renovate to v44.68.1 by @renovate[bot] in #646
- chore(deps): update dependency renovate to v44.69.6 by @renovate[bot] in #650
- chore(deps): update dependency renovate to v44.69.7 by @renovate[bot] in #651
- chore(deps): update all dependencies by @renovate[bot] in #653
- chore(images): refresh signed-images fixture by @github-actions[bot] in #654
- Batch renovate's own npm self-update into a weekly PR by @RonaldHensbergen in #658
- Fix/sonarcloud pinned java by @RonaldHensbergen in #659
- chore(deps): update actions/setup-java action to v6 by @renovate[bot] in #660
- chore(deps): update dependency psycopg2-binary to v2.9.13 by @renovate[bot] in #666
- chore(images): refresh signed-images fixture by @github-actions[bot] in #667
- Linefeeds between badge groups by @RonaldHensbergen in #671
- chore(deps): update dependency build to v1.6.1 by @renovate[bot] in #672
- fix(deps): update dependency ruff to v0.16.7 by @renovate[bot] in #673
- docs: add Haven parity plan by @RonaldHensbergen in #674
- chore(deps): update all dependencies by @renovate[bot] in #675
- chore(images): refresh signed-images fixture by @github-actions[bot] in #676
- Add AI-assisted guardrail/simplification review for CDS profiles by @RonaldHensbergen in #652
- feat: allow runtime-generated profiles for planning and composition by @RonaldHensbergen in #647
- Add scripts/compose_to_module.py: scaffold a module.yaml from docker-compose by @RonaldHensbergen in #670
- docs: group README badges into labeled categories by @RonaldHensbergen in #687
- fix: add trivyignore exceptions for new Debian trixie CVEs in dagster base image by @RonaldHensbergen in #688
- feat: add Kubernetes target and Tender analytics demo by @vanderheijden86 in #608
- chore(deps): update all dependencies by @renovate[bot] in #692
- chore(deps): update azure/setup-helm action to v5 by @renovate[bot] in #693
- chore(release): bump version to 0.9.0 by @github-actions[bot] in #623
New Contributors
- @vanderheijden86 made their first contribution in #608
Full Changelog: v0.8.0...v0.9.0