Merge pull request #5134 from Deltik/fix/5131 #1832
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: Unit Tests | |
on: | |
push: | |
pull_request: | |
env: | |
MYSQL_DATABASE: app | |
MYSQL_ROOT_PASSWORD: 'Database Password for Continuous Integration' | |
#CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} | |
CC_TEST_REPORTER_ID: 8948074581c1ffe7f4e47995c65d7d303882310256edd73536723d7c92adb1e3 | |
jobs: | |
test-unit: | |
strategy: | |
fail-fast: false | |
matrix: | |
interpreter: | |
- image: php:7.4 | |
- image: php:8.1 | |
- image: php:8.2 | |
- image: php:8.3 | |
db: | |
- image: mysql:5.5 | |
- image: bitnami/mysql:8.0 | |
- image: mariadb:10.0 | |
- image: mariadb:10.6 | |
- image: mariadb:10.11 | |
runs-on: ubuntu-latest | |
container: | |
image: ${{ matrix.interpreter.image }} | |
services: | |
db: | |
image: ${{ matrix.db.image }} | |
env: | |
MYSQL_ROOT_PASSWORD: 'Database Password for Continuous Integration' | |
MYSQL_DATABASE: 'app' | |
MYSQL_AUTHENTICATION_PLUGIN: 'mysql_native_password' | |
MYSQL_CHARACTER_SET: 'utf8mb3' | |
options: >- | |
--health-cmd "mysqladmin ping" | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
steps: | |
- name: Enable Debian backports | |
run: | | |
if ! apt-get update; then | |
sed -i 's#/\(deb\|security\)\.debian\.org/#/archive.debian.org/#g' /etc/apt/sources.list | |
sed -r -i '/^[^\s#]*[^\s]+\s+[^\s]+\s+[^#]*-updates/d' /etc/apt/sources.list | |
echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/99ignore-obsolete | |
echo 'Acquire::AllowInsecureRepositories "true";' >> /etc/apt/apt.conf.d/99ignore-obsolete | |
echo 'APT::Get::AllowUnauthenticated "true";' >> /etc/apt/apt.conf.d/99ignore-obsolete | |
apt-get update | |
DEBIAN_FRONTEND=noninteractive apt-get -y full-upgrade | |
fi | |
apt-get install -y debian-archive-keyring | |
grep -m1 -P '^deb http://(deb|archive).debian.org/debian [a-z]+ main' /etc/apt/sources.list | | |
awk '$3 = $3"-backports"' >> /etc/apt/sources.list | |
- name: Update operating system software repository | |
run: apt-get update | |
- name: Install operating system dependencies | |
run: | | |
. /etc/os-release | |
DEBIAN_RELEASE="$(echo "$VERSION" | grep -oP '^[^(]+\(\K[^)]+')" | |
USE_GIT_BPO="$(test $VERSION_ID -lt 10 && echo "-t ${DEBIAN_RELEASE}-backports" || echo)" | |
apt-get $USE_GIT_BPO install -y git zip libzip-dev libbz2-dev libpng-dev libjpeg-dev libwebp-dev libvpx-dev libicu-dev | |
- name: Configure PHP gd extension with default bundle | |
run: | | |
if [ $(php -r 'printf(version_compare(PHP_VERSION, "7.4.0", ">=") ? 1 : 0);') = '1' ] | |
then | |
docker-php-ext-configure gd --with-jpeg --with-webp | |
elif [ $(php -r 'printf(version_compare(PHP_VERSION, "7.0.0", ">=") ? 1 : 0);') = '1' ] | |
then | |
docker-php-ext-configure gd --with-jpeg-dir=/usr --with-webp-dir=/usr | |
else | |
docker-php-ext-configure gd --with-jpeg-dir=/usr --with-vpx-dir=/usr | |
fi | |
- name: Install necessary PHP extensions | |
run: | | |
docker-php-ext-install -j "$(nproc)" \ | |
zip bz2 gd pdo_mysql mysqli intl | |
- name: PECL install xdebug | |
run: | | |
if [ $(php -r 'printf(version_compare(PHP_VERSION, "8.2.99", ">=") ? 1 : 0);') = '1' ] | |
then | |
pecl install https://xdebug.org/files/xdebug-3.3.0alpha2.tgz | |
elif [ $(php -r 'printf(version_compare(PHP_VERSION, "8.0.0", ">=") ? 1 : 0);') = '1' ] | |
then | |
pecl install xdebug | |
elif [ $(php -r 'printf(version_compare(PHP_VERSION, "7.2.0", ">=") ? 1 : 0);') = '1' ] | |
then | |
pecl install xdebug-3.1.6 | |
elif [ $(php -r 'printf(version_compare(PHP_VERSION, "7.1.0", ">=") ? 1 : 0);') = '1' ] | |
then | |
pecl install xdebug-2.9.8 | |
elif [ $(php -r 'printf(version_compare(PHP_VERSION, "7.0.0", ">=") ? 1 : 0);') = '1' ] | |
then | |
pecl install xdebug-2.7.2 | |
else | |
pecl install xdebug-2.5.5 | |
fi | |
docker-php-ext-enable xdebug | |
- uses: actions/checkout@v3 | |
- name: Install Composer | |
run: curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer | |
- name: Install test dependencies | |
run: composer update --prefer-dist --no-progress | |
working-directory: ./e107_tests/ | |
- name: Opt out of CVE-2022-24765 mitigation | |
run: git config --global safe.directory '*' | |
- name: Download Git submodule dependencies | |
run: git submodule update --init --recursive --remote | |
- name: Install the CI test configuration file | |
run: cp ./e107_tests/lib/ci/config.unit.ci.yml ./e107_tests/config.yml | |
- name: Download Code Climate test reporter | |
run: | | |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter | |
chmod +x ./cc-test-reporter | |
working-directory: ./e107_tests/vendor/bin/ | |
continue-on-error: true | |
- name: Code Climate report before build | |
run: ./e107_tests/vendor/bin/cc-test-reporter before-build | |
continue-on-error: true | |
- name: Build Codeception | |
run: php ./vendor/bin/codecept build | |
working-directory: ./e107_tests/ | |
continue-on-error: false | |
- name: Run unit tests | |
run: | | |
if [ $(php -r 'printf(extension_loaded("xdebug") ? 1 : 0);') = '1' ] | |
then | |
php -d xdebug.mode=coverage ./vendor/bin/codecept run unit --steps --debug --coverage --coverage-xml #--coverage-html | |
else | |
echo "Warning: xdebug not available; skipping coverage..." | |
php ./vendor/bin/codecept run unit --steps --debug | |
fi | |
working-directory: ./e107_tests/ | |
- name: Send code coverage report to Code Climate | |
run: | | |
./e107_tests/vendor/bin/cc-test-reporter format-coverage \ | |
--input-type clover \ | |
--output ./e107_tests/tests/_output/coverage/codeclimate.json \ | |
./e107_tests/tests/_output/coverage.xml | |
./e107_tests/vendor/bin/cc-test-reporter upload-coverage \ | |
--input ./e107_tests/tests/_output/coverage/codeclimate.json | |
continue-on-error: true | |
- name: Upload test output | |
uses: actions/upload-artifact@v1 | |
with: | |
name: tests_output | |
path: ./e107_tests/tests/_output/ |