Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: pass all valid options to nested commands in ddev composer create, fixes #6300, fixes #6246, for #5058 #6303

Merged
merged 6 commits into from
Jun 26, 2024

Conversation

stasadev
Copy link
Member

@stasadev stasadev commented Jun 12, 2024

The Issue

Composer options were not respected by composer run-script.

How This PR Solves The Issue

Makes ddev composer create fully compatible with all possible composer options. I removed all the hard-coded options.
Adds composer options to composer run-script.
Adds --no-interaction to CakePHP quickstart.


--preserve-flags (which doesn't add --no-plugins and --no-scripts) didn't work as expected, I decided to remove it.

This is not a breaking change, because --preserve-flags didn't work before (it was always false).


I moved composer run-script post-create-project-cmd outside the condition for composer install, to make it work the same way as in composer create-project.


If you passed --no-scripts, DDEV tried to run composer run-script, which was wrong behavior, fixed it.


If --help or --version flags were provided, composer showed it's help page or it's version, and DDEV tried to continue creating the project, which was wrong behavior, fixed it.


I refactored the test logic to make it more clear and added more tests. I removed the testing for the psr/log package and replaced it with custom-made fake packages.

Manual Testing Instructions

  1. The order of commands executed for ddev composer create must be the same as for composer create-project.

To check this behavior, you can use a test repository (it is used for testdata here) which contains all the necessary situations to check:

cd ~/workspace && mkdir composer-create && cd composer-create
ddev config --auto
mkdir -p .ddev/test-ddev-composer-create/{test-ddev-require,test-ddev-require-dev}

curl -o .ddev/test-ddev-composer-create/composer.json https://raw.githubusercontent.com/ddev/ddev/master/cmd/ddev/cmd/testdata/TestComposerCreateCmd/.ddev/test-ddev-composer-create/composer.json
curl -o .ddev/test-ddev-composer-create/test-ddev-require/composer.json https://raw.githubusercontent.com/ddev/ddev/master/cmd/ddev/cmd/testdata/TestComposerCreateCmd/.ddev/test-ddev-composer-create/test-ddev-require/composer.json
curl -o .ddev/test-ddev-composer-create/test-ddev-require-dev/composer.json https://raw.githubusercontent.com/ddev/ddev/master/cmd/ddev/cmd/testdata/TestComposerCreateCmd/.ddev/test-ddev-composer-create/test-ddev-require-dev/composer.json

export repo='{"type": "path", "url": ".ddev/test-ddev-composer-create", "options": {"symlink": false}}'

# see the result for:
composer create-project --repository $repo test/ddev-composer-create # add different flags here

# clear the directory
ls | grep -xv ".ddev" | xargs rm -rf

# see the result for:
ddev composer create --repository $repo test/ddev-composer-create # add different flags here

# clear the directory
ls | grep -xv ".ddev" | xargs rm -rf

test/ddev-composer-create package (.ddev/test-ddev-composer-create/composer.json) contains this:

  • it requires test/ddev-require from require section:
    • vendor/test/ddev-require will be here, but only if there is no --no-install flag
  • it requires test/ddev-require-dev from require-dev section:
    • vendor/test/ddev-require-dev will be here, but only if there is no --no-dev/--no-install flag
  • it runs post-root-package-install script:
    • this script should run before composer install
    • it creates created-by-post-root-package-install file, but only if there is no --no-scripts flag
  • it runs post-create-project-cmd script:
    • this script should run after composer install
    • it creates created-by-post-create-project-cmd file, but only if there is no --no-scripts flag

And use different flag combinations to see how it works for composer create-project and ddev composer create. It is important to check if the commands run in the same order.

Available flags for composer create-project https://getcomposer.org/doc/03-cli.md#create-project

Ignore the test-ddev-require and test-ddev-require-dev directories created in the project root (they are expected to be created every time as they are part of the composer package).

Every ddev composer create will have this output:

Executing composer command: [composer ...]

You can see what flags are used for each of these composer commands, and flags like --no-interaction will be also used for composer run-script and composer install.

For example:

This should not create vendor folder, and there should be no created-by-* files

# see the result for:
composer create-project --repository $repo test/ddev-composer-create --no-install --no-scripts

# clear the directory
ls | grep -xv ".ddev" | xargs rm -rf

# see the result for:
ddev composer create --repository $repo test/ddev-composer-create --no-install --no-scripts

# clear the directory
ls | grep -xv ".ddev" | xargs rm -rf

This should create vendor/test/ddev-require folder, (but not vendor/test/ddev-require-dev) and there should be no created-by-* files

# see the result for:
composer create-project --repository $repo test/ddev-composer-create --no-scripts --no-dev

# clear the directory
ls | grep -xv ".ddev" | xargs rm -rf

# see the result for:
ddev composer create --repository $repo test/ddev-composer-create --no-scripts --no-dev

# clear the directory
ls | grep -xv ".ddev" | xargs rm -rf

And so on.


  1. Try CakePHP quickstart (without interaction), it should not ask for input:
mkdir my-cakephp-site && cd my-cakephp-site
ddev config --project-type=cakephp --docroot=webroot
ddev composer create --prefer-dist --no-interaction cakephp/app:~5.0

  1. Try Steps To Reproduce example (it should not ask for input) from:

Automated Testing Overview

Release/Deployment Notes

@stasadev stasadev requested review from a team as code owners June 12, 2024 13:38
@stasadev stasadev requested review from rfay and tyler36 June 12, 2024 13:38
Copy link

github-actions bot commented Jun 12, 2024

Copy link
Member

@rfay rfay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please add test coverage for this? Thanks! We have been fiddling with ddev composer create for years and years now, and we keep incrementally improving it, but we never seem to completely get it finished.

@stasadev
Copy link
Member Author

Yes, I will add some new test or modify an existing one.

@stasadev
Copy link
Member Author

I added more conditions and checks to the test, now it covers most possible situations.

@stasadev stasadev requested a review from rfay June 12, 2024 23:24
@stasadev stasadev changed the title fix: pass all valid options to nested commands in composer-create, fixes #6300 fix: pass all valid options to nested commands in composer-create, fixes #6300, for #5058 Jun 12, 2024
@tyler36
Copy link
Collaborator

tyler36 commented Jun 13, 2024

Confirmed. This PR fixes #6300 . Thank you for the quick turn around.

Test

  1. Confirm DDEV version
$ ddev -v
ddev version v1.23.1-62-g4f748c85a
  1. Follow (updated) cakePHP quickstart.
mkdir my-cakephp-site && cd my-cakephp-site
ddev config --project-type=cakephp --docroot=webroot
ddev composer create --prefer-dist --no-interaction cakephp/app:~5.0
ddev cake
ddev launch

Note

This PR updates the quickstart to include --no-interaction . This makes no difference in DDEV 1.23.1 (see #6300 )

@stasadev
Copy link
Member Author

There is still some difference how composer scripts work in:

  • ddev composer create --no-install runs only post-root-package-install and nothing else
  • composer create-project --no-install runs post-root-package-install and post-create-project-cmd

I will investigate this further today and adjust the behavior.

@stasadev stasadev force-pushed the 20240612_stasadev_composer_create branch from 4f748c8 to a5635db Compare June 13, 2024 21:59
@stasadev
Copy link
Member Author

--preserve-flags (which doesn't add --no-plugins and --no-scripts) didn't work as expected:

The order was:

  • composer create-project
  • composer run-script post-root-package-install
  • composer run-script post-create-project-cmd
  • composer install

The right order:

  • composer create-project
  • composer run-script post-root-package-install
  • composer install
  • composer run-script post-create-project-cmd

This is why I made --preserve-flags not add only --no-plugins

This is not a breaking change, because --preserve-flags didn't work before (it was always false).


I moved composer run-script post-create-project-cmd outside the condition for composer install, to make it work the same way as in composer create-project.


If you passed --no-scripts, DDEV tried to run composer run-script, which was wrong behavior, fixed it.


If --help or --version flags were provided, composer showed it's help page or it's version, and DDEV tried to continue creating the project, which was wrong behavior, fixed it.


I refactored the test logic to make it more clear and added more tests. I removed the testing for the psr/log package and replaced it with custom-made fake packages.

@stasadev stasadev changed the title fix: pass all valid options to nested commands in composer-create, fixes #6300, for #5058 fix: pass all valid options to nested commands in composer-create, fixes #6300, fixes #6246, for #5058 Jun 13, 2024
@stasadev stasadev requested a review from mandrasch June 13, 2024 22:09
@stasadev stasadev changed the title fix: pass all valid options to nested commands in composer-create, fixes #6300, fixes #6246, for #5058 fix: pass all valid options to nested commands in ddev composer create, fixes #6300, fixes #6246, for #5058 Jun 13, 2024
@stasadev
Copy link
Member Author

When I split combined short flags, it broke -vvv functionality.
It turned out that -v -v -v is not the same as -vvv, so I will see how to fix it.

@stasadev stasadev force-pushed the 20240612_stasadev_composer_create branch from a5635db to b4ae1d4 Compare June 14, 2024 17:06
@stasadev
Copy link
Member Author

stasadev commented Jun 14, 2024

Rebased.

I fixed -vvv and changed a bit the logic for flags.

I updated our documentation with a more detailed explanation of what steps we do with ddev composer create.

I researched the Composer documentation, learned more about what --no-plugins, --no-scripts and --no-install flags do. In result I decided to remove --preserve-flags completely, because if we do not add --no-plugins or --no-scripts or --no-install to composer create-project, it breaks the original logic, so I don't think we ever needed it.

--preserve-flags didn't work before this PR, so this removal is not a breaking change. And with with the addition of "bad" flags removal, nobody will ever notice it was removed.


I'm pretty sure the most of the original logic here works correctly.

There are some conflicts with the composer create-project flags, such as --ask and --working-dir, using which results in error for ddev composer create, but I decided not to hard-code them, as the composer may add/remove some flags in the future, and I don't want to add unnecessary checks.

@stasadev stasadev force-pushed the 20240612_stasadev_composer_create branch from b4ae1d4 to 50f7a91 Compare June 14, 2024 17:35
Copy link
Member

@rfay rfay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just looked through the docs, not code, had minor comments.

docs/content/users/usage/developer-tools.md Outdated Show resolved Hide resolved
docs/content/users/usage/developer-tools.md Outdated Show resolved Hide resolved
docs/content/users/usage/developer-tools.md Outdated Show resolved Hide resolved
docs/content/users/usage/developer-tools.md Outdated Show resolved Hide resolved
@rfay rfay requested a review from rpkoller June 14, 2024 19:30
@rfay
Copy link
Member

rfay commented Jun 14, 2024

@rpkoller would you be willing to validate the quickstarts with this PR? I know it's loads of work, but your attention is so valuable.

@rfay rfay force-pushed the 20240612_stasadev_composer_create branch from a7377e4 to 119ea4b Compare June 25, 2024 14:30
@rpkoller
Copy link
Collaborator

@rpkoller would you be willing to validate the quickstarts with this PR? I know it's loads of work, but your attention is so valuable.

argh that slipped through again. was on my to do list then i completely forgot. will try to run through either tomorrow or on thursday hopefully.

Copy link
Member

@rfay rfay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This works, and THANK YOU, but we're in hell here and we're going to have to figure out how to get out of it. Either ddev composer create was a bad idea to begin with (probably - it was my idea) or we've just implemented it badly. But we've been struggling with it for years, and this code is now completely incomprehensible and unmaintainable.

The original idea was just to allow composer create-project without doing it in a subdirectory. I'm not sure why we didn't end up doing all the work in a temporary directory and then copy it into the project, and I'm not sure why we can't do that now.

Bottom line: This is great and amazing work, but we have to find our way out of this problem.

Note that a --no-interaction install of Craft CMS does not result in a working site, because it still needs to do a ddev craft setup to work. (#6246)

--no-interaction does work fine with CakePHP.

IMO this can go in if @rpkoller is OK with the impacts on the quickstarts.

osargs = nodeps.RemoveItemFromSlice(osargs, "--preserve-flags")
var expandedOsargs []string
for _, osarg := range osargs {
// If this is a combined short option like "-test", split it into "-t -e -s -t"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Weird that we have to do this, when Cobra has these capabilities. I know there's lots of history in this code.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we are using Cobra here, because osargs = os.Args[3:] at the top
In any case, there is always a way to improve it in the future.

composerCmd = append(composerCmd, osarg)
}
for _, validCreateArg := range validCreateArgs {
if isValidComposerOption("install", validCreateArg) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for splitting this out.

@@ -329,8 +379,6 @@ for basic project creation or 'ddev ssh' into the web container and execute
}

func init() {
ComposerCreateCmd.Flags().BoolP("yes", "y", false, "Yes - skip confirmation prompt")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's always great to get evil things out of the init() functions

@stasadev
Copy link
Member Author

stasadev commented Jun 25, 2024

we're in hell here and we're going to have to figure out how to get out of it

It sounds like a challenge and I like it. I haven't touched any code related to the mutagen, a few restarts here seems to be redundant. But still, I think I'll come back to it some time.

Note that a --no-interaction install of Craft CMS does not result in a working site, because it still needs to do a ddev craft setup to work. (#6246)

I don't think we can update this quickstart with @mandrasch's technique right now, but after some time when this code is mature, we can update it for --no-interaction.

@mandrasch
Copy link
Collaborator

mandrasch commented Jun 25, 2024

The original idea was just to allow composer create-project without doing it in a subdirectory. I'm not sure why we didn't end up doing all the work in a temporary directory and then copy it into the project, and I'm not sure why we can't do that now.

Just as sidenote: I wondered about this when I first tried to understand why there is a special command wrapper for composer create in ddev. But I haven't had time to find out why (seems like there is git involved, so directory really must be empty? composer/composer#7455 (comment)) Complicated stuff! 🤓 Thanks for all the effort which went into making this work! 🙏

@mandrasch
Copy link
Collaborator

mandrasch commented Jun 25, 2024

Regarding CraftCMS, it's a bit confusing - the official docs state this (https://craftcms.com/docs/5.x/install.html#quick-start):

mkdir my-craft-project
cd my-craft-project/
ddev config --project-type=craftcms --docroot=web --php-version=8.2
ddev composer create -y --no-scripts "craftcms/craft"
ddev craft install

Using --no-scripts means, the post-create hook with craft setup of the starter project is never used anyway. And at least I always used ddev craft install afterwards as well. There is no need for --no-interaction so far when following the official docs approach. As far as I could see in #6246 the problem was that --no-scripts wasn't passed down properly in a recent ddev release and the PR here fixes that. Hope this does not lead to more confusion! (It sure confused me :-D)

Co-authored-by: Ralf Koller <1665422+rpkoller@users.noreply.github.com>
@rfay rfay merged commit ac535e4 into ddev:master Jun 26, 2024
9 checks passed
@stasadev stasadev deleted the 20240612_stasadev_composer_create branch June 26, 2024 21:49
rfay added a commit to ddev-test/ddev that referenced this pull request Jun 27, 2024
* docs: Warn about Codespaces (ddev#6321) [skip ci]

Co-authored-by: Matthias Andrasch <777278+mandrasch@users.noreply.github.com>

* docs: Improve ddev debug test by offering suggestions early [skip ci] (ddev#6323)

* feat: add support for MariaDB 11.4 LTS, fixes ddev#6061 (ddev#6243)

Co-authored-by: Stanislav Zhuk <stasadev@gmail.com>

* docs: pacify textlint on mysql/https (ddev#6336) [skip ci]

* docs: revisit WSL Docker Desktop setup instructions (ddev#6330)

* fix: autodownload yarn from corepack, and set cache-folder, fixes ddev#6332 (ddev#6333)

* docs: windows-wsl2-dd needs apt install for ngrok (ddev#6341) [skip ci]

* build: check docker-compose 2.28.1 (ddev#6340) [skip ci]

* fix: use real path to global config location, fixes ddev#6328 (ddev#6329)

* test: stop running nightly tests [skip ci] (ddev#6347)

* test: Improve reliability of TestProcessHooks (intermittent failures), fixes ddev#6313 (ddev#6314)

* fix: Drupal 10 and Drupal 11 settings have migrated, set state_cache (ddev#6346) [skip ci]

Co-authored-by: Stanislav Zhuk <stasadev@gmail.com>

* build: use IPv4 inside a container, mariadb-client 11.4 for the webserver (ddev#6334) [skip ci]

* fix: pass all valid options to nested commands in `ddev composer create`, fixes ddev#6300, fixes ddev#6246, for ddev#5058 (ddev#6303)

Co-authored-by: Randy Fay <randy@randyfay.com>
Co-authored-by: Ralf Koller <1665422+rpkoller@users.noreply.github.com>

* docs: fix up textlint complaints

* Turn off defaultTerms

* Use exclude properly with textlint for VS Code

* update for additional textlint complaints

* remove redundant empty exclude section

* Try to get textlint/reviewdog to report

---------

Co-authored-by: Matthias Andrasch <777278+mandrasch@users.noreply.github.com>
Co-authored-by: hussainweb <hussainweb@gmail.com>
Co-authored-by: Stanislav Zhuk <stasadev@gmail.com>
Co-authored-by: Ralf Koller <1665422+rpkoller@users.noreply.github.com>
@stasadev
Copy link
Member Author

stasadev commented Jul 9, 2024

@rfay and I discussed our current implementation for ddev composer create, and decided to try using composer create-project as is.

I did that and it generally worked, but when I started testing it with our quickstarts, things went wrong.

Our current logic:

  • run composer create-project --no-plugins --no-scripts --no-install, which creates the project skeleton including important CMS settings, like .env.example.
  • run composer run-script post-root-package-install
  • restart the project, which creates .env from .env.example, a really important step for some frameworks like Laravel and CraftCMS
  • run composer install
  • run composer run-script post-create-project-cmd, which heavily depends on CMS settings in .env for some frameworks like Laravel and CraftCMS

For example:

Laravel quickstart creates .env with settings for sqlite, and runs database migrations. Without manual composer run-script post-create-project-cmd we don't run it for our mariadb.

CraftCMS asks some interactive questions and without DDEV override it suggested me this:

Database server name or IP address: [127.0.0.1]

instead of

Database server name or IP address: [db]

So we are tied to the current implementation.

@rfay
Copy link
Member

rfay commented Jul 9, 2024

Thanks for studying so carefully!

@mandrasch
Copy link
Collaborator

mandrasch commented Jul 10, 2024

Hey, just my two cents on this. :)

I think there are two big questions for quickstarts:

  1. First question is whether DDEV should automagically set everything up for the user - or not?
  2. Should installations be run interactive or without interaction (maybe @rpkoller has an opionion here?)

If DDEV doesn't want to be automagic, but just a generic tool - there is a bit more work for the user:

In case of Craft CMS, you could write the db connection settings to .env via their CLI command craft setup/db-creds. Would be like this:

ddev config --project-type=craftcms --docroot=web --php-version=8.2
ddev composer create -y --no-scripts "craftcms/craft"
ddev craft setup/db-creds --driver=mysql --server=db --database=db ... 
# afterwards, install with craft install/craft)

(You can also pass arguments to the craft install/craft command like --site-url='$DDEV_PRIMARY_URL'.)

When it comes to interactive dialogs - the values from .env are taken as prefilled default as far as I know. (TYPO3 install:setup works the same https://docs.typo3.org/p/helhum/typo3-console/main/en-us/CommandReference/InstallSetup.html)

In a normal non-DDEV scenario, users would do something like cp .env.example .env and set the values on your own or use an installer tool (cli or web). Or sed replace. This would mean teaching the user about db,db,db and what the primary site URL is.

As far as I understand, DDEV does the magic for .env in ddev restart (I also wondered why ddev's composer create needs a ddev restart, now I know 💡👍) func craftCmsPostStartAction(app *DdevApp) error {

So as far as I see it, something like this could also be possible when there would be a new command for setting the .env values before running an installer:

ddev config --project-type=craftcms --docroot=web --php-version=8.2

# regular composer command
ddev composer create-project -y --no-scripts "craftcms/craft"

# handle .env with new ddev command --> runs craftCmsPostStartAction()
ddev setup-env-values

# install cms with CMSes regular CLI command, evaluates .env and so prefill should be correct ddev value
# ddev craft install/craft or typo3 install:setup

Personally, I'm not a big fan of automagic - I like to understand what's happening, A new command like ddev setup-env-values would explain to me that DDEV does something in order to get this up and running in ddevs environment.(Because when I install WordPress, CraftCMS on XAMPP, MAMP or else, I also need to know the database connection settings and URL for the XAMPP project when I run the installer. But that is the olschool PHP approach)

On the other hand there are tools like WP Local now with a lot of automagic 🤷

There are also two (obvious) downsides for a new command like ddev setup-env-values (needs a better name of course):

  • more support requests (maybe) when users need a bit more assistance making the switch
  • the custom command ddev composer create is now well established and used in official tutorials like CraftCMS, TYPO3

Possible advantages:

@stasadev
Copy link
Member Author

DDEV does the magic for .env in ddev restart (I also wondered why ddev's composer create needs a ddev restart)

And it also restarts Mutagen for macOS users.


faster installations without a ddev restart

We could probably review what we do inside ddev restart for the CMS settings and do it without restarting.
The problem is that when we start the project, it checks many different settings, so it's just easier to restart it.


install cms with CMSes regular CLI command, evaluates .env and so prefill should be correct ddev value
ddev craft install/craft or typo3 install:setup

For CraftCMS: it runs php craft setup/welcome inside post-create-project-cmd script (when you run in without --no-scripts)
For Laravel: it runs php artisan migrate inside post-create-project-cmd script
As so on.

If we move to the original behavior for composer create-project:

  1. this will mean that some actions will have to be performed twice (as in post-create-project-cmd). Of course, we can use a flag for --no-scripts, but this will change the initial behavior for composer create-project.
  2. we will need to add all these framework-specific commands such as ddev craft install/craft, ddev artisan migrate and so on to our quickstarts again, which will increase the maintenance burden on DDEV. Today the framework has this set of commands, tomorrow they will add something else, so I don't like this idea. Notice how we cleaned up our quickstarts so that they will work all the time, even if the framework changes something inside the post-create-project-cmd. And we achieve this only because we intercept the composer create-project halfway before it executes the post-create-project-cmd.

@mandrasch
Copy link
Collaborator

mandrasch commented Jul 10, 2024

Great additions, thanks for insights @stasadev 👍👍

After reading your post, I noticed the (third) big question is: Does DDEV want devs to follow DDEV quickstart or the official docs?

Because https://laravel.com/docs/11.x/installation for instance also says "run migrate if you need db".

My personal experience is that DDEV automagic also might hide some important commands which are needed for deployment later on (but this argument is only true for inexperienced beginners + I wasn't aware of all the post create hooks in Composer since there were not executed in the past in DDEV. Otherwise setting up .env correctly is major dev skill i would say... 🤔 But your arguments are of course stronger)

@mandrasch
Copy link
Collaborator

mandrasch commented Jul 10, 2024

PS: I also wonder what framework/CMS creators would prefer - no scripts or with scripts? 🤔

PPS: When I think about a DDEV UI in a far future (maybe some day 😁), this would also be a question - guess no-interaction would be needed here.

(And thanks for the exchange, super interesting to learn more about how this works👍Maintainability for you and the team/community is of course key)

@stasadev
Copy link
Member Author

Does DDEV want devs to follow DDEV quickstart or the official docs?

That's a good question. Usually, the composer create-project configures everything for you, but sometimes it doesn't 🙂 (for example, Drupal requires more actions). I think we need to have a certain balance, if the framework provides everything in composer create-project then we rely on it completely, otherwise we add more steps to our quickstarts.

Because https://laravel.com/docs/11.x/installation for instance also says "run migrate if you need db".

Yes, it's in the Laravel documentation and also in the post-create-project-cmd script. They added it to the script quite recently, after they switched to SQLite in Laravel 11.

@rfay
Copy link
Member

rfay commented Jul 10, 2024

Does DDEV want devs to follow DDEV quickstart or the official docs?

We want devs to be successful in their own world, and be comfortable there. The quickstarts are normally adaptations of the official docs. But where the official docs don't reflect a docker-based environment (or reflect an opinionated one of their own) we have to adapt (and usually simplify).

Sometimes we do too much for the user. Drupal users can get so complacent about what DDEV does with settings that they forget how the whole settings system works and then they don't know how to debug it, which a few years ago would have been natural and easy for every user.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants