0.7.0
RollDev 0.7.0 Release Notes
🔥 BIG UPDATE with lots of fixes 🔥
RollDev 0.7.0 brings a Mage-OS installer, a health report for your environments, container healthchecks, JSON output for scripts and a rebuilt backup and restore, plus a long list of fixes for macOS, Linux and WSL.
Warning
This release changes a few defaults. Read brew upgrade dockergiant/roll/roll.
🧡 NEW: Mage-OS installer!!!
Install Mage-OS with one command. roll mageos-init runs the same flow as magento2-init, admin user with 2FA included, and pulls packages from repo.mage-os.org, so you need no Magento Marketplace credentials.
roll mageos-init mystore # latest Mage-OS 3.x
roll mageos-init mystore 3.5.0 # a specific version
roll mageos-init mystore 2.3.0 ~/Sites/ # built on Magento 2.4.8, in another directoryRollDev picks the stack from the Magento release each Mage-OS version is built on:
| Mage-OS | Built on | PHP | MariaDB | OpenSearch | Valkey | Varnish |
|---|---|---|---|---|---|---|
| 3.x | Magento 2.4.9 | 8.5 | 12.3 | 3.5 | 9.0 | 8.0 |
| 1.1.0 to 2.x | Magento 2.4.8 | 8.4 | 11.4 | 3.5 | 8.1 | 8.0 |
Mage-OS 1.0.x (Magento 2.4.6 and 2.4.7) is not supported.
✨ Highlights
🩺 roll env doctor
One command checks your configuration, Docker, container health, the ports of the global services, search engine health and writes, and disk space. It exits 1 when a check fails, so a CI job or script can act on it.
roll env doctor
roll env doctor --format json --ignore-services=varnish❤️ Healthchecks and roll env up --wait
db, redis/valkey, elasticsearch, opensearch and rabbitmq report their health, and roll env up --wait returns once they are ready. nginx and varnish get no healthcheck on purpose: Traefik stops routing to a container while its healthcheck is starting or failing, which would hide your site right after env up.
🤖 Built for scripts
--format jsononroll status,roll env describeandroll registry listroll has-command <name>exits 0 or 1 without outputroll env sh <service> '<command>'runs throughsh -cin the container, so pipes and redirects work there
💾 Backup and restore, rebuilt
Backup, restore and duplicate share one library now.
roll backup --output-dir=PATH --archive-name=NAME --keep-dirwrites the archive where you want it, under a fixed namerestore-fullbecameroll restore --include-source, and the old name keeps working- Restored Elasticsearch and OpenSearch volumes start again, and a backup that runs out of disk no longer reports success
🪄 Magento 2.4.9 stack
roll env-init <name> magento2 writes PHP 8.5, MariaDB 12.3, OpenSearch 3.5, Valkey 9.0, RabbitMQ 4.3, Varnish 8.0 and Node 24. magento2-init sets up 2.4.8 (PHP 8.4, MariaDB 11.4, Valkey 8.1) and 2.4.9, and no longer configures OpenSearch 3 as Elasticsearch.
📊 Tables that fit your terminal
roll env describe, roll env doctor and roll status share one table renderer that fits the terminal width and wraps long cells.
⚠️ Read Before Upgrading
- Magento 2 service defaults now apply. A magento2
.env.rollthat leaves outROLL_VARNISH,ROLL_ELASTICSEARCHorROLL_RABBITMQnow gets those services, as the defaults always intended. Schema defaults used to be filled in first, which switched the three off. Projects that set the toggles explicitly, whichenv-initalways does, see no change. A project withROLL_OPENSEARCH=1does not get Elasticsearch added. MARIADB_VERSIONandMYSQL_VERSIONnow set the database image. WithoutDB_DISTRIBUTION_VERSION, these older keys were ignored and the database ran 10.4. A project withMARIADB_VERSION=10.3would now start MariaDB 10.3 on data that 10.4 already upgraded, which MariaDB does not support. Check such projects and set the version they actually run;DB_DISTRIBUTION_VERSIONstill wins when both are set.MONGODB_VERSIONbecameMONGO_VERSION. The mongodb service read a key the schema never defined. An existingMONGODB_VERSIONstill works, and the default stays 7. A project that setMONGO_VERSIONitself ran 7 regardless; it now gets the version it sets, so check that value against the data.- For
roll envcommands,.env.rollnow wins over~/.roll/.env.envused to re-read theROLL_*lines of the global file after the project file, so a key set in both files took the global value. Every other command already let the project win. restore-fullis nowrestore --include-source. Therestore-fullname keeps working, with the same arguments.roll restore <word>: a numeric argument is the backup ID, as before. Any other word (for exampleroll restore db) is ignored with a warning and the latest backup is restored, which is what older versions did silently; use--services=dbto restore one service.status,describe,registryanddoctortake any arguments, so--format jsonreaches them.- Registry categories come from help-file headers (
## @category:).roll registry list "" environmentused to list project and env-type commands; that search path is now thesourcefield, andexport csvhas it as a new last column. - Containers get healthchecks. Run
roll env uponce so Compose recreates them with a healthcheck. - Homebrew no longer installs
gum,dialog,pv,perlandpgrep. RollDev does not use them.brew autoremovecan remove them after the upgrade, so a command of your own in~/.roll/commandsthat calls one of them needs it installed separately, for examplebrew install gum dialog pv.
🚀 More New Features
REDIS_DISTRIBUTION=valkeyruns Valkey as the redis service, and the container is named after the distribution.ROLL_PUBLISH_PORTS=0: BrowserSync publishes no host ports, so many environments can run on one host.ELASTICSEARCH_JAVA_OPTSandOPENSEARCH_JAVA_OPTSset the search engine heap per project.roll copyfromcontainerandroll copytocontainerare built in.ROLL_ENV_INIT_FORCE=1letsenv-initoverwrite an existing.env.rollwithout asking.- Help files carry a description and category, shown by
roll registry categoriesandroll registry list --format json. - On macOS, Mutagen skips
.roll/backupsand the containers no longer see that directory.var/log, andvar/reportfor magento2, are bind-mounted so you can read the logs on the host. rolllistsduplicate,describe,cliq,node,npmandvnc, androll duplicate --helpdocuments--verbose,--encrypt,--no-urlsand--no-magento-commands.
🐛 Fixes
💾 Backup and restore
- A restored Elasticsearch or OpenSearch volume came back owned by root, so the engine would not start. The volume root now gets the owner of the restored data.
roll restore <id>ignored an ID given before any flag and restored the latest backup.roll restore --dry-runleaves the environment running.roll restorereads legacyes.tar.gzandos.tar.gzbackups and acceptsroll restore all.- A backup whose final archive step ran out of disk was reported as successful, and the uncompressed copy was deleted.
roll backupandroll duplicatecould stop without a message on bash 5 (Linux) at the first progress step.roll backupandroll restorework on macOS 13 and older, which shipshasumbut nosha256sum.roll backup --encryptand restoring an encrypted backup stop at once whengpgis missing and name the package to install. The backup used to run through every volume and fail at the encryption step, and the restore failed halfway.
🐳 Environments and Docker
- OpenSearch ignored its heap setting: it reads
OPENSEARCH_JAVA_OPTS, notES_JAVA_OPTS. Unset, it keeps the image heap (1g) it has always run with. It also skips the demo security config, which newer OpenSearch versions refuse to start without an admin password. roll env upran an extradocker compose up --no-startevery time because of a quoting error.- WSL loads the
.linux.ymlcompose fragments. roll svc uprefreshes images on Linux: the online check usedping -t, which means TTL there.roll dbworks with MariaDB images that only shipmariadbandmariadb-dump.roll vncfinds the selenium container on Compose v2.roll env describetakes about 1s instead of 9s.roll env-initforlocalandvuejsproduces a working project.
⌨️ Commands and help
roll env --help,roll svc --helpandroll restore --helpstarted the same command again and never finished.roll redis --helpranredis-cli --helpin the container.roll status --helpfailed to parse on the macOS system bash.roll registry categoriesandstatsfailed on bash 3.2.roll --helpprinted the usage twice.roll fixownsandroll fixpermsaccept more than one path.roll env-initrejects an environment name Compose cannot use, and fails instead of looping when there is no terminal.- Box output no longer fails under cron or without a terminal.
roll installwarns on a Linux distribution without a supported CA trust store.magento2-initrenders the 2FA QR code on images that ship the segno Python module, and stops whencomposer create-projectfails.
🍺 macOS and Homebrew
- On macOS with GNU sed first on PATH (Homebrew
gnu-sed),roll config setandmagento2-initleft.env.rollunchanged. roll synccould not install Mutagen, because thehavoc-io/mutagentap is gone. It usesmutagen-io/mutagennow, and when Homebrew refuses the third-party tap it tells you to runbrew trust mutagen-io/mutagen.brew installfailed on Linux with the Docker Compose package from Ubuntu, whose version string (2.40.3+ds1-0ubuntu1~24.04.1) the formula could not parse, and on macOS with Colima or Rancher Desktop. The formula findsdockeron your PATH now.
🔒 Security
roll tableplusno longer passes the database password as a process argument.- Traefik mounts the Docker socket read-only.
shell,rootshellandenvno longerevalthe contents of~/.roll/.env; the config loader already reads and validates it.roll svckeeps its own reading of that file, because Docker Compose parses the same file for the global services (inline comments,${VAR}expansion).
🧰 Internal
- New shared libraries:
utils/backup.shfor backup, restore and duplicate,utils/interact.shfor prompts (plain bash, no gum), andutils/table.shfor tables. - ShellCheck runs on Ubuntu and macOS with a
.shellcheckrc, plus a Docker-free smoke suite under bash 3.2 (.github/scripts/). - New
init.envpinsNGINX_VERSION=1.30for every environment type. - The Tag Release workflow no longer fails when
versionalready holds the version being tagged.
Full Changelog: 0.6.2...0.7.0