Skip to content

Commit

Permalink
Added a CI job for WPCloud testing of wpcomsh. (#39258)
Browse files Browse the repository at this point in the history
* Added a CI job for WPCloud testing of wpcomsh.

* Add pnpm and install.

* Testing WPCloud on a new test site for jetpackisbestpack.

* Temporarily marking wpcomsh as always changed.

* Added transferring of tests.

* Added DB password slash escaping.

* changelog

* Added a mock for get_option_and_ensure_autoload.

* Added a missing cache expulsion function.

* Removed set -x from test installer.

* Using pnpm to not bother with linking binaries.

* Added a build step.

* Created a separate job to avoid re-building on a re-run, h/t @anomiex.

* Added cache saving and restoring, moved if to parent job.

* Added the before file.

* Trying with  instead of .

* Fixing var schema.

* Fixed the user string in SSH connection.

* Trying to create an SSH config file.

* Fixed the SSH key file name.

* Making sure to use the preset configured host.

* Moved the polyfill load to after WordPress loading.

* Removed polyfills.

* Removed null coalescing and added a short ternary.

* Removed the change detector prop.

* Added concurrency settings to make sure there can be only one.

* Added updating of source files and cleanup after that updating.

* Update .github/workflows/wpcloud.yml

Co-authored-by: Brad Jorsch <[email protected]>

* Update .github/workflows/wpcloud.yml

Co-authored-by: Brad Jorsch <[email protected]>

---------

Co-authored-by: Brad Jorsch <[email protected]>
  • Loading branch information
zinigor and anomiex authored Jan 21, 2025
1 parent ad9b2bc commit aa290bb
Show file tree
Hide file tree
Showing 5 changed files with 169 additions and 6 deletions.
144 changes: 144 additions & 0 deletions .github/workflows/wpcloud.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: WPCloud Unit Testing for WPCOMSH

on:
pull_request:
push:
branches: ['trunk', '*/branch-*']
concurrency:
group: wpcloud-wpcomsh
cancel-in-progress: false
# Concurrency is set up to make sure we can only run one WPCloud testing job at the same time.

jobs:
build:
name: Install the Monorepo and build wpcomsh
runs-on: ubuntu-latest
outputs:
wpcomsh: ${{ steps.changed.outputs.wpcomsh }}
steps:
- uses: actions/checkout@v4

# For pull requests, list-changed-projects.sh needs the merge base.
# But it doesn't have to be checked out.
- name: Deepen to merge base
if: github.event_name == 'pull_request'
uses: ./.github/actions/deepen-to-merge-base
with:
checkout: false

- name: Setup tools
uses: ./.github/actions/tool-setup
- name: Monorepo install
run: |
echo "::group::Pnpm"
pnpm install
echo "::endgroup::"
- name: Detect if wpcomsh has changed
id: changed
run: |
CHANGED="$(EXTRA=test .github/files/list-changed-projects.sh)"
WPCOMSH_CHANGED="$(jq --argjson changed "$CHANGED" -n '$changed | has( "plugins/wpcomsh" ) ')"
echo "wpcomsh=${WPCOMSH_CHANGED}" >> "$GITHUB_OUTPUT"
- name: Build wpcomsh
if: steps.changed.outputs.wpcomsh == 'true'
run: |
find . -path ./.github -prune -o -type f -print | sort > /tmp/before.txt
echo "::group::Installing and building wpcomsh"
pnpm jetpack build -v --deps plugins/wpcomsh
echo "::endgroup::"
# We only want to save the files that were actually created or changed.
# But we can't just list them for actions/cache/save, "Argument list too long".
# So instead we delete all the unchanged files so we can tell actions/cache/save
# to save everything that's left.
git -c core.quotepath=off diff --name-only | sort > /tmp/changed.txt
if [[ -s /tmp/changed.txt ]]; then
grep -F -x -v -f /tmp/changed.txt /tmp/before.txt > /tmp/remove.txt
else
cp /tmp/before.txt /tmp/remove.txt
fi
xargs -d '\n' rm < /tmp/remove.txt
find . -type d -empty -delete
- name: Save wpcomsh build cache
if: steps.changed.outputs.wpcomsh == 'true'
id: wpcomsh-build-cache-save
uses: actions/cache/save@v4
with:
path: |
.
!./.github/
key: ${{ github.sha }}
deploy:
name: Run PHPUnit on the WPCloud test site
runs-on: ubuntu-latest
needs: build
if: needs.build.outputs.wpcomsh == 'true'
steps:
- uses: actions/checkout@v4

- name: Restore wpcomsh build cache
id: wpcomsh-build-cache
uses: actions/cache/restore@v4
with:
path: |
.
!./.github/
key: ${{ github.sha }}
fail-on-cache-miss: true

- name: Setup tools
uses: ./.github/actions/tool-setup

- name: Install monorepo
run: |
pnpm install
- name: Configure Github to be able to SSH to the Atomic site
run: |
echo "::group::Intializing"
mkdir -vp ~/.ssh/
chmod -v 700 ~/.ssh
touch ~/.ssh/id_site
touch ~/.ssh/known_hosts
touch ~/.ssh/config
chmod 600 ~/.ssh/id_site
chmod 600 ~/.ssh/known_hosts
chmod 600 ~/.ssh/config
echo "$SSH_KEY" > ~/.ssh/id_site
echo "wrote ~/.ssh/id_site"
echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
echo "wrote ~/.ssh/known_hosts"
echo "Host jpwpcomsh" > ~/.ssh/config
echo " Hostname sftp.wp.com" >> ~/.ssh/config
echo " User wpcom-jetpackisbestpack-default-237778992" >> ~/.ssh/config
echo " IdentityFile ~/.ssh/id_site" >> ~/.ssh/config
echo " IdentitiesOnly yes" >> ~/.ssh/config
echo "::endgroup::"
echo "::group::Transferring wpcomsh to the testing server"
ssh jpwpcomsh "wp dereferenced freshen > /dev/null 2>&1"
ssh jpwpcomsh "rm -rf /tmp/old-* > /dev/null 2>&1"
pnpm jetpack rsync wpcomsh jpwpcomsh:~/htdocs/wp-content/mu-plugins
scp -r projects/plugins/wpcomsh/bin jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh
scp -r projects/plugins/wpcomsh/tests jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh/
scp projects/plugins/wpcomsh/phpunit.xml.dist jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh/
echo "::engroup::"
echo "::group::execution"
ssh jpwpcomsh "~/htdocs/github-action-handler.sh" || CODE=$?
echo "::endgroup::"
echo "::group::teardown"
rm -rvf ~/.ssh/
echo "::endgroup::"
echo "Exiting with exit code $CODE"
exit $CODE
env:
SSH_KEY: ${{ secrets.UPDATEJETPACKSTAGING_SSH_KEY }}
SSH_KNOWN_HOSTS: ${{ secrets.UPDATEJETPACKSTAGING_SSH_KNOWN_HOSTS }}
4 changes: 2 additions & 2 deletions projects/plugins/wpcomsh/bin/install-wp-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ else
fi
WP_TESTS_TAG="tags/$LATEST_VERSION"
fi
set -ex
set -e

install_wp() {

Expand Down Expand Up @@ -118,7 +118,7 @@ install_test_suite() {
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/yourpasswordhere/${DB_PASS//\//\\/}/" "$WP_TESTS_DIR"/wp-tests-config.php
sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php
fi

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Significance: patch
Type: fixed

Fixed a database password escaping issue when installing tests.
10 changes: 6 additions & 4 deletions projects/plugins/wpcomsh/tests/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
* @package wpcomsh
*/

$_tests_dir = getenv( 'WP_TESTS_DIR' );
$_core_dir = getenv( 'WP_CORE_DIR' );
$wp_branch = getenv( 'WP_BRANCH' );
$_tests_dir = getenv( 'WP_TESTS_DIR' );
$_core_dir = getenv( 'WP_CORE_DIR' );
$_wp_content_dir = getenv( 'WP_CONTENT_DIR' ) ?: $_core_dir; // phpcs:ignore Universal.Operators
$wp_branch = getenv( 'WP_BRANCH' );

if ( ! $_tests_dir ) {
if ( $wp_branch ) {
Expand All @@ -26,7 +27,7 @@
}

define( 'IS_ATOMIC', true );
define( 'WPMU_PLUGIN_DIR', "{$_core_dir}wp-content/mu-plugins" );
define( 'WPMU_PLUGIN_DIR', "{$_wp_content_dir}/mu-plugins" );

if ( ! file_exists( $_tests_dir . '/includes/functions.php' ) ) {
echo "Could not find $_tests_dir/includes/functions.php, have you run bin/install-wp-tests.sh ?" . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
Expand All @@ -46,6 +47,7 @@
* Manually load the plugin being tested.
*/
function _manually_load_plugin() {

if ( file_exists( WPMU_PLUGIN_DIR . '/wpcomsh-loader.php' ) ) {
return;
}
Expand Down
13 changes: 13 additions & 0 deletions projects/plugins/wpcomsh/tests/lib/mocks/class-jetpack-options.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,18 @@ class Jetpack_Options {
public static function get_option( $option_name, $default = false ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.defaultFound
return apply_filters( 'jetpack_options', get_option( $option_name, $default ), $option_name );
}

/**
* Returns the requested option, and ensures it's autoloaded in the future.
* This does _not_ adjust the prefix in any way (does not prefix jetpack_%)
*
* @param string $name Option name.
* @param mixed $default (optional).
*
* @return mixed
*/
public static function get_option_and_ensure_autoload( $name, $default ) {
return self::get_option( $name, $default );
}
}
}

0 comments on commit aa290bb

Please sign in to comment.