Skip to content

fix: Install drush without affecting git index #33

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

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions commands/web/drush
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash

#ddev-generated
## Description: Run drush CLI inside the web container, installing it if necessary
## Usage: drush [flags] [args]
## Example: "ddev drush uli" or "ddev drush sql-cli" or "ddev drush --version"
## ProjectTypes: drupal7,drupal8,drupal9,drupal10,drupal,backdrop
## ExecRaw: true

if ! command -v drush >/dev/null; then
echo "drush is not yet installed. Installing it...'"
.ddev/core-dev/install_drush.sh
fi
drush "$@"
1 change: 0 additions & 1 deletion config.ddev-drupal-core-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

webimage_extra_packages: ["chromium-driver"]
ddev_version_constraint: '>=v1.23.1'
omit_containers: ["db"]
upload_dirs:
# The install technique tries to remove all of sites/default/files
# but with DDEV + mutagen that isn't possible.
Expand Down
3 changes: 2 additions & 1 deletion core-dev/gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
/sites/simpletest
/sites/default/files
/vendor
test_output
test_output
*.orig
41 changes: 41 additions & 0 deletions core-dev/install_drush.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/bin/bash

#ddev-generated
# This script installs drush/drush without changing the git
# status of the Drupal checkout

set -eu -o pipefail

if command -v drush >/dev/null; then
echo "drush is already installed, taking no action. You can remove it if you want to reinstall"
exit
fi

echo "Installing drush without affecting git status"

# Make certain that we have something staged so we can create stash
touch .makedrush.txt
git add .makedrush.txt

# Save the stash, which will include anything people were doing
# plus the .makedrush.txt. This gets us back to "no changes"
# in `git status`
git stash

# Install drush
composer require drush/drush --with-dependencies

# Roll back to what we started with. Cleans up
# composer.* and anything else that the drush install changes
# But vendor directory is untouched since
# it's gitignored
git reset --hard

# Restore anything that might have been staged
# prior to the start
git stash pop

# Get rid of our dummy file
git rm -f .makedrush.txt

echo "drush/drush is installed in $(which drush)"
2 changes: 2 additions & 0 deletions install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ project_files:
- core-dev/phpunit-firefox.xml
- core-dev/phpunit-chrome.xml
- commands/web/drupal
- commands/web/drush
- commands/web/phpunit
- commands/web/nightwatch
- core-dev/install_drush.sh
- core-dev/gitignore
- core-dev/.env
- core-dev/src/Command/AdminLoginCommand.php
Expand Down
29 changes: 23 additions & 6 deletions tests/test.bats
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,40 @@ setup() {
set -eu -o pipefail
export DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )/.."
export TESTDIR=~/tmp/test-ddev-drupal-core-dev
mkdir -p $TESTDIR
export PROJNAME=ddev-drupal-core-dev
rm -rf ${TESTDIR}
mkdir -p ${TESTDIR}
export PROJNAME=test-ddev-drupal-core-dev
export DDEV_NON_INTERACTIVE=true
ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 || true
curl -L -o /tmp/drupal.tar.gz https://ftp.drupal.org/files/projects/drupal-11.x-dev.tar.gz
tar --strip-components 1 -zxf /tmp/drupal.tar.gz -C ${TESTDIR}
cd "${TESTDIR}"
mv vendor /tmp/vendor.bak
git config --global user.email "[email protected]"
git config --global user.name "Example Example"
git init && git add . >/dev/null && git commit -m "current" >/dev/null
mv /tmp/vendor.bak vendor
ddev config --project-name=${PROJNAME} --upload-dirs=.ddev/tmp
ddev config --update
ddev start -y >/dev/null
ddev composer install >/dev/null
}

health_checks() {
ddev exec "curl -s chrome:7900" | grep "noVNC"
ddev exec "curl -s firefox:7901" | grep "noVNC"
base_checks() {
ddev exec "curl -s chrome:7900" | grep "noVNC" >/dev/null
ddev exec "curl -s firefox:7901" | grep "noVNC" >/dev/null
ddev phpunit core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
}

drush_checks() {
# Make sure there's nothing in the git index before drush install
git diff --cached --quiet
ddev drush st
# Make sure there's nothing after the drush install
git diff --cached --quiet || (echo "git index has been touched" && exit 2)
ddev drush si -y --account-pass=admin
}

teardown() {
set -eu -o pipefail
cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 )
Expand All @@ -33,7 +49,8 @@ teardown() {
echo "# ddev get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3
ddev get ${DIR}
ddev restart
health_checks
base_checks
drush_checks
}

#TODO: Re-enable release tests after the add-on has a release with DDEV v1.23.0 support
Expand Down