Skip to content

v0.1.0-rc.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Oct 20:22
· 66 commits to main since this release

Features

  • addon: add the ddev sync command (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 init for the production URL a sanitize rule needs (867064e)
  • cli: ask the questions init needs (315d475)
  • cli: describe each step instead of printing its command line (3300f51)
  • cli: have init ask where the credentials file is on the target (8f9a2b6)
  • cli: have init find the env file before a sync stops at it (b7102eb)
  • cli: import a target's connection from Deployer (29e50bd)
  • cli: let init fall 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 init the 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-config and 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 dep is 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)