Repository navigation
v1.8.0 — Upsun Flex
Adds Upsun Flex as a third shape, and gives Mailpit's UI a hostname on every repo.
Upgrading a repo that is already on Upsun Fixed needs nothing but the upgrade — no ddev rdg-sync, no new commit. Verified against crcna-d8 and rdg2020-copy: both derive byte-identically to their committed config.platformsh.yaml, and the new pre-start guard passes against those unchanged files.
ddev add-on get Rapid-Development-Group/ddev-rdg
git add .ddev && git commit
ddev restart
Upsun Flex
upsun convert replaces .platform.app.yaml + .platform/services.yaml with one .upsun/config.yaml. Until now that landed a repo in native mode — nothing derived — and ddev upsun-db-pull refused outright.
| fixed | flex | |
|---|---|---|
| source of truth | .platform.app.yaml + .platform/services.yaml |
.upsun/config.yaml |
| generated | config.platformsh.yaml |
config.upsun.yaml |
| pull provider | platform |
upsun |
| choose among several apps | RDG_APP_ROOT |
RDG_APP |
It is one parser with two yq prefixes, not a second reader — on Fixed the prefix is . and the output is byte-identical, which the four unchanged goldens assert.
No new API token. The upsun and platform CLIs are the same binary under two names and an Upsun account's token authenticates either, so the Flex recipe falls back to PLATFORMSH_CLI_TOKEN. If a Fixed repo has ever worked on your machine, a Flex one needs nothing.
providers/upsun.yaml is a vetted copy of DDEV's stock recipe with the two changes providers/platform.yaml already carried: one mount downloaded into $DDEV_FILES_DIR rather than every mount into /var/www/html, and both push commands deleted.
Leftover Fixed artifacts never win
upsun convert rewrites the tracked files and nothing cleans up what was not tracked, so a converted repo keeps a .platform/local/project.yaml naming the pre-conversion project, and any checkout of a pre-conversion branch brings .platform.app.yaml back.
.upsun/config.yamlis checked before every Fixed signal,RDG_APP_ROOTincluded.- The shape comes from the tracked config, never a
local/project.yaml— those are gitignored, so a fresh clone of a Flex repo had none and reported as "not on Upsun". - A leftover
.platform/services.yamlis neither read nor hashed. ddev rdg-syncdeletes the other shape's generated file, and the guard refuses while both exist. DDEV merges every.ddev/config.*.yaml, so two means a stalephp_versionand a duplicatecontainer_port— which DDEV rejects at parse time, taking down theddev rdg-syncthat would fix it.
Mailpit on a hostname
https://mailpit.<project>.ddev.site, generated on install, both modes, nothing to configure.
DDEV serves Mailpit on mailpit_http_port / mailpit_https_port against the bare project hostname, and one ddev-router serves every project — so the default 8025/8026 belongs to whichever started first, and with several projects up ddev mailpit can open another project's inbox without saying so. SMTP is untouched.
Fixed: the app root is no longer guessed
nginx-locations.sh derived the app root as dirname "$docroot", which assumes the docroot is exactly one segment below the app root. styledots is a repo where it is not — app config at the repo root with root: 'drupal/web' — and both halves broke at once: every path came out /var/www/html/drupal/drupal/web/…, and two locations inside the docroot were emitted as if outside it. rdg-sync now passes the app root explicitly.
Also
- A
web.locationsentry withscripts: trueis a PHP entry point, so it is skipped and named on stderr instead of getting a statictry_filesblock that would 404 with confidence. - The unknown-flag message on
ddev upsun-*-pullnames the provider the repo actually uses. - Part 2 of
docs/dkr-to-ddev.mddocuments the straysites/default/settings.phpthe firstddev start --skip-hooksscaffolds.
217 tests, up from 148. New fixtures: flex-subdir, flex-stale-fixed (a Flex repo whose leftover Fixed files declare different values at every key, so reading the wrong one fails the golden diff), and nested-docroot.