1
+ name : phpList Build
2
+ on : [push, pull_request]
3
+ jobs :
4
+ main :
5
+ name : phpList on PHP ${{ matrix.php-versions }} [Build, Test]
6
+ runs-on : ubuntu-latest
7
+ env :
8
+ DB_DATABASE : phplist
9
+ DB_USERNAME : root
10
+ DB_PASSWORD : phplist
11
+ BROADCAST_DRIVER : log
12
+ services :
13
+ mysql :
14
+ image : mysql:5.7
15
+ env :
16
+ MYSQL_ALLOW_EMPTY_PASSWORD : false
17
+ MYSQL_ROOT_PASSWORD : ${{ env.DB_PASSWORD }}
18
+ MYSQL_DATABASE : ${{ env.DB_DATABASE }}
19
+ ports :
20
+ - 3306/tcp
21
+ options : --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
22
+ strategy :
23
+ fail-fast : false
24
+ matrix :
25
+ php-versions : ['7.0', '7.1', '7.2', '7.3', '7.4']
26
+ steps :
27
+ - name : Checkout
28
+ uses : actions/checkout@v2
29
+ - name : Setup PHP, with composer and extensions
30
+ uses : shivammathur/setup-php@v2 # https://github.com/shivammathur/setup-php
31
+ with :
32
+ php-version : ${{ matrix.php-versions }}
33
+ extensions : mbstring, dom, fileinfo, mysql
34
+ coverage : xdebug # optional
35
+ - name : Start mysql service
36
+ run : sudo /etc/init.d/mysql start
37
+ - name : Verify MySQL connection on host
38
+ run : mysql --host 127.0.0.1 --port ${{ job.services.mysql.ports['3306'] }} -u${{ env.DB_USERNAME }} -p${{ env.DB_PASSWORD }} -e "SHOW DATABASES"
39
+ - name : Set up database schema
40
+ run : mysql --host 127.0.0.1 --port ${{ job.services.mysql.ports['3306'] }} -u${{ env.DB_USERNAME }} -p${{ env.DB_PASSWORD }} ${{ env.DB_DATABASE }} < resources/Database/Schema.sql
41
+ - name : Get composer cache directory
42
+ id : composer-cache
43
+ run : echo "::set-output name=dir::$(composer config cache-files-dir)"
44
+ - name : Cache composer dependencies
45
+ uses : actions/cache@v2
46
+ with :
47
+ path : ${{ steps.composer-cache.outputs.dir }}
48
+ # Use composer.json for key, if composer.lock is not committed.
49
+ # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
50
+ key : ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
51
+ restore-keys : ${{ runner.os }}-composer-
52
+ - name : Install Composer dependencies
53
+ run : composer install --no-progress --prefer-dist --optimize-autoloader
54
+ - name : Validating composer.json
55
+ run : composer validate --no-check-all --no-check-lock --strict;
56
+ - name : Linting all php files
57
+ run : find src/ tests/ public/ -name ''*.php'' -print0 | xargs -0 -n 1 -P 4 php -l; php -l bin/*;
58
+ - name : Run units tests with phpunit
59
+ run : vendor/bin/phpunit tests/Unit/
60
+ - name : Run integration tests with phpunit
61
+ run : |
62
+ export PHPLIST_DATABASE_NAME=${{ env.DB_DATABASE }}
63
+ export PHPLIST_DATABASE_USER=${{ env.DB_USERNAME }}
64
+ export PHPLIST_DATABASE_PASSWORD=${{ env.DB_PASSWORD }}
65
+ export PHPLIST_DATABASE_PORT=${{ job.services.mysql.ports['3306'] }}
66
+ export PHPLIST_DATABASE_HOST=127.0.0.1
67
+ vendor/bin/phpunit tests/Integration/
68
+ - name : Running the system tests
69
+ run : vendor/bin/phpunit tests/System/;
70
+ - name : Running static analysis
71
+ run : vendor/bin/phpstan analyse -l 5 bin/ src/ tests/ public/;
72
+ - name : Running PHPMD
73
+ run : vendor/bin/phpmd src/ text config/PHPMD/rules.xml;
74
+ - name : Running PHP_CodeSniffer
75
+ run : vendor/bin/phpcs --standard=config/PhpCodeSniffer/ bin/ src/ tests/ public/;
0 commit comments