push.yml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. on:
  2. push:
  3. branches:
  4. - master
  5. pull_request:
  6. name: Qa workflow
  7. jobs:
  8. setup:
  9. runs-on: ubuntu-latest
  10. steps:
  11. - uses: actions/checkout@master
  12. - name: Restore/cache tools folder
  13. uses: actions/cache@v1
  14. with:
  15. path: tools
  16. key: all-tools-${{ github.sha }}
  17. restore-keys: |
  18. all-tools-${{ github.sha }}-
  19. all-tools-
  20. - name: composer
  21. uses: docker://composer
  22. env:
  23. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  24. with:
  25. args: install --no-interaction --prefer-dist --optimize-autoloader
  26. - name: composer-require-checker
  27. uses: docker://phpga/composer-require-checker-ga
  28. env:
  29. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  30. with:
  31. args: check --config-file ./composer-require-config.json composer.json
  32. - name: Install phive
  33. run: make install-phive
  34. - name: Install PHAR dependencies
  35. run: tools/phive.phar --no-progress install --copy --trust-gpg-keys 4AA394086372C20A,D2CCAC42F6295E7D,E82B2FB314E9906E,8E730BA25823D8B5 --force-accept-unsigned
  36. phpunit-with-coverage:
  37. runs-on: ubuntu-latest
  38. name: Unit tests
  39. needs: setup
  40. steps:
  41. - uses: actions/checkout@master
  42. - name: Restore/cache vendor folder
  43. uses: actions/cache@v1
  44. with:
  45. path: vendor
  46. key: all-build-${{ hashFiles('**/composer.lock') }}
  47. restore-keys: |
  48. all-build-${{ hashFiles('**/composer.lock') }}
  49. all-build-
  50. - name: Restore/cache tools folder
  51. uses: actions/cache@v1
  52. with:
  53. path: tools
  54. key: all-tools-${{ github.sha }}
  55. restore-keys: |
  56. all-tools-${{ github.sha }}-
  57. all-tools-
  58. - name: PHPUnit
  59. uses: docker://phpdoc/phpunit-ga:latest
  60. env:
  61. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  62. - name: Quick check code coverage level
  63. run: php tests/coverage-checker.php 89
  64. phpunit:
  65. name: Unit tests for PHP version ${{ matrix.php-versions }} on ${{ matrix.operating-system }}
  66. runs-on: ${{ matrix.operating-system }}
  67. strategy:
  68. matrix:
  69. operating-system:
  70. - ubuntu-latest
  71. - windows-latest
  72. - macOS-latest
  73. php-versions: ['7.2', '7.3', '7.4']
  74. env:
  75. extensions: mbstring
  76. key: cache-v1 # can be any string, change to clear the extension cache.
  77. needs:
  78. - setup
  79. - phpunit-with-coverage
  80. steps:
  81. - uses: actions/checkout@master
  82. - name: Setup cache environment
  83. id: cache-env
  84. uses: shivammathur/cache-extensions@v1
  85. with:
  86. php-version: ${{ matrix.php-versions }}
  87. extensions: ${{ env.extensions }}
  88. key: ${{ env.key }}
  89. - name: Cache extensions
  90. uses: actions/cache@v1
  91. with:
  92. path: ${{ steps.cache-env.outputs.dir }}
  93. key: ${{ steps.cache-env.outputs.key }}
  94. - name: Setup PHP
  95. uses: shivammathur/setup-php@master
  96. with:
  97. php-version: ${{ matrix.php-versions }}
  98. extension: ${{ env.extensions }}
  99. ini-values: memory_limit=2G, display_errors=On, error_reporting=-1
  100. - name: Restore/cache tools folder
  101. uses: actions/cache@v1
  102. with:
  103. path: tools
  104. key: all-tools-${{ github.sha }}
  105. restore-keys: |
  106. all-tools-${{ github.sha }}-
  107. all-tools-
  108. - name: Get composer cache directory
  109. id: composer-cache
  110. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  111. - name: Cache dependencies
  112. uses: actions/cache@v1
  113. with:
  114. path: ${{ steps.composer-cache.outputs.dir }}
  115. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  116. restore-keys: ${{ runner.os }}-composer-
  117. - name: Install dependencies
  118. run: composer install --no-interaction --prefer-dist --optimize-autoloader
  119. - name: Run PHPUnit
  120. continue-on-error: true
  121. run: php tools/phpunit
  122. codestyle:
  123. runs-on: ubuntu-latest
  124. needs: [setup, phpunit]
  125. steps:
  126. - uses: actions/checkout@master
  127. - name: Restore/cache vendor folder
  128. uses: actions/cache@v1
  129. with:
  130. path: vendor
  131. key: all-build-${{ hashFiles('**/composer.lock') }}
  132. restore-keys: |
  133. all-build-${{ hashFiles('**/composer.lock') }}
  134. all-build-
  135. - name: Code style check
  136. uses: phpDocumentor/coding-standard@master
  137. with:
  138. args: -s
  139. phpstan:
  140. runs-on: ubuntu-latest
  141. needs: [setup, phpunit]
  142. steps:
  143. - uses: actions/checkout@master
  144. - name: Restore/cache vendor folder
  145. uses: actions/cache@v1
  146. with:
  147. path: vendor
  148. key: all-build-${{ hashFiles('**/composer.lock') }}
  149. restore-keys: |
  150. all-build-${{ hashFiles('**/composer.lock') }}
  151. all-build-
  152. - name: PHPStan
  153. uses: phpDocumentor/phpstan-ga@0.12.3
  154. env:
  155. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  156. with:
  157. args: analyse src --configuration phpstan.neon
  158. psalm:
  159. name: Psalm
  160. runs-on: ${{ matrix.operating-system }}
  161. strategy:
  162. matrix:
  163. operating-system:
  164. - ubuntu-latest
  165. php-versions: ['7.2']
  166. env:
  167. extensions: mbstring
  168. key: cache-v1 # can be any string, change to clear the extension cache.
  169. needs:
  170. - setup
  171. - phpunit
  172. steps:
  173. - uses: actions/checkout@master
  174. - name: Setup cache environment
  175. id: cache-env
  176. uses: shivammathur/cache-extensions@v1
  177. with:
  178. php-version: ${{ matrix.php-versions }}
  179. extensions: ${{ env.extensions }}
  180. key: ${{ env.key }}
  181. - name: Cache extensions
  182. uses: actions/cache@v1
  183. with:
  184. path: ${{ steps.cache-env.outputs.dir }}
  185. key: ${{ steps.cache-env.outputs.key }}
  186. - name: Setup PHP
  187. uses: shivammathur/setup-php@master
  188. with:
  189. php-version: ${{ matrix.php-versions }}
  190. extension: ${{ env.extensions }}
  191. tools: psalm
  192. ini-values: memory_limit=2G, display_errors=On, error_reporting=-1
  193. - name: Get composer cache directory
  194. id: composer-cache
  195. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  196. - name: Cache dependencies
  197. uses: actions/cache@v1
  198. with:
  199. path: ${{ steps.composer-cache.outputs.dir }}
  200. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  201. restore-keys: ${{ runner.os }}-composer-
  202. - name: Install dependencies
  203. run: composer install --no-interaction --prefer-dist --optimize-autoloader
  204. - name: Run psalm
  205. run: psalm --output-format=github
  206. bc_check:
  207. name: BC Check
  208. runs-on: ubuntu-latest
  209. needs: [setup, phpunit]
  210. steps:
  211. - uses: actions/checkout@master
  212. - name: fetch tags
  213. run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
  214. - name: BC Check
  215. uses: docker://nyholm/roave-bc-check-ga