name: PHPUnit Tests on: push: paths: - '**.php' - 'spark' - 'tests/**' - '.github/workflows/phpunit.yml' - 'gulpfile.js' - 'app/Database/**' pull_request: paths: - '**.php' - 'spark' - 'tests/**' - '.github/workflows/phpunit.yml' - 'gulpfile.js' - 'app/Database/**' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true permissions: contents: read jobs: test: name: PHP ${{ matrix.php-version }} Tests runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: php-version: - '8.1' - '8.2' - '8.3' - '8.4' steps: - name: Checkout uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }} extensions: intl, mbstring, mysqli coverage: none - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Get npm cache directory run: echo "NPM_CACHE_DIR=$(npm config get cache)" >> $GITHUB_ENV - name: Cache npm dependencies uses: actions/cache@v3 with: path: ${{ env.NPM_CACHE_DIR }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install npm dependencies run: npm install - name: Build database.sql run: npm run gulp build-database - name: Start MariaDB run: | docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=ospos \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=pointofsale \ -v $PWD/app/Database/database.sql:/docker-entrypoint-initdb.d/database.sql \ -p 3306:3306 \ mariadb:10.5 # Wait for MariaDB to be ready until docker exec mysql mysqladmin ping -h 127.0.0.1 -u root -proot --silent; do echo "Waiting for MariaDB..." sleep 2 done echo "MariaDB is ready!" - name: Get composer cache directory run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV - name: Cache dependencies uses: actions/cache@v3 with: path: ${{ env.COMPOSER_CACHE_FILES_DIR }} key: ${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-${{ matrix.php-version }}- ${{ runner.os }}- - name: Install dependencies run: composer update --ansi --no-interaction - name: Create .env file run: cp .env.example .env - name: Run PHPUnit tests env: CI_ENVIRONMENT: testing MYSQL_HOST_NAME: 127.0.0.1 run: composer test - name: Stop MariaDB if: always() run: docker stop mysql && docker rm mysql