v0.6.0
Added
- Added a
--hardenedCLI flag tocds up,cds render, andcds test, which overridesconfig.image.varianttohardenedfor any module whose configSchema exposes animage.variantproperty (currently onlymodules/orchestration/dagster) before planning, so users no longer need to hand-edit their profile YAML to select the Alpine-hardened Dagster image build (#373).
Changed
- Expanded the
rufflint scope inpyproject.tomlfrom pyupgrade-only (UP) to also include pyflakes, bugbear, bandit, and isort (F,B,S,I), and fixed or annotated (# noqa) every finding surfaced by the wider scope acrosscli/,tests/, andworkdirs/. This also uncovered and fixed a dormant bug intests/test_module_isolation.py:setUpClassread a module file handle after it had already been closed, socls.moduleswas always empty andtest_no_cross_module_service_referencessilently never executed its assertions (#497, #498, #499).
Fixed
cli/renderer.pyno longer allows a module template's pure${config.*}/${bindings.*}substitution to splice a profile-supplied dict/list verbatim into compose-dangerous service fields (command,entrypoint,environment,volumes,cap_add,security_opt,ports, and similar). This closes a compose-injection path where an untrusted profile could smuggle arbitrary command args, environment variables, or host bind mounts through module config; such templates now fail rendering with a newE072diagnostic.cds getno longer writes fetched files or the tracking manifest through a pre-planted symlink at the destination path._find_conflictsnow treats any symlink destination (including a dangling one, whichPath.exists()reports as absent) as a conflict, and the copy/manifest-write steps unlink any symlink at the destination before writing, so a symlink can no longer be used to redirect fetched content onto an arbitrary path outside the destination tree (#474).
What's Changed
- chore(images): refresh signed-images fixture by @github-actions[bot] in #516
- fix(cli): reject and never write through symlinked cds get destinations by @RonaldHensbergen in #509
- feat(cli): add --hardened flag to up/render/test by @RonaldHensbergen in #504
- fix: reject typed pure-substitution injection into compose-dangerous fields by @RonaldHensbergen in #502
- chore(deps): update python:3.14-slim docker digest to 83ff1d2 by @renovate[bot] in #519
- chore(images): refresh signed-images fixture by @github-actions[bot] in #520
- chore: expand ruff linting scope to cover pyflakes, bugbear, bandit, isort by @RonaldHensbergen in #497
- chore(release): bump version to 0.6.0 by @github-actions[bot] in #518
Full Changelog: v0.5.2...v0.6.0
What's Changed
- chore(images): refresh signed-images fixture by @github-actions[bot] in #516
- fix(cli): reject and never write through symlinked cds get destinations by @RonaldHensbergen in #509
- feat(cli): add --hardened flag to up/render/test by @RonaldHensbergen in #504
- fix: reject typed pure-substitution injection into compose-dangerous fields by @RonaldHensbergen in #502
- chore(deps): update python:3.14-slim docker digest to 83ff1d2 by @renovate[bot] in #519
- chore(images): refresh signed-images fixture by @github-actions[bot] in #520
- chore: expand ruff linting scope to cover pyflakes, bugbear, bandit, isort by @RonaldHensbergen in #497
- chore(release): bump version to 0.6.0 by @github-actions[bot] in #518
Full Changelog: v0.5.2...v0.6.0