Skip to content

v1.8.0 — Upsun Flex

Choose a tag to compare

@pianomansam pianomansam released this 21 Sep 14:40
· 11 commits to master since this release
c45915b

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.yaml is checked before every Fixed signal, RDG_APP_ROOT included.
  • 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.yaml is neither read nor hashed.
  • ddev rdg-sync deletes the other shape's generated file, and the guard refuses while both exist. DDEV merges every .ddev/config.*.yaml, so two means a stale php_version and a duplicate container_port — which DDEV rejects at parse time, taking down the ddev rdg-sync that 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.locations entry with scripts: true is a PHP entry point, so it is skipped and named on stderr instead of getting a static try_files block that would 404 with confidence.
  • The unknown-flag message on ddev upsun-*-pull names the provider the repo actually uses.
  • Part 2 of docs/dkr-to-ddev.md documents the stray sites/default/settings.php the first ddev start --skip-hooks scaffolds.

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.