Skip to content

Commit d0a34e1

Browse files
authored
[TASK] Add PHP 8.1 and nightly to CI (#26)
Resolves #13
1 parent d46303e commit d0a34e1

File tree

2 files changed

+298
-51
lines changed

2 files changed

+298
-51
lines changed

.github/workflows/continuous-integration.yml

Lines changed: 275 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,250 @@
11
name: '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

514
jobs:
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

Comments
 (0)