on:
  push:
    branches:
      - v5-develop
  pull_request:
    branches:
      - v5-develop

name: phpunit
jobs:
  run:
    runs-on: ${{ matrix.operating-system }}
    strategy:
      matrix:
        operating-system: ['ubuntu-18.04', 'ubuntu-20.04']
        php-versions: ['7.4','8.0','8.1']
        phpunit-versions: ['latest']

    env:
      DB_DATABASE1: ninja
      DB_USERNAME1: root
      DB_PASSWORD1: ninja
      DB_HOST1: '127.0.0.1'
      DB_DATABASE: ninja
      DB_USERNAME: root
      DB_PASSWORD: ninja
      DB_HOST: '127.0.0.1'
      BROADCAST_DRIVER: log
      CACHE_DRIVER: file
      QUEUE_CONNECTION: sync
      SESSION_DRIVER: file
      NINJA_ENVIRONMENT: hosted
      MULTI_DB_ENABLED: false
      NINJA_LICENSE: 123456
      TRAVIS: true
      MAIL_MAILER: log

    services:
      mariadb:
        image: mariadb:latest
        ports:
          - 32768:3306
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_USER: ninja
          MYSQL_PASSWORD: ninja
          MYSQL_DATABASE: ninja
          MYSQL_ROOT_PASSWORD: ninja
        options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3

    steps:
    - name: Add hosts to /etc/hosts
      run: |
        sudo echo "127.0.0.1 ninja.test" | sudo tee -a /etc/hosts

    - name: Start mysql service
      run: |
        sudo /etc/init.d/mysql start
    - name: Verify MariaDB connection
      env:
        DB_PORT: ${{ job.services.mariadb.ports[3306] }}
        DB_PORT1: ${{ job.services.mariadb.ports[3306] }}

      run: |
        while ! mysqladmin ping -h"127.0.0.1" -P"$DB_PORT" --silent; do
          sleep 1
        done
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: ${{ matrix.php-versions }}
        extensions: mysql, mysqlnd, sqlite3, bcmath, gmp, gd, curl, zip, openssl, mbstring, xml

    - uses: actions/checkout@v1
      with:
        ref: v5-develop
        fetch-depth: 1

    - name: Copy .env
      run: |
        cp .env.ci .env
    - name: Install composer dependencies
      run: |
        composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }}
        composer install
    - name: Prepare Laravel Application
      run: |
        php artisan key:generate
        php artisan optimize
        php artisan cache:clear
        php artisan config:cache
    - name: Create DB and schemas
      run: |
        mkdir -p database
        touch database/database.sqlite
    - name: Migrate Database
      run: |
        php artisan migrate:fresh --seed --force && php artisan db:seed --force
    - name: Prepare JS/CSS assets
      run: |
        npm i
        npm run production
    - name: Run Testsuite
      run: |
        cat .env
        vendor/bin/phpunit --testdox
      env:
        DB_PORT: ${{ job.services.mysql.ports[3306] }}
        PHP_CS_FIXER_IGNORE_ENV: true

    - name: Run php-cs-fixer
      run: |
        PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix
