[CI] Parallelize Windows Unit tests #723
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: Unit Tests | |
| defaults: | |
| run: | |
| shell: bash | |
| on: | |
| push: | |
| paths-ignore: | |
| - 'src/*/doc/**' | |
| - 'src/**/*.md' | |
| - 'ux.symfony.com/**' | |
| - '.github/workflows/app-tests.yaml' | |
| pull_request: | |
| paths-ignore: | |
| - 'src/*/doc/**' | |
| - 'src/**/*.md' | |
| - 'ux.symfony.com/**' | |
| - '.github/workflows/app-tests.yaml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| php: | |
| runs-on: ${{ matrix.os || 'ubuntu-latest' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| php-version: ['8.1', '8.2', '8.3', '8.4'] | |
| dependency-version: [''] | |
| symfony-version: [''] | |
| minimum-stability: ['stable'] | |
| os: [''] | |
| include: | |
| # dev packages (probably not needed to have multiple such jobs) | |
| - minimum-stability: 'dev' | |
| php-version: '8.4' | |
| # lowest deps | |
| - php-version: '8.1' | |
| dependency-version: 'lowest' | |
| # LTS version of Symfony | |
| - php-version: '8.1' | |
| symfony-version: '6.4.*' | |
| - php-version: '8.1' | |
| symfony-version: '6.4.*' | |
| os: 'windows-latest' | |
| # Explicit Symfony versions | |
| - php-version: '8.1' | |
| symfony-version: '6.4.*' | |
| - php-version: '8.2' | |
| symfony-version: '7.3.*' # TODO: change to '7.4' when Symfony 7.4 is released | |
| - php-version: '8.4' | |
| symfony-version: '8.0.x-dev' # TODO: change to '8.0' when Symfony 8.0 is released | |
| minimum-stability: 'dev' # TODO: remove when Symfony 8.0 is released | |
| env: | |
| SYMFONY_REQUIRE: ${{ matrix.symfony-version || '>=5.4' }} # TODO: To change to '>=6.4' in 3.x | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Configure environment | |
| run: | | |
| echo COLUMNS=120 >> $GITHUB_ENV | |
| echo COMPOSER_MIN_STAB='composer config minimum-stability ${{ matrix.minimum-stability || 'stable' }} --ansi' >> $GITHUB_ENV | |
| echo COMPOSER_UP='composer update ${{ matrix.dependency-version == 'lowest' && '--prefer-lowest' || '' }} --no-progress --no-interaction --ansi' >> $GITHUB_ENV | |
| echo PHPUNIT='vendor/bin/simple-phpunit' >> $GITHUB_ENV | |
| [ 'lowest' = '${{ matrix.dependency-version }}' ] && export SYMFONY_DEPRECATIONS_HELPER=weak | |
| # Swup and Typed have no tests, Turbo has its own workflow file | |
| EXCLUDED_PACKAGES="Typed|Swup|Turbo" | |
| # Exclude deprecated packages when testing against lowest dependencies | |
| if [ "${{ matrix.dependency-version }}" = "lowest" ]; then | |
| EXCLUDED_PACKAGES="$EXCLUDED_PACKAGES|LazyImage|TogglePassword" | |
| fi | |
| PACKAGES=$(find src/ -mindepth 2 -type f -name composer.json -not -path "*/vendor/*" -printf '%h\n' | sed 's/^src\///' | grep -Ev "$EXCLUDED_PACKAGES" | sort | tr '\n' ' ') | |
| echo "Packages: $PACKAGES" | |
| echo "PACKAGES=$PACKAGES" >> $GITHUB_ENV | |
| - name: Install rust-parallel | |
| run: | | |
| mkdir -p "$HOME/.local/bin" | |
| if [[ "${{ matrix.os }}" == "windows-latest" ]]; then | |
| # Windows installation | |
| curl -L https://github.com/aaronriekenberg/rust-parallel/releases/download/v1.18.1/rust-parallel-x86_64-pc-windows-msvc.zip -o rust-parallel.zip | |
| unzip rust-parallel.zip -d "$HOME/.local/bin" | |
| else | |
| # Linux installation | |
| curl -L https://github.com/aaronriekenberg/rust-parallel/releases/download/v1.18.1/rust-parallel-x86_64-unknown-linux-gnu.tar.gz -o rust-parallel.tar.gz | |
| tar -xzf rust-parallel.tar.gz -C "$HOME/.local/bin" | |
| chmod +x "$HOME/.local/bin/rust-parallel" | |
| fi | |
| echo "$HOME/.local/bin" >> $GITHUB_PATH | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: ${{ matrix.php-version }} | |
| extensions: ${{ matrix.os == 'windows-latest' && 'pdo_sqlite,sqlite3,fileinfo,gd' || '' }} | |
| tools: flex | |
| - name: Get composer cache directory | |
| id: composer-cache | |
| run: | | |
| echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
| - name: Cache packages dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ steps.composer-cache.outputs.dir }} | |
| key: ${{ runner.os }}-composer-packages-${{ matrix.php-version }}-${{ matrix.dependency-version }}-${{ matrix.symfony-version }}-${{ matrix.minimum-stability }}-${{ hashFiles('src/**/composer.json') }} | |
| restore-keys: | | |
| ${{ runner.os }}-composer-packages-${{ matrix.php-version }}-${{ matrix.dependency-version }}-${{ matrix.symfony-version }}-${{ matrix.minimum-stability }} | |
| - name: Install root dependencies | |
| uses: ramsey/composer-install@v3 | |
| with: | |
| working-directory: ${{ github.workspace }} | |
| - name: Build root packages | |
| run: php .github/build-packages.php | |
| - name: Run packages tests | |
| run: | | |
| source .github/workflows/.utils.sh | |
| echo "$PACKAGES" | xargs -n1 | rust-parallel -j 3 --exit-on-error --keep-order --regex '(.+)' --shell "_run_task {1} \ | |
| 'bash -c \"(cd src/{1} \ | |
| && source .github/workflows/.utils.sh | |
| && $COMPOSER_MIN_STAB \ | |
| && $COMPOSER_UP \ | |
| && _before_test {1} ${{ matrix.php-version }} ${{ matrix.minimum-stability }} \ | |
| && $PHPUNIT)\"'" | |
| js: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node-version: [ '18.x', '20.x', '22.x', '24.x' ] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: npm i -g corepack && corepack enable | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'pnpm' | |
| cache-dependency-path: | | |
| pnpm-lock.yaml | |
| package.json | |
| src/**/package.json | |
| - run: pnpm install --frozen-lockfile | |
| - run: pnpm exec playwright install chromium | |
| - run: pnpm run test |