Skip to content

Commit

Permalink
feat: reusable tests workflow (#76)
Browse files Browse the repository at this point in the history
  • Loading branch information
arzola authored May 16, 2024
1 parent c382556 commit 33db299
Show file tree
Hide file tree
Showing 11 changed files with 261 additions and 67 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,28 @@
name: Trigger Bedrock Updates 🚀
name: Run Tests 🧪

on:
push:
branches: [ dev ]
branches:
- dev
pull_request:
branches:
- dev
workflow_dispatch:

jobs:
plugin-tests:
uses: pressbooks/reusable-workflows/.github/workflows/pb-plugin-tests.yml@test-tag-release
secrets: inherit
with:
requires_pressbooks: true
use_mariadb: true
requires_private_repo: 'pressbooks-lti-provider-1p3'
trigger_bedrock_updates:
needs: plugin-tests
runs-on: ubuntu-latest
steps:
- name: Trigger Bedrock Updates
if: github.ref == 'refs/heads/dev'
uses: pressbooks/composer-autoupdate-bedrock@chore/add-tag-in-sns-message
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
Expand All @@ -17,3 +31,5 @@ jobs:
AWS_SNS_ARN_STAGING: ${{ secrets.AWS_SNS_ARN_STAGING }}
INPUT_TRIGGERED_BY: ${{ github.repository }}
REF: ${{ github.ref }}


33 changes: 9 additions & 24 deletions .github/workflows/update-pot.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Update POT file
name: Update .pot file

on:
push:
Expand All @@ -10,26 +10,11 @@ on:
workflow_dispatch:

jobs:
update-pot:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.PAT_FOR_GITHUB_ACTIONS }}
- name: Setup PHP with tools
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
tools: composer, wp-cli/wp-cli-bundle
- name: Update POT file
run: wp i18n make-pot . languages/fake-plugin.pot --domain=pressbooks-fake-plugin --slug=fake-plugin --package-name="Fake Plugin" --headers="{\"Report-Msgid-Bugs-To\":\"https://github.com/pressbooks/pressbooks/issues\"}"
- name: Create Pull Request for POT file
id: cprpot
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.PAT_FOR_GITHUB_ACTIONS }}
labels: automerge-pot
commit-message: 'chore(l10n): update pot file'
title: 'chore(l10n): update pot file'
body: 'Update the POT file for this plugin.'
branch: chore/update-pot-file
update-pot-file:
uses: pressbooks/reusable-workflows/.github/workflows/update-pot.yml@test-tag-release
secrets: inherit
with:
domain: 'pressbooks-fake-plugin'
slug: 'pressbooks-fake-plugin'
package_name: 'Pressbooks Fake Plugin'
headers: '{"Report-Msgid-Bugs-To": "https://github.com/pressbooks/fake-plugin/issues"}'
125 changes: 125 additions & 0 deletions bin/install-wp-tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
#!/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}

WP_TESTS_DIR=${WP_TESTS_DIR-/tmp/wordpress-tests-lib}
WP_CORE_DIR=${WP_CORE_DIR-/tmp/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]+(\.[0-9]+)? ]]; then
WP_TESTS_TAG="tags/$WP_VERSION"
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 /tmp/wordpress-nightly
download https://wordpress.org/nightly-builds/wordpress-latest.zip /tmp/wordpress-nightly/wordpress-nightly.zip
unzip -q /tmp/wordpress-nightly/wordpress-nightly.zip -d /tmp/wordpress-nightly/
mv /tmp/wordpress-nightly/wordpress/* $WP_CORE_DIR
else
if [ $WP_VERSION == 'latest' ]; then
local ARCHIVE_NAME='latest'
else
local ARCHIVE_NAME="wordpress-$WP_VERSION"
fi
download https://wordpress.org/${ARCHIVE_NAME}.tar.gz /tmp/wordpress.tar.gz
tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR
fi

download https://raw.github.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
svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes
svn co --quiet 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/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

}

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
mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA
}

install_wp
install_test_suite
install_db
65 changes: 44 additions & 21 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,46 @@
{
"name": "pressbooks/fake-plugin",
"description": "Fake plugin",
"type": "library",
"autoload": {
"psr-4": {
"Pressbooks\\FakePlugin\\": "src/"
}
},
"authors": [
{
"name": "arzola",
"email": "[email protected]"
},
{
"name": "ho-man-chan",
"email": "[email protected]"
}
],
"require": {
"ext-gettext": "*"
}
"name": "pressbooks/fake-plugin",
"description": "Fake plugin",
"type": "library",
"autoload": {
"psr-4": {
"Pressbooks\\FakePlugin\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"authors": [
{
"name": "arzola",
"email": "[email protected]"
},
{
"name": "ho-man-chan",
"email": "[email protected]"
}
],
"require": {
"ext-gettext": "*"
},
"scripts": {
"fix": [
"vendor/bin/pint"
],
"standards": [
"vendor/bin/pint --test"
],
"test": [
"vendor/bin/phpunit --configuration phpunit.xml"
],
"test-coverage": [
"vendor/bin/phpunit --configuration phpunit.xml --coverage-clover coverage.xml --coverage-html=./coverage-reports"
]
},
"require-dev": {
"laravel/pint": "^1.15",
"yoast/phpunit-polyfills": "^1.0.5"
}
}
18 changes: 0 additions & 18 deletions composer.lock

This file was deleted.

25 changes: 25 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0"?>
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="tests/bootstrap.php"
colors="true"
backupGlobals="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./src</directory>
</include>
</coverage>
<testsuites>
<testsuite name="Pressbooks">
<directory suffix="Test.php">./tests/</directory>
</testsuite>
</testsuites>
<php>
<const name="WP_TESTS_MULTISITE" value="1"/>
</php>
</phpunit>
13 changes: 13 additions & 0 deletions pint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"preset": "psr12",
"rules": {
"simplified_null_return": true,
"new_with_braces": {
"anonymous_class": false,
"named_class": false
}
},
"exclude": [
"wp-content"
]
}
2 changes: 1 addition & 1 deletion src/App.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public function __toString()
return __('Hello, world!', 'pressbooks-fake-plugin');
}

public function hi()
public function hi()
{
return __('Hello, bye!', 'pressbooks-fake-plugin');
}
Expand Down
2 changes: 1 addition & 1 deletion src/compatibility.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

// x-release-please-start-version
const pluginVersion = '1.8.1';
// x-release-please-end
// x-release-please-end
13 changes: 13 additions & 0 deletions tests/FakeTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Tests;

use PHPUnit\Framework\TestCase;

class FakeTest extends TestCase
{
public function testFake()
{
$this->assertTrue(true);
}
}
12 changes: 12 additions & 0 deletions tests/bootstrap.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php


require_once dirname(__DIR__).'/vendor/autoload.php';

$tests_dir = getenv('WP_TESTS_DIR');
if (! $tests_dir) {
$tests_dir = '/tmp/wordpress-tests-lib';
}

require_once "{$tests_dir}/includes/functions.php";
require_once "{$tests_dir}/includes/bootstrap.php";

0 comments on commit 33db299

Please sign in to comment.