PHP Unit Tests #390
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: PHP Unit Tests | |
on: | |
push: | |
branches: | |
- trunk | |
paths: | |
- "**.php" | |
- composer.json | |
- composer.lock | |
- .github/workflows/php-unit-tests.yml | |
pull_request: | |
paths: | |
- "**.php" | |
- composer.json | |
- composer.lock | |
- .github/workflows/php-unit-tests.yml | |
workflow_dispatch: | |
inputs: | |
php-version: | |
description: 'PHP Version' | |
default: '8.2' | |
wp-rc-version: | |
description: 'WordPress version for Release Candidate (ex. 6.5-RC3)' | |
default: 'latest' | |
wc-rc-version: | |
description: 'WooCommerce version for Release Candidate (ex. 8.7.0-rc.1)' | |
default: 'latest' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
GetMatrix: | |
if: github.event_name != 'workflow_dispatch' | |
name: Get WP and WC version Matrix | |
runs-on: ubuntu-latest | |
outputs: | |
wp-versions: ${{ steps.wp.outputs.versions }} | |
wc-versions: ${{ steps.wc.outputs.versions }} | |
steps: | |
- name: Get Release versions from Wordpress | |
id: wp | |
uses: woocommerce/grow/get-plugin-releases@actions-v2 | |
with: | |
slug: wordpress | |
- name: Get Release versions from WooCommerce | |
id: wc | |
uses: woocommerce/grow/get-plugin-releases@actions-v2 | |
with: | |
slug: woocommerce | |
UnitTests: | |
if: github.event_name != 'workflow_dispatch' | |
name: PHP unit tests - PHP ${{ matrix.php }}, WP ${{ matrix.wp-version || 'latest' }}, WC ${{ matrix.wc-versions || 'latest' }} | |
runs-on: ubuntu-latest | |
needs: GetMatrix | |
strategy: | |
matrix: | |
php: [8.2] | |
wp-version: [latest] | |
# Please note that wc-versions is a string containing versions separated by commas. | |
# It will be split and loop within the run unit test step below to reduce the time spent. | |
wc-versions: [ '${{ join(fromJson(needs.GetMatrix.outputs.wc-versions)) }}' ] | |
include: | |
- php: 7.4 | |
wp-version: ${{ fromJson(needs.GetMatrix.outputs.wp-versions)[2] }} # L-2 WP Version support | |
wc-versions: ${{ fromJson(needs.GetMatrix.outputs.wc-versions)[2] }} # L-2 WC Version support | |
- php: 8.3 | |
wp-version: latest | |
wc-versions: latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Prepare PHP | |
uses: woocommerce/grow/prepare-php@actions-v2 | |
with: | |
php-version: "${{ matrix.php }}" | |
- name: Set up MySQL | |
uses: woocommerce/grow/prepare-mysql@actions-v2 | |
- name: Install svn (used for installing WP versions) | |
run: sudo apt-get -y install subversion | |
- name: Run PHP unit tests | |
run: | | |
WC_VERSIONS=$(echo "${{ matrix.wc-versions }}" | sed -r "s/ *, */ /g") | |
WC_VERSIONS=($WC_VERSIONS) | |
URL_CONFIG="url.https://${{ secrets.BOT_GH_TOKEN }}:[email protected]/.insteadOf [email protected]:" | |
git config --global $URL_CONFIG | |
INIT_INSTALL=true | |
for WC_VERSION in "${WC_VERSIONS[@]}"; do | |
if [ "$INIT_INSTALL" = true ]; then | |
echo "::group::Install WP ${{ matrix.wp-version }} and WC ${WC_VERSION}" | |
./bin/install-unit-tests.sh wordpress_test root root localhost ${{ matrix.wp-version }} $WC_VERSION | |
INIT_INSTALL=false | |
else | |
echo "::group::Switch to WP ${{ matrix.wp-version }} and WC ${WC_VERSION}" | |
./bin/switch-wp-wc-in-unit-tests.sh wordpress_test root root localhost ${{ matrix.wp-version }} $WC_VERSION | |
fi | |
echo "::endgroup::" | |
vendor/bin/phpunit | |
done | |
git config --global --unset $URL_CONFIG | |
ReleaseCandidateUnitTests: | |
if: github.event_name == 'workflow_dispatch' | |
name: PHP unit tests (for Release Candidates) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Prepare PHP | |
uses: woocommerce/grow/prepare-php@actions-v2 | |
with: | |
php-version: "${{ inputs.php-version }}" | |
- name: Prepare MySQL | |
uses: woocommerce/grow/prepare-mysql@actions-v2 | |
- name: Install svn (used for installing WP versions) | |
run: sudo apt-get -y install subversion | |
- name: Install WP tests | |
env: | |
INPUT_WP_RC_VERSION: ${{ inputs.wp-rc-version }} | |
INPUT_WC_RC_VERSION: ${{ inputs.wc-rc-version }} | |
run: ./bin/install-unit-tests.sh wordpress_test root root localhost "${INPUT_WP_RC_VERSION}" "${INPUT_WC_RC_VERSION}" | |
- name: Run PHP unit tests | |
run: vendor/bin/phpunit |