diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 000000000000..855ab040f975 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,143 @@ +on: + push: + branches: + - v5-develop + - v5-stable + pull_request: + branches: + - v5-develop + +name: phpunit +jobs: + run: + runs-on: ${{ matrix.operating-system }} + strategy: + matrix: + operating-system: ['ubuntu-20.04', 'ubuntu-22.04'] + php-versions: ['8.1','8.2'] + phpunit-versions: ['latest'] + ci_node_total: [ 8 ] + ci_node_index: [ 0, 1, 2, 3, 4, 5, 6, 7] + laravel: [9.*] + dependency-version: [prefer-stable] + + env: + DB_CONNECTION: mysql + 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' + REDIS_PORT: 6379 + BROADCAST_DRIVER: log + CACHE_DRIVER: redis + QUEUE_CONNECTION: redis + SESSION_DRIVER: redis + NINJA_ENVIRONMENT: hosted + MULTI_DB_ENABLED: false + NINJA_LICENSE: ${{ secrets.ninja_license }} + TRAVIS: true + MAIL_MAILER: log + + services: + mariadb: + image: mariadb:10.6 + 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 + redis: + image: redis + ports: + - 6379/tcp + options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --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 MariaDB service + run: | + sudo systemctl start mysql.service + - 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 shivammathur/setup-php@v2 + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-versions }} + extensions: mysql, mysqlnd, sqlite3, bcmath, gmp, gd, curl, zip, openssl, mbstring, xml, redis + + - uses: actions/checkout@v1 + with: + ref: v5-develop + fetch-depth: 1 + + - name: Copy .env + run: | + cp .env.ci .env + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + - uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.php }}-composer- + + - name: Install composer dependencies + run: | + composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} + composer install + + - name: Prepare Laravel Application + env: + REDIS_PORT: ${{ job.services.redis.ports['6379'] }} + run: | + php artisan key:generate + php artisan config:clear + php artisan ninja:post-update + php artisan optimize + + - name: Migrate Database + run: | + php artisan migrate:fresh --seed --force && php artisan db:seed --force + php artisan ninja:create-account --email=user@example.com --password=--password + + - name: Prepare React FrontEnd + run: | + git clone https://${{secrets.commit_secret}}@github.com/invoiceninja/ui.git + cd ui + git checkout main + npm i + npm run build + + mkdir -p ../public/react/${{ github.event.release.tag_name }}/ + cp -r dist/react/* ../public/react/${{ github.event.release.tag_name }}/ + cp -r dist/react/* ../public/react/ + + mkdir -p ../public/tinymce_6.4.2/tinymce/js/ + cp -r node_modules/tinymce ../public/tinymce_6.4.2/tinymce/js/ + cd .. + rm -rf ui + php artisan ninja:react + npx playwright install + npx playwright test --workers=1