Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
bf7b074
fix: accept an empty database password when setting up the phpunit suite
lightbulbman Sep 5, 2026
7075525
fix: quote the paths used when installing the wordpress test suite
lightbulbman Sep 5, 2026
fd996e3
feat: add a setting for the feedback reporter
lightbulbman Sep 5, 2026
d7e9d4e
feat: add system information capture for feedback reports
lightbulbman Sep 5, 2026
69f5c53
feat: add the feedback cloud connection
lightbulbman Sep 5, 2026
7bcfb68
feat: add the feedback cloud client
lightbulbman Sep 5, 2026
292b2a4
feat: add the feedback reporter admin panel
lightbulbman Sep 5, 2026
e622773
feat: add the feedback reporter rest endpoints
lightbulbman Sep 5, 2026
0ffd15a
feat: add feedback reporter styles
lightbulbman Sep 5, 2026
9894dff
feat: add the feedback reporter panel
lightbulbman Sep 5, 2026
68000b4
feat: add end-to-end coverage for the feedback reporter
lightbulbman Sep 5, 2026
892b830
fix: collect the feedback environment summary once rather than on eve…
lightbulbman Sep 5, 2026
1e3e372
fix: pin the feedback drawer header and buttons and slide it in from …
lightbulbman Sep 5, 2026
cdd853b
chore: allow the playwright base url to be overridden
lightbulbman Sep 5, 2026
5f3ad62
fix: report why the feedback service could not be reached
lightbulbman Sep 5, 2026
5f2e901
fix: build the feedback search url so it works with plain permalinks
lightbulbman Sep 5, 2026
afc6a16
fix: send feedback reports to the reporting service regardless of the…
lightbulbman Sep 5, 2026
29d3d36
fix: address review findings on the feedback reporter
lightbulbman Sep 5, 2026
c962284
Merge branch 'core-beta' into feat/feedback-reporter/core
lightbulbman Sep 5, 2026
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
9 changes: 8 additions & 1 deletion config/playwright/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ const ASSERT_TIMEOUT_SECONDS = 30

const MILLISECONDS_IN_SECOND = 1000

// Overridable so the suite can be pointed at a second environment, which wp-env gives a
// different port when one is already running. An empty value is treated as unset: Playwright
// resolves relative paths against baseURL, and an empty base cannot be resolved against.
const DEFAULT_BASE_URL = 'http://localhost:8888'
const configuredBaseUrl = process.env.WP_E2E_BASE_URL?.trim() ?? ''
const baseURL = '' === configuredBaseUrl ? DEFAULT_BASE_URL : configuredBaseUrl

const baseTestsDir = join(__dirname, '..', '..', 'tests')
const storageState = join(baseTestsDir, 'e2e/.auth/user.json')
const rtlSpecs = /rtl-layout\.spec\.ts/
Expand Down Expand Up @@ -40,7 +47,7 @@ export default defineConfig({
['junit', { outputFile: join(process.cwd(), 'test-results', 'results.xml') }]
],
use: {
baseURL: 'http://localhost:8888',
baseURL,
trace: 'retain-on-failure',
screenshot: 'only-on-failure',
video: 'retain-on-failure'
Expand Down
2 changes: 2 additions & 0 deletions config/webpack/webpack-js.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ export const jsWebpackConfig: Configuration = {
'admin-bar': `${SOURCE_DIR}/admin-bar.ts`,
'edit': { import: `${SOURCE_DIR}/edit.ts`, dependOn: 'editor' },
'editor': `${SOURCE_DIR}/editor.ts`,
'feedback': `${SOURCE_DIR}/feedback.ts`,
'feedback-capture': `${SOURCE_DIR}/feedback-capture.ts`,
'import': `${SOURCE_DIR}/import.ts`,
'insights': `${SOURCE_DIR}/insights.ts`,
'manage': `${SOURCE_DIR}/manage.ts`,
Expand Down
41 changes: 22 additions & 19 deletions scripts/install-wp-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ WP_VERSION=${5-latest}
SKIP_DB_CREATE=${6-false}

TMPDIR=${TMPDIR-/tmp}
TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//")
TMPDIR=$(echo "$TMPDIR" | sed -e "s/\/$//")
WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib}
WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress/}

Expand Down Expand Up @@ -42,33 +42,33 @@ set -ex

install_wp() {

if [ -d $WP_CORE_DIR ]; then
if [ -d "$WP_CORE_DIR" ]; then
return;
fi

mkdir -p $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/*
svn export --quiet https://core.svn.wordpress.org/trunk $TMPDIR/wordpress-trunk/wordpress
mv $TMPDIR/wordpress-trunk/wordpress/* $WP_CORE_DIR
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://wordpress.org/wordpress-$WP_VERSION.tar.gz $TMPDIR/wordpress.tar.gz
download "https://wordpress.org/wordpress-$WP_VERSION.tar.gz" "$TMPDIR/wordpress.tar.gz"
ARCHIVE_NAME="wordpress-$WP_VERSION"
fi

if [ ! -f $TMPDIR/wordpress.tar.gz ]; then
download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz
if [ ! -f "$TMPDIR/wordpress.tar.gz" ]; then
download "https://wordpress.org/${ARCHIVE_NAME}.tar.gz" "$TMPDIR/wordpress.tar.gz"
fi
tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR
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
download https://raw.githubusercontent.com/markoheijnen/wp-mysqli/master/db.php "$WP_CORE_DIR/wp-content/db.php"
}

install_test_suite() {
Expand All @@ -80,11 +80,11 @@ install_test_suite() {
fi

# set up testing suite if it doesn't yet exist
if [ ! -d $WP_TESTS_DIR ]; then
if [ ! -d "$WP_TESTS_DIR" ]; then
local WP_TESTS_VERSION="${WP_TESTS_TAG#tags/}"
case "$WP_TESTS_VERSION" in *.*.*) ;; *.*) WP_TESTS_VERSION="$WP_TESTS_VERSION.0" ;; esac
mkdir -p $WP_TESTS_DIR
rm -rf $WP_TESTS_DIR/{includes,data}
mkdir -p "$WP_TESTS_DIR"
rm -rf "$WP_TESTS_DIR"/{includes,data}
download "https://github.com/WordPress/wordpress-develop/archive/refs/tags/${WP_TESTS_VERSION}.tar.gz" "$TMPDIR/wp-develop.tar.gz"
rm -rf "$TMPDIR/wp-develop"
mkdir -p "$TMPDIR/wp-develop"
Expand All @@ -94,12 +94,15 @@ install_test_suite() {
fi

if [ ! -f "$WP_TESTS_DIR/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
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:/\+$::")
WP_CORE_DIR=$(echo "$WP_CORE_DIR" | sed "s:/\+$::")
# sed reads '&' and '\' in the replacement as syntax, so a path containing either
# would be written to the config mangled.
WP_CORE_DIR_ESCAPED=$(printf '%s' "$WP_CORE_DIR" | sed -e 's:[\\&]:\\&:g')
# Support both older (/src/) and current (/wordpress/) sample config templates.
sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php
sed $ioption "s:dirname( __FILE__ ) . '/wordpress/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php
sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR_ESCAPED/':" "$WP_TESTS_DIR"/wp-tests-config.php
sed $ioption "s:dirname( __FILE__ ) . '/wordpress/':'$WP_CORE_DIR_ESCAPED/':" "$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
Expand Down
4 changes: 3 additions & 1 deletion scripts/test-setup-phpunit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ const initialiseDatabase = (): DatabaseOptions => {
assertSafeIdentifier(db.schema, 'WP_PHPUNIT_DB_NAME')
assertSafeIdentifier(db.user, 'WP_PHPUNIT_DB_USER')
assertSimpleString(db.host, 'WP_PHPUNIT_DB_HOST')
assertSimpleString(db.password, 'WP_PHPUNIT_DB_PASS')
if ('' !== db.password) {
assertSimpleString(db.password, 'WP_PHPUNIT_DB_PASS')
}

const useDbSocket = 'true' === (process.env.WP_PHPUNIT_DB_USE_SOCKET ?? 'false').toLowerCase()

Expand Down
Loading
Loading