Zephir CI #1808
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: Zephir CI | |
on: | |
schedule: | |
- cron: '0 2 * * *' # Daily at 02:00 runs only on default branch | |
push: | |
paths-ignore: | |
- '**.md' | |
- '**.txt' | |
- '**/nightly.yml' | |
- '**/release.yml' | |
- '**/FUNDING.yml' | |
pull_request: | |
branches: | |
- master | |
- development | |
env: | |
RE2C_VERSION: 2.2 | |
ZEPHIR_PARSER_VERSION: 1.6.1 | |
PSR_VERSION: 1.2.0 | |
CACHE_DIR: .cache | |
jobs: | |
analyze: | |
name: Static Code Analysis | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
env: | |
PHP_CS_FIXER_VERSION: 3.37.0 | |
with: | |
php-version: '8.0' | |
coverage: none | |
tools: php-cs-fixer:${{ env.PHP_CS_FIXER_VERSION }}, phpcs | |
- name: Run PHP_CodeSniffer | |
run: | | |
phpcs --version | |
phpcs --runtime-set ignore_warnings_on_exit true | |
# Disabling for now until I figure out the rules | |
# - name: Run PHP CS Fixer | |
# if: always() | |
# run: | | |
# php-cs-fixer fix --diff --dry-run -v --using-cache=no | |
- name: Run Shell Check | |
if: always() | |
run: shellcheck .ci/*.sh | |
build-and-test: | |
name: "PHP-${{ matrix.php }}-${{ matrix.ts }}-${{ matrix.name }}-${{ matrix.arch }}" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
php: [ '8.0', '8.1', '8.2', '8.3' ] | |
ts: [ 'ts', 'nts' ] | |
arch: [ 'x64' ] | |
name: | |
- ubuntu-gcc | |
- macos-clang | |
# matrix names should be in next format: | |
# {php}-{ts}-{os.name}-{compiler}-{arch} | |
include: | |
# Linux | |
- { name: ubuntu-gcc, os: ubuntu-latest, compiler: gcc } | |
# macOS | |
- { name: macos-clang, os: macos-12, compiler: clang } | |
# Windows | |
- { php: '8.0', ts: 'ts', arch: 'x64', name: 'windows2019-vs16', os: 'windows-2019', compiler: 'vs16' } | |
- { php: '8.0', ts: 'nts', arch: 'x64', name: 'windows2019-vs16', os: 'windows-2019', compiler: 'vs16' } | |
- { php: '8.1', ts: 'ts', arch: 'x64', name: 'windows2019-vs16', os: 'windows-2019', compiler: 'vs16' } | |
- { php: '8.1', ts: 'nts', arch: 'x64', name: 'windows2019-vs16', os: 'windows-2019', compiler: 'vs16' } | |
# Disabled due PSR extension wasn't complied for >=8.2 | |
#- { php: '8.2', ts: 'ts', arch: 'x64', name: 'windows2019-vs16', os: 'windows-2019', compiler: 'vs16' } | |
#- { php: '8.2', ts: 'nts', arch: 'x64', name: 'windows2019-vs16', os: 'windows-2019', compiler: 'vs16' } | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 5 | |
- name: Install PHP ${{ matrix.php }} | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: '${{ matrix.php }}' | |
extensions: mbstring, fileinfo, gmp, sqlite, pdo_sqlite, psr-${{ env.PSR_VERSION }}, zip, mysqli, zephir_parser-${{ env.ZEPHIR_PARSER_VERSION }} | |
tools: phpize, php-config | |
coverage: xdebug | |
# variables_order: https://github.com/zephir-lang/zephir/pull/1537 | |
# enable_dl: https://github.com/zephir-lang/zephir/pull/1654 | |
# allow_url_fopen: https://github.com/zephir-lang/zephir/issues/1713 | |
# error_reporting: https://github.com/zendframework/zend-code/issues/160 | |
ini-values: >- | |
variables_order=EGPCS, | |
enable_dl=On, | |
allow_url_fopen=On, | |
error_reporting=-1, | |
memory_limit=1G, | |
date.timezone=UTC, | |
xdebug.max_nesting_level=256 | |
env: | |
phpts: ${{ matrix.ts }} | |
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Project Dependencies | |
run: composer install --prefer-dist --no-interaction --no-ansi --no-progress | |
- name: Fast Commands Test | |
run: php zephir --help | |
- name: Build Test Extension (Linux) | |
if: runner.os == 'Linux' | |
uses: ./.github/workflows/build-linux-ext | |
with: | |
compiler: ${{ matrix.compiler }} | |
cflags: '-O2 -Wall -fvisibility=hidden -flto -DZEPHIR_RELEASE=1' | |
ldflags: '--coverage' | |
- name: Build Test Extension (macOS) | |
if: runner.os == 'macOS' | |
uses: ./.github/workflows/build-macos-ext | |
with: | |
compiler: ${{ matrix.compiler }} | |
cflags: '-O2 -fvisibility=hidden -Wparentheses -flto -DZEPHIR_RELEASE=1' | |
- name: Build Test Extension (Windows) | |
if: runner.os == 'Windows' | |
uses: ./.github/workflows/build-win-ext | |
with: | |
php_version: ${{ matrix.php }} | |
ts: ${{ matrix.ts }} | |
msvc: ${{ matrix.compiler }} | |
arch: ${{ matrix.arch }} | |
cflags: '/D ZEPHIR_RELEASE /Oi /Ot /Oy /Ob2 /Gs /GF /Gy /GL' | |
ldflags: '/LTCG' | |
env: | |
CACHE_DIR: 'C:\Downloads' | |
PHP_ROOT: 'C:\tools\php' | |
- name: Stub Extension Info | |
shell: pwsh | |
run: | | |
php --ini | |
php --ri stub | |
- name: Setup problem matchers for PHPUnit | |
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" | |
- name: Unit Tests (Stub Extension) | |
shell: pwsh | |
run: | | |
php vendor/bin/phpunit -c phpunit.ext.xml | |
env: | |
XDEBUG_MODE: coverage | |
- name: Unit Tests (Zephir) | |
if: always() | |
run: php vendor/bin/phpunit --testsuite Zephir --coverage-php ./tests/output/clover.xml | |
env: | |
XDEBUG_MODE: coverage | |
- name: "Upload coverage file artifact" | |
uses: "actions/upload-artifact@v3" | |
with: | |
name: "unit-${{ matrix.php }}-${{ matrix.ts }}-${{ matrix.name }}.coverage" | |
path: "tests/output/clover.xml" | |
- name: Black-box Testing | |
if: always() && runner.os != 'Windows' | |
shell: bash | |
working-directory: tests/sharness | |
run: | | |
make -j$(getconf _NPROCESSORS_ONLN) | |
upload-coverage: | |
permissions: | |
contents: read | |
name: "Upload coverage" | |
runs-on: "ubuntu-22.04" | |
needs: | |
- "build-and-test" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: 'Qodana Scan' | |
uses: JetBrains/qodana-action@v2023.2 | |
env: | |
QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} | |
with: | |
args: --baseline,./qodana.sarif.json | |
# - name: 'Qodana Scan' | |
# run: | | |
# docker run \ | |
# -v $(pwd):/data/project/ \ | |
# -v $(pwd):/data/base/ \ | |
# -e QODANA_TOKEN="${{ secrets.CODECOV_TOKEN }}" \ | |
# jetbrains/qodana-php \ | |
# --baseline /data/base/qodana.sarif.json | |
- name: "Create download folder" | |
run: | | |
mkdir -p reports | |
- name: "Download coverage files" | |
uses: "actions/download-artifact@v4.1.7" | |
with: | |
path: "reports" | |
- name: "Display structure of downloaded files" | |
run: ls -R | |
working-directory: reports | |
- name: "Upload to Codecov" | |
uses: "codecov/codecov-action@v3" | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
directory: reports | |
fail_ci_if_error: true | |
verbose: true | |
name: codecov-umbrella | |
- name: "Upload to Qodana" | |
run: | | |
docker run \ | |
-v $(pwd):/data/project/ \ | |
-v ./reports/:/data/coverage \ | |
-e QODANA_TOKEN="${{ secrets.QODANA_TOKEN }}" \ | |
jetbrains/qodana-php | |
- name: Upload build artifacts after Failure | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: debug-PHP-${{ matrix.php }}-${{ matrix.ts }}-${{ matrix.name }}-${{ matrix.arch }} | |
path: | | |
${{ github.workspace }}/*.log | |
${{ github.workspace }}/ext/ | |
!${{ github.workspace }}/ext/kernel/ | |
!${{ github.workspace }}/ext/stub/ | |
!${{ github.workspace }}/ext/Release/ | |
!${{ github.workspace }}/ext/x64/Release/ | |
${{ github.workspace }}/tests/output/ | |
retention-days: 7 |