Skip to content

Run PHPStan for the test suite #3938

Run PHPStan for the test suite

Run PHPStan for the test suite #3938

Workflow file for this run

name: Test Suite
on:
pull_request:
paths:
- '.github/workflows/**'
- 'src/adapter/**'
- 'src/bridge/**'
- 'src/core/**'
- 'src/lib/**'
- 'tools/**'
- 'examples/**'
- 'composer.lock'
push:
branches: [ 1.x ]
paths-ignore:
- 'CHANGELOG.md'
# See https://stackoverflow.com/a/72408109
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
tests:
name: "Tests"
runs-on: ${{ matrix.operating-system }}
timeout-minutes: 15
services:
elasticsearch:
image: elasticsearch:7.17.2
env:
discovery.type: single-node
options: >-
--health-cmd "curl http://localhost:9200/_cluster/health"
--health-interval 10s
--health-timeout 5s
--health-retries 10
ports:
- 9200:9200
meilisearch:
image: getmeili/meilisearch:v1.11.3
env:
MEILI_MASTER_KEY: masterKey
MEILI_NO_ANALYTICS: true
ports:
- 7700:7700
postgres:
image: postgres:13.6-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432/tcp
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
mysql:
image: mysql:8.0.31-debian
ports:
- 3306/tcp
env:
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_DATABASE: mysql
MYSQL_ROOT_PASSWORD: root
redis:
image: redis:latest
ports:
- 6379:6379
localstack:
image: localstack/localstack:latest
env:
SERVICES: s3
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
ports:
- 4566:4566
- 4571:4571
strategy:
fail-fast: false
matrix:
dependencies:
- "locked"
- "lowest"
- "highest"
php-version:
- "8.2"
- "8.3"
- "8.4"
operating-system:
- "ubuntu-latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v4"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
tools: composer:v2
php-version: "${{ matrix.php-version }}"
ini-values: memory_limit=-1, post_max_size=32M, upload_max_filesize=32M
extensions: :psr, bcmath, dom, hash, json, mbstring, xml, xmlwriter, xmlreader, zlib, curl
- name: "List PHP Extensions"
run: php -m
- name: "List PHP configuration"
run: php -i
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '14'
- name: Install Azurite storage emulator
run: npm install -g azurite
- name: Start Azurite blob endpoint
shell: bash
run: |
azurite-blob --blobHost 0.0.0.0 --blobPort 10000 &
sleep 5
env:
AZURITE_ACCOUNTS: flowphpaccount01:flowphpkey01
- name: "Get Composer Cache Directory"
id: composer-cache
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: "Cache Composer dependencies"
uses: "actions/cache@v4"
with:
path: "${{ steps.composer-cache.outputs.dir }}"
key: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.lock') }}"
restore-keys: |
php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-
- name: "Install lowest dependencies"
if: ${{ matrix.dependencies == 'lowest' }}
run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest"
- name: "Install highest dependencies"
if: ${{ matrix.dependencies == 'highest' }}
run: "composer update --no-interaction --no-progress --no-suggest"
- name: "Install locked dependencies"
if: ${{ matrix.dependencies == 'locked' }}
run: "composer install --no-interaction --no-progress --no-suggest"
- name: "Test - ETL "
run: "composer test:etl"
- name: "Test - CLI"
run: "composer test:cli"
- name: "Test - Lib - Array Dot"
run: "composer test:lib:array-dot"
- name: "Test - Lib - Azure SDK"
run: "composer test:lib:azure-sdk"
- name: "Test - Lib - Doctrine DBAL Bulk"
run: "composer test:lib:doctrine-dbal-bulk"
env:
PGSQL_DATABASE_URL: pgsql://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?serverVersion=11&charset=utf8
MYSQL_DATABASE_URL: mysql://mysql:mysql@127.0.0.1:${{ job.services.mysql.ports[3306] }}/mysql
- name: "Test - Lib - Filesystem"
run: "composer test:lib:filesystem"
- name: "Test - Lib - parquet"
run: "composer test:lib:parquet"
env:
FLOW_PARQUET_TESTS_DEBUG: "0"
- name: "Test - Lib - Parquet Viewer"
run: "composer test:lib:parquet-viewer"
- name: "Test - Lib - RDSL"
run: "composer test:lib:rdsl"
- name: "Test - Lib - Snappy"
run: "composer test:lib:snappy"
- name: "Test - Bridge - Filesystem Azure"
run: "composer test:bridge:filesystem-azure"
env:
AZURITE_HOST: "localhost"
AZURITE_BLOB_PORT: "10000"
AZURITE_ACCOUNT_NAME: "flowphpaccount01"
AZURITE_ACCOUNT_KEY: "flowphpkey01"
- name: "Test - Bridge - Filesystem Async AWS"
run: "composer test:bridge:filesystem-async-aws -vvv"
env:
S3_ENDPOINT: "http://localhost:${{ job.services.localstack.ports[4566] }}"
S3_REGION: "us-east-1"
S3_ACCESS_KEY_ID: "test"
S3_SECRET_ACCESS_KEY: "test"
- name: "Test - Bridge - Monolog Http"
run: "composer test:bridge:monolog-http"
- name: "Test - Bridge - Symfony Http Foundation"
run: "composer test:bridge:symfony-http-foundation"
- name: "Test - Adapter - ChartJs"
run: "composer test:adapter:chartjs"
- name: "Test - Adapter - CSV"
run: "composer test:adapter:csv"
- name: "Test - Adapter - Doctrine"
run: "composer test:adapter:doctrine"
env:
PGSQL_DATABASE_URL: "pgsql://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?serverVersion=11&charset=utf8"
MYSQL_DATABASE_URL: "mysql://mysql:mysql@127.0.0.1:${{ job.services.mysql.ports[3306] }}/mysql"
SQLITE_DATABASE_URL: "sqlite:///:memory:"
- name: "Test - Adapter - Elasticsearch"
run: "composer test:adapter:elasticsearch"
- name: "Test - Adapter - Google Sheet"
run: "composer test:adapter:google-sheet"
- name: "Test - Adapter - Http"
run: "composer test:adapter:http"
- name: "Test - Adapter - Json"
run: "composer test:adapter:json"
- name: "Test - Adapter - Logger"
run: "composer test:adapter:logger"
- name: "Test - Adapter - Meilisearch"
run: "composer test:adapter:meilisearch"
- name: "Test - Adapter - Parquet"
run: "composer test:adapter:parquet"
- name: "Test - Adapter - Text"
run: "composer test:adapter:text"
- name: "Test - Adapter - XML"
run: "composer test:adapter:xml"
- name: "Test - Examples"
run: "composer test:examples"
- name: "Download artifact"
if: ${{ github.event_name == 'pull_request' && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
uses: dawidd6/action-download-artifact@v7
with:
workflow: test-suite.yml
name: codecov-base-commit-sha-1.x
- name: Read artifact content into variable
if: ${{ github.event_name == 'pull_request' && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
run: |
ARTIFACT_CONTENT=$(cat codecov-base-commit-sha-1.x.txt)
echo "codecov_base_commit_sha=$ARTIFACT_CONTENT" >> $GITHUB_ENV
- name: Upload test results to Codecov.io for baseline
if: ${{ github.event_name == 'push' && !cancelled() && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
uses: codecov/test-results-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ./var/phpunit/logs
- name: Upload code coverage data to Codecov.io for baseline
if: ${{ github.event_name == 'push' && !cancelled() && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ./var/phpunit/coverage/clover
- name: Upload code coverage data to Codecov.io for pull request
if: ${{ github.event_name == 'pull_request' && !cancelled() && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ./var/phpunit/coverage/clover
commit_parent: ${{ env.codecov_base_commit_sha }}
- name: Upload test results to Codecov.io for pull request
if: ${{ github.event_name == 'pull_request' && !cancelled() && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
uses: codecov/test-results-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ./var/phpunit/logs
commit_parent: ${{ env.codecov_base_commit_sha }}
- name: Get the branch name and SHA
if: ${{ github.event_name == 'push' && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
run: |
branch_name=${GITHUB_REF#refs/heads/}
commit_sha=$(git rev-parse HEAD)
echo "codecov_branch_name=$branch_name" >> $GITHUB_ENV
echo "codecov_commit_sha=$commit_sha" >> $GITHUB_ENV
- name: Save commit SHA to file
if: ${{ github.event_name == 'push' && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
run: echo -n "${{ env.codecov_commit_sha }}" > codecov-base-commit-sha-${{ env.codecov_branch_name }}.txt
- name: Upload commit SHA as artifact
if: ${{ github.event_name == 'push' && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
uses: actions/upload-artifact@v4
with:
name: codecov-base-commit-sha-${{ env.codecov_branch_name }}
path: codecov-base-commit-sha-${{ env.codecov_branch_name }}.txt
- name: "Put SHA to step summary"
if: ${{ github.event_name == 'push' && matrix.php-version == '8.2' && matrix.dependencies == 'locked' }}
run: |
echo "Baseline commit SHA for Codecov: ${{ env.codecov_commit_sha }}" >> $GITHUB_STEP_SUMMARY
extension-tests:
name: "Extension Tests"
runs-on: ${{ matrix.operating-system }}
strategy:
fail-fast: false
matrix:
dependencies:
- "locked"
php-version:
- "8.2"
- "8.3"
- "8.4"
operating-system:
- "ubuntu-latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v4"
- name: "Install dependencies"
run: |
sudo apt-get update && sudo apt-get install libbrotli1 liblz4-1 libzstd1 --assume-yes
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
tools: composer:v2
php-version: "${{ matrix.php-version }}"
ini-values: memory_limit=-1
extensions: :psr, bcmath, dom, hash, json, mbstring, xml, xmlwriter, xmlreader, zlib, brotli, lz4, zstd, snappy-https://github.com/kjdev/php-ext-snappy@0.2.1
env:
SNAPPY_CONFIGURE_PREFIX_OPTS: "CXXFLAGS=-std=c++11"
- name: "List PHP Extensions"
run: php -m
- name: "List PHP configuration"
run: php -i
- name: "Get Composer Cache Directory"
id: composer-cache
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: "Cache Composer dependencies"
uses: "actions/cache@v4"
with:
path: "${{ steps.composer-cache.outputs.dir }}"
key: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.lock') }}"
restore-keys: |
php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-
- name: "Install lowest dependencies"
if: ${{ matrix.dependencies == 'lowest' }}
run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest"
- name: "Install highest dependencies"
if: ${{ matrix.dependencies == 'highest' }}
run: "composer update --no-interaction --no-progress --no-suggest"
- name: "Install locked dependencies"
if: ${{ matrix.dependencies == 'locked' }}
run: "composer install --no-interaction --no-progress --no-suggest"
- name: "Test Brotli"
run: "composer test:lib:parquet -- --group brotli-extension"
- name: "Test LZ4"
run: "composer test:lib:parquet -- --group lz4-extension"
- name: "Test ZSTD"
run: "composer test:lib:parquet -- --group zstd-extension"
- name: "Test Snappy"
run: "composer test:lib:parquet -- --group snappy-extension"