1+ #! /usr/bin/env bash
2+
3+ if [ $# -lt 3 ]; then
4+ echo " usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]"
5+ exit 1
6+ fi
7+
8+ DB_NAME=$1
9+ DB_USER=$2
10+ DB_PASS=$3
11+ DB_HOST=${4-localhost}
12+ WP_VERSION=${5-latest}
13+ SKIP_DB_CREATE=${6-false}
14+
15+ TMPDIR=${TMPDIR-/ tmp}
16+ TMPDIR=$( echo $TMPDIR | sed -e " s/\/$//" )
17+ WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR / wordpress-tests-lib}
18+ WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR / wordpress/ }
19+
20+ download () {
21+ if [ ` which curl` ]; then
22+ curl -s " $1 " > " $2 " ;
23+ elif [ ` which wget` ]; then
24+ wget -nv -O " $2 " " $1 "
25+ fi
26+ }
27+
28+ if [[ $WP_VERSION =~ ^[0-9]+\. [0-9]+$ ]]; then
29+ WP_TESTS_TAG=" branches/$WP_VERSION "
30+ elif [[ $WP_VERSION =~ [0-9]+\. [0-9]+\. [0-9]+ ]]; then
31+ if [[ $WP_VERSION =~ [0-9]+\. [0-9]+\. [0] ]]; then
32+ # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
33+ WP_TESTS_TAG=" tags/${WP_VERSION% ??} "
34+ else
35+ WP_TESTS_TAG=" tags/$WP_VERSION "
36+ fi
37+ elif [[ $WP_VERSION == ' nightly' || $WP_VERSION == ' trunk' ]]; then
38+ WP_TESTS_TAG=" trunk"
39+ else
40+ # http serves a single offer, whereas https serves multiple. we only want one
41+ download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json
42+ grep ' [0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json
43+ LATEST_VERSION=$( grep -o ' "version":"[^"]*' /tmp/wp-latest.json | sed ' s/"version":"//' )
44+ if [[ -z " $LATEST_VERSION " ]]; then
45+ echo " Latest WordPress version could not be found"
46+ exit 1
47+ fi
48+ WP_TESTS_TAG=" tags/$LATEST_VERSION "
49+ fi
50+
51+ set -ex
52+
53+ install_wp () {
54+
55+ if [ -d $WP_CORE_DIR ]; then
56+ return ;
57+ fi
58+
59+ mkdir -p $WP_CORE_DIR
60+
61+ if [[ $WP_VERSION == ' nightly' || $WP_VERSION == ' trunk' ]]; then
62+ mkdir -p $TMPDIR /wordpress-nightly
63+ download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR /wordpress-nightly/wordpress-nightly.zip
64+ unzip -q $TMPDIR /wordpress-nightly/wordpress-nightly.zip -d $TMPDIR /wordpress-nightly/
65+ mv $TMPDIR /wordpress-nightly/wordpress/* $WP_CORE_DIR
66+ else
67+ if [ $WP_VERSION == ' latest' ]; then
68+ local ARCHIVE_NAME=' latest'
69+ elif [[ $WP_VERSION =~ [0-9]+\. [0-9]+ ]]; then
70+ # https serves multiple offers, whereas http serves single.
71+ download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR /wp-latest.json
72+ if [[ $WP_VERSION =~ [0-9]+\. [0-9]+\. [0] ]]; then
73+ # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
74+ LATEST_VERSION=${WP_VERSION% ??}
75+ else
76+ # otherwise, scan the releases and get the most up to date minor version of the major release
77+ local VERSION_ESCAPED=` echo $WP_VERSION | sed ' s/\./\\\\./g' `
78+ LATEST_VERSION=$( grep -o ' "version":"' $VERSION_ESCAPED ' [^"]*' $TMPDIR /wp-latest.json | sed ' s/"version":"//' | head -1)
79+ fi
80+ if [[ -z " $LATEST_VERSION " ]]; then
81+ local ARCHIVE_NAME=" wordpress-$WP_VERSION "
82+ else
83+ local ARCHIVE_NAME=" wordpress-$LATEST_VERSION "
84+ fi
85+ else
86+ local ARCHIVE_NAME=" wordpress-$WP_VERSION "
87+ fi
88+ download https://wordpress.org/${ARCHIVE_NAME} .tar.gz $TMPDIR /wordpress.tar.gz
89+ tar --strip-components=1 -zxmf $TMPDIR /wordpress.tar.gz -C $WP_CORE_DIR
90+ fi
91+
92+ download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR /wp-content/db.php
93+ }
94+
95+ install_test_suite () {
96+ # portable in-place argument for both GNU sed and Mac OSX sed
97+ if [[ $( uname -s) == ' Darwin' ]]; then
98+ local ioption=' -i .bak'
99+ else
100+ local ioption=' -i'
101+ fi
102+
103+ # set up testing suite if it doesn't yet exist
104+ if [ ! -d $WP_TESTS_DIR ]; then
105+ # set up testing suite
106+ mkdir -p $WP_TESTS_DIR
107+ svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG} /tests/phpunit/includes/ $WP_TESTS_DIR /includes
108+ svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG} /tests/phpunit/data/ $WP_TESTS_DIR /data
109+ fi
110+
111+ if [ ! -f wp-tests-config.php ]; then
112+ download https://develop.svn.wordpress.org/${WP_TESTS_TAG} /wp-tests-config-sample.php " $WP_TESTS_DIR " /wp-tests-config.php
113+ # remove all forward slashes in the end
114+ WP_CORE_DIR=$( echo $WP_CORE_DIR | sed " s:/\+$::" )
115+ sed $ioption " s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR /':" " $WP_TESTS_DIR " /wp-tests-config.php
116+ sed $ioption " s/youremptytestdbnamehere/$DB_NAME /" " $WP_TESTS_DIR " /wp-tests-config.php
117+ sed $ioption " s/yourusernamehere/$DB_USER /" " $WP_TESTS_DIR " /wp-tests-config.php
118+ sed $ioption " s/yourpasswordhere/$DB_PASS /" " $WP_TESTS_DIR " /wp-tests-config.php
119+ sed $ioption " s|localhost|${DB_HOST} |" " $WP_TESTS_DIR " /wp-tests-config.php
120+ fi
121+
122+ }
123+
124+ install_db () {
125+
126+ if [ ${SKIP_DB_CREATE} = " true" ]; then
127+ return 0
128+ fi
129+
130+ # parse DB_HOST for port or socket references
131+ local PARTS=(${DB_HOST// \: / } )
132+ local DB_HOSTNAME=${PARTS[0]} ;
133+ local DB_SOCK_OR_PORT=${PARTS[1]} ;
134+ local EXTRA=" "
135+
136+ if ! [ -z $DB_HOSTNAME ] ; then
137+ if [ $( echo $DB_SOCK_OR_PORT | grep -e ' ^[0-9]\{1,\}$' ) ]; then
138+ EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp"
139+ elif ! [ -z $DB_SOCK_OR_PORT ] ; then
140+ EXTRA=" --socket=$DB_SOCK_OR_PORT "
141+ elif ! [ -z $DB_HOSTNAME ] ; then
142+ EXTRA=" --host=$DB_HOSTNAME --protocol=tcp"
143+ fi
144+ fi
145+
146+ # create database
147+ mysqladmin create $DB_NAME --user=" $DB_USER " --password=" $DB_PASS " $EXTRA
148+ }
149+
150+ install_wp
151+ install_test_suite
152+ install_db
0 commit comments