-
Notifications
You must be signed in to change notification settings - Fork 86
Light updates to the install-wp-tests.sh script
#356
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
base: main
Are you sure you want to change the base?
Changes from all commits
2176805
f847213
a4e6950
8746658
4f19c42
a05593f
49792b7
2b5b25a
7859375
634d3f6
428275b
cd80f8b
a961eca
dca43cc
6f17adf
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,16 @@ | ||
| #!/usr/bin/env bash | ||
|
|
||
| # See https://raw.githubusercontent.com/wp-cli/scaffold-command/master/templates/install-wp-tests.sh | ||
|
|
||
| # Set up colors for output | ||
| RED="\033[0;31m" | ||
| GREEN="\033[0;32m" | ||
| YELLOW="\033[0;33m" | ||
| CYAN="\033[0;36m" | ||
| RESET="\033[0m" | ||
|
|
||
| if [ $# -lt 3 ]; then | ||
| echo "usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]" | ||
| echo -e "${YELLOW}Usage:${RESET} $0 <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]" | ||
| exit 1 | ||
| fi | ||
|
|
||
|
|
@@ -15,31 +24,58 @@ SKIP_DB_CREATE=${6-false} | |
| TMPDIR=${TMPDIR-/tmp} | ||
| TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//") | ||
| WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib} | ||
| WP_TESTS_FILE="$WP_TESTS_DIR"/includes/functions.php | ||
| WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress} | ||
| WP_CORE_FILE="$WP_CORE_DIR"/wp-settings.php | ||
|
|
||
| download() { | ||
| if [ `which curl` ]; then | ||
| curl -s "$1" > "$2"; | ||
| curl -L -s "$1" > "$2"; | ||
| elif [ `which wget` ]; then | ||
| wget -nv -O "$2" "$1" | ||
| else | ||
| echo "Error: Neither curl nor wget is installed." | ||
| echo -e "${RED}Error: Neither curl nor wget is installed.${RESET}" | ||
| exit 1 | ||
| fi | ||
| } | ||
|
|
||
| # Check if svn is installed | ||
| check_svn_installed() { | ||
| if ! command -v svn > /dev/null; then | ||
| echo "Error: svn is not installed. Please install svn and try again." | ||
| exit 1 | ||
| fi | ||
| check_for_updates() { | ||
| local remote_url="https://raw.githubusercontent.com/wp-cli/scaffold-command/main/templates/install-wp-tests.sh" | ||
| local tmp_script="$TMPDIR/install-wp-tests.sh.latest" | ||
|
|
||
| download "$remote_url" "$tmp_script" | ||
|
|
||
| if [ ! -f "$tmp_script" ]; then | ||
| echo -e "${YELLOW}Warning: Could not download the latest version of the script for update check.${RESET}" | ||
| return | ||
| fi | ||
|
|
||
| local local_hash="" | ||
| local remote_hash="" | ||
|
|
||
| if command -v shasum > /dev/null; then | ||
| local_hash=$(shasum -a 256 "$0" | awk '{print $1}') | ||
| remote_hash=$(shasum -a 256 "$tmp_script" | awk '{print $1}') | ||
| elif command -v sha256sum > /dev/null; then | ||
| local_hash=$(sha256sum "$0" | awk '{print $1}') | ||
| remote_hash=$(sha256sum "$tmp_script" | awk '{print $1}') | ||
| else | ||
| echo -e "${YELLOW}Warning: Could not find shasum or sha256sum to check for script updates.${RESET}" | ||
| rm "$tmp_script" | ||
| return | ||
| fi | ||
|
|
||
| rm "$tmp_script" | ||
|
|
||
| if [ "$local_hash" != "$remote_hash" ]; then | ||
| echo -e "${YELLOW}Warning: A newer version of this script is available at $remote_url${RESET}" | ||
| fi | ||
| } | ||
| check_for_updates | ||
|
|
||
| if [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+\-(beta|RC)[0-9]+$ ]]; then | ||
| WP_BRANCH=${WP_VERSION%\-*} | ||
| WP_TESTS_TAG="branches/$WP_BRANCH" | ||
|
|
||
| elif [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then | ||
| WP_TESTS_TAG="branches/$WP_VERSION" | ||
| elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then | ||
|
|
@@ -54,30 +90,31 @@ elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then | |
| else | ||
| # http serves a single offer, whereas https serves multiple. we only want one | ||
| download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json | ||
| grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json | ||
| LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') | ||
| LATEST_VERSION=$(grep -oE '"version":"[^"]*' /tmp/wp-latest.json | head -n 1 | sed 's/"version":"//') | ||
| if [[ -z "$LATEST_VERSION" ]]; then | ||
| echo "Latest WordPress version could not be found" | ||
| echo -e "${RED}Error: Latest WordPress version could not be found.${RESET}" | ||
| exit 1 | ||
| fi | ||
| WP_TESTS_TAG="tags/$LATEST_VERSION" | ||
| fi | ||
|
|
||
| set -ex | ||
|
|
||
| install_wp() { | ||
|
|
||
| if [ -d $WP_CORE_DIR ]; then | ||
| if [ -f $WP_CORE_FILE ]; then | ||
| echo -e "${CYAN}WordPress is already installed.${RESET}" | ||
| return; | ||
| fi | ||
|
|
||
| echo -e "${CYAN}Installing WordPress...${RESET}" | ||
|
|
||
| rm -rf $WP_CORE_DIR | ||
| mkdir -p $WP_CORE_DIR | ||
|
|
||
| if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then | ||
| mkdir -p $TMPDIR/wordpress-trunk | ||
| rm -rf $TMPDIR/wordpress-trunk/* | ||
| check_svn_installed | ||
| svn export --quiet https://core.svn.wordpress.org/trunk $TMPDIR/wordpress-trunk/wordpress | ||
| mv $TMPDIR/wordpress-trunk/wordpress/* $WP_CORE_DIR | ||
| download https://github.com/WordPress/wordpress/archive/refs/heads/master.tar.gz $TMPDIR/wordpress.tar.gz | ||
| tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR | ||
| else | ||
| if [ $WP_VERSION == 'latest' ]; then | ||
| local ARCHIVE_NAME='latest' | ||
|
|
@@ -103,8 +140,7 @@ install_wp() { | |
| download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz | ||
| tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR | ||
| fi | ||
|
|
||
| download https://raw.githubusercontent.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php | ||
| echo -e "${GREEN}WordPress installed successfully.${RESET}" | ||
| } | ||
|
|
||
| install_test_suite() { | ||
|
|
@@ -115,26 +151,55 @@ install_test_suite() { | |
| local ioption='-i' | ||
| fi | ||
|
|
||
| # set up testing suite if it doesn't yet exist | ||
| if [ ! -d $WP_TESTS_DIR ]; then | ||
| # set up testing suite if it doesn't yet exist or only partially exists | ||
| if [ ! -f $WP_TESTS_FILE ]; then | ||
| echo -e "${CYAN}Installing test suite...${RESET}" | ||
| # set up testing suite | ||
| rm -rf $WP_TESTS_DIR | ||
| mkdir -p $WP_TESTS_DIR | ||
| rm -rf $WP_TESTS_DIR/{includes,data} | ||
| check_svn_installed | ||
| svn export --quiet --ignore-externals https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes | ||
| svn export --quiet --ignore-externals https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data | ||
|
|
||
| if [[ $WP_TESTS_TAG == 'trunk' ]]; then | ||
| ref=trunk | ||
| archive_url="https://github.com/WordPress/wordpress-develop/archive/refs/heads/${ref}.tar.gz" | ||
| elif [[ $WP_TESTS_TAG == branches/* ]]; then | ||
| ref=${WP_TESTS_TAG#branches/} | ||
| archive_url="https://github.com/WordPress/wordpress-develop/archive/refs/heads/${ref}.tar.gz" | ||
| else | ||
| ref=${WP_TESTS_TAG#tags/} | ||
| archive_url="https://github.com/WordPress/wordpress-develop/archive/refs/tags/${ref}.tar.gz" | ||
| fi | ||
|
|
||
| download ${archive_url} $TMPDIR/wordpress-develop.tar.gz | ||
| tar -zxmf $TMPDIR/wordpress-develop.tar.gz -C $TMPDIR | ||
| mv $TMPDIR/wordpress-develop-${ref}/tests/phpunit/includes $WP_TESTS_DIR/ | ||
| mv $TMPDIR/wordpress-develop-${ref}/tests/phpunit/data $WP_TESTS_DIR/ | ||
| rm -rf $TMPDIR/wordpress-develop-${ref} | ||
| rm $TMPDIR/wordpress-develop.tar.gz | ||
| echo -e "${GREEN}Test suite installed.${RESET}" | ||
| else | ||
| echo -e "${CYAN}Test suite is already installed.${RESET}" | ||
| fi | ||
|
|
||
| if [ ! -f wp-tests-config.php ]; then | ||
| download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php | ||
| if [ ! -f "$WP_TESTS_DIR"/wp-tests-config.php ]; then | ||
| echo -e "${CYAN}Configuring test suite...${RESET}" | ||
| if [[ $WP_TESTS_TAG == 'trunk' ]]; then | ||
| ref=master | ||
| elif [[ $WP_TESTS_TAG == branches/* ]]; then | ||
| ref=${WP_TESTS_TAG#branches/} | ||
| else | ||
| ref=${WP_TESTS_TAG#tags/} | ||
| fi | ||
| download https://raw.githubusercontent.com/WordPress/wordpress-develop/${ref}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php | ||
| # remove all forward slashes in the end | ||
| WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") | ||
| sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php | ||
| sed $ioption "s:__DIR__ . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php | ||
| sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php | ||
| sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php | ||
| sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php | ||
| sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php | ||
| echo -e "${GREEN}Test suite configured.${RESET}" | ||
| else | ||
| echo -e "${CYAN}Test suite is already configured.${RESET}" | ||
| fi | ||
|
|
||
| } | ||
|
|
@@ -143,22 +208,32 @@ recreate_db() { | |
| shopt -s nocasematch | ||
| if [[ $1 =~ ^(y|yes)$ ]] | ||
| then | ||
| mysqladmin drop $DB_NAME -f --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
| echo -e "${CYAN}Recreating the database ($DB_NAME)...${RESET}" | ||
| if [ `which mariadb-admin` ]; then | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just because MariaDB might exist locally, is that sufficient to know that the developer wants to use it?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could allow overriding with a flag perhaps if needed. |
||
| mariadb-admin drop $DB_NAME -f --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
| else | ||
| mysqladmin drop $DB_NAME -f --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
| fi | ||
| create_db | ||
| echo "Recreated the database ($DB_NAME)." | ||
| echo -e "${GREEN}Database ($DB_NAME) recreated.${RESET}" | ||
| else | ||
| echo "Leaving the existing database ($DB_NAME) in place." | ||
| echo -e "${YELLOW}Leaving the existing database ($DB_NAME) in place.${RESET}" | ||
| fi | ||
| shopt -u nocasematch | ||
| } | ||
|
|
||
| create_db() { | ||
| mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
| if [ `which mariadb-admin` ]; then | ||
| mariadb-admin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
| else | ||
| mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
| fi | ||
| } | ||
|
|
||
| install_db() { | ||
|
|
||
| if [ ${SKIP_DB_CREATE} = "true" ]; then | ||
| echo -e "${YELLOW}Skipping database creation.${RESET}" | ||
| return 0 | ||
| fi | ||
|
|
||
|
|
@@ -179,16 +254,24 @@ install_db() { | |
| fi | ||
|
|
||
| # create database | ||
| if [ $(mysql --user="$DB_USER" --password="$DB_PASS"$EXTRA --execute='show databases;' | grep ^$DB_NAME$) ] | ||
| if [ `which mariadb` ]; then | ||
| local DB_CLIENT='mariadb' | ||
| else | ||
| local DB_CLIENT='mysql' | ||
| fi | ||
| if [ $($DB_CLIENT --user="$DB_USER" --password="$DB_PASS"$EXTRA --execute='show databases;' | grep ^$DB_NAME$) ] | ||
| then | ||
| echo "Reinstalling will delete the existing test database ($DB_NAME)" | ||
| echo -e "${YELLOW}Reinstalling will delete the existing test database ($DB_NAME)${RESET}" | ||
| read -p 'Are you sure you want to proceed? [y/N]: ' DELETE_EXISTING_DB | ||
| recreate_db $DELETE_EXISTING_DB | ||
| else | ||
| echo -e "${CYAN}Creating database ($DB_NAME)...${RESET}" | ||
| create_db | ||
| echo -e "${GREEN}Database ($DB_NAME) created.${RESET}" | ||
| fi | ||
| } | ||
|
|
||
| install_wp | ||
| install_test_suite | ||
| install_db | ||
| echo -e "${GREEN}Done.${RESET}" | ||
Uh oh!
There was an error while loading. Please reload this page.