11name : ' Continuous Integration (CI)'
22
3- on : [push, pull_request]
3+ on :
4+ push :
5+ pull_request :
6+ schedule :
7+ - cron : ' 33 3 * * *'
8+
9+ env :
10+ COMPOSER_FLAGS : --ansi --no-interaction --no-progress
11+ COMPOSER_INSTALL_FLAGS : --prefer-dist
12+ COMPOSER_UPDATE_FLAGS : ' '
413
514jobs :
6- tests :
7- name : ' PHP ${{ matrix.php-version }} - Composer ${{ matrix.composer-version }} (${{ matrix.dependency-version }})'
15+ validation :
16+ name : Composer validation
17+ runs-on : ubuntu-latest
18+
19+ steps :
20+ - name : Checkout
21+ uses : actions/checkout@v2
22+
23+ - name : Install PHP
24+ uses : shivammathur/setup-php@v2
25+ with :
26+ coverage : none
27+ extensions : intl, zip
28+ ini-values : memory_limit=-1, error_reporting=E_ALL, display_errors=On
29+ php-version : latest
30+ tools : composer
31+
32+ - name : Composer Cache Vars
33+ id : composer-cache-vars
34+ run : |
35+ echo "::set-output name=dir::$(composer config cache-files-dir)"
36+ echo "::set-output name=timestamp::$(date +"%s")"
37+
38+ - name : Cache Composer dependencies
39+ uses : actions/cache@v2
40+ with :
41+ path : ${{ steps.composer-cache-vars.outputs.dir }}
42+ key : ${{ runner.os }}-composer-${{ steps.composer-cache-vars.outputs.timestamp }}
43+ restore-keys : |
44+ ${{ runner.os }}-composer-
845
46+ - name : Install dependencies
47+ run : composer install ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
48+
49+ - name : Validate composer.json
50+ run : composer ci:composer:validate
51+
52+ - name : Normalize composer.json
53+ run : composer ci:composer:normalize
54+
55+ - name : Check dependencies
56+ run : composer ci:composer:require-checker
57+
58+ php_lint :
59+ name : PHP Lint
60+ runs-on : ubuntu-latest
61+ continue-on-error : ${{ matrix.experimental }}
62+
63+ strategy :
64+ fail-fast : false
65+ matrix :
66+ php-version :
67+ - ' 7.2'
68+ - ' latest'
69+ experimental :
70+ - false
71+ include :
72+ - php-version : ' nightly'
73+ experimental : true
74+
75+ steps :
76+ - name : Checkout
77+ uses : actions/checkout@v2
78+
79+ - name : Install PHP
80+ uses : shivammathur/setup-php@v2
81+ with :
82+ coverage : none
83+ extensions : intl, zip
84+ ini-values : memory_limit=-1, error_reporting=E_ALL, display_errors=On
85+ php-version : ${{ matrix.php-version }}
86+
87+ - name : Composer Cache Vars
88+ id : composer-cache-vars
89+ run : |
90+ echo "::set-output name=dir::$(composer config cache-files-dir)"
91+ echo "::set-output name=timestamp::$(date +"%s")"
92+
93+ - name : Cache Composer dependencies
94+ uses : actions/cache@v2
95+ with :
96+ path : ${{ steps.composer-cache-vars.outputs.dir }}
97+ key : ${{ runner.os }}-composer-${{ matrix.php-version }}-${{ steps.composer-cache-vars.outputs.timestamp }}
98+ restore-keys : |
99+ ${{ runner.os }}-composer-${{ matrix.php-version }}-
100+ ${{ runner.os }}-composer-
101+
102+ - name : Set platform.php for nightly
103+ if : ${{ matrix.php-version == 'nightly' }}
104+ run : |
105+ composer config platform.php 8.1.99
106+
107+ - name : Install dependencies
108+ run : composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
109+
110+ - name : Lint PHP files
111+ run : composer ci:php:lint
112+
113+ php_coding_standards :
114+ name : PHP Coding Standards
115+ needs :
116+ - php_lint
117+ runs-on : ubuntu-latest
118+
119+ steps :
120+ - name : Checkout
121+ uses : actions/checkout@v2
122+
123+ - name : Install PHP
124+ uses : shivammathur/setup-php@v2
125+ with :
126+ coverage : none
127+ extensions : intl, zip
128+ ini-values : memory_limit=-1, error_reporting=E_ALL, display_errors=On
129+ php-version : latest
130+
131+ - name : Composer Cache Vars
132+ id : composer-cache-vars
133+ run : |
134+ echo "::set-output name=dir::$(composer config cache-files-dir)"
135+ echo "::set-output name=timestamp::$(date +"%s")"
136+
137+ - name : Cache Composer dependencies
138+ uses : actions/cache@v2
139+ with :
140+ path : ${{ steps.composer-cache-vars.outputs.dir }}
141+ key : ${{ runner.os }}-composer-latest-${{ steps.composer-cache-vars.outputs.timestamp }}
142+ restore-keys : |
143+ ${{ runner.os }}-composer-latest-
144+
145+ - name : Install dependencies
146+ run : composer install ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
147+
148+ - name : Validation of coding standards for PHP files
149+ run : composer ci:php:cs
150+
151+ php_stan :
152+ name : PHP Stan
153+ needs :
154+ - validation
155+ - php_coding_standards
156+ runs-on : ubuntu-latest
157+ continue-on-error : ${{ matrix.experimental }}
158+
159+ strategy :
160+ fail-fast : false
161+ matrix :
162+ php-version :
163+ - ' 7.2'
164+ - ' 7.3'
165+ - ' 7.4'
166+ - ' 8.0'
167+ - ' 8.1'
168+ - ' latest'
169+ dependencies :
170+ - ' lowest'
171+ - ' stable'
172+ - ' highest'
173+ experimental :
174+ - false
175+ include :
176+ - php-version : ' nightly'
177+ dependencies : ' lowest'
178+ experimental : true
179+ - php-version : ' nightly'
180+ dependencies : ' stable'
181+ experimental : true
182+ - php-version : ' nightly'
183+ dependencies : ' highest'
184+ experimental : true
185+
186+ steps :
187+ - name : Checkout
188+ uses : actions/checkout@v2
189+
190+ - name : Install PHP
191+ uses : shivammathur/setup-php@v2
192+ with :
193+ coverage : none
194+ extensions : intl, zip
195+ ini-values : memory_limit=-1
196+ php-version : ${{ matrix.php-version }}
197+
198+ - name : Composer Cache Vars
199+ id : composer-cache-vars
200+ run : |
201+ echo "::set-output name=dir::$(composer config cache-files-dir)"
202+ echo "::set-output name=timestamp::$(date +"%s")"
203+
204+ - name : Cache Composer dependencies
205+ uses : actions/cache@v2
206+ with :
207+ path : ${{ steps.composer-cache-vars.outputs.dir }}
208+ key : ${{ runner.os }}-composer-${{ matrix.dependencies }}-${{ matrix.php-version }}-${{ steps.composer-cache-vars.outputs.timestamp }}
209+ restore-keys : |
210+ ${{ runner.os }}-composer-${{ matrix.dependencies }}-${{ matrix.php-version }}-
211+ ${{ runner.os }}-composer-${{ matrix.dependencies }}-
212+ ${{ runner.os }}-composer-
213+
214+ - name : Handle lowest dependencies update
215+ if : contains(matrix.dependencies, 'lowest')
216+ run : echo "COMPOSER_UPDATE_FLAGS=$COMPOSER_UPDATE_FLAGS --prefer-lowest" >> $GITHUB_ENV
217+
218+ - name : Allow alpha releases for latest-deps builds to catch problems earlier
219+ if : contains(matrix.dependencies, 'highest')
220+ run : composer config minimum-stability alpha
221+
222+ - name : Set platform.php for nightly
223+ if : ${{ matrix.php-version == 'nightly' }}
224+ run : |
225+ composer config platform.php 8.1.99
226+
227+ - name : Install dependencies without deprecation rules
228+ run : |
229+ composer remove --dev phpstan/phpstan-deprecation-rules --no-update ${{ env.COMPOSER_FLAGS }}
230+ composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
231+
232+ - name : Run PHPStan
233+ run : composer ci:php:stan
234+
235+ - name : Install dependencies with deprecation rules
236+ run : |
237+ composer require --dev phpstan/phpstan-deprecation-rules --no-update ${{ env.COMPOSER_FLAGS }}
238+ composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
239+
240+ - name : Run PHPStan with deprecation rules
241+ continue-on-error : true
242+ run : composer ci:php:stan
243+
244+ tests :
245+ name : Tests
246+ needs :
247+ - php_stan
9248 runs-on : ${{ matrix.os }}
10249 continue-on-error : ${{ matrix.experimental }}
11250
@@ -19,28 +258,42 @@ jobs:
19258 - ' 7.3'
20259 - ' 7.4'
21260 - ' 8.0'
261+ - ' 8.1'
262+ - ' latest'
22263 composer-version :
23264 - ' 1'
24265 - ' 2'
25- dependency-version :
266+ dependencies :
26267 - ' lowest'
27268 - ' stable'
269+ - ' highest'
28270 experimental : [false]
29271 include :
30272 - os : ubuntu-latest
31- php-version : ' 8.1 '
273+ php-version : ' nightly '
32274 composer-version : ' 2'
33275 dependency-version : ' lowest'
34276 experimental : true
35277 - os : ubuntu-latest
36- php-version : ' 8.1 '
278+ php-version : ' nightly '
37279 composer-version : ' 2'
38280 dependency-version : ' stable'
39- experimental : false
281+ experimental : true
282+ - os : ubuntu-latest
283+ php-version : ' nightly'
284+ composer-version : ' 2'
285+ dependency-version : ' highest'
286+ experimental : true
40287 exclude :
41288 - os : ubuntu-latest
42289 php-version : ' 8.0'
43290 composer-version : ' 1'
291+ - os : ubuntu-latest
292+ php-version : ' 8.1'
293+ composer-version : ' 1'
294+ - os : ubuntu-latest
295+ php-version : ' latest'
296+ composer-version : ' 1'
44297
45298 steps :
46299 - name : Checkout
@@ -65,39 +318,28 @@ jobs:
65318 uses : actions/cache@v2
66319 with :
67320 path : ${{ steps.composer-cache-vars.outputs.dir }}
68- key : ${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.dependency-version }}-${{ matrix.php-version }}-${{ steps.composer-cache-vars.outputs.timestamp }}
321+ key : ${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.dependencies }}-${{ matrix.php-version }}-${{ steps.composer-cache-vars.outputs.timestamp }}
69322 restore-keys : |
70- ${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.dependency-version }}-${{ matrix.php-version }}-
71- ${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.dependency-version }}-
323+ ${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.dependencies }}-${{ matrix.php-version }}-
324+ ${{ runner.os }}-composer-${{ matrix.composer-version }}-${{ matrix.dependencies }}-
72325 ${{ runner.os }}-composer-${{ matrix.composer-version }}-
73326 ${{ runner.os }}-composer-
74327
75- - name : Validate composer.json
76- run : composer ci:composer:validate
77-
78- - name : Install dependencies
79- run : composer update --prefer-dist --no-progress --prefer-${{ matrix.dependency-version }} --no-interaction
80-
81- - name : Normalize composer.json
82- run : composer ci:composer:normalize
83-
84- - name : Check Composer dependencies
85- run : composer ci:composer:require-checker
328+ - name : Handle lowest dependencies update
329+ if : contains(matrix.dependencies, 'lowest')
330+ run : echo "COMPOSER_UPDATE_FLAGS=$COMPOSER_UPDATE_FLAGS --prefer-lowest" >> $GITHUB_ENV
86331
87- - name : Lint PHP files
88- if : always( )
89- run : composer ci:php:lint
332+ - name : Allow alpha releases for latest-deps builds to catch problems earlier
333+ if : contains(matrix.dependencies, 'highest' )
334+ run : composer config minimum-stability alpha
90335
91- - name : Check code styling
92- env :
93- PHP_CS_FIXER_IGNORE_ENV : 1
94- if : always()
95- run : composer ci:php:cs
336+ - name : Set platform.php for nightly
337+ if : ${{ matrix.php-version == 'nightly' }}
338+ run : |
339+ composer config platform.php 8.1.99
96340
97- - name : PHP Stan
98- continue-on-error : ${{ matrix.php-version != '7.2' }}
99- if : always()
100- run : composer ci:php:stan
341+ - name : Install dependencies
342+ run : composer update ${{ env.COMPOSER_UPDATE_FLAGS }} ${{ env.COMPOSER_INSTALL_FLAGS }} ${{ env.COMPOSER_FLAGS }}
101343
102344 - name : Unit Tests
103345 continue-on-error : ${{ matrix.experimental }}
0 commit comments