Skip to content

Commit f459500

Browse files
committed
Refactor CI to run Windows tests inside WSL
1 parent 775a75b commit f459500

File tree

1 file changed

+39
-84
lines changed

1 file changed

+39
-84
lines changed

.github/workflows/ci.yml

Lines changed: 39 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -18,67 +18,54 @@ jobs:
1818
matrix:
1919
os: [ubuntu-latest, windows-latest, macos-latest]
2020
php: [8.0 ,8.1 ,8.2, 8.3, 8.4]
21+
2122
steps:
2223
- uses: actions/checkout@v4
2324

24-
# PHP installation and setup using built-in tools
25+
# Setup PHP for Linux
2526
- name: Setup PHP (Ubuntu)
2627
if: matrix.os == 'ubuntu-latest'
2728
run: |
2829
sudo add-apt-repository ppa:ondrej/php
2930
sudo apt-get update
30-
sudo apt-get install -y php8.2 php8.2-cli php8.2-xml php8.2-curl php8.2-mbstring
31+
sudo apt-get install -y php${{ matrix.php }} php${{ matrix.php }}-cli php${{ matrix.php }}-xml php${{ matrix.php }}-curl php${{ matrix.php }}-mbstring
3132
php -v
3233
shell: bash
3334

35+
# Setup PHP for macOS
3436
- name: Setup PHP (macOS)
3537
if: matrix.os == 'macos-latest'
3638
run: |
37-
brew install php@8.2
38-
brew link php@8.2 --force
39+
brew install php@${{ matrix.php }}
40+
brew link php@${{ matrix.php }} --force
3941
php -v
4042
shell: bash
4143

42-
- name: Setup PHP (Windows)
44+
# Setup PHP for Windows using WSL
45+
- name: Enable WSL and Install PHP
4346
if: matrix.os == 'windows-latest'
4447
run: |
45-
choco install php --version=8.2 --params '"/ExtensionList:mbstring,curl,openssl,xml"'
46-
refreshenv
47-
# Download CA bundle
48-
Invoke-WebRequest -Uri https://curl.se/ca/cacert.pem -OutFile C:\tools\cacert.pem
49-
# Configure PHP to use the CA bundle
50-
$phpIni = php --ini | Select-String "Loaded Configuration File" | ForEach-Object { $_.Line.Split()[-1] }
51-
Add-Content $phpIni "`nopenssl.cafile = C:\tools\cacert.pem"
52-
php -v
48+
wsl --install -d Ubuntu
49+
wsl sudo apt update
50+
wsl sudo apt install -y php${{ matrix.php }} php${{ matrix.php }}-cli php${{ matrix.php }}-xml php${{ matrix.php }}-curl php${{ matrix.php }}-mbstring
51+
wsl php -v
5352
shell: pwsh
5453

55-
- name: Install Composer (Windows)
54+
# Install Composer inside WSL
55+
- name: Install Composer (Windows via WSL)
5656
if: matrix.os == 'windows-latest'
5757
run: |
58-
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
59-
php composer-setup.php
60-
php -r "unlink('composer-setup.php');"
61-
mkdir -p C:\tools\composer
62-
move composer.phar C:\tools\composer\composer
63-
echo "C:\tools\composer" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
58+
wsl php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
59+
wsl php composer-setup.php
60+
wsl php -r "unlink('composer-setup.php');"
61+
wsl sudo mv composer.phar /usr/local/bin/composer
62+
wsl sudo chmod +x /usr/local/bin/composer
63+
wsl composer -V
6464
shell: pwsh
6565

66-
- name: Install Composer (Unix)
67-
if: matrix.os != 'windows-latest'
68-
run: |
69-
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
70-
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
71-
php -r "unlink('composer-setup.php');"
72-
sudo chmod +x /usr/local/bin/composer
73-
mkdir -p ~/.composer
74-
if [ "$RUNNER_OS" == "Linux" ]; then
75-
sudo chown -R $USER:$USER ~/.composer
76-
fi
77-
shell: bash
78-
7966
- name: Get Composer Cache Directory
8067
id: composer-cache
81-
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
68+
run: echo "dir=$(wsl composer config cache-files-dir)" >> $GITHUB_OUTPUT
8269
shell: bash
8370

8471
- name: Cache Composer packages
@@ -89,17 +76,25 @@ jobs:
8976
restore-keys: |
9077
${{ runner.os }}-composer-
9178
92-
- name: Install dependencies (Windows)
79+
# Install dependencies
80+
- name: Install dependencies (Windows via WSL)
9381
if: matrix.os == 'windows-latest'
94-
run: composer install --prefer-dist --no-progress --ignore-platform-req=ext-pcntl
95-
shell: bash
82+
run: wsl composer install --prefer-dist --no-progress
83+
shell: pwsh
9684

9785
- name: Install dependencies (Unix)
9886
if: matrix.os != 'windows-latest'
9987
run: composer install --prefer-dist --no-progress
10088
shell: bash
10189

102-
- name: Run test suite
90+
# Run tests
91+
- name: Run test suite (Windows via WSL)
92+
if: matrix.os == 'windows-latest'
93+
run: wsl vendor/bin/phpunit
94+
shell: pwsh
95+
96+
- name: Run test suite (Unix)
97+
if: matrix.os != 'windows-latest'
10398
run: vendor/bin/phpunit
10499
shell: bash
105100

@@ -126,7 +121,7 @@ jobs:
126121
run: |
127122
sudo add-apt-repository ppa:ondrej/php
128123
sudo apt-get update
129-
sudo apt-get install -y php8.2 php8.2-cli php8.2-xml php8.2-mbstring
124+
sudo apt install -y php8.2 php8.2-cli php8.2-xml php8.2-mbstring
130125
shell: bash
131126

132127
- name: Install Composer
@@ -137,44 +132,14 @@ jobs:
137132
sudo chown -R $USER:$USER ~/.composer
138133
shell: bash
139134

140-
- name: Get Composer Cache Directory
141-
id: composer-cache
142-
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
143-
144-
- name: Cache Composer packages
145-
uses: actions/cache@v3
146-
with:
147-
path: ${{ steps.composer-cache.outputs.dir }}
148-
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
149-
restore-keys: |
150-
${{ runner.os }}-composer-
151-
152135
- name: Install Dependencies
153136
run: |
154137
composer install --prefer-dist --no-progress
155138
composer require --dev phpstan/phpstan --with-all-dependencies
156139
shell: bash
157140

158-
- name: Create PHPStan config
159-
run: |
160-
echo '
161-
parameters:
162-
level: 5
163-
paths:
164-
- src
165-
- tests
166-
excludePaths:
167-
- vendor/*
168-
' > phpstan.neon
169-
170141
- name: Run PHPStan
171-
run: |
172-
if [ -f "vendor/bin/phpstan" ]; then
173-
vendor/bin/phpstan analyse -c phpstan.neon
174-
else
175-
echo "PHPStan not found in vendor/bin"
176-
exit 1
177-
fi
142+
run: vendor/bin/phpstan analyse --level=5 src tests
178143
shell: bash
179144

180145
code-style:
@@ -190,7 +155,7 @@ jobs:
190155
run: |
191156
sudo add-apt-repository ppa:ondrej/php
192157
sudo apt-get update
193-
sudo apt-get install -y php8.2 php8.2-cli php8.2-xml php8.2-mbstring
158+
sudo apt install -y php8.2 php8.2-cli php8.2-xml php8.2-mbstring
194159
shell: bash
195160

196161
- name: Install Composer
@@ -201,18 +166,6 @@ jobs:
201166
sudo chown -R $USER:$USER ~/.composer
202167
shell: bash
203168

204-
- name: Get Composer Cache Directory
205-
id: composer-cache
206-
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
207-
208-
- name: Cache Composer packages
209-
uses: actions/cache@v3
210-
with:
211-
path: ${{ steps.composer-cache.outputs.dir }}
212-
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
213-
restore-keys: |
214-
${{ runner.os }}-composer-
215-
216169
- name: Install Dependencies
217170
run: |
218171
composer install --prefer-dist --no-progress
@@ -235,6 +188,8 @@ jobs:
235188
->in(__DIR__)
236189
);
237190
" > .php-cs-fixer.php
191+
shell: bash
238192

239193
- name: Check coding standards
240-
run: vendor/bin/php-cs-fixer fix --dry-run --diff
194+
run: vendor/bin/php-cs-fixer fix --dry-run --diff
195+
shell: bash

0 commit comments

Comments
 (0)