Skip to content

Forms: add new integration list component #19054

Forms: add new integration list component

Forms: add new integration list component #19054

Workflow file for this run

name: WP Cloud 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 WP Cloud testing job at the same time.
jobs:
build:
name: Install the Monorepo and build wpcomsh
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name
outputs:
wpcomsh: ${{ steps.changed.outputs.wpcomsh }}
steps:
- uses: actions/checkout@v5
# 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
with:
# Match PHP version on WP Cloud so the right vendor packages get installed.
php: 8.1
- 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"
rm projects/plugins/wpcomsh/composer.lock
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 WP Cloud test site
runs-on: ubuntu-latest
needs: build
if: needs.build.outputs.wpcomsh == 'true'
steps:
- uses: actions/checkout@v5
- 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 WP Cloud site
run: |
echo "::group::Initializing"
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"
# This can give errors if the previous state was broken, so ignore them
ssh jpwpcomsh "wp --skip-plugins --skip-themes dereferenced freshen > /dev/null 2>&1" || echo "wp dereferenced freshen has exited with code $?"
ssh jpwpcomsh "rm -rf /tmp/old-* > /dev/null 2>&1"
pnpm jetpack rsync --non-interactive wpcomsh jpwpcomsh:/srv/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/
echo "::endgroup::"
# Do a basic check to verify the site is loading
echo "::group::Verify things load"
CODE=0
SITE_URL=$(ssh jpwpcomsh "wp option get siteurl" 2>/dev/null) || CODE=$?
if [[ $CODE -ne 0 ]]; then
echo 'Unable to run a basic `wp` command! Something is wrong with the site.'
elif [[ ! "$SITE_URL" =~ ^https?://[a-z0-9_.-]+$ ]]; then
echo 'Site URL retrieved does not seem to be a URL.'
CODE=1
else
echo 'No issues using a simple command in WP-CLI.'
curl -s --fail "$SITE_URL" > /dev/null || CODE=$?
if [[ $CODE -ne 0 ]]; then
echo 'Unable to load site! Something is wrong with the site.'
else
echo 'No issues slurping site with `curl`.'
fi
fi
echo "::endgroup::"
# Proceed with tests if all seems well
if [[ $CODE -eq 0 ]]; then
echo "::group::Run PHPUnit tests"
# The test on WP Cloud won't use `phpunit-select-config`, so select config manually.
scp projects/plugins/wpcomsh/phpunit.9.xml.dist jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh/phpunit.xml.dist
ssh jpwpcomsh "/srv/htdocs/wp-content/mu-plugins/wpcomsh/bin/run-phpunit-tests.sh" || CODE=$?
echo "::endgroup::"
fi
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 }}