From a608f2f1358585cde4bd7360d4e2501c309580c1 Mon Sep 17 00:00:00 2001 From: Brian Perry Date: Thu, 27 Jun 2024 10:04:28 -0500 Subject: [PATCH 01/11] feat(drupal): add local Drupal DDEV environment * Adds scripts to init and destroy a local Drupal instance that will be ignored by vcs. * Initial scaffolding for a next-drupal recipe. Currently only installs next module. --- .eslintignore | 1 + .gitignore | 3 +++ CONTRIBUTING.md | 31 ++++++++++++++++++++++ package.json | 6 +++-- recipes/next_drupal_base/composer.json | 15 +++++++++++ recipes/next_drupal_base/recipe.yml | 6 +++++ scripts/destroy-drupal.sh | 10 +++++++ scripts/init-drupal.sh | 36 ++++++++++++++++++++++++++ 8 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 recipes/next_drupal_base/composer.json create mode 100644 recipes/next_drupal_base/recipe.yml create mode 100755 scripts/destroy-drupal.sh create mode 100755 scripts/init-drupal.sh diff --git a/.eslintignore b/.eslintignore index 1ac2665ed..53b3f1f9b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,3 +5,4 @@ node_modules *.esm.js /drupal /drupal-* +/local-next-drupal \ No newline at end of file diff --git a/.gitignore b/.gitignore index 16411a169..3630d3738 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ yarn-error.log* /drupal/web/phpunit.xml /drupal/web/sites/default/settings.local.php /drupal-* + +# Local Drupal instance +local-next-drupal/ \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9e36b92b6..3e51ee6e5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -183,3 +183,34 @@ BREAKING CHANGE: Dropped support for Next.js 11 and React 16. Users requiring these older versions should stick to v1.6. ``` + +## Local Drupal Environment (Experimental) + +Requires [DDEV](https://ddev.readthedocs.io/en/latest/users/install/ddev-installation/) + +Create a local instance by running: + +``` +yarn ddev:init +``` + +This will create a local Drupal instance in local-next-drupal which will be ignored by git. + +Destroy the local instance by running: + +``` +yarn ddev:destroy +``` + +To use this environment with local testing, add the following to the related +.env file: + +``` +DRUPAL_BASE_URL="http://local-next-drupal.ddev.site/" +DRUPAL_CLIENT_ID="next-drupal" +DRUPAL_CLIENT_SECRET="next" +``` + +### Todo + +- Update recipe to use local versions of next drupal composer dependencies rather than packagist versions. diff --git a/package.json b/package.json index ff011f5ff..8daaa8317 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,9 @@ "test": "yarn workspace next-drupal test", "pretest": "yarn format:check && yarn lint", "test:e2e": "turbo run test:e2e --parallel", - "test:e2e:ci": "turbo run test:e2e:ci --parallel" + "test:e2e:ci": "turbo run test:e2e:ci --parallel", + "ddev:init": "./scripts/init-drupal.sh", + "ddev:destroy": "./scripts/destroy-drupal.sh" }, "devDependencies": { "@actions/core": "^1.10.1", @@ -70,4 +72,4 @@ "uuid": "^9.0.1", "yaml": "^2.4.1" } -} +} \ No newline at end of file diff --git a/recipes/next_drupal_base/composer.json b/recipes/next_drupal_base/composer.json new file mode 100644 index 000000000..8390296f0 --- /dev/null +++ b/recipes/next_drupal_base/composer.json @@ -0,0 +1,15 @@ +{ + "name": "drupal/next_drupal_base", + "description": "Common dependencies and configuration for all Next Drupal projects.", + "type": "drupal-recipe", + "license": "GPL-2.0-or-later", + "repositories": [ + { + "type": "composer", + "url": "https://packages.drupal.org/8" + } + ], + "require": { + "drupal/next": "^2.0@beta" + } +} \ No newline at end of file diff --git a/recipes/next_drupal_base/recipe.yml b/recipes/next_drupal_base/recipe.yml new file mode 100644 index 000000000..4c5f8b376 --- /dev/null +++ b/recipes/next_drupal_base/recipe.yml @@ -0,0 +1,6 @@ +name: "Next Drupal Base" +description: "Common dependencies and configuration for all Next Drupal projects" +type: "Site" + +install: + - next diff --git a/scripts/destroy-drupal.sh b/scripts/destroy-drupal.sh new file mode 100755 index 000000000..e135d9244 --- /dev/null +++ b/scripts/destroy-drupal.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Exit immediately on errors. +set -e + +cd local-next-drupal +ddev delete -y +cd .. +echo "Removing drupal directory..." +rm -rf local-next-drupal diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh new file mode 100755 index 000000000..7d5c8beaa --- /dev/null +++ b/scripts/init-drupal.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Exit immediately on errors. +set -e + +# Create DDEV project +mkdir local-next-drupal +cd local-next-drupal +ddev config --project-name=local-next-drupal --project-type=drupal10 --php-version=8.3 --docroot=web --create-docroot +ddev start +ddev composer create drupal/recommended-project + +# Prevent composer scaffolding from overwriting development.services.yml +ddev composer config --json extra.drupal-scaffold.file-mapping '{"[web-root]/sites/development.services.yml": false}' +ddev composer config minimum-stability dev +ddev composer config allow-plugins.ewcomposer/unpack true -n +# Add repositories +ddev composer config repositories.unpack vcs https://gitlab.ewdev.ca/yonas.legesse/drupal-recipe-unpack.git +ddev composer config repositories.recipe path web/recipes/next_drupal_base + +# Add recipies +cp -a ../recipes/. web/recipes + +# Add useful composer dependencies +ddev composer require drush/drush drupal/next_drupal_base ewcomposer/unpack:dev-master + +# Install Drupal +ddev drush site:install demo_umami --account-name=admin --account-pass=admin -y + +# Apply recipe +ddev exec -d /var/www/html/web php core/scripts/drupal recipe recipes/next_drupal_base +ddev composer unpack drupal/next_drupal_base + +# use the one-time link (CTRL/CMD + Click) from the command below to edit your admin account details. +ddev drush uli +ddev launch \ No newline at end of file From c66286c56be936c015e16b11ae88fd6db545f9b9 Mon Sep 17 00:00:00 2001 From: Brian Perry Date: Tue, 30 Jul 2024 08:30:11 -0500 Subject: [PATCH 02/11] fix: lanch uli link in browser after completing local install --- scripts/init-drupal.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index 7d5c8beaa..ddfe31073 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -32,5 +32,4 @@ ddev exec -d /var/www/html/web php core/scripts/drupal recipe recipes/next_drupa ddev composer unpack drupal/next_drupal_base # use the one-time link (CTRL/CMD + Click) from the command below to edit your admin account details. -ddev drush uli -ddev launch \ No newline at end of file +ddev drush uli | xargs open \ No newline at end of file From 7707ff586a8f3a8c8d64a5c32f01e75f8b8e59fa Mon Sep 17 00:00:00 2001 From: Brian Perry Date: Fri, 4 Oct 2024 11:28:05 -0500 Subject: [PATCH 03/11] feat: use D11 and local module in local environment --- recipes/next_drupal_base/composer.json | 2 +- scripts/init-drupal.sh | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/recipes/next_drupal_base/composer.json b/recipes/next_drupal_base/composer.json index 8390296f0..833755923 100644 --- a/recipes/next_drupal_base/composer.json +++ b/recipes/next_drupal_base/composer.json @@ -10,6 +10,6 @@ } ], "require": { - "drupal/next": "^2.0@beta" + "drupal/next": "*" } } \ No newline at end of file diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index ddfe31073..0bd6be475 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -6,7 +6,7 @@ set -e # Create DDEV project mkdir local-next-drupal cd local-next-drupal -ddev config --project-name=local-next-drupal --project-type=drupal10 --php-version=8.3 --docroot=web --create-docroot +ddev config --project-name=local-next-drupal --project-type=drupal --php-version=8.3 --docroot=web ddev start ddev composer create drupal/recommended-project @@ -17,6 +17,10 @@ ddev composer config allow-plugins.ewcomposer/unpack true -n # Add repositories ddev composer config repositories.unpack vcs https://gitlab.ewdev.ca/yonas.legesse/drupal-recipe-unpack.git ddev composer config repositories.recipe path web/recipes/next_drupal_base +ddev composer config repositories.next path modules/next + +# Use the local repo version of the next module +cp -a ../modules/. modules # Add recipies cp -a ../recipes/. web/recipes From ed5063adab12c1051f54998910f85bcfac028ca2 Mon Sep 17 00:00:00 2001 From: Brian Perry Date: Tue, 8 Oct 2024 10:20:58 -0500 Subject: [PATCH 04/11] feat: updates to local recipe * Create example consumer * Create example content * Use local version of Drupal module rather than packagist * Add drupal/core-dev to make running module tests possible * Add working versions of .env.local to starters --- CONTRIBUTING.md | 16 ++---- .../config/pathauto.pattern.content.yml | 23 +++++++++ recipes/next_drupal_base/recipe.yml | 1 + scripts/config/.env.local | 14 ++++++ scripts/config/consumers.php | 49 +++++++++++++++++++ scripts/init-drupal.sh | 24 ++++++++- 6 files changed, 114 insertions(+), 13 deletions(-) create mode 100644 recipes/next_drupal_base/config/pathauto.pattern.content.yml create mode 100644 scripts/config/.env.local create mode 100644 scripts/config/consumers.php diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3e51ee6e5..9495e8be5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -202,15 +202,9 @@ Destroy the local instance by running: yarn ddev:destroy ``` -To use this environment with local testing, add the following to the related -.env file: +Things that should work out of the box after running this script: -``` -DRUPAL_BASE_URL="http://local-next-drupal.ddev.site/" -DRUPAL_CLIENT_ID="next-drupal" -DRUPAL_CLIENT_SECRET="next" -``` - -### Todo - -- Update recipe to use local versions of next drupal composer dependencies rather than packagist versions. +- basic starter +- pages starter +- module tests (run from local-next-drupal directory) + - `SIMPLETEST_DB=sqlite://localhost/:memory: ./vendor/bin/phpunit -c ./web/core modules/next` diff --git a/recipes/next_drupal_base/config/pathauto.pattern.content.yml b/recipes/next_drupal_base/config/pathauto.pattern.content.yml new file mode 100644 index 000000000..fd61af24c --- /dev/null +++ b/recipes/next_drupal_base/config/pathauto.pattern.content.yml @@ -0,0 +1,23 @@ +uuid: a5900cb4-ec2f-4788-9e17-73ab49bfcb83 +langcode: en +status: true +dependencies: + module: + - node +id: content +label: Content +type: 'canonical_entities:node' +pattern: '[node:title]' +selection_criteria: + c0c92c0f-9ee6-4b53-8270-198bd024c071: + id: 'entity_bundle:node' + negate: false + uuid: c0c92c0f-9ee6-4b53-8270-198bd024c071 + context_mapping: + node: node + bundles: + article: article + page: page +selection_logic: and +weight: -5 +relationships: { } diff --git a/recipes/next_drupal_base/recipe.yml b/recipes/next_drupal_base/recipe.yml index 4c5f8b376..4bc1c9ac9 100644 --- a/recipes/next_drupal_base/recipe.yml +++ b/recipes/next_drupal_base/recipe.yml @@ -3,4 +3,5 @@ description: "Common dependencies and configuration for all Next Drupal projects type: "Site" install: + - jsonapi - next diff --git a/scripts/config/.env.local b/scripts/config/.env.local new file mode 100644 index 000000000..32590f42a --- /dev/null +++ b/scripts/config/.env.local @@ -0,0 +1,14 @@ +# See https://next-drupal.org/docs/environment-variables + +# Required +NEXT_PUBLIC_DRUPAL_BASE_URL=https://local-next-drupal.ddev.site +NEXT_IMAGE_DOMAIN=local-next-drupal.ddev.site + +# Authentication +DRUPAL_CLIENT_ID=next_consumer +DRUPAL_CLIENT_SECRET=secret + +# Required for On-demand Revalidation +# DRUPAL_REVALIDATE_SECRET=Retrieve this from /admin/config/services/next + +NODE_TLS_REJECT_UNAUTHORIZED=0 \ No newline at end of file diff --git a/scripts/config/consumers.php b/scripts/config/consumers.php new file mode 100644 index 000000000..d12d448bc --- /dev/null +++ b/scripts/config/consumers.php @@ -0,0 +1,49 @@ +getStorage('consumer'); + +$previewerClientId = Crypt::randomBytesBase64(); +$previewerClientSecret = $random->word(8); +$consumerStorage->create([ + 'client_id' => 'next_consumer', + 'client_secret ' => 'secret', + 'label' => 'Next Consumer', + 'user_id' => 1, + 'third_party' => TRUE, + 'is_default' => FALSE, +])->save(); + +$directory = '../keys'; + +if (create_directory($directory)) { + echo 'Keys dir created succesfully' . PHP_EOL; +} else { + echo 'Failed to create directory' . PHP_EOL; +} + +\Drupal::service('simple_oauth.key.generator')->generateKeys($directory); + +function create_directory($directory) +{ + // Get the file system service. + $file_system = \Drupal::service('file_system'); + + // Check if the directory exists and create it if it doesn't. + if (!$file_system->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS)) { + return FALSE; + } + + return TRUE; +} \ No newline at end of file diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index 0bd6be475..e92d0dba0 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -3,6 +3,10 @@ # Exit immediately on errors. set -e +# Pre-seed local env files +cp scripts/config/.env.local starters/basic-starter +cp scripts/config/.env.local starters/pages-starter + # Create DDEV project mkdir local-next-drupal cd local-next-drupal @@ -14,26 +18,42 @@ ddev composer create drupal/recommended-project ddev composer config --json extra.drupal-scaffold.file-mapping '{"[web-root]/sites/development.services.yml": false}' ddev composer config minimum-stability dev ddev composer config allow-plugins.ewcomposer/unpack true -n +ddev composer config allow-plugins.tbachert/spi true -n + # Add repositories ddev composer config repositories.unpack vcs https://gitlab.ewdev.ca/yonas.legesse/drupal-recipe-unpack.git ddev composer config repositories.recipe path web/recipes/next_drupal_base ddev composer config repositories.next path modules/next +# Add configuration scripts to run after install +mkdir scripts +cp ../scripts/config/consumers.php scripts/consumers.php + # Use the local repo version of the next module +# ideally this would be a symlink. cp -a ../modules/. modules # Add recipies cp -a ../recipes/. web/recipes # Add useful composer dependencies -ddev composer require drush/drush drupal/next_drupal_base ewcomposer/unpack:dev-master +ddev composer require drush/drush drupal/next_drupal_base drupal/devel drupal/core-dev ewcomposer/unpack:dev-master # Install Drupal -ddev drush site:install demo_umami --account-name=admin --account-pass=admin -y +ddev drush site:install --account-name=admin --account-pass=admin -y # Apply recipe ddev exec -d /var/www/html/web php core/scripts/drupal recipe recipes/next_drupal_base ddev composer unpack drupal/next_drupal_base +# Create example consumer +ddev drush php:script scripts/consumers + +# Generate content +ddev drush pm:enable devel_generate -y +ddev drush genc 25 + +ddev drush cr + # use the one-time link (CTRL/CMD + Click) from the command below to edit your admin account details. ddev drush uli | xargs open \ No newline at end of file From 3ed9083bbd297602e9e74c4be15f6817cac7d685 Mon Sep 17 00:00:00 2001 From: joaogarin Date: Sun, 9 Feb 2025 20:56:49 +0000 Subject: [PATCH 05/11] feat(next-drupal): setup ddev --- package.json | 3 +- scripts/config/.ddev/config.yaml | 16 +++++ .../config/.ddev/docker-compose.frontend.yaml | 19 ++++++ scripts/init-drupal.sh | 61 +++++++++++++++++-- 4 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 scripts/config/.ddev/config.yaml create mode 100644 scripts/config/.ddev/docker-compose.frontend.yaml diff --git a/package.json b/package.json index 8daaa8317..20b6b2941 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "test:e2e": "turbo run test:e2e --parallel", "test:e2e:ci": "turbo run test:e2e:ci --parallel", "ddev:init": "./scripts/init-drupal.sh", + "ddev:init:basic": "./scripts/init-drupal.sh --starter basic-starter", "ddev:destroy": "./scripts/destroy-drupal.sh" }, "devDependencies": { @@ -72,4 +73,4 @@ "uuid": "^9.0.1", "yaml": "^2.4.1" } -} \ No newline at end of file +} diff --git a/scripts/config/.ddev/config.yaml b/scripts/config/.ddev/config.yaml new file mode 100644 index 000000000..a2db5e147 --- /dev/null +++ b/scripts/config/.ddev/config.yaml @@ -0,0 +1,16 @@ +name: local-next-drupal +type: drupal +docroot: web +php_version: "8.3" +webserver_type: nginx-fpm +xdebug_enabled: false +additional_hostnames: [] +additional_fqdns: [] +database: + type: mariadb + version: "10.11" +use_dns_when_possible: true +composer_version: "2" +web_environment: [] +corepack_enable: true +nodejs_version: "20" diff --git a/scripts/config/.ddev/docker-compose.frontend.yaml b/scripts/config/.ddev/docker-compose.frontend.yaml new file mode 100644 index 000000000..ce5a8303b --- /dev/null +++ b/scripts/config/.ddev/docker-compose.frontend.yaml @@ -0,0 +1,19 @@ +services: + frontend: + container_name: ${DDEV_SITENAME}-frontend + image: node:20 + volumes: + - ./../starters/basic-starter:/var/www/html/starters/basic-starter + working_dir: /var/www/html/starters/basic-starter + command: + - sh + - -c + - yarn install && yarn build && yarn start + ports: + - 3000 + environment: + - NODE_ENV=development + labels: + # These labels ensure this service is discoverable by ddev + com.ddev.site-name: ${DDEV_SITENAME} + com.ddev.approot: $DDEV_APPROOT diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index e92d0dba0..974d84181 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -3,14 +3,63 @@ # Exit immediately on errors. set -e -# Pre-seed local env files -cp scripts/config/.env.local starters/basic-starter -cp scripts/config/.env.local starters/pages-starter +# Parse command-line arguments +STARTER_NAME="basic-starter" +VALID_STARTERS=("basic-starter" "pages-starter" "graphql-starter") + +while [[ "$#" -gt 0 ]]; do + case $1 in + --starter) + shift + STARTER_NAME="$1" + ;; + *) + echo "Unknown parameter passed: $1" + exit 1 + ;; + esac + shift +done + +# Validate starter name +is_valid_starter=false +for starter in "${VALID_STARTERS[@]}"; do + if [[ "$STARTER_NAME" == "$starter" ]]; then + is_valid_starter=true + break + fi +done + +if [[ "$is_valid_starter" == false ]]; then + echo "Error: Invalid starter name. Valid starters are: ${VALID_STARTERS[*]}" + exit 1 +fi + +echo "" +echo "****************************************************************************************" +echo "* *" +echo "* Starting Drupal for $STARTER_NAME... *" +echo "* *" +echo "****************************************************************************************" +echo "" + +# Copy env file to the specified starter +cp scripts/config/.env.local "starters/$STARTER_NAME" # Create DDEV project mkdir local-next-drupal cd local-next-drupal -ddev config --project-name=local-next-drupal --project-type=drupal --php-version=8.3 --docroot=web + +# Copy the starters folder. +cp -r ../starters . + +# Set environment variable for DDEV +export STARTER_NAME=$STARTER_NAME + +# Add the ddev config. +mkdir .ddev +cp ../scripts/config/.ddev/config.yaml .ddev/config.yaml +cp ../scripts/config/.ddev/docker-compose.frontend.yaml .ddev/docker-compose.frontend.yaml ddev start ddev composer create drupal/recommended-project @@ -56,4 +105,6 @@ ddev drush genc 25 ddev drush cr # use the one-time link (CTRL/CMD + Click) from the command below to edit your admin account details. -ddev drush uli | xargs open \ No newline at end of file +ddev drush uli | xargs open + +## Setup the frontend on the frontend container (which has node) From f75c93c660f7d0c70baa51c6640a53e23d469f56 Mon Sep 17 00:00:00 2001 From: joaogarin Date: Sun, 9 Feb 2025 22:19:27 +0000 Subject: [PATCH 06/11] fix(next-drupal): set drupal in folder --- ...end.yaml => .docker-compose.frontend.yaml} | 0 scripts/config/.ddev/config.yaml | 3 +- scripts/init-drupal.sh | 33 +++++++++++-------- 3 files changed, 22 insertions(+), 14 deletions(-) rename scripts/config/.ddev/{docker-compose.frontend.yaml => .docker-compose.frontend.yaml} (100%) diff --git a/scripts/config/.ddev/docker-compose.frontend.yaml b/scripts/config/.ddev/.docker-compose.frontend.yaml similarity index 100% rename from scripts/config/.ddev/docker-compose.frontend.yaml rename to scripts/config/.ddev/.docker-compose.frontend.yaml diff --git a/scripts/config/.ddev/config.yaml b/scripts/config/.ddev/config.yaml index a2db5e147..6db99981e 100644 --- a/scripts/config/.ddev/config.yaml +++ b/scripts/config/.ddev/config.yaml @@ -1,6 +1,6 @@ name: local-next-drupal type: drupal -docroot: web +docroot: drupal/web php_version: "8.3" webserver_type: nginx-fpm xdebug_enabled: false @@ -11,6 +11,7 @@ database: version: "10.11" use_dns_when_possible: true composer_version: "2" +composer_root: drupal web_environment: [] corepack_enable: true nodejs_version: "20" diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index 974d84181..217a867f2 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -38,7 +38,7 @@ fi echo "" echo "****************************************************************************************" echo "* *" -echo "* Starting Drupal for $STARTER_NAME... *" +echo "* Starting Next Drupal for $STARTER_NAME... *" echo "* *" echo "****************************************************************************************" echo "" @@ -50,18 +50,23 @@ cp scripts/config/.env.local "starters/$STARTER_NAME" mkdir local-next-drupal cd local-next-drupal -# Copy the starters folder. -cp -r ../starters . - # Set environment variable for DDEV export STARTER_NAME=$STARTER_NAME +# Copy the starters folder. +# cp -r ../starters . + # Add the ddev config. mkdir .ddev cp ../scripts/config/.ddev/config.yaml .ddev/config.yaml -cp ../scripts/config/.ddev/docker-compose.frontend.yaml .ddev/docker-compose.frontend.yaml +# cp ../scripts/config/.ddev/docker-compose.frontend.yaml .ddev/docker-compose.frontend.yaml ddev start -ddev composer create drupal/recommended-project + +if [ ! -f "composer.json" ]; then + ddev composer create drupal/recommended-project +else + echo "Drupal project already exists in this directory." +fi # Prevent composer scaffolding from overwriting development.services.yml ddev composer config --json extra.drupal-scaffold.file-mapping '{"[web-root]/sites/development.services.yml": false}' @@ -75,15 +80,15 @@ ddev composer config repositories.recipe path web/recipes/next_drupal_base ddev composer config repositories.next path modules/next # Add configuration scripts to run after install -mkdir scripts -cp ../scripts/config/consumers.php scripts/consumers.php +mkdir drupal/scripts +cp ../scripts/config/consumers.php drupal/scripts/consumers.php # Use the local repo version of the next module # ideally this would be a symlink. -cp -a ../modules/. modules +cp -a ../modules/. drupal/modules # Add recipies -cp -a ../recipes/. web/recipes +cp -a ../recipes/. drupal/web/recipes # Add useful composer dependencies ddev composer require drush/drush drupal/next_drupal_base drupal/devel drupal/core-dev ewcomposer/unpack:dev-master @@ -92,11 +97,11 @@ ddev composer require drush/drush drupal/next_drupal_base drupal/devel drupal/co ddev drush site:install --account-name=admin --account-pass=admin -y # Apply recipe -ddev exec -d /var/www/html/web php core/scripts/drupal recipe recipes/next_drupal_base +ddev exec -d /var/www/html/drupal/web php core/scripts/drupal recipe recipes/next_drupal_base ddev composer unpack drupal/next_drupal_base # Create example consumer -ddev drush php:script scripts/consumers +ddev drush php:script drupal/scripts/consumers # Generate content ddev drush pm:enable devel_generate -y @@ -107,4 +112,6 @@ ddev drush cr # use the one-time link (CTRL/CMD + Click) from the command below to edit your admin account details. ddev drush uli | xargs open -## Setup the frontend on the frontend container (which has node) +# Exit drupal folder +cd .. + From b632625b7bac98e65d97a1fdfbc7d2d27d0120ea Mon Sep 17 00:00:00 2001 From: joaogarin Date: Mon, 10 Feb 2025 01:20:16 +0000 Subject: [PATCH 07/11] fix(next-drupal): add fe container --- .gitignore | 5 +++- .../.ddev/.docker-compose.frontend.yaml | 19 ------------- .../config/.ddev/docker-compose.frontend.yaml | 28 +++++++++++++++++++ scripts/init-drupal.sh | 20 +++++++------ 4 files changed, 44 insertions(+), 28 deletions(-) delete mode 100644 scripts/config/.ddev/.docker-compose.frontend.yaml create mode 100644 scripts/config/.ddev/docker-compose.frontend.yaml diff --git a/.gitignore b/.gitignore index 3630d3738..1d431a26b 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,7 @@ yarn-error.log* /drupal-* # Local Drupal instance -local-next-drupal/ \ No newline at end of file +local-next-drupal/ + +# temporary starters folder +temp-starters/ diff --git a/scripts/config/.ddev/.docker-compose.frontend.yaml b/scripts/config/.ddev/.docker-compose.frontend.yaml deleted file mode 100644 index ce5a8303b..000000000 --- a/scripts/config/.ddev/.docker-compose.frontend.yaml +++ /dev/null @@ -1,19 +0,0 @@ -services: - frontend: - container_name: ${DDEV_SITENAME}-frontend - image: node:20 - volumes: - - ./../starters/basic-starter:/var/www/html/starters/basic-starter - working_dir: /var/www/html/starters/basic-starter - command: - - sh - - -c - - yarn install && yarn build && yarn start - ports: - - 3000 - environment: - - NODE_ENV=development - labels: - # These labels ensure this service is discoverable by ddev - com.ddev.site-name: ${DDEV_SITENAME} - com.ddev.approot: $DDEV_APPROOT diff --git a/scripts/config/.ddev/docker-compose.frontend.yaml b/scripts/config/.ddev/docker-compose.frontend.yaml new file mode 100644 index 000000000..b07e0c972 --- /dev/null +++ b/scripts/config/.ddev/docker-compose.frontend.yaml @@ -0,0 +1,28 @@ +services: + frontend: + container_name: frontend + image: node:22 + volumes: + - ./../starters/basic-starter:/var/www/html/starters/basic-starter + working_dir: /var/www/html/starters/basic-starter + command: + - sh + - -c + - | + yarn install + yarn dev + ports: + - "3000:3000" + environment: + - VIRTUAL_HOST=frontend.${DDEV_HOSTNAME} + - HTTP_EXPOSE=${DDEV_ROUTER_HTTP_PORT}:3000 + external_links: + - "ddev-router:${DDEV_HOSTNAME}" + - "ddev-router:frontend.${DDEV_HOSTNAME}" # Allow access VIRTUAL_HOST url inside frontend container. + labels: + # These labels ensure this service is discoverable by ddev + com.ddev.site-name: ${DDEV_SITENAME} + com.ddev.approot: $DDEV_APPROOT + web: + links: + - frontend:$DDEV_HOSTNAME diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index 217a867f2..c3976844d 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -54,19 +54,24 @@ cd local-next-drupal export STARTER_NAME=$STARTER_NAME # Copy the starters folder. -# cp -r ../starters . +cp -r ../starters . # Add the ddev config. mkdir .ddev cp ../scripts/config/.ddev/config.yaml .ddev/config.yaml -# cp ../scripts/config/.ddev/docker-compose.frontend.yaml .ddev/docker-compose.frontend.yaml +cp ../scripts/config/.ddev/docker-compose.frontend.yaml .ddev/docker-compose.frontend.yaml ddev start -if [ ! -f "composer.json" ]; then - ddev composer create drupal/recommended-project -else - echo "Drupal project already exists in this directory." -fi +# Move starts to a temp folder outside working dir +rm -rf ../temp-starts +mkdir ../temp-starts +mv starters ../temp-starts + +ddev composer create drupal/recommended-project + +# Move starters back. +rm -rf starters +mv ../temp-starts/starters . # Prevent composer scaffolding from overwriting development.services.yml ddev composer config --json extra.drupal-scaffold.file-mapping '{"[web-root]/sites/development.services.yml": false}' @@ -114,4 +119,3 @@ ddev drush uli | xargs open # Exit drupal folder cd .. - From 90db058e9594bb7118bfc8bc5ded6134b0e4be91 Mon Sep 17 00:00:00 2001 From: joaogarin Date: Tue, 11 Feb 2025 23:26:34 +0000 Subject: [PATCH 08/11] fix(next-drupal): set frontends --- package.json | 1 + scripts/config/.ddev/config.yaml | 20 ++++++++++++++++--- .../config/.ddev/docker-compose.frontend.yaml | 8 ++++---- scripts/config/.ddev/web-build/Dockerfile | 1 + scripts/init-drupal.sh | 17 +++++----------- 5 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 scripts/config/.ddev/web-build/Dockerfile diff --git a/package.json b/package.json index 20b6b2941..8ad1c1109 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "test:e2e:ci": "turbo run test:e2e:ci --parallel", "ddev:init": "./scripts/init-drupal.sh", "ddev:init:basic": "./scripts/init-drupal.sh --starter basic-starter", + "ddev:init:pages": "./scripts/init-drupal.sh --starter pages-starter", "ddev:destroy": "./scripts/destroy-drupal.sh" }, "devDependencies": { diff --git a/scripts/config/.ddev/config.yaml b/scripts/config/.ddev/config.yaml index 6db99981e..932afe08a 100644 --- a/scripts/config/.ddev/config.yaml +++ b/scripts/config/.ddev/config.yaml @@ -4,14 +4,28 @@ docroot: drupal/web php_version: "8.3" webserver_type: nginx-fpm xdebug_enabled: false -additional_hostnames: [] +additional_hostnames: + - frontend additional_fqdns: [] database: type: mariadb version: "10.11" use_dns_when_possible: true +hooks: + post-start: + - exec: | + composer create drupal/recommended-project tmp + mv -n tmp/* drupal + rm -rf tmp + cd starters/${STARTER_NAME} && npm install && pm2 start "npm run dev --experimental-https" composer_version: "2" composer_root: drupal -web_environment: [] +web_environment: + - STARTER_NAME=@STARTER_NAME corepack_enable: true -nodejs_version: "20" +web_extra_exposed_ports: + - name: frontend + container_port: 3000 + http_port: 3080 + https_port: 3433 +nodejs_version: "22" diff --git a/scripts/config/.ddev/docker-compose.frontend.yaml b/scripts/config/.ddev/docker-compose.frontend.yaml index b07e0c972..dec6da5fc 100644 --- a/scripts/config/.ddev/docker-compose.frontend.yaml +++ b/scripts/config/.ddev/docker-compose.frontend.yaml @@ -3,14 +3,14 @@ services: container_name: frontend image: node:22 volumes: - - ./../starters/basic-starter:/var/www/html/starters/basic-starter - working_dir: /var/www/html/starters/basic-starter + - ./../starters/${STARTER_NAME}:/var/www/html/starters/${STARTER_NAME} + working_dir: /var/www/html/starters/${STARTER_NAME} command: - sh - -c - | - yarn install - yarn dev + npm install + npm run dev ports: - "3000:3000" environment: diff --git a/scripts/config/.ddev/web-build/Dockerfile b/scripts/config/.ddev/web-build/Dockerfile new file mode 100644 index 000000000..451fce0d0 --- /dev/null +++ b/scripts/config/.ddev/web-build/Dockerfile @@ -0,0 +1 @@ +RUN npm install -g pm2 diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index c3976844d..699105e00 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -59,19 +59,12 @@ cp -r ../starters . # Add the ddev config. mkdir .ddev cp ../scripts/config/.ddev/config.yaml .ddev/config.yaml -cp ../scripts/config/.ddev/docker-compose.frontend.yaml .ddev/docker-compose.frontend.yaml -ddev start - -# Move starts to a temp folder outside working dir -rm -rf ../temp-starts -mkdir ../temp-starts -mv starters ../temp-starts +cp -R ../scripts/config/.ddev/web-build .ddev +# cp ../scripts/config/.ddev/docker-compose.frontend.yaml .ddev/docker-compose.frontend.yaml +# Replace @STARTER_NAME with actual starter name +sed -i '' -e "s/@STARTER_NAME/$STARTER_NAME/g" .ddev/config.yaml -ddev composer create drupal/recommended-project - -# Move starters back. -rm -rf starters -mv ../temp-starts/starters . +ddev start # Prevent composer scaffolding from overwriting development.services.yml ddev composer config --json extra.drupal-scaffold.file-mapping '{"[web-root]/sites/development.services.yml": false}' From 033073190b7979f00ffd6fd35beee937a27c70db Mon Sep 17 00:00:00 2001 From: joaogarin Date: Fri, 14 Feb 2025 15:01:59 +0000 Subject: [PATCH 09/11] fix(next-drupal): remove unused files --- .gitignore | 2 -- .../config/.ddev/docker-compose.frontend.yaml | 28 ------------------- 2 files changed, 30 deletions(-) delete mode 100644 scripts/config/.ddev/docker-compose.frontend.yaml diff --git a/.gitignore b/.gitignore index 8394e86f7..2c64cc754 100644 --- a/.gitignore +++ b/.gitignore @@ -43,5 +43,3 @@ yarn-error.log* /drupal/web/sites/default/settings.local.php /drupal-* /local-next-drupal -# temporary starters folder -temp-starters/ diff --git a/scripts/config/.ddev/docker-compose.frontend.yaml b/scripts/config/.ddev/docker-compose.frontend.yaml deleted file mode 100644 index dec6da5fc..000000000 --- a/scripts/config/.ddev/docker-compose.frontend.yaml +++ /dev/null @@ -1,28 +0,0 @@ -services: - frontend: - container_name: frontend - image: node:22 - volumes: - - ./../starters/${STARTER_NAME}:/var/www/html/starters/${STARTER_NAME} - working_dir: /var/www/html/starters/${STARTER_NAME} - command: - - sh - - -c - - | - npm install - npm run dev - ports: - - "3000:3000" - environment: - - VIRTUAL_HOST=frontend.${DDEV_HOSTNAME} - - HTTP_EXPOSE=${DDEV_ROUTER_HTTP_PORT}:3000 - external_links: - - "ddev-router:${DDEV_HOSTNAME}" - - "ddev-router:frontend.${DDEV_HOSTNAME}" # Allow access VIRTUAL_HOST url inside frontend container. - labels: - # These labels ensure this service is discoverable by ddev - com.ddev.site-name: ${DDEV_SITENAME} - com.ddev.approot: $DDEV_APPROOT - web: - links: - - frontend:$DDEV_HOSTNAME From ad4c0d2adfcae82e21d4b82ace6e25b9405d49e9 Mon Sep 17 00:00:00 2001 From: joaogarin Date: Fri, 14 Feb 2025 15:12:43 +0000 Subject: [PATCH 10/11] fix(next-drupal): add ddev describe --- scripts/init-drupal.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index 699105e00..28e12b6e6 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -111,4 +111,7 @@ ddev drush cr ddev drush uli | xargs open # Exit drupal folder +ddev describe + cd .. + From c836ded7ce876f266be343b11c9c0fff970df121 Mon Sep 17 00:00:00 2001 From: joaogarin Date: Fri, 28 Feb 2025 16:18:07 +0000 Subject: [PATCH 11/11] feat(next-drupal): setup graphql --- package.json | 1 + recipes/next_drupal_base/composer.json | 2 +- recipes/next_drupal_graphql/composer.json | 17 ++++++ ...graphql.graphql_servers.graphql_schema.yml | 18 ++++++ .../config/graphql_compose.settings.yml | 50 +++++++++++++++ .../config/pathauto.pattern.content.yml | 23 +++++++ .../simple_oauth.oauth2_scope.nextjs_site.yml | 22 +++++++ .../config/simple_oauth.settings.yml | 5 ++ .../config/user.role.next_js_site.yml | 11 ++++ recipes/next_drupal_graphql/recipe.yml | 11 ++++ scripts/config/graphQLConsumer.php | 61 +++++++++++++++++++ scripts/init-drupal.sh | 29 +++++++-- 12 files changed, 244 insertions(+), 6 deletions(-) create mode 100644 recipes/next_drupal_graphql/composer.json create mode 100644 recipes/next_drupal_graphql/config/graphql.graphql_servers.graphql_schema.yml create mode 100644 recipes/next_drupal_graphql/config/graphql_compose.settings.yml create mode 100644 recipes/next_drupal_graphql/config/pathauto.pattern.content.yml create mode 100644 recipes/next_drupal_graphql/config/simple_oauth.oauth2_scope.nextjs_site.yml create mode 100644 recipes/next_drupal_graphql/config/simple_oauth.settings.yml create mode 100644 recipes/next_drupal_graphql/config/user.role.next_js_site.yml create mode 100644 recipes/next_drupal_graphql/recipe.yml create mode 100644 scripts/config/graphQLConsumer.php diff --git a/package.json b/package.json index 8ad1c1109..0272694ec 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "ddev:init": "./scripts/init-drupal.sh", "ddev:init:basic": "./scripts/init-drupal.sh --starter basic-starter", "ddev:init:pages": "./scripts/init-drupal.sh --starter pages-starter", + "ddev:init:graphql": "./scripts/init-drupal.sh --starter graphql-starter", "ddev:destroy": "./scripts/destroy-drupal.sh" }, "devDependencies": { diff --git a/recipes/next_drupal_base/composer.json b/recipes/next_drupal_base/composer.json index 833755923..9286d9163 100644 --- a/recipes/next_drupal_base/composer.json +++ b/recipes/next_drupal_base/composer.json @@ -12,4 +12,4 @@ "require": { "drupal/next": "*" } -} \ No newline at end of file +} diff --git a/recipes/next_drupal_graphql/composer.json b/recipes/next_drupal_graphql/composer.json new file mode 100644 index 000000000..c18d485e2 --- /dev/null +++ b/recipes/next_drupal_graphql/composer.json @@ -0,0 +1,17 @@ +{ + "name": "drupal/next_drupal_graphql", + "description": "Common dependencies and configuration for Next Drupal GraphQL projects.", + "type": "drupal-recipe", + "license": "GPL-2.0-or-later", + "repositories": [ + { + "type": "composer", + "url": "https://packages.drupal.org/8" + } + ], + "require": { + "drupal/next": "*", + "drupal/graphql": "^4.6", + "drupal/graphql_compose": "^2.0" + } +} diff --git a/recipes/next_drupal_graphql/config/graphql.graphql_servers.graphql_schema.yml b/recipes/next_drupal_graphql/config/graphql.graphql_servers.graphql_schema.yml new file mode 100644 index 000000000..c50edb91a --- /dev/null +++ b/recipes/next_drupal_graphql/config/graphql.graphql_servers.graphql_schema.yml @@ -0,0 +1,18 @@ +uuid: 3954a200-86f3-499b-914e-99a6dac58861 +langcode: en +status: true +dependencies: { } +name: graphql_schema +label: 'Graphql Schema' +endpoint: /graphql +debug_flag: 0 +schema: graphql_compose +caching: true +batching: true +disable_introspection: false +query_depth: null +query_complexity: null +schema_configuration: + graphql_compose: + enabled: true +persisted_queries_settings: { } diff --git a/recipes/next_drupal_graphql/config/graphql_compose.settings.yml b/recipes/next_drupal_graphql/config/graphql_compose.settings.yml new file mode 100644 index 000000000..2a3816cd2 --- /dev/null +++ b/recipes/next_drupal_graphql/config/graphql_compose.settings.yml @@ -0,0 +1,50 @@ +entity_config: + node: + article: + enabled: true + query_load_enabled: true + edges_enabled: true + routes_enabled: true + page: + enabled: true + query_load_enabled: true + edges_enabled: true + routes_enabled: true + taxonomy_term: + tags: + enabled: false + user: + user: + enabled: true + query_load_enabled: true + edges_enabled: true + routes_enabled: true +field_config: + node: + article: + body: + enabled: true + field_image: + enabled: true + field_tags: + enabled: true + page: + body: + enabled: true + user: + user: + user_picture: + enabled: true +settings: + exclude_unpublished: true + expose_entity_ids: false + field_required_override: false + schema_description: "GraphQL Compose" + schema_version: "1" + simple_queries: true + simple_unions: true + site_name: false + site_slogan: false + site_front: true + inflector_langcode: en + inflector_singularize: true diff --git a/recipes/next_drupal_graphql/config/pathauto.pattern.content.yml b/recipes/next_drupal_graphql/config/pathauto.pattern.content.yml new file mode 100644 index 000000000..fd61af24c --- /dev/null +++ b/recipes/next_drupal_graphql/config/pathauto.pattern.content.yml @@ -0,0 +1,23 @@ +uuid: a5900cb4-ec2f-4788-9e17-73ab49bfcb83 +langcode: en +status: true +dependencies: + module: + - node +id: content +label: Content +type: 'canonical_entities:node' +pattern: '[node:title]' +selection_criteria: + c0c92c0f-9ee6-4b53-8270-198bd024c071: + id: 'entity_bundle:node' + negate: false + uuid: c0c92c0f-9ee6-4b53-8270-198bd024c071 + context_mapping: + node: node + bundles: + article: article + page: page +selection_logic: and +weight: -5 +relationships: { } diff --git a/recipes/next_drupal_graphql/config/simple_oauth.oauth2_scope.nextjs_site.yml b/recipes/next_drupal_graphql/config/simple_oauth.oauth2_scope.nextjs_site.yml new file mode 100644 index 000000000..a3794b2d2 --- /dev/null +++ b/recipes/next_drupal_graphql/config/simple_oauth.oauth2_scope.nextjs_site.yml @@ -0,0 +1,22 @@ +uuid: a5bd2fda-4983-4e8d-8019-1c2695b15a42 +langcode: en +status: true +dependencies: {} +id: nextjs_site +name: nextjs_site +description: "Next.js Site" +grant_types: + refresh_token: + status: false + description: "" + client_credentials: + status: true + description: "" + authorization_code: + status: false + description: "" +umbrella: false +parent: _none +granularity_id: role +granularity_configuration: + role: next_js_site diff --git a/recipes/next_drupal_graphql/config/simple_oauth.settings.yml b/recipes/next_drupal_graphql/config/simple_oauth.settings.yml new file mode 100644 index 000000000..46c145673 --- /dev/null +++ b/recipes/next_drupal_graphql/config/simple_oauth.settings.yml @@ -0,0 +1,5 @@ +scope_provider: dynamic +token_cron_batch_size: 0 +public_key: ../keys/public.key +private_key: ../keys/private.key +disable_openid_connect: false diff --git a/recipes/next_drupal_graphql/config/user.role.next_js_site.yml b/recipes/next_drupal_graphql/config/user.role.next_js_site.yml new file mode 100644 index 000000000..31fd02e42 --- /dev/null +++ b/recipes/next_drupal_graphql/config/user.role.next_js_site.yml @@ -0,0 +1,11 @@ +uuid: 9082be18-8b66-4bfa-8d54-e703ef2c7e2d +langcode: en +status: true +dependencies: {} +id: next_js_site +label: "Next.js Site" +weight: 4 +is_admin: false +permissions: + - "execute graphql_schema arbitrary graphql requests" + - "execute graphql_schema persisted graphql requests" diff --git a/recipes/next_drupal_graphql/recipe.yml b/recipes/next_drupal_graphql/recipe.yml new file mode 100644 index 000000000..fdf21dd50 --- /dev/null +++ b/recipes/next_drupal_graphql/recipe.yml @@ -0,0 +1,11 @@ +name: "Next Drupal GraphQL" +description: "Common dependencies and configuration for Next Drupal GraphQL projects" +type: "Site" + +install: + - next + - next_graphql + - graphql + - graphql_compose_edges + - graphql_compose_routes + - graphql_compose_users diff --git a/scripts/config/graphQLConsumer.php b/scripts/config/graphQLConsumer.php new file mode 100644 index 000000000..870ac9e34 --- /dev/null +++ b/scripts/config/graphQLConsumer.php @@ -0,0 +1,61 @@ +getStorage('consumer'); + +// Create a user with role next_js +$user = \Drupal::service('entity_type.manager')->getStorage('user')->create([ + 'name' => 'next', + 'mail' => 'next@ddev.site', + 'password' => 'next', + 'roles' => ['next_js_site'], + 'status' => 1, +]); +$user->save(); + +$previewerClientId = Crypt::randomBytesBase64(); +$previewerClientSecret = $random->word(8); +$consumer = $consumerStorage->create([ + 'client_id' => 'next_consumer', + 'secret' => 'secret', + 'label' => 'Next.js site', + 'user_id' => $user->id(), + 'grant_types' => ['client_credentials'], + 'scopes' => ['nextjs_site'], + 'third_party' => TRUE, + 'is_default' => FALSE, +])->save(); + +$directory = '../keys'; + +if (create_directory($directory)) { + echo 'Keys dir created succesfully' . PHP_EOL; +} else { + echo 'Failed to create directory' . PHP_EOL; +} + +\Drupal::service('simple_oauth.key.generator')->generateKeys($directory); + +function create_directory($directory) +{ + // Get the file system service. + $file_system = \Drupal::service('file_system'); + + // Check if the directory exists and create it if it doesn't. + if (!$file_system->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS)) { + return FALSE; + } + + return TRUE; +} diff --git a/scripts/init-drupal.sh b/scripts/init-drupal.sh index 28e12b6e6..4fad06029 100755 --- a/scripts/init-drupal.sh +++ b/scripts/init-drupal.sh @@ -75,11 +75,13 @@ ddev composer config allow-plugins.tbachert/spi true -n # Add repositories ddev composer config repositories.unpack vcs https://gitlab.ewdev.ca/yonas.legesse/drupal-recipe-unpack.git ddev composer config repositories.recipe path web/recipes/next_drupal_base +ddev composer config repositories.recipe path web/recipes/next_drupal_graphql ddev composer config repositories.next path modules/next # Add configuration scripts to run after install mkdir drupal/scripts cp ../scripts/config/consumers.php drupal/scripts/consumers.php +cp ../scripts/config/graphQLConsumer.php drupal/scripts/graphQLConsumer.php # Use the local repo version of the next module # ideally this would be a symlink. @@ -89,17 +91,34 @@ cp -a ../modules/. drupal/modules cp -a ../recipes/. drupal/web/recipes # Add useful composer dependencies -ddev composer require drush/drush drupal/next_drupal_base drupal/devel drupal/core-dev ewcomposer/unpack:dev-master +# if staters is basic or pages +if [[ "$STARTER_NAME" == "basic-starter" || "$STARTER_NAME" == "pages-starter" ]]; then + ddev composer require drush/drush drupal/next_drupal_base drupal/devel drupal/core-dev ewcomposer/unpack:dev-master +else + ddev composer require drush/drush drupal/next_drupal_graphql drupal/devel drupal/core-dev ewcomposer/unpack:dev-master +fi # Install Drupal ddev drush site:install --account-name=admin --account-pass=admin -y -# Apply recipe -ddev exec -d /var/www/html/drupal/web php core/scripts/drupal recipe recipes/next_drupal_base -ddev composer unpack drupal/next_drupal_base +# if staters is basic or pages +if [[ "$STARTER_NAME" == "basic-starter" || "$STARTER_NAME" == "pages-starter" ]]; then + # Apply recipe + ddev exec -d /var/www/html/drupal/web php core/scripts/drupal recipe recipes/next_drupal_base + ddev composer unpack drupal/next_drupal_base +else + # Apply recipe + ddev exec -d /var/www/html/drupal/web php core/scripts/drupal recipe recipes/next_drupal_graphql + ddev composer unpack drupal/next_drupal_graphql +fi # Create example consumer -ddev drush php:script drupal/scripts/consumers +if [[ "$STARTER_NAME" == "basic-starter" || "$STARTER_NAME" == "pages-starter" ]]; then + ddev drush php:script drupal/scripts/consumers +else + ddev drush php:script drupal/scripts/graphQLConsumer +fi + # Generate content ddev drush pm:enable devel_generate -y