Resolve PHP 8.1 warning for rtrim() in functions.php #50
This file contains hidden or 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 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/workflows/manual-delete-test-sites.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: | |
| test-single: | |
| name: Single site | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Bats | |
| uses: bats-core/[email protected] | |
| id: setup-bats | |
| - 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: Run Bats tests for URL fixes (Single Site) | |
| env: | |
| SITE_ID: wpcm-playwright-tests | |
| TERMINUS_TOKEN: ${{ secrets.TERMINUS_TOKEN }} | |
| run: | | |
| echo "Running REST URL Bats tests..." | |
| terminus auth:login --machine-token="${TERMINUS_TOKEN}" || echo "Terminus already logged in." | |
| export BATS_LIB_PATH=${{ steps.setup-bats.outputs.lib-path }} | |
| bats -p -t .github/tests/2-rest-url-fix.bats | |
| - name: Delete Site | |
| if: success() | |
| shell: bash | |
| run: | | |
| # Downgrade the site to a free plan, if applicable. | |
| terminus plan:set wpcm-playwright-tests plan-free-preferred-monthly-1 || true | |
| terminus site:delete wpcm-playwright-tests -y | |
| test-subdir: | |
| name: Subdirectory multisite | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Bats | |
| uses: bats-core/[email protected] | |
| id: setup-bats | |
| - 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: Run Bats tests for URL fixes | |
| # This step runs *after* the site setup, including the initial permalink flush. | |
| # The Bats test itself handles permalink changes for specific test cases. | |
| # We need to pass the SITE_ID to the Bats test environment so WP-CLI commands work via Terminus. | |
| env: | |
| SITE_ID: wpcm-subdir-playwright-tests | |
| SUBSITE: foo | |
| TERMINUS_TOKEN: ${{ secrets.TERMINUS_TOKEN }} | |
| run: | | |
| echo "Running REST URL Bats tests..." | |
| # Ensure Terminus is logged in if needed by Bats WP-CLI calls | |
| terminus auth:login --machine-token="${TERMINUS_TOKEN}" || echo "Terminus already logged in." | |
| export BATS_LIB_PATH=${{ steps.setup-bats.outputs.lib-path }} | |
| bats -p -t .github/tests/2-rest-url-fix.bats | |
| - name: Delete Site | |
| if: success() | |
| shell: bash | |
| run: | | |
| # Downgrade the site to a free plan, if applicable. | |
| terminus plan:set wpcm-subdir-playwright-tests plan-free-preferred-monthly-1 || true | |
| terminus site:delete wpcm-subdir-playwright-tests -y | |
| test-subdom: | |
| name: Subdomain multisite | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Bats | |
| uses: bats-core/[email protected] | |
| id: setup-bats | |
| - 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 | |
| # Ensure permalinks are pretty for playwright tests | |
| echo "Setting permalink structure" | |
| terminus wp "${{ env.SITE_ID }}".dev -- option update permalink_structure '/%postname%/' | |
| terminus wp "${{ env.SITE_ID }}".dev -- rewrite flush | |
| terminus wp "${{ env.SITE_ID }}".dev -- cache flush | |
| terminus env:clear-cache "${{ env.SITE_ID }}".dev | |
| - 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 | |
| - name: Run Bats tests for URL fixes (Subdomain) | |
| env: | |
| SITE_ID: wpcm-subdom-playwright-tests | |
| SUBSITE: foo | |
| TERMINUS_TOKEN: ${{ secrets.TERMINUS_TOKEN }} | |
| run: | | |
| echo "Running REST URL Bats tests..." | |
| terminus auth:login --machine-token="${TERMINUS_TOKEN}" || echo "Terminus already logged in." | |
| export BATS_LIB_PATH=${{ steps.setup-bats.outputs.lib-path }} | |
| bats -p -t .github/tests/2-rest-url-fix.bats |