Folder structure that will be used to support Composer natively
Add your comments directly to the page. Include links to any relevant research, data, or feedback.
Status | In progress |
---|---|
Impact | High |
Driver | @Ruth Cheesley @Nick Veenhof (Deactivated) |
Approver | @Alan Hartless @Mohit Aghera |
Contributors | @Jan Linhart @Mohit Aghera @Alan Hartless Florian Wessels |
Informed | @Ruth Cheesley |
Due date | Feb 28, 2021 |
Outcome |
Background
We want to move to supporting Composer-base install and upgrades natively in Mautic. To do that we have identified several challenges:
Composer would wipe out everything each time, so we need to change the structure to prevent that happening otherwise custom plugins and themes would be lost,
Local.php will need to be moved to the database as some file systems are not writeable, and many using Composer will expect this - at present there are all kinds of hacky things going on to work around it like creating an empty file,
Plugin and theme discovery is difficult - it should be possible to look for the folders rather than pre-specify the locations so that they can be moved to suit the environment,
We are essentially moving from being a Symfony project to being a library - this needs to be taken into consideration
We need to brainstorm the folder structure that we need, and come to an agreement of what it would be:
Would have to be released in 4.0, we expect, but we can work on it now and get those decisions made
We need to think about shared hosting and make it configurable so Mautic can still work without the folders being a level above - this should be the default with an option during the install process to move it
Questions / discussion points
Multiple Mautic instances - would that be a problem?
Suggested Composer package structure
http://github.com/mautic/mautic
The project as seen from the outside and where PR’s are made against. Like it is today
http://github.com/mautic/app or mautic/core?
Git subtree split from the github.com/mautic/mautic/app folder. To be discussed if we need to change this to core.
http://github.com/mautic/core-recommended
Separate package to guarantee that all of the dependencies from mautic/core
http://github.com/mautic/core-composer-scaffold
Composer plugin to make sure we can have some mautic knowledge similar to https://github.com/nickveenhof/mautic-core-composer-scaffold
It would all come together in a project called http://github.com/mautic/recommended-project similar to https://github.com/nickveenhof/mautic-project
This means we have the following as required packages in recommended-project
"mautic/core-composer-scaffold": "^4.0"
"mautic/core-recommended": "^4.0"
Suggested folder structure
This also means that the following folders and files should be generated from within the scaffold resource folder in mautic/core
index.php (first time setup coming from app/assets/scaffold/files/index.php)
.htaccess (first time setup coming from app/assets/scaffold/files/.htaccess)
app → Core Mautic application coming from mautic/core
themes/contrib → themes downloaded by composer (public)
themes/contrib → themes downloaded by composer or custom written (private)
plugins/contrib → plugins downloaded by composer
plugins/custom → plugins from own packagists or custom code
media/ → all media files similar to today including the different folders
config/ → Configuration (user created)
vendor/ → All dependencies from composer
Alternative folder structures possible with composer
web/index.php (first time setup coming from app/assets/scaffold/files/index.php)
web/.htaccess (first time setup coming from app/assets/scaffold/files/.htaccess)
web/app → Core Mautic application coming from mautic/core
web/themes/contrib → themes downloaded by composer (public)
web/themes/contrib → themes downloaded by composer or custom written (private)
web/plugins/contrib → plugins downloaded by composer
web/plugins/custom → plugins from own packagists or custom code
web/media/ → all media files similar to today including the different folders
config/ → Configuration files
vendor/ → All dependencies from composer
This means the in the mautic/core (or mautic/app) we should also have folders such as app/plugins and app/themes where the core plugins and core themes live
Options considered
Mautic core/app folder name | Option 1: | Option 2: |
---|---|---|
Description | core | app |
Pros and cons | In line with Drupal project and easier to learn from a change in how mautic works today | The folder stays similar as it is today Harder to map when learning from the Drupal project |
Estimated cost | Medium | Medium |