2 # Create a Drupal installation profile
 
   4 # Copyright (C) 2017  Antonio Ospite <ao2@ao2.it>
 
   6 # This program is free software: you can redistribute it and/or modify
 
   7 # it under the terms of the GNU General Public License as published by
 
   8 # the Free Software Foundation, either version 2 of the License, or
 
   9 # (at your option) any later version.
 
  11 # This program is distributed in the hope that it will be useful,
 
  12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  14 # GNU General Public License for more details.
 
  16 # You should have received a copy of the GNU General Public License
 
  17 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
  23 usage: drin $(basename "$0" .sh) [-h|--help] <title> <machine_name>
 
  25 Create an installation profile from the installed project.
 
  28   -h, --help          display this usage message and exit
 
  40       echo "Error: Unknown option '${1}'" 1>&2
 
  50 { [ "x$1" = "x" ] || [ "x$2" = "x" ]; } && { usage 1>&2; exit 1; }
 
  53 PROFILE_MACHINE_NAME="$2"
 
  57 [ -d "$WEB_ROOT" ] || { echo "Aborting, run this command from the Drupal project directory." 1>&2; exit 1; }
 
  61 DRUPAL_CONSOLE="${PROJECT_ROOT}/vendor/bin/drupal"
 
  62 DRUSH="${PROJECT_ROOT}/vendor/bin/drush"
 
  64 [ -x "$DRUSH" ] || { echo "Aborting, '$DRUSH' not available." 1>&2; exit 1; }
 
  65 [ -x "$DRUPAL_CONSOLE" ] || { echo "Aborting, '$DRUPAL_CONSOLE' not available." 1>&2; exit 1; }
 
  67 PROFILE_DEST_DIR="${PROJECT_ROOT}/${PROFILE_MACHINE_NAME}"
 
  69 [ -d "${PROFILE_DEST_DIR}" ] && { echo "Aborting, '${PROFILE_DEST_DIR}' already exists." 1>&2; exit 1; }
 
  73 # The list of modules and themes could also be obtained by exporting the
 
  74 # configuration first and then looking at: config/install/core.extension.yml
 
  77 #  sed -e '/module:/,/^[^ ]/!d;//d' -e 's/^[ ]*\(.*\):.*$/\1/' config/install/core.extension.yml
 
  81 #  $DRUPAL_CONSOLE yaml:get:value "${PROFILE_DEST_DIR}/config/install/core.extension.yml" dependencies
 
  83 # However getting them before exporting the configuration and generating the
 
  86 ENABLED_MODULES="$($DRUSH pm-list --type=module --field=name --status=enabled --pipe | tr '\n' ',' | sed 's/,$//')"
 
  87 ENABLED_THEMES="$($DRUSH pm-list --type=theme --field=name --status=enabled --pipe | tr '\n' ',' | sed 's/,$//')"
 
  89 $DRUPAL_CONSOLE generate:profile \
 
  90   --profile="$PROFILE_TITLE" \
 
  91   --machine-name="$PROFILE_MACHINE_NAME" \
 
  92   --description="Drupal installation profile for $PROFILE_TITLE" \
 
  93   --dependencies="$ENABLED_MODULES" \
 
  94   --themes="$ENABLED_THEMES" \
 
  95   --profile-path="$PROJECT_ROOT" \
 
  98 # Basically do what's suggested in the "Configuration" section here:
 
  99 # https://www.drupal.org/docs/8/creating-distributions/how-to-write-a-drupal-8-installation-profile
 
 100 $DRUPAL_CONSOLE config:export --directory="${PROFILE_DEST_DIR}/config/install" --remove-uuid --remove-config-hash
 
 101 rm "${PROFILE_DEST_DIR}/config/install/core.extension.yml"
 
 103 # The reference to the core version could be removed, even though it is not strictly necessary.
 
 104 find "${PROFILE_DEST_DIR}/config/install" -type f -exec sed -i -e '/^_core: {  }/d' {} \;
 
 106 # Since the profile generated by `$DRUPAL_CONSOLE generate:profile` calls in
 
 107 # the standard profile, some duplicated config files could be removed in the
 
 108 # new profile, but that's not strictly necessary either.
 
 109 #fdupes -f -1 "${WEB_ROOT}/core/profiles/standard/config/install/" "${PROFILE_DEST_DIR}/config/install/" | xargs rm
 
 111 # Export the default content if the default_content module is there
 
 112 if echo "$ENABLED_MODULES" | grep -q default_content;
 
 114   $DRUSH default-content-export-references --folder="${PROFILE_DEST_DIR}/content" node