name: build

on:
  push:
    branches: [ master, main, development ]
  pull_request:
    branches: [ master, main, development ]

jobs:
  run:
      runs-on: ${{ matrix.operating-system }}
      strategy:
        matrix:
          operating-system: [ubuntu-16.04]
          php-versions: ['7.1', '7.2', '7.3']
          mongodb-version: ['4.0']
      name: PHP ${{ matrix.php-versions }}
 
      steps:
        - uses: actions/checkout@v2
        
        - name: Start MySQL service
          run: sudo service mysql start

        - name: MySQL - Create database.
          run: sudo mysql -uroot -proot -h 127.0.0.1 -e 'CREATE DATABASE shieldon_unittest;'

        - name: MySQL - Create user.	
          run: sudo mysql -uroot -proot -h 127.0.0.1 -e "CREATE USER 'shieldon'@'localhost' IDENTIFIED BY 'taiwan';"	

        - name: MySQL - Grant permission.	
          run: sudo mysql -uroot -proot -h 127.0.0.1 -e "GRANT ALL ON shieldon_unittest.* TO 'shieldon'@'localhost';"

        - name: Install Redis service.
          run: sudo apt-get install -y redis-server

        - name: Start Redis service.
          run: sudo service redis-server start
 
        - name: Setup PHP with Xdebug
          uses: shivammathur/setup-php@v2
          with:
            php-version: ${{ matrix.php-versions }}
            extensions: mbstring, pdo, pdo_mysql, intl, zip, redis, ctype, json, apc, apcu, memcache, memcached, mongodb
            ini-values: apc.enable_cli=On
            coverage: xdebug

        - name: Start MongoDB v${{ matrix.mongodb-version }}
          uses: supercharge/mongodb-github-action@1.2.0
          with:
            mongodb-version: ${{ matrix.mongodb-version }}

        - name: Install Memcached service.
          run: sudo apt-get install -y memcached

        - name: Start Memcached service.
          run: sudo service memcached start
       
        - name: Create a folder for testing.
          run: sudo mkdir /home/runner/work/simple-cache/simple-cache/tmp
        
        - name: Make folder writable.
          run: sudo chmod 777 /home/runner/work/simple-cache/simple-cache/tmp

        - name: Install dependencies
          run: composer install --prefer-dist --no-interaction --dev

        - name: Update packages
          run: composer self-update

        - name: Run tests.
          run: composer test

        - name: Upload coverage to Codecov
          uses: codecov/codecov-action@v1
          with:
            file: ./coverage.xml