Skip to content

[SITE-1547] Add catalog-info.yml #188

[SITE-1547] Add catalog-info.yml

[SITE-1547] Add catalog-info.yml #188

Workflow file for this run

name: WordPress Composer Playwright Tests
on:
pull_request:
paths-ignore:
- '.github/workflows/ci.yml'
- '.github/workflows/composer-diff.yml'
- '.github/workflows/phpcbf.yml'
- '.github/workflows/sage-test.yml'
- '.github/workflows/sync-default.yml'
- '.github/tests/*.bats'
- 'private/scripts/**'
- 'devops/**'
- 'docs/**'
- '*.md'
- 'phpcs.yml'
- 'wp-cli.yml'
- '.lando.upstream.yml'
- 'CODEOWNERS'
- '.editorconfig'
types:
- opened
- reopened
- synchronize
- ready_for_review
permissions:
contents: write
actions: read
jobs:
playwright-single:
name: Single site
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Wait for status artifacts
env:
GH_TOKEN: ${{ github.token }}
run: |
max_attempts=10
delay_seconds=30
attempt=0
success=0
status=0
echo "Checking for status artifacts..."
while [ $attempt -lt $max_attempts ]; do
# Attempt to download the artifacts.
gh run download -n status-8.1-${{ github.sha }} || true
gh run download -n status-8.2-${{ github.sha }} || true
gh run download -n status-8.3-${{ github.sha }} || true
if [ -f status-8.1-${{ github.sha }}.txt ] && [ -f status-8.2-${{ github.sha }}.txt ] && [ -f status-8.3-${{ github.sha }}.txt ]; then
success=1
break
else
echo "Status files not found. Sleeping for $delay_seconds seconds..."
sleep $delay_seconds
fi
attempt=$(( attempt + 1 ))
done
if [ $success -eq 0 ]; then
echo "Timed out waiting for status artifacts."
exit 1
fi
for file in status-*.txt; do
status=$(cat $file)
if [ $status -eq 1 ]; then
echo "status=$status" >> $GITHUB_ENV
exit 1
fi
done
echo "Linting tests passed. Proceeding with Playwright tests. ✅"
echo "status=$status" >> $GITHUB_ENV
- name: Linting failed
if: env.status == '1'
run: |
echo "One or more jobs in a previous workflow failed. Exiting."
exit 1
- name: Get last commit message
env:
GH_TOKEN: ${{ github.token }}
run: |
cd ${{ github.workspace }}/
PR_NUMBER=$(echo ${{ github.event.pull_request.number }})
COMMIT_MSG=$(gh pr view $PR_NUMBER --json commits --jq '.commits[-1] | "\(.messageHeadline) \(.messageBody)"')
# Remove newlines and carriage returns
CLEAN_COMMIT_MSG=$(echo "$COMMIT_MSG" | tr -d '\n' | tr -d '\r')
# Replace newlines and carriage returns with spaces
CLEAN_COMMIT_MSG=$(echo "$COMMIT_MSG" | tr '\n\r' ' ')
# Remove single quotes
CLEAN_COMMIT_MSG=$(echo "$CLEAN_COMMIT_MSG" | sed "s/'//g")
echo "Cleaned commit message: ${CLEAN_COMMIT_MSG}"
echo "COMMIT_MSG=${CLEAN_COMMIT_MSG}" >> $GITHUB_ENV
- name: Set up env variables
run: |
SITE_NAME="WordPress (Composer Managed) Single Site Test"
SITE_URL="https://dev-wpcm-playwright-tests.pantheonsite.io"
echo "Site name: $SITE_NAME"
echo "Site url: $SITE_URL"
echo "SITE_NAME=$SITE_NAME" >> $GITHUB_ENV
echo "SITE_URL=$SITE_URL" >> $GITHUB_ENV
- name: Install SSH keys
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Validate Pantheon Host Key
shell: bash
run: |
echo "Host *.drush.in HostKeyAlgorithms +ssh-rsa" >> ~/.ssh/config
echo "Host *.drush.in PubkeyAcceptedKeyTypes +ssh-rsa" >> ~/.ssh/config
echo "StrictHostKeyChecking no" >> ~/.ssh/config
- name: Get latest Terminus release
uses: pantheon-systems/terminus-github-actions@v1
with:
pantheon-machine-token: ${{ secrets.TERMINUS_TOKEN }}
- name: Install dependencies
run: |
echo "Install Composer dependencies"
composer update --no-progress --prefer-dist --optimize-autoloader
echo "Install NPM dependencies"
npm install
echo "Install Playwright Browsers"
npx playwright install --with-deps
- name: Setup Single Site Tests
env:
SITE_ID: wpcm-playwright-tests
SITE_NAME: ${{ env.SITE_NAME }}
SITE_URL: ${{ env.SITE_URL }}
TYPE: single
TERMINUS_TOKEN: ${{ secrets.TERMINUS_TOKEN }}
COMMIT_MSG: ${{ env.COMMIT_MSG }}
WORKSPACE: ${{ github.workspace }}
run: bash ${{ github.workspace }}/devops/scripts/setup-playwright-tests.sh
- name: Run Playwright tests
env:
SITE_NAME: ${{ env.SITE_NAME }}
SITE_URL: ${{ env.SITE_URL }}
run: npm run test .github/tests/wpcm.spec.ts
- name: Delete Site
if: success()
shell: bash
run: terminus site:delete wpcm-playwright-tests -y
playwright-subdir:
name: Subdirectory multisite
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Wait for status artifacts
env:
GH_TOKEN: ${{ github.token }}
run: |
max_attempts=10
delay_seconds=30
attempt=0
success=0
status=0
echo "Checking for status artifacts..."
while [ $attempt -lt $max_attempts ]; do
# Attempt to download the artifacts.
gh run download -n status-8.1-${{ github.sha }} || true
gh run download -n status-8.2-${{ github.sha }} || true
gh run download -n status-8.3-${{ github.sha }} || true
if [ -f status-8.1-${{ github.sha }}.txt ] && [ -f status-8.2-${{ github.sha }}.txt ] && [ -f status-8.3-${{ github.sha }}.txt ]; then
success=1
break
else
echo "Status files not found. Sleeping for $delay_seconds seconds..."
sleep $delay_seconds
fi
attempt=$(( attempt + 1 ))
done
if [ $success -eq 0 ]; then
echo "Timed out waiting for status artifacts."
exit 1
fi
for file in status-*.txt; do
status=$(cat $file)
if [ $status -eq 1 ]; then
echo "status=$status" >> $GITHUB_ENV
exit 1
fi
done
echo "status=$status" >> $GITHUB_ENV
- name: Linting failed
if: env.status == '1'
run: |
echo "One or more jobs in a previous workflow failed. Exiting."
exit 1
- name: Get last commit message
env:
GH_TOKEN: ${{ github.token }}
run: |
cd ${{ github.workspace }}/
PR_NUMBER=$(echo ${{ github.event.pull_request.number }})
COMMIT_MSG=$(gh pr view $PR_NUMBER --json commits --jq '.commits[-1] | "\(.messageHeadline) \(.messageBody)"')
# Remove newlines and carriage returns
CLEAN_COMMIT_MSG=$(echo "$COMMIT_MSG" | tr -d '\n' | tr -d '\r')
# Replace newlines and carriage returns with spaces
CLEAN_COMMIT_MSG=$(echo "$COMMIT_MSG" | tr '\n\r' ' ')
# Remove single quotes
CLEAN_COMMIT_MSG=$(echo "$CLEAN_COMMIT_MSG" | sed "s/'//g")
echo "Cleaned commit message: ${CLEAN_COMMIT_MSG}"
echo "COMMIT_MSG=${CLEAN_COMMIT_MSG}" >> $GITHUB_ENV
- name: Set up env variables
run: |
SITE_NAME="WordPress (Composer Managed) Subdirectory Multisite Test"
SITE_URL="https://dev-wpcm-subdir-playwright-tests.pantheonsite.io"
echo "Site name: $SITE_NAME"
echo "Site url: $SITE_URL"
echo "SITE_NAME=$SITE_NAME" >> $GITHUB_ENV
echo "SITE_URL=$SITE_URL" >> $GITHUB_ENV
- name: Install SSH keys
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Validate Pantheon Host Key
shell: bash
run: |
echo "Host *.drush.in HostKeyAlgorithms +ssh-rsa" >> ~/.ssh/config
echo "Host *.drush.in PubkeyAcceptedKeyTypes +ssh-rsa" >> ~/.ssh/config
echo "StrictHostKeyChecking no" >> ~/.ssh/config
- name: Get latest Terminus release
uses: pantheon-systems/terminus-github-actions@v1
with:
pantheon-machine-token: ${{ secrets.TERMINUS_TOKEN }}
- name: Install dependencies
run: |
echo "Install Composer dependencies"
composer update --no-progress --prefer-dist --optimize-autoloader
echo "Install NPM dependencies"
npm install
echo "Install Playwright Browsers"
npx playwright install --with-deps
- name: Setup Subdirectory Multisite Tests
env:
SITE_ID: wpcm-subdir-playwright-tests
SITE_NAME: ${{ env.SITE_NAME }}
SITE_URL: ${{ env.SITE_URL }}
TYPE: subdir
TERMINUS_TOKEN: ${{ secrets.TERMINUS_TOKEN }}
COMMIT_MSG: ${{ env.COMMIT_MSG }}
WORKSPACE: ${{ github.workspace }}
run: bash ${{ github.workspace }}/devops/scripts/setup-playwright-tests.sh
- name: Run Playwright tests
env:
SITE_NAME: ${{ env.SITE_NAME }}
SITE_URL: ${{ env.SITE_URL }}
run: |
npm run test .github/tests/wpcm.spec.ts
SITE_NAME=Foo
SITE_URL=${{ env.SITE_URL }}/foo
echo "Running Playwright tests on WordPress subdirectory subsite"
npm run test .github/tests/wpcm.spec.ts
- name: Delete Site
if: success()
shell: bash
run: terminus site:delete wpcm-subdir-playwright-tests -y
playwright-subdom:
name: Subdomain multisite
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Wait for status artifacts
env:
GH_TOKEN: ${{ github.token }}
run: |
max_attempts=10
delay_seconds=30
attempt=0
success=0
status=0
echo "Checking for status artifacts..."
while [ $attempt -lt $max_attempts ]; do
# Attempt to download the artifacts.
gh run download -n status-8.1-${{ github.sha }} || true
gh run download -n status-8.2-${{ github.sha }} || true
gh run download -n status-8.3-${{ github.sha }} || true
if [ -f status-8.1-${{ github.sha }}.txt ] && [ -f status-8.2-${{ github.sha }}.txt ] && [ -f status-8.3-${{ github.sha }}.txt ]; then
success=1
break
else
echo "Status files not found. Sleeping for $delay_seconds seconds..."
sleep $delay_seconds
fi
attempt=$(( attempt + 1 ))
done
if [ $success -eq 0 ]; then
echo "Timed out waiting for status artifacts."
exit 1
fi
for file in status-*.txt; do
status=$(cat $file)
if [ $status -eq 1 ]; then
echo "status=$status" >> $GITHUB_ENV
exit 1
fi
done
echo "status=$status" >> $GITHUB_ENV
- name: Linting failed
if: env.status == '1'
run: |
echo "One or more jobs in a previous workflow failed. Exiting."
exit 1
- name: Get last commit message
env:
GH_TOKEN: ${{ github.token }}
run: |
cd ${{ github.workspace }}/
PR_NUMBER=$(echo ${{ github.event.pull_request.number }})
COMMIT_MSG=$(gh pr view $PR_NUMBER --json commits --jq '.commits[-1] | "\(.messageHeadline) \(.messageBody)"')
# Remove newlines and carriage returns
CLEAN_COMMIT_MSG=$(echo "$COMMIT_MSG" | tr -d '\n' | tr -d '\r')
# Replace newlines and carriage returns with spaces
CLEAN_COMMIT_MSG=$(echo "$COMMIT_MSG" | tr '\n\r' ' ')
# Remove single quotes
CLEAN_COMMIT_MSG=$(echo "$CLEAN_COMMIT_MSG" | sed "s/'//g")
echo "Cleaned commit message: ${CLEAN_COMMIT_MSG}"
echo "COMMIT_MSG=${CLEAN_COMMIT_MSG}" >> $GITHUB_ENV
- name: Set up env variables
run: |
SITE_NAME="WordPress (Composer Managed) Subdomain Multisite Test"
SITE_URL="https://dev-wpcm-subdom-playwright-tests.pantheonsite.io"
SUBDOMAIN_URL="https://foo.dev-wpcm-subdom-playwright-tests.pantheonsite.io"
echo "Site name: $SITE_NAME"
echo "Site url: $SITE_URL"
echo "Subdomain url: $SUBDOMAIN_URL"
echo "SITE_NAME=$SITE_NAME" >> $GITHUB_ENV
echo "SITE_URL=$SITE_URL" >> $GITHUB_ENV
echo "SUBDOMAIN_URL=$SUBDOMAIN_URL" >> $GITHUB_ENV
echo "SITE_ID=wpcm-subdom-playwright-tests" >> $GITHUB_ENV
- name: Install SSH keys
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Validate Pantheon Host Key
shell: bash
run: |
echo "Host *.drush.in HostKeyAlgorithms +ssh-rsa" >> ~/.ssh/config
echo "Host *.drush.in PubkeyAcceptedKeyTypes +ssh-rsa" >> ~/.ssh/config
echo "StrictHostKeyChecking no" >> ~/.ssh/config
- name: Get latest Terminus release
uses: pantheon-systems/terminus-github-actions@v1
with:
pantheon-machine-token: ${{ secrets.TERMINUS_TOKEN }}
- name: Install dependencies
run: |
echo "Install Composer dependencies"
composer update --no-progress --prefer-dist --optimize-autoloader
echo "Install NPM dependencies"
npm install
echo "Install Playwright Browsers"
npx playwright install --with-deps
- name: Copy changes from PR
run: |
echo "Commit Message: ${{ env.COMMIT_MSG }}"
echo "Setting up some git config..."
git config --global user.email "[email protected]"
git config --global user.name "Pantheon WPCM Bot"
echo "Switching to git mode..."
terminus connection:set "${{ env.SITE_ID }}".dev git
echo "Clone the site locally and copy PR updates"
terminus local:clone ${{ env.SITE_ID }}
cd ~/pantheon-local-copies/"${{ env.SITE_ID }}"
echo "Copying latest changes and committing to the site."
rsync -a --exclude='.git' --exclude='status-*.txt' --exclude="node_modules" "${{ github.workspace }}/" .
git add -A
git commit -m "Update to latest commit: ${{ env.COMMIT_MSG }}" || true
echo "Installing wp-graphql..."
composer require wp-graphql/wp-graphql
git add composer.json composer.lock
git commit -m "Add WP-GraphQL plugin" || true
echo "Copying the subdomain multisite config/application.php file..."
cp -f "${{ github.workspace }}/.github/fixtures/config/application.subdom.php" config/application.php
git add config/application.php
git commit -m "Add subdomain multisite config" || true
# Push and wait for the git push to finish.
git push origin master || true
terminus workflow:wait "${{ env.SITE_ID }}".dev
echo "Checking WordPress install status"
terminus wp "${{ env.SITE_ID }}".dev -- cli info
# Activte WP-GraphQL plugin
terminus wp "${{ env.SITE_ID }}".dev -- plugin activate wp-graphql
terminus env:clear-cache "${{ env.SITE_ID }}".dev
# Run curl checks against the site URLs to ensure the main site and the subdomain site exist.
echo "Checking site URLs"
SITE_URL_TEST=$(curl -s -o /dev/null -w "%{http_code}" ${{ env.SITE_URL }})
SUBDOMAIN_URL_TEST=$(curl -s -o /dev/null -w "%{http_code}" ${{ env.SUBDOMAIN_URL }})
if [ $SITE_URL_TEST -ne 200 ] || [ $SUBDOMAIN_URL_TEST -ne 200 ]; then
echo "One or more site URLs are not returning a 200 status code. Exiting."
echo "${{ env.SITE_URL }} - ${SITE_URL_TEST}"
echo "${{ env.SUBDOMAIN_URL }} - ${SUBDOMAIN_URL_TEST}"
exit 1
fi
- name: Run Playwright tests on main site
env:
SITE_NAME: ${{ env.SITE_NAME }}
SITE_URL: ${{ env.SITE_URL }}
GRAPHQL_ENDPOINT: ${{ env.SITE_URL }}/wp/graphql
run: npm run test .github/tests/wpcm.spec.ts
- name: Run Playwright tests on subdomain site
env:
SITE_NAME: Foo
SITE_URL: ${{ env.SUBDOMAIN_URL }}
GRAPHQL_ENDPOINT: ${{ env.SUBDOMAIN_URL }}/wp/graphql
run: npm run test .github/tests/wpcm.spec.ts