-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Install phpunit and required dependencies * Clarify sentence * Remove section that is no longer relevant * Document composer install * Drop table if it exists * Bootstrap phpunit * Install WordPressCS * Set up phpcs * Check PRs with phpcs * Run tests on PRs * Make phpcs pass We'll enable checks as we fix code.
- Loading branch information
Showing
13 changed files
with
2,560 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
name: Coding standards | ||
|
||
on: | ||
pull_request: | ||
types: [ opened, synchronize ] | ||
|
||
jobs: | ||
php: | ||
name: PHP | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Check out repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Install PHP | ||
uses: shivammathur/setup-php@v2 | ||
with: | ||
php-version: '8.3' | ||
coverage: 'none' | ||
tools: composer, cs2pr | ||
|
||
- name: Install dependencies | ||
uses: ramsey/composer-install@v2 | ||
with: | ||
composer-options: "--no-progress --no-ansi --no-interaction" | ||
|
||
- name: Run PHPCS | ||
run: vendor/bin/phpcs -q --report=checkstyle | cs2pr --notices-as-warnings |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
name: Tests | ||
|
||
on: | ||
pull_request: | ||
types: [ opened, synchronize ] | ||
|
||
jobs: | ||
phpunit: | ||
name: PHPUnit | ||
runs-on: ubuntu-latest | ||
|
||
services: | ||
mysql: | ||
image: mysql:5.7 | ||
ports: | ||
- 3306/tcp | ||
env: | ||
MYSQL_ROOT_PASSWORD: password | ||
# Set health checks to wait until mysql has started | ||
options: >- | ||
--health-cmd "mysqladmin ping" | ||
--health-interval 10s | ||
--health-timeout 5s | ||
--health-retries 3 | ||
steps: | ||
- name: Check out Git repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup PHP | ||
uses: shivammathur/setup-php@v2 | ||
with: | ||
php-version: '8.3' | ||
coverage: 'none' | ||
tools: composer | ||
|
||
- name: Install dependencies | ||
uses: ramsey/composer-install@v2 | ||
with: | ||
composer-options: "--no-progress --no-ansi --no-interaction" | ||
|
||
- name: Install WordPress test setup | ||
run: bash bin/install-wp-tests.sh wordpress_test root password 127.0.0.1:${{ job.services.mysql.ports[3306] }} latest | ||
|
||
- name: Setup problem matchers for PHPUnit | ||
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" | ||
|
||
- name: Run tests | ||
run: vendor/bin/phpunit |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
/vendor/ | ||
/node_modules | ||
/node_modules | ||
.phpunit.result.cache |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,181 @@ | ||
#!/usr/bin/env bash | ||
|
||
if [ $# -lt 3 ]; then | ||
echo "usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]" | ||
exit 1 | ||
fi | ||
|
||
DB_NAME=$1 | ||
DB_USER=$2 | ||
DB_PASS=$3 | ||
DB_HOST=${4-localhost} | ||
WP_VERSION=${5-latest} | ||
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_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress} | ||
|
||
download() { | ||
if [ `which curl` ]; then | ||
curl -s "$1" > "$2"; | ||
elif [ `which wget` ]; then | ||
wget -nv -O "$2" "$1" | ||
fi | ||
} | ||
|
||
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 | ||
if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then | ||
# version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x | ||
WP_TESTS_TAG="tags/${WP_VERSION%??}" | ||
else | ||
WP_TESTS_TAG="tags/$WP_VERSION" | ||
fi | ||
elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then | ||
WP_TESTS_TAG="trunk" | ||
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":"//') | ||
if [[ -z "$LATEST_VERSION" ]]; then | ||
echo "Latest WordPress version could not be found" | ||
exit 1 | ||
fi | ||
WP_TESTS_TAG="tags/$LATEST_VERSION" | ||
fi | ||
set -ex | ||
|
||
install_wp() { | ||
|
||
if [ -d $WP_CORE_DIR ]; then | ||
return; | ||
fi | ||
|
||
mkdir -p $WP_CORE_DIR | ||
|
||
if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then | ||
mkdir -p $TMPDIR/wordpress-trunk | ||
rm -rf $TMPDIR/wordpress-trunk/* | ||
svn export --quiet https://core.svn.wordpress.org/trunk $TMPDIR/wordpress-trunk/wordpress | ||
mv $TMPDIR/wordpress-trunk/wordpress/* $WP_CORE_DIR | ||
else | ||
if [ $WP_VERSION == 'latest' ]; then | ||
local ARCHIVE_NAME='latest' | ||
elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+ ]]; then | ||
# https serves multiple offers, whereas http serves single. | ||
download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json | ||
if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then | ||
# version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x | ||
LATEST_VERSION=${WP_VERSION%??} | ||
else | ||
# otherwise, scan the releases and get the most up to date minor version of the major release | ||
local VERSION_ESCAPED=`echo $WP_VERSION | sed 's/\./\\\\./g'` | ||
LATEST_VERSION=$(grep -o '"version":"'$VERSION_ESCAPED'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1) | ||
fi | ||
if [[ -z "$LATEST_VERSION" ]]; then | ||
local ARCHIVE_NAME="wordpress-$WP_VERSION" | ||
else | ||
local ARCHIVE_NAME="wordpress-$LATEST_VERSION" | ||
fi | ||
else | ||
local ARCHIVE_NAME="wordpress-$WP_VERSION" | ||
fi | ||
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 | ||
} | ||
|
||
install_test_suite() { | ||
# portable in-place argument for both GNU sed and Mac OSX sed | ||
if [[ $(uname -s) == 'Darwin' ]]; then | ||
local ioption='-i.bak' | ||
else | ||
local ioption='-i' | ||
fi | ||
|
||
# set up testing suite if it doesn't yet exist | ||
if [ ! -d $WP_TESTS_DIR ]; then | ||
# set up testing suite | ||
mkdir -p $WP_TESTS_DIR | ||
rm -rf $WP_TESTS_DIR/{includes,data} | ||
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 | ||
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 | ||
# 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 | ||
fi | ||
|
||
} | ||
|
||
recreate_db() { | ||
shopt -s nocasematch | ||
if [[ $1 =~ ^(y|yes)$ ]] | ||
then | ||
mysqladmin drop $DB_NAME -f --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
create_db | ||
echo "Recreated the database ($DB_NAME)." | ||
else | ||
echo "Leaving the existing database ($DB_NAME) in place." | ||
fi | ||
shopt -u nocasematch | ||
} | ||
|
||
create_db() { | ||
mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA | ||
} | ||
|
||
install_db() { | ||
|
||
if [ ${SKIP_DB_CREATE} = "true" ]; then | ||
return 0 | ||
fi | ||
|
||
# parse DB_HOST for port or socket references | ||
local PARTS=(${DB_HOST//\:/ }) | ||
local DB_HOSTNAME=${PARTS[0]}; | ||
local DB_SOCK_OR_PORT=${PARTS[1]}; | ||
local EXTRA="" | ||
|
||
if ! [ -z $DB_HOSTNAME ] ; then | ||
if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then | ||
EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" | ||
elif ! [ -z $DB_SOCK_OR_PORT ] ; then | ||
EXTRA=" --socket=$DB_SOCK_OR_PORT" | ||
elif ! [ -z $DB_HOSTNAME ] ; then | ||
EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" | ||
fi | ||
fi | ||
|
||
# create database | ||
if [ $(mysql --user="$DB_USER" --password="$DB_PASS"$EXTRA --execute='show databases;' | grep ^$DB_NAME$) ] | ||
then | ||
echo "Reinstalling will delete the existing test database ($DB_NAME)" | ||
read -p 'Are you sure you want to proceed? [y/N]: ' DELETE_EXISTING_DB | ||
recreate_db $DELETE_EXISTING_DB | ||
else | ||
create_db | ||
fi | ||
} | ||
|
||
install_wp | ||
install_test_suite | ||
install_db |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/usr/bin/env bash | ||
|
||
# This is only for use in development environments, it's not used in CI. | ||
# You can call this with: composer dev:test | ||
|
||
set -ex | ||
|
||
wp-env run tests-cli --env-cwd=wp-content/plugins/wporg-gp-translation-events sh -c 'wp db query < schema.sql' | ||
wp-env run tests-cli --env-cwd=wp-content/plugins/wporg-gp-translation-events ./vendor/bin/phpunit |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.