v4.0.0 - Complete Bundle Redesign with Modern Architecture #65
Workflow file for this run
This file contains hidden or 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: CI | |
| on: | |
| push: | |
| branches: | |
| - 'main' | |
| - 'legacy/*' # Legacy branches: legacy/v3.x | |
| - 'feature/*' # Feature branches: feature/new-feature | |
| - 'hotfix/*' # Hotfix branches: hotfix/urgent-fix | |
| - 'release/*' # Release branches: release/v4.0.0 | |
| pull_request: | |
| branches: | |
| - 'main' | |
| - 'legacy/*' # PRs to legacy branches | |
| workflow_dispatch: # Allows manual triggering via GitHub UI | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Symfony 6.4 LTS compatibility | |
| - php: '8.2' | |
| symfony-version: '6.4.*' | |
| allowed-to-fail: false | |
| - php: '8.3' | |
| symfony-version: '6.4.*' | |
| allowed-to-fail: false | |
| - php: '8.4' | |
| symfony-version: '6.4.*' | |
| allowed-to-fail: false | |
| # Symfony 7.x current versions | |
| - php: '8.2' | |
| symfony-version: '7.0.*' | |
| allowed-to-fail: false | |
| - php: '8.3' | |
| symfony-version: '7.0.*' | |
| allowed-to-fail: false | |
| - php: '8.4' | |
| symfony-version: '7.0.*' | |
| allowed-to-fail: false | |
| - php: '8.3' | |
| symfony-version: '7.1.*' | |
| allowed-to-fail: false | |
| - php: '8.4' | |
| symfony-version: '7.1.*' | |
| allowed-to-fail: false | |
| - php: '8.4' | |
| symfony-version: '7.2.*' | |
| allowed-to-fail: false | |
| - php: '8.4' | |
| symfony-version: '7.3.*' | |
| allowed-to-fail: false | |
| - php: '8.4' | |
| symfony-version: '7.4.*' | |
| allowed-to-fail: false | |
| # Symfony 8.0 - Requires PHP 8.4+ | |
| - php: '8.4' | |
| symfony-version: '8.0.*' | |
| allowed-to-fail: false | |
| # PHP 8.5 with various Symfony versions | |
| - php: '8.5' | |
| symfony-version: '7.3.*' | |
| allowed-to-fail: false | |
| - php: '8.5' | |
| symfony-version: '7.4.*' | |
| allowed-to-fail: false | |
| - php: '8.5' | |
| symfony-version: '8.0.*' | |
| allowed-to-fail: false | |
| name: "PHP ${{ matrix.php }}${{ matrix.symfony-version && format(' | Symfony {0}', matrix.symfony-version) || '' }}${{ matrix.stability && format(' | {0}', matrix.stability) || '' }}" | |
| continue-on-error: ${{ matrix.allowed-to-fail }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: ${{ matrix.php }} | |
| extensions: json, mbstring, tokenizer | |
| coverage: none | |
| tools: composer:v2 | |
| - 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: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
| restore-keys: ${{ runner.os }}-composer- | |
| - name: Configure stability | |
| if: matrix.stability | |
| run: | | |
| composer config minimum-stability ${{ matrix.stability }} | |
| composer config prefer-stable true | |
| - name: Configure Symfony version | |
| if: matrix.symfony-version | |
| run: | | |
| composer require --no-update \ | |
| symfony/config:${{ matrix.symfony-version }} \ | |
| symfony/dependency-injection:${{ matrix.symfony-version }} \ | |
| symfony/http-kernel:${{ matrix.symfony-version }} \ | |
| symfony/security-core:${{ matrix.symfony-version }} \ | |
| symfony/phpunit-bridge:${{ matrix.symfony-version }} | |
| - name: Remove composer.lock | |
| run: rm -f composer.lock | |
| - name: Install dependencies | |
| run: composer update --prefer-dist --no-interaction --no-progress | |
| - name: Validate composer.json and composer.lock | |
| run: | | |
| if [[ "${{ github.ref }}" == *"beta"* || "${{ github.ref }}" == *"alpha"* || "${{ github.ref }}" == *"rc"* ]]; then | |
| composer validate --no-check-version | |
| else | |
| composer validate --strict | |
| fi | |
| - name: Run code style check | |
| run: composer cs | |
| - name: Run static analysis | |
| run: | | |
| if [[ "${{ matrix.symfony-version }}" == "8.0.*" ]]; then | |
| # Symfony 8.0: Use specific baseline for remaining issues | |
| vendor/bin/phpstan analyse src --level=8 --configuration phpstan/symfony8-baseline.neon | |
| elif [[ "${{ matrix.symfony-version }}" == "7.4.*" ]]; then | |
| # Symfony 7.4 LTS: Functionally identical to 8.0, needs same baseline | |
| vendor/bin/phpstan analyse src --level=8 --configuration phpstan/symfony74-baseline.neon | |
| elif [[ "${{ matrix.symfony-version }}" == "6.4.*" || "${{ matrix.symfony-version }}" == "7.0.*" || "${{ matrix.symfony-version }}" == "7.1.*" || "${{ matrix.symfony-version }}" == "7.2.*" || "${{ matrix.symfony-version }}" == "7.3.*" ]]; then | |
| # Older Symfony versions 6.4-7.3: Use legacy baseline for children() issue | |
| composer analyse-legacy | |
| else | |
| # Future versions: Try without baseline first | |
| composer analyse | |
| fi | |
| - name: Run tests | |
| run: composer test | |
| env: | |
| DISCOGS_CONSUMER_KEY: ${{ secrets.DISCOGS_CONSUMER_KEY }} | |
| DISCOGS_CONSUMER_SECRET: ${{ secrets.DISCOGS_CONSUMER_SECRET }} | |
| DISCOGS_PERSONAL_ACCESS_TOKEN: ${{ secrets.DISCOGS_PERSONAL_ACCESS_TOKEN }} | |
| code-quality: | |
| runs-on: ubuntu-latest | |
| name: Code Quality Checks | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: '8.4' | |
| extensions: json, mbstring, tokenizer | |
| coverage: none | |
| tools: composer:v2 | |
| - 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: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
| restore-keys: ${{ runner.os }}-composer- | |
| - name: Install dependencies | |
| run: composer install --prefer-dist --no-interaction --no-progress | |
| - name: Validate composer.json and composer.lock | |
| run: | | |
| if [[ "${{ github.ref }}" == *"beta"* || "${{ github.ref }}" == *"alpha"* || "${{ github.ref }}" == *"rc"* ]]; then | |
| composer validate --no-check-version | |
| else | |
| composer validate --strict | |
| fi | |
| coverage: | |
| runs-on: ubuntu-latest | |
| name: Code Coverage | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: '8.4' | |
| extensions: json, mbstring, tokenizer | |
| coverage: xdebug | |
| tools: composer:v2 | |
| - 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: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | |
| restore-keys: ${{ runner.os }}-composer- | |
| - name: Install dependencies | |
| run: composer install --prefer-dist --no-interaction --no-progress | |
| - name: Run tests with coverage | |
| run: composer test-coverage | |
| env: | |
| DISCOGS_CONSUMER_KEY: ${{ secrets.DISCOGS_CONSUMER_KEY }} | |
| DISCOGS_CONSUMER_SECRET: ${{ secrets.DISCOGS_CONSUMER_SECRET }} | |
| DISCOGS_PERSONAL_ACCESS_TOKEN: ${{ secrets.DISCOGS_PERSONAL_ACCESS_TOKEN }} | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| file: ./coverage.xml | |
| flags: unittests | |
| name: codecov-umbrella | |
| fail_ci_if_error: false |