Get subdomain multisite tests working properly #161
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: WordPress Composer Playwright Tests | |
on: | |
pull_request: | |
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 }}" | |
if ! terminus wp "${{ env.SITE_ID }}".dev -- config is-true MULTISITE; then | |
echo "Multisite not configured yet..." | |
echo "Copying multisite application.php" | |
rm ~/pantheon-local-copies/${{ env.SITE_ID }}/config/application.php | |
cp "${{ github.workspace }}/.github/fixtures/config/application.subdom.php" ~/pantheon-local-copies/${{ env.SITE_ID }}/config/ | |
mv ~/pantheon-local-copies/${{ env.SITE_ID }}/config/application.${type}.php" ~/pantheon-local-copies/${{ env.SITE_ID }}/config/application.php | |
cd ~/pantheon-local-copies/"${{ env.SITE_ID }}" | |
git add ~/pantheon-local-copies/${{ env.SITE_ID }}/config/application.php | |
git commit -m "Set up ${type} multisite config" || true | |
fi | |
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 | |
git push origin master || true | |
echo "Checking WordPress install status" | |
terminus wp "${{ env.SITE_ID }}".dev -- cli info | |
if ! terminus wp "${{ env.SITE_ID }}".dev -- config is-true MULTISITE; then | |
echo -e "Multisite not found!" | |
exit 1 | |
fi | |
# Check SUBDOMAIN_INSTALL value | |
if ! terminus wp "${{ env.SITE_ID }}".dev -- config is-true SUBDOMAIN_INSTALL; then | |
echo -e "Subdomain configuration not found!" | |
exit 1 | |
fi | |
# Wait for the git push to finish. | |
terminus workflow:wait "${{ env.SITE_ID }}".dev | |
- 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.SUBDOMAIN_URL }} | |
echo "Running Playwright tests on WordPress Subdomain subsite" | |
npm run test .github/tests/wpcm.spec.ts |