ci.yml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. name: CakePHP CI
  2. on:
  3. push:
  4. branches:
  5. - 3.x
  6. - 3.next
  7. pull_request:
  8. branches:
  9. - '*'
  10. jobs:
  11. testsuite:
  12. runs-on: ubuntu-18.04
  13. strategy:
  14. fail-fast: false
  15. matrix:
  16. php-version: ['5.6', '7.4']
  17. db-type: [sqlite, mysql, pgsql]
  18. prefer-lowest: ['']
  19. include:
  20. - php-version: '5.6'
  21. db-type: 'mysql'
  22. prefer-lowest: 'prefer-lowest'
  23. services:
  24. redis:
  25. image: redis
  26. ports:
  27. - 6379/tcp
  28. memcached:
  29. image: memcached
  30. ports:
  31. - 11211/tcp
  32. steps:
  33. - name: Setup MySQL 5.7
  34. if: matrix.db-type == 'mysql' && matrix.php-version != '5.6'
  35. run: docker run --rm --name=mysqld -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=cakephp -p 3306:3306 -d mysql:5.7
  36. - name: Setup MySQL 5.6
  37. if: matrix.db-type == 'mysql' && matrix.php-version == '5.6'
  38. run: docker run --rm --name=mysqld -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=cakephp -p 3306:3306 -d mysql:5.6 --character-set-server=utf8
  39. - name: Setup PostgreSQL latest
  40. if: matrix.db-type == 'pgsql' && matrix.php-version != '5.6'
  41. run: docker run --rm --name=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=cakephp -p 5432:5432 -d postgres
  42. - name: Setup PostgreSQL 9.4
  43. if: matrix.db-type == 'pgsql' && matrix.php-version == '5.6'
  44. run: docker run --rm --name=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=cakephp -p 5432:5432 -d postgres:9.4
  45. - uses: actions/checkout@v1
  46. with:
  47. fetch-depth: 1
  48. - name: Setup PHP
  49. uses: shivammathur/setup-php@v2
  50. with:
  51. php-version: ${{ matrix.php-version }}
  52. extensions: mbstring, intl, apcu, memcached, redis, pdo_${{ matrix.db-type }}
  53. ini-values: apc.enable_cli = 1
  54. coverage: pcov
  55. - name: Get composer cache directory
  56. id: composer-cache
  57. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  58. - name: Get date part for cache key
  59. id: key-date
  60. run: echo "::set-output name=date::$(date +'%Y-%m')"
  61. - name: Cache composer dependencies
  62. uses: actions/cache@v1
  63. with:
  64. path: ${{ steps.composer-cache.outputs.dir }}
  65. key: ${{ runner.os }}-composer-${{ steps.key-date.outputs.date }}-${{ hashFiles('composer.json') }}-${{ matrix.prefer-lowest }}
  66. - name: Install packages
  67. run: |
  68. sudo locale-gen da_DK.UTF-8
  69. sudo locale-gen de_DE.UTF-8
  70. - name: Composer install
  71. run: |
  72. if [[ ${{ matrix.php-version }} == '8.0' ]]; then
  73. composer install --ignore-platform-reqs
  74. elif ${{ matrix.prefer-lowest == 'prefer-lowest' }}; then
  75. composer update --prefer-lowest --prefer-stable
  76. else
  77. composer update
  78. fi
  79. if [[ ${{ matrix.php-version }} == '7.4' ]]; then
  80. composer require --dev pcov/clobber
  81. fi
  82. - name: Configure PHPUnit matcher
  83. if: matrix.php-version == '7.4' && matrix.db-type == 'mysql'
  84. run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
  85. - name: Run PHPUnit
  86. env:
  87. REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
  88. MEMCACHED_PORT: ${{ job.services.memcached.ports['11211'] }}
  89. run: |
  90. if [[ ${{ matrix.db-type }} == 'sqlite' ]]; then export db_dsn='sqlite:///:memory:'; fi
  91. if [[ ${{ matrix.db-type }} == 'mysql' && ${{ matrix.php-version }} != '5.6' ]]; then export db_dsn='mysql://root:root@127.0.0.1/cakephp?init[]=SET sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"'; fi
  92. if [[ ${{ matrix.db-type }} == 'mysql' && ${{ matrix.php-version }} == '5.6' ]]; then export db_dsn='mysql://root:root@127.0.0.1/cakephp?encoding=utf8'; fi
  93. if [[ ${{ matrix.db-type }} == 'pgsql' ]]; then export db_dsn='postgres://postgres:postgres@127.0.0.1/postgres'; fi
  94. if [[ ${{ matrix.php-version }} == '7.4' ]]; then
  95. export CODECOVERAGE=1 && vendor/bin/pcov clobber; vendor/bin/phpunit --coverage-clover=coverage.xml
  96. else
  97. vendor/bin/phpunit
  98. fi
  99. - name: Submit code coverage
  100. if: matrix.php-version == '7.4'
  101. uses: codecov/codecov-action@v1
  102. testsuite-windows:
  103. runs-on: windows-2019
  104. name: Windows - PHP 7.4 & SQL Server
  105. env:
  106. EXTENSIONS: mbstring, intl, apcu, pdo_sqlsrv
  107. PHP_VERSION: '7.4'
  108. steps:
  109. - uses: actions/checkout@v1
  110. with:
  111. fetch-depth: 1
  112. - name: Get date part for cache key
  113. id: key-date
  114. run: echo "::set-output name=date::$(date +'%Y-%m')"
  115. - name: Setup PHP extensions cache
  116. id: php-ext-cache
  117. uses: shivammathur/cache-extensions@v1
  118. with:
  119. php-version: ${{ env.PHP_VERSION }}
  120. extensions: ${{ env.EXTENSIONS }}
  121. key: ${{ steps.key-date.outputs.date }}
  122. - name: Cache PHP extensions
  123. uses: actions/cache@v1
  124. with:
  125. path: ${{ steps.php-ext-cache.outputs.dir }}
  126. key: ${{ runner.os }}-php-ext-${{ steps.php-ext-cache.outputs.key }}
  127. restore-keys: ${{ runner.os }}-php-ext-${{ steps.php-ext-cache.outputs.key }}
  128. - name: Setup PHP
  129. uses: shivammathur/setup-php@v2
  130. with:
  131. php-version: ${{ env.PHP_VERSION }}
  132. extensions: ${{ env.EXTENSIONS }}
  133. ini-values: apc.enable_cli = 1, extension = php_fileinfo.dll
  134. tools: composer:v1
  135. coverage: none
  136. - name: Setup SQLServer
  137. run: |
  138. # MSSQLLocalDB is the default SQL LocalDB instance
  139. SqlLocalDB start MSSQLLocalDB
  140. SqlLocalDB info MSSQLLocalDB
  141. sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "create database cakephp;"
  142. - name: Get composer cache directory
  143. id: composer-cache
  144. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  145. - name: Cache composer dependencies
  146. uses: actions/cache@v1
  147. with:
  148. path: ${{ steps.composer-cache.outputs.dir }}
  149. key: ${{ runner.os }}-composer-${{ steps.key-date.outputs.date }}-${{ hashFiles('composer.json') }}-${{ matrix.prefer-lowest }}
  150. - name: Composer install
  151. run: composer update
  152. - name: Run PHPUnit
  153. env:
  154. db_dsn: 'sqlserver://@(localdb)\MSSQLLocalDB/cakephp'
  155. run: |
  156. vendor/bin/phpunit --verbose
  157. cs-stan:
  158. name: Coding Standard & Static Analysis
  159. runs-on: ubuntu-18.04
  160. steps:
  161. - uses: actions/checkout@v1
  162. with:
  163. fetch-depth: 1
  164. - name: Setup PHP
  165. uses: shivammathur/setup-php@v2
  166. with:
  167. php-version: '7.2'
  168. extensions: mbstring, intl, apcu, memcached, redis
  169. coverage: none
  170. - name: Get composer cache directory
  171. id: composer-cache
  172. run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  173. - name: Get date part for cache key
  174. id: key-date
  175. run: echo "::set-output name=date::$(date +'%Y-%m')"
  176. - name: Cache composer dependencies
  177. uses: actions/cache@v1
  178. with:
  179. path: ${{ steps.composer-cache.outputs.dir }}
  180. key: ${{ runner.os }}-composer-${{ steps.key-date.outputs.date }}-${{ hashFiles('composer.json') }}
  181. - name: Composer install
  182. run: |
  183. composer update
  184. composer phpstan-setup
  185. - name: Run PHP CodeSniffer
  186. run: composer cs-check
  187. - name: Run phpstan
  188. run: composer phpstan