@@ -2,51 +2,89 @@ name: 'CI reusable workflow'
22
33on :
44 workflow_call :
5+ inputs :
6+ # >>>> Dummy env-inputs
7+ # Goal here is just to have access to variable values
8+ # in order to build job matrix as `env` variable is not available there
9+ php-min-version :
10+ default : ' 8.0'
11+ description : Lowest PHP version to assess (e.g Lowest supported version including security support)
12+ required : false
13+ type : string
14+ php-max-version :
15+ default : ' 8.2'
16+ description : Highest PHP version to assess (e.g Latest supported version)
17+ required : false
18+ type : string
19+ php-next-version :
20+ default : ' 8.3'
21+ description : Next (currently not supported) PHP version to assess (e.g Current dev version)
22+ required : false
23+ type : string
24+ symfony-min-version :
25+ default : ' 4.4'
26+ description : Lowest Symfony version to assess (e.g Lowest supported version including security support)
27+ required : false
28+ type : string
29+ symfony-max-version :
30+ default : ' 6.0'
31+ description : Highest Symfony version to assess (e.g Latest supported version)
32+ required : false
33+ type : string
34+ symfony-next-version :
35+ default : ' 6.3'
36+ description : Next (currently not supported) Symfony version to assess (e.g Current dev version)
37+ required : false
38+ type : string
39+ # <<<< Dummy env-inputs
540
641env :
742 TEST_OUTPUT_STYLE : pretty
843 COMPOSER_OPTIONS : --optimize-autoloader
944
1045jobs :
1146 tests :
12- name : PHP ${{ matrix.php-version }} & Symfony ${{ matrix.symfony-version }}
47+ name : Tests - ${{ matrix.job-name }}
1348 runs-on : ubuntu-latest
1449 env :
1550 COVERAGE_TYPE : none
51+ COVERAGE_OUTPUT_STYLE : clover
1652 strategy :
1753 fail-fast : true
1854 max-parallel : 4
1955 matrix :
2056 include :
21- # Bare minimum => Lowest versions allowed by composer config
22- - symfony-version : ' 4.4'
23- php-version : ' 8.0'
24- composer-flag : --prefer-lowest
25- # Up to date versions => Latest versions allowed by composer config
26- - symfony-version : ' 5.4'
27- php-version : ' 8.2'
28- # Late symfony migration => Lowest symfony version with latest minor php version allowed by composer config
29- - symfony-version : ' 4.4'
30- php-version : ' 8.2'
31- composer-flag : --prefer-lowest
32- # Late php migration => Latest symfony version with lowest minor php version allowed by composer config
33- - symfony-version : ' 5.4'
34- php-version : ' 8.0'
35- # Symfony 6.0 latest
36- - symfony-version : ' 6.0'
37- php-version : ' 8.2'
38- # Symfony 6.0 lowest
39- - symfony-version : ' 6.0'
40- php-version : ' 8.0'
41- composer-flag : --prefer-lowest
57+ - job-name : Bare minimum # => Lowest versions allowed by composer config
58+ symfony-version : ' ${{ inputs.symfony-min-version }}'
59+ php-version : ' ${{ inputs.php-min-version }}'
60+ composer-prefer-lowest : true
61+ - job-name : Up to date versions # => Latest versions allowed by composer config
62+ symfony-version : ' ${{ inputs.symfony-max-version }}'
63+ php-version : ' ${{ inputs.php-max-version }}'
64+ - job-name : Late symfony migration # => Lowest symfony version with latest php version allowed by composer config
65+ symfony-version : ' ${{ inputs.symfony-min-version }}'
66+ php-version : ' ${{ inputs.php-max-version }}'
67+ composer-prefer-lowest : true
68+ - job-name : Late php migration # => Latest symfony version with lowest php version allowed by composer config
69+ symfony-version : ' ${{ inputs.symfony-max-version }}'
70+ php-version : ' ${{ inputs.php-min-version }}'
71+ composer-prefer-lowest : true
72+ - job-name : Bare minimum on latest versions # => Lowest latest versions allowed by composer config
73+ symfony-version : ' ${{ inputs.symfony-max-version }}'
74+ php-version : ' ${{ inputs.php-max-version }}'
75+ composer-prefer-lowest : true
76+ - job-name : Up to date bare minimum # => Latest lowest versions allowed by composer config
77+ symfony-version : ' ${{ inputs.symfony-min-version }}'
78+ php-version : ' ${{ inputs.php-min-version }}'
4279 steps :
4380 - name : Check out code
4481 uses : actions/checkout@v4
4582
83+ # Enable coverage only for specific version(s) !
84+ # Usually latest version(s), plus additional ones in case of code used only with specific versions
4685 - name : Enable coverage
47- if : ${{ matrix.php-version == '8.2' }}
86+ if : ${{ matrix.php-version == inputs.php-max-version }}
4887 run : |
49- echo "COVERAGE_OUTPUT_STYLE=clover" >> $GITHUB_ENV
5088 echo "COVERAGE_TYPE=xdebug" >> $GITHUB_ENV
5189
5290 - name : Setup PHP ${{ matrix.php-version }}
@@ -67,21 +105,21 @@ jobs:
67105 ~/.composer
68106 ./vendor
69107 # Clear the cache if composer json (as composer.lock is in the repo) has been updated
70- key : tests-${{ matrix.php-version }}-${{ matrix.symfony-version }}-${{ matrix. composer-flag }}- ${{ hashFiles('composer.json') }}
108+ key : tests-${{ matrix.php-version }}-${{ matrix.symfony-version }}-${{ hashFiles(' composer.json') }}${{ matrix.composer-prefer-lowest == true && '-lowest' || '' }}
71109
72110 - name : Build
73111 run : |
74112 SF_VERSION=${{ matrix.symfony-version }}
75113 # Issue with ParamterBag below 4.4.30 => https://github.com/symfony/symfony/commit/3eca446b21607ea1c7a865ece2dd8254c33679cc
76114 test '${{ matrix.symfony-version }}' = '4.4' && test '${{ matrix.php-version }}' = '8.2' && SF_VERSION=4.4.30
77- composer require -W ${{ env.COMPOSER_OPTIONS }} ${{ matrix.composer-flag }} \
115+ composer require -W ${{ env.COMPOSER_OPTIONS }} ${{ matrix.composer-prefer-lowest == true && '--prefer-lowest' || '' }} \
78116 symfony/http-foundation:^$SF_VERSION \
79117 symfony/http-kernel:^$SF_VERSION \
80118 symfony/config:^$SF_VERSION \
81119 symfony/dependency-injection:^$SF_VERSION \
82120 symfony/event-dispatcher:^$SF_VERSION \
83121 symfony/routing:^$SF_VERSION \
84- && composer update ${{ env.COMPOSER_OPTIONS }} ${{ matrix.composer-flag }} \
122+ && composer update ${{ env.COMPOSER_OPTIONS }} ${{ matrix.composer-prefer-lowest == true && '--prefer-lowest' || '' }} \
85123 && make build
86124
87125 - name : Tests
@@ -121,7 +159,7 @@ jobs:
121159 if : ${{ env.COVERAGE_TYPE == 'xdebug' }}
122160 uses : actions/upload-artifact@v4
123161 with :
124- name : coverage-groups-php${{ matrix.php-version }}-sf${{ matrix.symfony-version }}
162+ name : coverage-groups-php${{ matrix.php-version }}-sf${{ matrix.symfony-version }}${{ matrix.composer-prefer-lowest == true && '-lowest' || '' }}
125163 path : build/coverage-groups
126164 if-no-files-found : error
127165
@@ -131,15 +169,15 @@ jobs:
131169 steps :
132170 - uses : actions/checkout@v4
133171
134- - name : Setup PHP 8.2
172+ - name : Setup PHP ${{ inputs.php-max-version }}
135173 uses : shivammathur/setup-php@v2
174+ env :
175+ update : true # Always use latest available patch for the version
176+ fail-fast : true # step will fail if an extension or tool fails to set up
136177 with :
137- php-version : 8.2 # Latest supported
178+ php-version : ${{ inputs.php-max-version }}
138179 tools : composer
139180 coverage : none
140- env :
141- # Always use latest available patch for the version
142- update : true
143181
144182 - name : Setup cache
145183 id : cache
@@ -148,7 +186,7 @@ jobs:
148186 path : |
149187 ~/.composer
150188 # Clear the cache if composer json (as composer.lock is in the repo) has been updated
151- key : tests-${{ env.PHP_VERSION }}-${{ hashFiles('composer.json') }}
189+ key : tests-${{ inputs.php-max-version }}-${{ hashFiles('composer.json') }}
152190
153191 - name : Build
154192 run : make build
@@ -161,39 +199,51 @@ jobs:
161199 uses : actions/dependency-review-action@v4
162200
163201 nightly-tests :
164- name : Nightly - PHP ${{ matrix.php-version }} & Symfony ${{ matrix.symfony-version }}
202+ name : Nightly - ${{ matrix.job-name }}
165203 runs-on : ubuntu-latest
166204 env :
167- COMPOSER_OPTIONS : ' --optimize-autoloader --ignore-platform-req=php+'
205+ COMPOSER_OPTIONS : ' --optimize-autoloader --prefer-dist'
206+ COMPOSER_PREFER_STABLE : ' 1'
207+ COMPOSER_IGNORE_PLATFORM_REQ : ' php+'
168208 continue-on-error : true
169- needs : [ static-checks, tests ]
209+ needs : [ tests ]
170210 strategy :
171211 fail-fast : false
172212 max-parallel : 4
173213 matrix :
174- php-version :
175- - ' 8.3' # Current php dev version
176- symfony-version :
177- - ' 4.4' # Lowest LTS
178- - ' 5.4' # Latest LTS
179- - ' 6.0' # Current major version
180214 include :
181- - symfony-version : ' 6.3' # Next symfony minor version to manage with latest supported PHP version
182- php-version : ' 8.2'
215+ - job-name : PHP upgrade with lowest dependencies versions # => Lowest supported symfony version against next php version
216+ php-version : ${{ inputs.php-next-version }}
217+ symfony-version : ${{ inputs.symfony-min-version }}
218+ composer-prefer-lowest : true
219+ # Fix - behat/gherkin => Avoid issue with behat <-> gherkin packages (See https://github.com/Behat/Gherkin/issues/317)
220+ # Fix - matthiasnoback/symfony-config-test => Avoid issue with phpunit <-> symfony-config-test packages
221+ pkg-extra-constraints : |
222+ behat/gherkin:~4.12.0
223+ matthiasnoback/symfony-config-test:^4.3
224+ - job-name : PHP upgrade with highest dependencies versions # => Highest supported symfony version against next php version
225+ php-version : ${{ inputs.php-next-version }}
226+ symfony-version : ${{ inputs.symfony-max-version }}
227+ - job-name : Dependency upgrade with lowest php version - Symfony # => Next symfony version against lowest supported PHP version
228+ php-version : ${{ 8.1 < inputs.php-min-version && '8.1' || inputs.php-min-version }} # Fix - Sf 6.3 (current next) require php 8.1 minimum !
229+ symfony-version : ${{ inputs.symfony-next-version }}
230+ - job-name : Dependency upgrade with highest php version - Symfony # => Next symfony version against highest supported PHP version
231+ php-version : ${{ inputs.php-max-version }}
232+ symfony-version : ${{ inputs.symfony-next-version }}
183233
184234 steps :
185235 - name : Check out code
186236 uses : actions/checkout@v4
187237
188238 - name : Setup PHP ${{ matrix.php-version }}
189239 uses : shivammathur/setup-php@v2
240+ env :
241+ update : true # Always use latest available patch for the version
242+ fail-fast : true # step will fail if an extension or tool fails to set up
190243 with :
191244 php-version : ' ${{ matrix.php-version }}'
192245 tools : composer
193246 coverage : none
194- env :
195- # Always use latest available patch for the version
196- update : true
197247
198248 - name : Setup cache
199249 id : cache
@@ -203,19 +253,20 @@ jobs:
203253 ~/.composer
204254 ./vendor
205255 # Clear the cache if composer json (as composer.lock is in the repo) has been updated
206- key : tests-${{ matrix.php-version }}-${{ matrix.symfony-version }}-${{ hashFiles('composer.json') }}
256+ key : tests-${{ matrix.php-version }}-${{ matrix.symfony-version }}-${{ hashFiles('composer.json') }}${{ matrix.composer-prefer-lowest == true && '-lowest' || '' }}
207257
208258 - name : Build
209259 run : |
210260 composer config minimum-stability dev \
211- && composer require -W ${{ env.COMPOSER_OPTIONS }} \
261+ && composer require -W ${{ env.COMPOSER_OPTIONS }} ${{ matrix.composer-prefer-lowest == true && '--prefer-lowest' || '' }} \
212262 symfony/http-foundation:^${{ matrix.symfony-version }} \
213263 symfony/http-kernel:^${{ matrix.symfony-version }} \
214264 symfony/config:^${{ matrix.symfony-version }} \
215265 symfony/dependency-injection:^${{ matrix.symfony-version }} \
216266 symfony/event-dispatcher:^${{ matrix.symfony-version }} \
217267 symfony/routing:^${{ matrix.symfony-version }} \
218- && composer update ${{ env.COMPOSER_OPTIONS }} \
268+ ${{ matrix.pkg-extra-constraints }} \
269+ && composer update ${{ env.COMPOSER_OPTIONS }} ${{ matrix.composer-prefer-lowest == true && '--prefer-lowest' || '' }} \
219270 && make build
220271
221272 - name : Test
0 commit comments