Repository navigation
v0.1.0-rc.1
Pre-release
Pre-release
·
66 commits
to main
since this release
Features
- addon: add the
ddev synccommand (a396eab) - addon: install the configuration template as a DDEV add-on (da1cbb1)
- addon: run the engine as a sidecar beside the project (80a18e1)
- cli: add --features, --no-features, --feature-root and build (53473bf)
- cli: add -v, -vv and -vvv (0b1e1a3)
- cli: add
ddev sync init(0cec2d2) - cli: add a colour helper and the rule for when to use it (ece8f8a)
- cli: add live-run reporter and interactive prompts (e747655)
- cli: answer
ddev sync help <command>(08a2904) - cli: answer
ddev sync help(7c7bfd8) - cli: ask
initfor the production URL a sanitize rule needs (867064e) - cli: ask the questions
initneeds (315d475) - cli: describe each step instead of printing its command line (3300f51)
- cli: have
initask where the credentials file is on the target (8f9a2b6) - cli: have
initfind the env file before a sync stops at it (b7102eb) - cli: import a target's connection from Deployer (29e50bd)
- cli: let
initfall back to credentials entered by hand (a166d83) - cli: offer only the steps this project would actually run (c09db17)
- cli: render plans as plain text with golden snapshot coverage (7a02537)
- cli: render targets and doctor checklists (f24ea91)
- cli: separate every prompt from the output above it (53d59a7)
- cli: show
initthe detected features and let one be dropped (ef2ac8d) - cli: show a deployer target as the declaration it is (0e85935)
- cli: wire config, detection, profiles and planning into ddev-sync --dry-run (d35bcb8)
- cli: wire interactive run, targets and doctor subcommands (52dbb07)
- cli: wire the feature subsystem into the run context and the plan (e5758f0)
- config: accept a
deployer:block on a target and guard what it owns (0f71773) - config: add Stage, TargetSpec and ResolvedTarget models (d7834dc)
- config: detect framework major version from composer.lock and WordPress (d299b70)
- config: discover and load the three user config layers (0e85bee)
- config: make remote layout a property of the target (spec §4.4.1) (ecbb56f)
- config: merge layers with extend/replace/prepend and provenance tracking (4cd4f60)
- config: move the local layer where the add-on already ignores it (c4b62ff)
- config: name the remote env file apart from the local one (583bc16)
- config: parse Deployer's resolved configuration into a connection (fdd1ed4)
- config: resolve targets across layers with extends and cycle detection (6299f22)
- config: resolve the profile name from flag, config or DDEV type (e0858a6)
- config: write one target into a layer, and prove it afterwards (5147116)
- config: write settings into a layer, and prove no target moved (0afeccb)
- ddev: read project name, type and docroot from .ddev/config.yaml (ad12f08)
- doctor: colour the OK and FAIL markers (16e1479)
- doctor: report whether the credentials actually resolve (a29c59f)
- doctor: say why the ssh connection check failed (191d758)
- engine: build ordered sync plans with hooks and provenance (7872186)
- engine: execute plans with progress reporting and guaranteed teardown (29f9461)
- engine: thread params through the plan and harden hook resolution (3181eb7)
- env: let a profile declare values a project may keep (973e77f)
- features: add the closed detection vocabulary (eb0709f)
- features: add the feature schema and registry (ba84720)
- features: derive the package manager from the lockfile (bb4cb61)
- features: parse the features key and resolve settings (140a64e)
- features: resolve the active feature set into merge layers (e80f33a)
- features: ship the Laravel feature family (e03c320)
- features: ship the TYPO3 and Symfony stale-derived-state features (9836e88)
- files: let rsync's progress reach the terminal (c402083)
- operations: add execution context with project-root path guarding (9b46338)
- operations: add preflight checks for ssh, deploy path and disk space (5fcffd5)
- operations: add the closed sanitize operation catalog (f21cddd)
- operations: add the sanitize rule engine with SQL and operation rules (d9d1469)
- operations: import dumps into the local DDEV database with DEFINER stripping (eb88624)
- operations: mirror S3 buckets with rclone, credentials via environment (94c18c1)
- operations: pull files with rsync, rejecting paths outside the project (0ad7b3d)
- operations: rewrite env files in place with a confirmation diff (7359df1)
- operations: run setup commands and hooks through one shared path (9f02962)
- operations: stream remote database dumps with completeness verification (75dd5f3)
- plan: label setup steps and hooks as running in the web container (215a503)
- plan: say which env keys the dry-run will empty (fb552e9)
- preflight: let doctor predict an unreachable web container and a dead agent (0d8e8ac)
- preflight: let doctor report the sanitize-table probe (d90a070)
- preflight: probe the remote database for required sanitize tables (7b323e1)
- profiles: add Shopware 6 and Drupal, replacing hardcoded special cases (7d6181b)
- profiles: add the Laravel and Symfony profiles (80988ed)
- profiles: add the TYPO3 profile family (a177dbe)
- profiles: add WordPress with wp-cli credentials and search-replace (a804f42)
- profiles: reject an env.default that cannot work (2211289)
- profiles: resolve profiles with version variants and nearest-lower fallback (6c83040)
- profiles: stop imposing laravel's queue, cache and session drivers (03b0ef6)
- profiles: truncate TYPO3 scheduler state in the base profile (e36be62)
- profiles: validate merged profiles against a schema (e419934)
- registry: fall back to the repo's own profiles/features in a dev checkout (50fffc8)
- symfony: make the user table name overridable (0beb970)
- tools: turn a green matrix cell into a VERIFIED.md row (52a876e)
- tools: write one version into every file that names one (b508bde)
- transport: add CommandRunner port with real and fake implementations (d11d2cc)
- transport: build ssh, scp and rsync argument vectors with jump host support (8940abc)
- transport: build the argv that runs a command in the web container (4a164da)
- transport: resolve a deployer target by asking the project's Deployer (2de204a)
- transport: trust unknown ssh hosts on first use and bound the connect time (e2a9cf7)
Bug Fixes
- addon: discover the per-machine sidecar facts at every start (df0f6b2)
- addon: keep the machine-specific lines out of git (730aa96)
- addon: keep the sidecar's home across restarts and make the hook say what to do (042bc54)
- addon: make the hook's messages and the compose file's comments exact (ac6a721)
- addon: make the installed template text accurate and the copy atomic (3a79bc0)
- addon: mount .ddev where DDEV looks for a service's commands (61f7d9a)
- addon: mount the engine's global configuration layer into the sidecar (d8d9d8d)
- addon: narrow the declared DDEV floor to v1.25.0 (42ef84d)
- addon: print every step the project needs before it will start (6be4a6a)
-
addon: probe the agent with
debug compose-configand advise a narrower remedy (1159d1e) - addon: say why the project will not start when DDEV's ssh agent is off (75c6245)
- catalog: replace the guessed "duplicate user" tolerate-list (3e2bc70)
- catalog: run create_admin, wp search-replace and flush_cache in the web container (493afd8)
- catalog: scope duplicate-admin tolerate markers per driver (851acc5)
- catalog: tolerate a create_admin driver that has no markers of its own (49d411f)
- ci: gate every branch push and check the binaries the sidecar really runs (529cfa9)
- ci: release the commit the gates ran on (ac64b53)
- cli: ask the project's Deployer once, even on the way to an error (c9d0d22)
- cli: consolidate all group options to one declaration, fix doctor markers (7d696f0)
- cli: echo the legacy-path warning synchronously, not only at closing (5f189a9)
- cli: end an interrupted sync with a sentence, not a traceback (b2397b1)
- cli: fail with a message instead of hanging when there is no terminal (26dc490)
- cli: give _missing_env_file the guard its docstring already claimed (bf61c23)
- cli: hint that a rejected option must precede the subcommand (b52eecf)
- cli: keep step descriptions true and prove the sync colour path (679eaaa)
- cli: let doctor's exit code fail on low disk space too (887b386)
- cli: make 'ddev sync build' restrict setup to feature commands only (628a24d)
- cli: make the credentials override probe a real connection check (6e9094c)
- cli: name the interrupted step, and a cancelled prompt as cancelled (c4857c3)
- cli: name the real kill switch in the --no-features notice (e7696fa)
- cli: point credential errors at the path the gitignore covers (4e6dba8)
- cli: probe step availability per group so one broken group cannot fail another (f412396)
- cli: refuse a step selection with nothing ticked (512253d)
- cli: refuse an empty target name (299f635)
- cli: refuse build combined with --steps/--features/--no-features (9f50df9)
- cli: render per-line sources, the hook kind, and the port in --dry-run (db6bc33)
- cli: resolve project-root/home/profile-root on the group only (fc95b36)
- cli: say a target was written only once it has been checked (695bec1)
- cli: scrub every line the reporter writes (3ba745e)
- cli: scrub rclone's S3 keys at -vv and correct false comments (38beaba)
- cli: separate port from path with spaces in endpoint header (efa685b)
- cli: skip the dead-end remote-file question and stop burying the warning (6dad6a1)
- cli: stop reporting possible damage for an interrupt at a prompt (ca04c19)
- cli: stop telling users a dry run executes nothing (22c2478)
- cli: tolerate an empty project block, rename --version to --framework-version (d4b8efc)
- cli: warn when the credentials override writes to the ungitignored path (1e1c6f1)
- cli: withhold the output of commands that read credentials (d8b1f7f)
- cli: write only the project file, and report what the check really saw (a081217)
- config: accept a digit-string port and bound it to 1-65535 (15211fb)
- config: close the hole the key check left, and stop claiming too much (8c523d9)
- config: describe writer.py whole, and make its one-line claim true (b0e81f5)
- config: let merge keys through, and compare neighbours within the file (7450739)
- config: normalize ResolvedTarget.path to a single trailing slash (f337d07)
- config: pin the hidden-corruption case, and parse each side once (6c37d4f)
- config: prove the written block is the one that landed (2fdf7b0)
- config: recognise {mode, commands} as a list directive (74ad03e)
- config: refuse a configuration that names the same key twice (48a7f1f)
- config: refuse a target name YAML did not read as text (9bfaa04)
- config: reject a Deployer host alias that names nothing (cca2501)
- config: render any key in a merge path, and correct four claims (a833095)
- config: resolve target inheritance correctly and name the source file in errors (9c34e76)
- config: scope the no-password claim and bound a credentials failure (1ff0d4c)
- config: stop advising the committed file for a production password (7b5f9bc)
- config: use tuple provenance keys to avoid dotted-key collisions (f01ce1a)
- db: connect to DDEV's database without TLS, which it does not offer (691419e)
- db: drop the local database before rewriting the dump (37d0a5f)
- db: keep TLS where DDEV offers it, and only skip verifying it (94ebc0e)
- db: report a failed dump rewrite as the empty database it leaves (cb9251e)
- db: say a dump may still carry DEFINER clauses, not that it does (fca5d0d)
- db: take the half-written copy with a failed DEFINER rewrite (02469dc)
- ddev: validate the docroot where it is read (914b54b)
- docs: correct the project-questions ordering rationale (c85b2b4)
- doctor: keep ssh's verdict when condensing its stderr (8edf99a)
- doctor: stop clipping the credentials failure detail from the front (a5c6d02)
- drupal: tolerate a missing sessions table in clear-sessions (7a51e15), closes #3428565
- engine: dispatch hook steps through run_command_entry, not their parent's operation (F9) (5dc7a44)
- engine: drop the sync: wrapper, accept bare hook entries, preview the ssh port, validate files.paths (9b3f709)
- engine: say what a sanitize-only re-run cannot know about the data (20aa72b)
- engine: stop the plan from rendering a db.download scp that never runs (7af0f18)
- engine: wire EnvRewriteOperation and S3SyncOperation; validate files.paths and post_sync at the shared resolution (99fb7ea)
- env: catch EOFError on the env-rewrite confirmation prompt (5efc7ec)
- env: count the declaration forms a dotenv loader accepts (25bdf76)
- env: rewrite every occurrence of a duplicated key (11eef00)
- exec: expand ${...} placeholders in hook and setup commands (8004f28)
- exec: run setup commands and hooks in the web container (6928212)
- features: add detect comment and use singular setting wording (2754c78)
- features: delete typo3-solr, whose one command does not exist (6a472dc)
- features: derive node-build's install verb from the package manager (40a5330)
- features: drop horizon's non-existent sanitize tables (536168f)
- features: handle boolean and list-as-settings cases (a9d6f11)
- features: make the package-manager gate asymmetric like applies_to (188b4c1)
- features: render each detect predicate distinctly, not its bare value (9372d41)
- features: require a real build script before node-build auto-activates (a9dd1ad)
- matrix: override composer's advisory block the way mxtypo312 does (e205921)
- matrix: require an undeclared imposed key beside an overridden one (325fe10)
- matrix: unblock mxtypo313's install, and pin the composer that blocked it (dd29a31)
- operations: create the typo3 admin with core's backend:user:create (371337c)
- operations: exclude non-file entries when matching env candidates (fc8f72c)
- operations: give the drush admin the administrator role (85a6510)
- operations: lead with the absent-key sentence, not "cannot be empty" (360fbf5)
- operations: patch shutil.disk_usage by dotted string, not re-export (e628014)
- operations: reject empty remote credential values and restore scrub guard (2aecb4b)
- operations: reject malformed clear_mail_config keys and narrow create_admin's duplicate check (370b2c5)
- operations: report the reason a container command failed (6923ecb)
- placeholders: reject a docroot that can escape the project root (e117017)
- placeholders: reject a docroot the shell would reinterpret (01d61c1)
- placeholders: require at least one char in the SQL identifier pattern (ff02a80)
- placeholders: validate ${WP_TABLE_PREFIX} and ${SYMFONY_USER_TABLE} (6987127)
- plan: name the env defaults a sync may write (b2e2db4)
- plan: refuse a malformed env.default at plan time (7fac92d)
- plan: reject a malformed env.file with a ConfigError instead of a TypeError (99cd68f)
- preflight: keep doctor's checklist when a sanitize rule cannot be parsed (f8cd30a)
- preflight: keep doctor's web probe from raising and make its tests hermetic (5ea0b50)
- preflight: stop a database run whose credentials do not resolve (88dbe0d)
- profiles: add missing anonymise/reset-password sanitize rules; conformance test backstops it (acdfd23)
- profiles: blank laravel's URL keys so the host pins decide (0300412)
- profiles: drop the baked-in Deployer shared/ convention (e89da9f)
- profiles: impose a local MAIL_URL so laravel's mail pins decide (9cb7af6)
- profiles: impose laravel's CACHE_STORE again (7fdd107)
- profiles: impose the pre-11 cache key too, and state what the change delivers (8baeefb)
- profiles: make the typo3 profile work on a stock TYPO3 13 (4a86a1c)
- profiles: restore reset-fe-passwords in typo3@9/@10 (bb5b7cf)
- profiles: typo3@11 cannot create a backend admin, so it no longer tries (dd8d759)
- release: normalise pre-release identifiers the way PEP 440 does (d725746)
- render: include post_sync-only sources in the legend (f464396)
- s3: add Alpine's sbin directories to rclone's pinned PATH (c4c05fd)
- sanitize: add tolerate_missing_table so a missing scheduler table can't abort the sync (da1aed2)
- sanitize: expand ${...} placeholders in every sanitize rule parameter (81431e2)
- sanitize: read the WordPress prefix from the remote, and fold table-name case (1416acb)
- sanitize: resolve placeholders lazily and add ${WP_TABLE_PREFIX} (3875b1f)
- sanitize: resolve the production URL instead of shipping a placeholder (86da624)
- sanitize: tolerate missing optional tables across every profile (14f1b94)
- security: shlex.quote remote shell arguments; pin the probe script exactly; clean error on closed stdin (351e259)
- terminate each env-file probe statement before the next one (7d6ff13)
- tests: mount the web stand-ins at /var/www/html like DDEV does (3cb44ad)
- tests: restore the remote-probe guard, and correct what verification costs (21d758d)
- tests: stop test_all_profiles from tripping the legacy-terms scanner (c33bf93)
- test: type the target keys that are deliberately not strings (58c186d)
- tools: write the version into uv.lock too, and run on any python3 (c8aba2b)
- transport: canonicalise project root and fix false comments (9af5795)
-
transport: say where Deployer belongs when no
depis found (5bebc1b) - transport: translate the workdir onto the container's mount point (a72cba4)
- typo3-processedfiles: derive the path from the real docroot (562a48f)
Performance Improvements
- addon: announce a pull only when there is one to announce (ecd0e5f)