Adding New Project Types¶
Adding and maintaining project types (like typo3, magento2, etc.) is not too hard. Please update and add to this doc when you find things that have been missed.
To add a new project type:
- Add the new type to the list in
nodeps.go - Add to
appTypeMatrixinapptypes.go - Create a new go file for your project type, like
django.go. - Implement the functions that you think are needed for your project type and add references to them in your
appTypeMatrixstanza. There are lots of examples that you can start with in places likedrupal.goandtypo3.go,shopware6.go, etc. The comments in the code inapptypes.gofor theappTypeFuncsfor each type of action tell what these are for, but here’s a quick summary.settingsCreatoris the function that will create a main settings file if none exists.uploadDirreturns the filepath of the user-uploaded files directory for the project type, likesites/default/filesfor Drupal orpub/mediafor magento2.hookDefaultCommentsadds comments to config.yaml about hooks with an example for that project type. It’s probably not useful at all.apptypeSettingsPathsreturns the paths for the main settings file and the extra settings file that DDEV may create (like settings.ddev.php for Drupal).appTypeDetectis a function that determines whether the project is of the type you’re implementing.postImportDBActioncan do something after db import. I don’t see it implemented anywhere.configOverrideActioncan change default config for your project type. For example, magento2 now requiresphp8.1, so aconfigOverrideActioncan change the php version.postConfigActiongives a chance to do something at the end of config, but it doesn’t seem to be used anywhere.postStartActionadds actions at the end ofddev start. You’ll see several implementations of this, for things like creating needed default directories, or setting permissions on files, etc.importFilesActiondefines howddev import-filesworks for this project type.defaultWorkingDirMapallows the project type to override the project’sworking_dir(whereddev sshandddev execstart by default). This is mostly not done anymore, as theworking_diris typically the project root.composerCreateAllowedPathsspecifies the paths that can exist in a directory whenddev composer createis being used.
- You’ll likely need templates for settings files, use the Drupal or TYPO3 templates as examples, for example
pkg/ddevapp/drupalandpkg/ddevapp/typo3. Those templates have to be loaded at runtime as well. - Once your project type starts working and behaving as you’d like, you’ll need to add test artifacts for it and try testing it (locally first).
- Add your project to
TestSitesinddevapp_test.go. - Create a DDEV project named
testpkg<projectype>somewhere and get it going and working with a database and files you can export. - Export the database, files, and (optionally) code to tarballs or
.sql.gz. Put them somewhere on the internet—they’ll end up inddev/ddev_test_tarballs. I can give you permissions on that if you like. Themagento2project has descriptions explaining how each tarball gets created. Do that for yours as well. - Run the test and get it working. I usually use the trick of setting
GOTEST_SHORT=<element_in_TestSites>, likeGOTEST_SHORT=7. Then set that environment variable in the GoLand profile or your environment.export GOTEST_SHORT=7 && make testpkg TEST_ARGS="-run TestDdevFullsiteSetup"
- Add your project to