ci.yml 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. name: Continuous integration
  2. on:
  3. pull_request: null
  4. push:
  5. branches:
  6. - main
  7. - develop
  8. jobs:
  9. lint:
  10. runs-on: ubuntu-20.04
  11. strategy:
  12. matrix:
  13. php-version: ['7.4']
  14. steps:
  15. - name: Checkout code
  16. uses: actions/checkout@v2
  17. - name: Use PHP
  18. uses: shivammathur/setup-php@v2
  19. with:
  20. php-version: ${{ matrix.php-version }}
  21. tools: composer
  22. extensions: swoole-4.6.3
  23. coverage: none
  24. - run: composer install --no-interaction --prefer-dist
  25. - run: composer cs
  26. static-analysis:
  27. runs-on: ubuntu-20.04
  28. strategy:
  29. matrix:
  30. php-version: ['7.4']
  31. steps:
  32. - name: Checkout code
  33. uses: actions/checkout@v2
  34. - name: Use PHP
  35. uses: shivammathur/setup-php@v2
  36. with:
  37. php-version: ${{ matrix.php-version }}
  38. tools: composer
  39. extensions: swoole-4.6.3
  40. coverage: none
  41. - run: composer install --no-interaction --prefer-dist
  42. - run: composer stan
  43. unit-tests:
  44. runs-on: ubuntu-20.04
  45. strategy:
  46. matrix:
  47. php-version: ['7.4', '8.0']
  48. steps:
  49. - name: Checkout code
  50. uses: actions/checkout@v2
  51. - name: Use PHP
  52. uses: shivammathur/setup-php@v2
  53. with:
  54. php-version: ${{ matrix.php-version }}
  55. tools: composer
  56. extensions: swoole-4.6.3
  57. coverage: pcov
  58. ini-values: pcov.directory=module
  59. - run: composer install --no-interaction --prefer-dist
  60. - run: composer test:unit:ci
  61. - uses: actions/upload-artifact@v2
  62. if: ${{ matrix.php-version == '7.4' }}
  63. with:
  64. name: coverage-unit
  65. path: |
  66. build/coverage-unit
  67. build/coverage-unit.cov
  68. db-tests-sqlite:
  69. runs-on: ubuntu-20.04
  70. strategy:
  71. matrix:
  72. php-version: ['7.4', '8.0']
  73. steps:
  74. - name: Checkout code
  75. uses: actions/checkout@v2
  76. - name: Use PHP
  77. uses: shivammathur/setup-php@v2
  78. with:
  79. php-version: ${{ matrix.php-version }}
  80. tools: composer
  81. extensions: swoole-4.6.3
  82. coverage: pcov
  83. ini-values: pcov.directory=module
  84. - run: composer install --no-interaction --prefer-dist
  85. - run: composer test:db:sqlite:ci
  86. - uses: actions/upload-artifact@v2
  87. if: ${{ matrix.php-version == '7.4' }}
  88. with:
  89. name: coverage-db
  90. path: |
  91. build/coverage-db
  92. build/coverage-db.cov
  93. db-tests-mysql:
  94. runs-on: ubuntu-20.04
  95. strategy:
  96. matrix:
  97. php-version: ['7.4', '8.0']
  98. steps:
  99. - name: Checkout code
  100. uses: actions/checkout@v2
  101. - name: Start database server
  102. run: docker-compose -f docker-compose.yml -f docker-compose.ci.yml up -d shlink_db
  103. - name: Use PHP
  104. uses: shivammathur/setup-php@v2
  105. with:
  106. php-version: ${{ matrix.php-version }}
  107. tools: composer
  108. extensions: swoole-4.6.3
  109. coverage: none
  110. - run: composer install --no-interaction --prefer-dist
  111. - run: composer test:db:mysql
  112. db-tests-maria:
  113. runs-on: ubuntu-20.04
  114. strategy:
  115. matrix:
  116. php-version: ['7.4', '8.0']
  117. steps:
  118. - name: Checkout code
  119. uses: actions/checkout@v2
  120. - name: Start database server
  121. run: docker-compose -f docker-compose.yml -f docker-compose.ci.yml up -d shlink_db_maria
  122. - name: Use PHP
  123. uses: shivammathur/setup-php@v2
  124. with:
  125. php-version: ${{ matrix.php-version }}
  126. tools: composer
  127. extensions: swoole-4.6.3
  128. coverage: none
  129. - run: composer install --no-interaction --prefer-dist
  130. - run: composer test:db:maria
  131. db-tests-postgres:
  132. runs-on: ubuntu-20.04
  133. strategy:
  134. matrix:
  135. php-version: ['7.4', '8.0']
  136. steps:
  137. - name: Checkout code
  138. uses: actions/checkout@v2
  139. - name: Start database server
  140. run: docker-compose -f docker-compose.yml -f docker-compose.ci.yml up -d shlink_db_postgres
  141. - name: Use PHP
  142. uses: shivammathur/setup-php@v2
  143. with:
  144. php-version: ${{ matrix.php-version }}
  145. tools: composer
  146. extensions: swoole-4.6.3
  147. coverage: none
  148. - run: composer install --no-interaction --prefer-dist
  149. - run: composer test:db:postgres
  150. db-tests-ms:
  151. runs-on: ubuntu-20.04
  152. strategy:
  153. matrix:
  154. php-version: ['7.4', '8.0']
  155. steps:
  156. - name: Checkout code
  157. uses: actions/checkout@v2
  158. - name: Install MSSQL ODBC
  159. run: sudo ./data/infra/ci/install-ms-odbc.sh
  160. - name: Start database server
  161. run: docker-compose -f docker-compose.yml -f docker-compose.ci.yml up -d shlink_db_ms
  162. - name: Use PHP
  163. uses: shivammathur/setup-php@v2
  164. with:
  165. php-version: ${{ matrix.php-version }}
  166. tools: composer
  167. extensions: swoole-4.6.3, pdo_sqlsrv-5.9.0
  168. coverage: none
  169. - run: composer install --no-interaction --prefer-dist
  170. - name: Create test database
  171. run: docker-compose exec -T shlink_db_ms /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'Passw0rd!' -Q "CREATE DATABASE shlink_test;"
  172. - run: composer test:db:ms
  173. api-tests:
  174. runs-on: ubuntu-20.04
  175. strategy:
  176. matrix:
  177. php-version: ['7.4', '8.0']
  178. steps:
  179. - name: Checkout code
  180. uses: actions/checkout@v2
  181. - name: Start database server
  182. run: docker-compose -f docker-compose.yml -f docker-compose.ci.yml up -d shlink_db_postgres
  183. - name: Use PHP
  184. uses: shivammathur/setup-php@v2
  185. with:
  186. php-version: ${{ matrix.php-version }}
  187. tools: composer
  188. extensions: swoole-4.6.3
  189. coverage: pcov
  190. ini-values: pcov.directory=module
  191. - run: composer install --no-interaction --prefer-dist
  192. - run: bin/test/run-api-tests.sh
  193. - uses: actions/upload-artifact@v2
  194. if: ${{ matrix.php-version == '7.4' }}
  195. with:
  196. name: coverage-api
  197. path: |
  198. build/coverage-api
  199. build/coverage-api.cov
  200. mutation-tests:
  201. needs:
  202. - unit-tests
  203. - db-tests-sqlite
  204. - api-tests
  205. runs-on: ubuntu-20.04
  206. strategy:
  207. matrix:
  208. php-version: ['7.4', '8.0']
  209. steps:
  210. - name: Checkout code
  211. uses: actions/checkout@v2
  212. - name: Use PHP
  213. uses: shivammathur/setup-php@v2
  214. with:
  215. php-version: ${{ matrix.php-version }}
  216. tools: composer
  217. extensions: swoole-4.6.3
  218. coverage: pcov
  219. ini-values: pcov.directory=module
  220. - run: composer install --no-interaction --prefer-dist
  221. - uses: actions/download-artifact@v2
  222. with:
  223. path: build
  224. - run: composer infect:ci
  225. upload-coverage:
  226. needs:
  227. - unit-tests
  228. - db-tests-sqlite
  229. - api-tests
  230. runs-on: ubuntu-20.04
  231. strategy:
  232. matrix:
  233. php-version: ['7.4']
  234. steps:
  235. - name: Checkout code
  236. uses: actions/checkout@v2
  237. - name: Use PHP
  238. uses: shivammathur/setup-php@v2
  239. with:
  240. php-version: ${{ matrix.php-version }}
  241. coverage: pcov
  242. ini-values: pcov.directory=module
  243. - uses: actions/download-artifact@v2
  244. with:
  245. path: build
  246. - run: mv build/coverage-unit/coverage-unit.cov build/coverage-unit.cov
  247. - run: mv build/coverage-db/coverage-db.cov build/coverage-db.cov
  248. - run: mv build/coverage-api/coverage-api.cov build/coverage-api.cov
  249. - run: wget https://phar.phpunit.de/phpcov-8.2.0.phar
  250. - run: php phpcov-8.2.0.phar merge build --clover build/clover.xml
  251. - name: Publish coverage
  252. uses: codecov/codecov-action@v1
  253. with:
  254. file: ./build/clover.xml
  255. delete-artifacts:
  256. needs:
  257. - mutation-tests
  258. - upload-coverage
  259. runs-on: ubuntu-20.04
  260. steps:
  261. - uses: geekyeggo/delete-artifact@v1
  262. with:
  263. name: |
  264. coverage-unit
  265. coverage-db
  266. coverage-api
  267. build-docker-image:
  268. runs-on: ubuntu-20.04
  269. steps:
  270. - name: Checkout code
  271. uses: actions/checkout@v2
  272. with:
  273. fetch-depth: 100
  274. - uses: marceloprado/has-changed-path@v1
  275. id: changed-dockerfile
  276. with:
  277. paths: ./Dockerfile
  278. - if: ${{ steps.changed-dockerfile.outputs.changed == 'true' }}
  279. run: docker build -t shlink-docker-image:temp .
  280. - if: ${{ steps.changed-dockerfile.outputs.changed != 'true' }}
  281. run: echo "Dockerfile didn't change. Skipped"