Files
XC_VM/.github/workflows/ci.yml
T
Divarion-D db9b8ea7fc chore(deps): migrate M3uParser to Composer (gemorroj/m3u-parser 6.0.1)
- add gemorroj/m3u-parser 6.0.1 to committed vendor/ (PHP >=8.0.2;
  upstream 6.1.0 requires PHP 8.2, incompatible with the 8.1 target)
- remove vendored Core/Parsing/M3uParser snapshot and manual bootstraps
- autoload \M3uParser\ from committed vendor/ instead of a path mapping
- stop tracking composer.lock (already gitignored); CI now audits the
  committed vendor/composer/installed.json without --locked
2026-06-25 19:36:18 +03:00

112 lines
3.2 KiB
YAML

name: CI
# Quality gate: runs on every push and pull request.
# Tests run via the committed PHAR (tools/.bin/phpunit.phar). Class loading uses
# the committed Composer PSR-4 autoloader (src/vendor/) first, with the legacy
# src/autoload.php scanner as an end-of-queue fallback. The deploy path ships
# vendor/ as-is and never runs `composer install`.
on:
push:
branches: ['**']
pull_request:
permissions:
contents: read
jobs:
lint:
name: PHP Syntax Check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
coverage: none
- name: Check syntax
run: bash tools/php_syntax_check.sh
phpstan:
name: PHPStan (static analysis)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
# Matches phpVersion (80300) the analysis targets.
php-version: '8.3'
coverage: none
# Downloads the pinned PHPStan PHAR (no Composer) and analyses against the
# committed baseline — fails only on NEW issues introduced by the change.
- name: Run PHPStan
run: make phpstan
composer-audit:
name: Composer Security Audit
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
coverage: none
tools: composer:v2
# Audits the committed install set (src/vendor/composer/installed.json)
# against the Packagist advisory database. Does NOT run `composer install`
# (vendor/ is committed and shipped) and does NOT use --locked
# (composer.lock is gitignored, never committed). A no-op while every
# dependency is path-mapped/vendored without metadata, but gates real
# installed packages the moment any are added.
- name: Composer audit
run: |
count=$(php -r '$f="src/vendor/composer/installed.json";$d=is_file($f)?json_decode(file_get_contents($f),true):[];echo is_array($d["packages"]??null)?count($d["packages"]):0;')
if [ "$count" -eq 0 ]; then
echo "No installed Composer packages — nothing to audit."
else
composer audit --no-interaction --working-dir=src
fi
test:
name: PHPUnit
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
coverage: pcov
- name: Run unit tests
run: php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist
- name: Coverage report
run: |
php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist \
--coverage-text \
--coverage-clover coverage.xml
continue-on-error: true
- name: Upload coverage artifact
if: always()
uses: actions/upload-artifact@v7
with:
name: coverage
path: coverage.xml
if-no-files-found: ignore