main.yml 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. name: main
  2. on: [ push, pull_request ]
  3. jobs:
  4. test:
  5. runs-on: ubuntu-latest
  6. strategy:
  7. matrix:
  8. experimental:
  9. - false
  10. php-version:
  11. - '7.3'
  12. - '7.4'
  13. - '8.0'
  14. - '8.1'
  15. include:
  16. - php-version: '8.2'
  17. experimental: true
  18. name: PHP ${{ matrix.php-version }}
  19. steps:
  20. - name: Checkout
  21. uses: actions/checkout@v2
  22. - name: Setup PHP, with composer and extensions
  23. uses: shivammathur/setup-php@v2
  24. with:
  25. php-version: ${{ matrix.php-version }}
  26. extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
  27. coverage: none
  28. - name: Get composer cache directory
  29. id: composer-cache
  30. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  31. - name: Cache composer dependencies
  32. uses: actions/cache@v2
  33. with:
  34. path: ${{ steps.composer-cache.outputs.dir }}
  35. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  36. restore-keys: ${{ runner.os }}-composer-
  37. - name: Delete composer lock file
  38. id: composer-lock
  39. if: ${{ matrix.php-version == '8.1' || matrix.php-version == '8.2' }}
  40. run: |
  41. rm composer.lock
  42. echo "::set-output name=flags::--ignore-platform-reqs"
  43. - name: Install dependencies
  44. run: composer update --no-progress --prefer-dist --optimize-autoloader ${{ steps.composer-lock.outputs.flags }}
  45. - name: Setup problem matchers for PHP
  46. run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
  47. - name: Setup problem matchers for PHPUnit
  48. run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
  49. - name: "Run PHPUnit tests (Experimental: ${{ matrix.experimental }})"
  50. env:
  51. FAILURE_ACTION: "${{ matrix.experimental == true }}"
  52. run: vendor/bin/phpunit --verbose || $FAILURE_ACTION
  53. php-cs-fixer:
  54. runs-on: ubuntu-latest
  55. steps:
  56. - name: Checkout
  57. uses: actions/checkout@v2
  58. - name: Setup PHP, with composer and extensions
  59. uses: shivammathur/setup-php@v2
  60. with:
  61. php-version: 7.4
  62. extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
  63. coverage: none
  64. tools: cs2pr
  65. - name: Get composer cache directory
  66. id: composer-cache
  67. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  68. - name: Cache composer dependencies
  69. uses: actions/cache@v2
  70. with:
  71. path: ${{ steps.composer-cache.outputs.dir }}
  72. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  73. restore-keys: ${{ runner.os }}-composer-
  74. - name: Install dependencies
  75. run: composer install --no-progress --prefer-dist --optimize-autoloader
  76. - name: Code style with PHP-CS-Fixer
  77. run: ./vendor/bin/php-cs-fixer fix --format=checkstyle | cs2pr
  78. phpcs:
  79. runs-on: ubuntu-latest
  80. steps:
  81. - name: Checkout
  82. uses: actions/checkout@v2
  83. - name: Setup PHP, with composer and extensions
  84. uses: shivammathur/setup-php@v2
  85. with:
  86. php-version: 7.4
  87. extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
  88. coverage: none
  89. tools: cs2pr
  90. - name: Get composer cache directory
  91. id: composer-cache
  92. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  93. - name: Cache composer dependencies
  94. uses: actions/cache@v2
  95. with:
  96. path: ${{ steps.composer-cache.outputs.dir }}
  97. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  98. restore-keys: ${{ runner.os }}-composer-
  99. - name: Install dependencies
  100. run: composer install --no-progress --prefer-dist --optimize-autoloader
  101. - name: Code style with PHP_CodeSniffer
  102. run: ./vendor/bin/phpcs -q --report=checkstyle | cs2pr
  103. versions:
  104. runs-on: ubuntu-latest
  105. steps:
  106. - name: Checkout
  107. uses: actions/checkout@v2
  108. - name: Setup PHP, with composer and extensions
  109. uses: shivammathur/setup-php@v2
  110. with:
  111. php-version: 7.4
  112. extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
  113. coverage: none
  114. tools: cs2pr
  115. - name: Get composer cache directory
  116. id: composer-cache
  117. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  118. - name: Cache composer dependencies
  119. uses: actions/cache@v2
  120. with:
  121. path: ${{ steps.composer-cache.outputs.dir }}
  122. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  123. restore-keys: ${{ runner.os }}-composer-
  124. - name: Install dependencies
  125. run: composer install --no-progress --prefer-dist --optimize-autoloader
  126. - name: Code Version Compatibility check with PHP_CodeSniffer
  127. run: ./vendor/bin/phpcs -q --report-width=200 --report=summary,full src/ --standard=PHPCompatibility --runtime-set testVersion 7.3-
  128. phpstan:
  129. runs-on: ubuntu-latest
  130. steps:
  131. - name: Checkout
  132. uses: actions/checkout@v2
  133. - name: Setup PHP, with composer and extensions
  134. uses: shivammathur/setup-php@v2
  135. with:
  136. php-version: 7.4
  137. extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
  138. coverage: none
  139. tools: cs2pr
  140. - name: Get composer cache directory
  141. id: composer-cache
  142. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  143. - name: Cache composer dependencies
  144. uses: actions/cache@v2
  145. with:
  146. path: ${{ steps.composer-cache.outputs.dir }}
  147. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  148. restore-keys: ${{ runner.os }}-composer-
  149. - name: Install dependencies
  150. run: composer install --no-progress --prefer-dist --optimize-autoloader
  151. - name: Static analysis with PHPStan
  152. run: ./vendor/bin/phpstan analyse
  153. coverage:
  154. runs-on: ubuntu-latest
  155. steps:
  156. - name: Checkout
  157. uses: actions/checkout@v2
  158. - name: Setup PHP, with composer and extensions
  159. uses: shivammathur/setup-php@v2
  160. with:
  161. php-version: 7.4
  162. extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
  163. coverage: pcov
  164. - name: Get composer cache directory
  165. id: composer-cache
  166. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  167. - name: Cache composer dependencies
  168. uses: actions/cache@v2
  169. with:
  170. path: ${{ steps.composer-cache.outputs.dir }}
  171. key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  172. restore-keys: ${{ runner.os }}-composer-
  173. - name: Install dependencies
  174. run: composer install --no-progress --prefer-dist --optimize-autoloader
  175. - name: Coverage
  176. run: |
  177. ./vendor/bin/phpunit --coverage-clover coverage-clover.xml
  178. curl -LO https://scrutinizer-ci.com/ocular.phar
  179. php ocular.phar code-coverage:upload --format=php-clover coverage-clover.xml
  180. release:
  181. runs-on: ubuntu-latest
  182. if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
  183. steps:
  184. - uses: actions/checkout@v2
  185. with:
  186. ref: ${{ github.ref }} # Otherwise our annotated tag is not fetched and we cannot get correct version
  187. # Create release
  188. - name: Get release info
  189. id: release-info
  190. run: |
  191. echo "::set-output name=subject::$(git tag --format '%(contents:subject)' --points-at)"
  192. git tag --format '%(contents:body)' --points-at > release-body.txt
  193. - uses: actions/create-release@v1
  194. env:
  195. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
  196. with:
  197. tag_name: ${{ github.ref }}
  198. release_name: ${{ steps.release-info.outputs.subject }}
  199. body_path: release-body.txt