name: pipeline on: pull_request permissions: contents: read pull-requests: write jobs: unit: runs-on: ubuntu-latest strategy: matrix: php: ['8.1', '8.2', '8.3', '8.4', '8.5'] dependencies: ['lowest', 'highest'] symfony-version: [''] include: - symfony-version: '5.4.*' dependencies: 'highest' php: '8.2' - symfony-version: '6.4.*' dependencies: 'highest' php: '8.2' - symfony-version: '7.4.*' dependencies: 'highest' php: '8.4' - symfony-version: '8.0.*' dependencies: 'highest' php: '8.4' env: SYMFONY_REQUIRE: ${{ matrix.symfony-version || '>=6.4' }} steps: - name: Checkout uses: actions/checkout@v5 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} tools: flex coverage: "none" - name: Install Composer uses: "ramsey/composer-install@v3" with: dependency-versions: "${{ matrix.dependencies }}" - name: Tests run: vendor/bin/phpunit --testsuite=unit inspector: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.4' coverage: "none" - name: Setup Node uses: actions/setup-node@v5 with: node-version: '22' - name: Install Composer uses: "ramsey/composer-install@v3" - name: Tests run: vendor/bin/phpunit --testsuite=inspector conformance: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Setup Node uses: actions/setup-node@v5 with: node-version: '22' - name: Install Composer uses: "ramsey/composer-install@v3" - name: Start conformance server run: | mkdir -p tests/Conformance/sessions tests/Conformance/logs chmod -R 777 tests/Conformance/sessions tests/Conformance/logs docker compose -f tests/Conformance/Fixtures/docker-compose.yml up -d sleep 5 - name: Run conformance tests working-directory: ./tests/Conformance run: npx @modelcontextprotocol/conformance server --url http://localhost:8000/ --expected-failures conformance-baseline.yml - name: Show logs on failure if: failure() run: | echo "=== Docker Compose Logs ===" docker compose -f tests/Conformance/Fixtures/docker-compose.yml logs echo "" echo "=== Conformance Log ===" cat tests/Conformance/logs/conformance.log 2>/dev/null || echo "No conformance log found" echo "" echo "=== Test Results (first failed test) ===" find tests/Conformance/results -name "checks.json" 2>/dev/null | head -3 | while read f; do echo "--- $f ---" cat "$f" echo "" done || echo "No results found" echo "" echo "=== Directory permissions ===" ls -la tests/Conformance/ ls -la tests/Conformance/logs/ 2>/dev/null || echo "logs dir issue" ls -la tests/Conformance/sessions/ 2>/dev/null || echo "sessions dir issue" - name: Cleanup if: always() run: docker compose -f tests/Conformance/Fixtures/docker-compose.yml down qa: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.1' coverage: "none" - name: Composer Validation run: composer validate --strict - name: Install Composer uses: "ramsey/composer-install@v3" - name: Code Style PHP run: vendor/bin/php-cs-fixer fix --dry-run - name: PHPStan run: vendor/bin/phpstan analyse - name: Documentation run: make docs