diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index efb8ad02..b1423f82 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,31 +1,97 @@ name: CI -env: - COMPOSE_INTERACTIVE_NO_CLI: 1 - on: push: - branches: [ 3.x, 2.x, master ] pull_request: branches: [ 3.x, 2.x, master ] jobs: tests: runs-on: ubuntu-latest + container: shivammathur/node:latest strategy: matrix: - php: ["7.4", "8.0"] - laravel: ["^6.0", "^8.0"] + php: ['7.4', '8.0', '8.1'] + laravel: ['^6.0', '^8.0'] + exclude: + - php: '8.1' + laravel: '^6.0' + + services: + postgres: + image: postgres:latest + env: + POSTGRES_PASSWORD: password + POSTGRES_USER: root + POSTGRES_DB: main + ports: + - 5432/tcp + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 + + mysql: + image: mysql:5.7 + env: + MYSQL_ALLOW_EMPTY_PASSWORD: false + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: main + ports: + - 3306/tcp + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + mysql2: + image: mysql:5.7 + env: + MYSQL_ALLOW_EMPTY_PASSWORD: false + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: main + ports: + - 3306/tcp + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + redis: + image: redis:alpine + ports: + - 6379/tcp + options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - - uses: actions/checkout@v2 - - name: Start docker containers - run: PHP_VERSION=${{ matrix.php }} docker-compose up -d - - name: Install dependencies - run: docker-compose exec -T test composer require --no-interaction "laravel/framework:${{ matrix.laravel }}" + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, redis, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo + coverage: pcov + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install Composer dependencies + run: | + composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update + composer update --prefer-dist --no-interaction + - name: Run tests - run: ./test + run: ./vendor/bin/phpunit + env: + DB_PASSWORD: password + DB_USERNAME: root + DB_DATABASE: main + TENANCY_TEST_MYSQL_HOST: mysql + TENANCY_TEST_PGSQL_HOST: postgres + TENANCY_TEST_REDIS_HOST: redis + - name: Send code coverage to codecov env: CODECOV_TOKEN: 24382d15-84e7-4a55-bea4-c4df96a24a9b