REBELinBLUE/deployer

View on GitHub
.github/workflows/tests.yml

Summary

Maintainability
Test Coverage
name: Tests

on: [push, pull_request]

jobs:
  unit:
    env:
      DB_CONNECTION: sqlite
      DB_DATABASE: database/database.sqlite

    runs-on: ubuntu-latest

    strategy:
      max-parallel: 15
      fail-fast: false
      matrix:
        php: ['7.3', '7.4', '8.0']

    steps:
      - name: Checkout
        uses: actions/checkout@master

      - name: Setup PHP
        uses: shivammathur/setup-php@2.15.0
        with:
          php-version: ${{ matrix.php }}
          tools: composer:v1
          extensions: mbstring, gd, curl, pdo_mysql, pdo_pgsql, sqlite3, pcntl
          coverage: none
        env:
          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Remove hhvm
        run: sudo apt-get remove --auto-remove hhvm

      - name: Copy .env
        run: |
          cp tests/env .env
          touch database/database.sqlite

      - name: Get Composer Cache Directory
        id: composer-cache
        run: |
          echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Dependency Cache
        uses: actions/cache@v1
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: Install Dependencies
        run: composer install --no-interaction --prefer-dist --no-suggest

      - name: Directory Permissions
        run: make permissions

      - name: Run Unit Tests
        run: composer test:unit

      - name: Upload Artifacts
        uses: actions/upload-artifact@master
        if: ${{ failure() }}
        with:
          name: Logs
          path: ./storage/logs

  integration:
    runs-on: ubuntu-latest

    strategy:
      max-parallel: 15
      fail-fast: false
      matrix:
        php: ['7.3', '7.4', '8.0']
        db: ['sqlite', 'mysql5', 'pgsql', 'maria', 'mysql8']

    services:
      maria:
        image: mariadb:10.3
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_USER: deployer
          MYSQL_PASSWORD: deployer
          MYSQL_DATABASE: deployer
        ports:
          - 33306:3306
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=5

      postgres:
        image: postgres:9.5
        env:
          POSTGRES_USER: deployer
          POSTGRES_PASSWORD: deployer
          POSTGRES_DB: deployer
        ports:
          - 15432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

      mysql5:
        image: mysql:5.7
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_USER: deployer
          MYSQL_PASSWORD: deployer
          MYSQL_DATABASE: deployer
        ports:
          - 13306:3306
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=5

      mysql8:
        #image: mysql:8.0
        # See https://stackoverflow.com/posts/62651774/revisions
        image: bitnami/mysql:8.0.20
        env:
          ALLOW_EMPTY_PASSWORD: yes
          MYSQL_USER: deployer
          MYSQL_PASSWORD: deployer
          MYSQL_DATABASE: deployer
          MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
        ports:
          - 23306:3306
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=5

    steps:
      - name: Checkout
        uses: actions/checkout@master

      - name: Setup PHP
        uses: shivammathur/setup-php@2.15.0
        with:
          php-version: ${{ matrix.php }}
          tools: composer:v1
          extensions: mbstring, gd, curl, pdo_mysql, pdo_pgsql, sqlite3, pcntl
          coverage: none
        env:
          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Remove hhvm
        run: sudo apt-get remove --auto-remove hhvm

      - name: Copy .env
        run: cp tests/env .env

      - name: Add MySQL 5 settings to .env
        if: ${{ matrix.db == 'mysql5' }}
        run: |
          {
            echo "DB_CONNECTION=mysql"
            echo "DB_USERNAME=deployer"
            echo "DB_PASSWORD=deployer"
            echo "DB_DATABASE=deployer"
            echo "DB_PORT=13306"
            echo "DB_HOST=127.0.0.1"
          } >> .env

      - name: Add MySQL 8 settings to .env
        if: ${{ matrix.db == 'mysql8' }}
        run: |
          {
            echo "DB_CONNECTION=mysql"
            echo "DB_USERNAME=deployer"
            echo "DB_PASSWORD=deployer"
            echo "DB_DATABASE=deployer"
            echo "DB_PORT=23306"
            echo "DB_HOST=127.0.0.1"
          } >> .env

      - name: Add Maria settings to .env
        if: ${{ matrix.db  == 'maria' }}
        run: |
          {
            echo "DB_CONNECTION=mysql"
            echo "DB_USERNAME=deployer"
            echo "DB_PASSWORD=deployer"
            echo "DB_DATABASE=deployer"
            echo "DB_PORT=33306"
            echo "DB_HOST=127.0.0.1"
          } >> .env

      - name: Add PostgreSQL settings to .env
        if: ${{ matrix.db  == 'pgsql' }}
        run: |
          {
            echo "DB_CONNECTION=pgsql"
            echo "DB_USERNAME=deployer"
            echo "DB_PASSWORD=deployer"
            echo "DB_DATABASE=deployer"
            echo "DB_PORT=15432"
            echo "DB_HOST=127.0.0.1"
          } >> .env

      - name: Add SQLite settings to .env
        if: ${{ matrix.db  == 'sqlite' }}
        run: |
          echo "DB_CONNECTION=sqlite" >> .env
          touch database/database.sqlite

      - name: Get Composer Cache Directory
        id: composer-cache
        run: |
          echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Dependency Cache
        uses: actions/cache@v1
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: Install Dependencies
        run: composer install --no-interaction --prefer-dist --no-suggest

      - name: Directory Permissions
        run: make permissions

      - name: Run Migrations
        run: php artisan migrate

      - name: Seed DB
        run: php artisan db:seed

      - name: Rollback Migrations
        run: php artisan migrate:rollback

      - name: Run Integration Tests
        run: composer test:integration

      - name: Upload Artifacts
        uses: actions/upload-artifact@master
        if: ${{ failure() }}
        with:
          name: Logs
          path: ./storage/logs

#  coverage:
#    env:
#      DB_CONNECTION: sqlite
#      DB_DATABASE: database/database.sqlite
#
#    runs-on: ubuntu-latest
#
#    strategy:
#      max-parallel: 15
#      fail-fast: false
#
#    steps:
#      - name: Checkout
#        uses: actions/checkout@master
#
#      - name: Setup PHP
#        uses: shivammathur/setup-php@2.15.0
#        with:
#          php-version: 7.3
#          tools: composer:v1
#          extensions: mbstring, gd, curl, pdo_mysql, pdo_pgsql, sqlite3, pcntl
#          coverage: none
#        env:
#          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#
#      - name: Remove hhvm
#        run: sudo apt-get remove --auto-remove hhvm
#
#      - name: Copy .env
#        run: |
#          cp tests/env .env
#          touch database/database.sqlite
#
#      - name: Get Composer Cache Directory
#        id: composer-cache
#        run: |
#          echo "::set-output name=dir::$(composer config cache-files-dir)"
#
#      - name: Setup problem matchers for PHPUnit
#        run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
#
#      - name: Dependency Cache
#        uses: actions/cache@v1
#        with:
#          path: ${{ steps.composer-cache.outputs.dir }}
#          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
#          restore-keys: ${{ runner.os }}-composer-
#
#      - name: Install Dependencies
#        run: composer install --no-interaction --prefer-dist --no-suggest
#
#      - name: Directory Permissions
#        run: make permissions
#
#      - name: Run Tests with Coverage
#        run: |
#          php --version
#          composer require phpunit/phpcov=~6.0 --dev
#          php vendor/bin/phpunit --coverage-php=storage/app/tmp/unit.cov --testsuite "Unit Tests"
#          php vendor/bin/phpunit --coverage-php=storage/app/tmp/integration.cov --testsuite "Integration Tests"
#          php vendor/bin/phpcov merge storage/app/tmp/ --html storage/app/tmp/coverage/ --clover clover.xml
#          rm -f storage/app/tmp/*.cov
#
#      - name: Upload Coverage Report
#        uses: codecov/codecov-action@v1
#        with:
#          fail_ci_if_error: true
#
#      - name: Upload Artifacts
#        uses: actions/upload-artifact@master
#        if: ${{ failure() }}
#        with:
#          name: Logs
#          path: ./storage/logs