IKHSAN
EN Read in EnglishID

opendesk

Publik
Branch
main
Commit terakhir
08d9f3328 Oktober 2026

ui-tests.yml

Buka raw
name: UI Tests

on:
  pull_request:
    branches:
      - develop
    paths:
      - "desk/**"
      - "shared/**"
      - "studio/**"
      - "e2e/**"
      - "playwright.config.ts"
      - "package.json"
      - "yarn.lock"
      - ".github/workflows/ui-tests.yml"
  workflow_dispatch:

concurrency:
  group: ui-tests-opendesk-${{ github.event.number || github.ref }}
  cancel-in-progress: true

env:
  FRAPPE_BRANCH: develop
  SITE: opendesk.test

jobs:
  ui-tests:
    name: Playwright E2E Tests (${{ matrix.shard }}/2)
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        shard: [1, 2]

    services:
      redis-cache:
        image: redis/redis-stack-server:latest
        ports:
          - 13000:6379
      redis-queue:
        image: redis:alpine
        ports:
          - 11000:6379
      mariadb:
        image: mariadb:10.6
        env:
          MARIADB_ROOT_PASSWORD: root
        ports:
          - 3306:3306
        options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3

    steps:
      - name: Clone
        uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.14"

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 24
          check-latest: true

      - name: Cache pip
        uses: actions/cache@v4
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml') }}
          restore-keys: ${{ runner.os }}-pip-

      - name: Cache yarn
        uses: actions/cache@v4
        with:
          path: ~/.cache/yarn
          key: ${{ runner.os }}-yarn-ui-${{ hashFiles('**/yarn.lock') }}
          restore-keys: ${{ runner.os }}-yarn-ui-

      - name: Cache Playwright browsers
        uses: actions/cache@v4
        with:
          path: ~/.cache/ms-playwright
          key: ${{ runner.os }}-playwright-${{ hashFiles('yarn.lock') }}

      - name: Install MariaDB Client
        run: |
          sudo apt update
          sudo apt install -y mariadb-client

      - name: Setup Bench
        run: |
          pip install frappe-bench
          bench init --skip-redis-config-generation --skip-assets --frappe-branch "$FRAPPE_BRANCH" --python "$(which python)" ~/frappe-bench
          mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'"
          mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"

      - name: Install Opendesk
        working-directory: /home/runner/frappe-bench
        run: |
          bench get-app telephony
          # get-app builds opendesk's Studio portal with frappe's Studio toolchain,
          # which --skip-assets left without its node_modules
          (cd apps/frappe/studio/frontend && yarn install --frozen-lockfile)
          bench get-app opendesk $GITHUB_WORKSPACE
          bench setup requirements --dev
          bench new-site --db-root-password root --admin-password admin --install-app opendesk $SITE
          bench use $SITE
          bench --site $SITE set-config host_name "http://localhost:8000"
          # The suite creates more users in an hour than the default limit (60) allows.
          bench --site $SITE set-config -p throttle_user_limit 10000
          bench build --apps frappe,opendesk
        env:
          CI: "Yes"

      - name: Start Frappe Server
        working-directory: /home/runner/frappe-bench
        run: |
          sed -i 's/^watch:/# watch:/g' Procfile
          sed -i 's/^schedule:/# schedule:/g' Procfile
          bench start &> bench_start.log &
          timeout 120 bash -c "until curl -s http://localhost:8000 > /dev/null; do sleep 2; done"

      - name: Install Playwright
        run: |
          yarn install --frozen-lockfile --ignore-scripts
          npx playwright install --with-deps chromium

      - name: Run Playwright Tests
        run: npx playwright test --shard=${{ matrix.shard }}/2
        env:
          # localhost is a secure context, which crypto.randomUUID in frappe/ui needs.
          BASE_URL: http://localhost:8000
          ADMIN_PASSWORD: admin

      - name: Upload Blob Report
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: blob-report-${{ matrix.shard }}
          path: blob-report/
          retention-days: 1

      - name: Upload Test Results
        uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: test-results-${{ matrix.shard }}
          path: test-results/
          retention-days: 7

      - name: Show Bench Logs on Failure
        if: failure()
        working-directory: /home/runner/frappe-bench
        run: |
          cat bench_start.log || true
          cat logs/*.log || true

  merge-reports:
    name: Merge Playwright Reports
    needs: ui-tests
    if: always()
    runs-on: ubuntu-latest

    steps:
      - name: Clone
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 24

      - name: Install Playwright
        run: yarn install --frozen-lockfile --ignore-scripts

      - name: Download Blob Reports
        uses: actions/download-artifact@v4
        with:
          path: all-blob-reports
          pattern: blob-report-*
          merge-multiple: true

      - name: Merge Into HTML Report
        run: npx playwright merge-reports --reporter html ./all-blob-reports

      - name: Upload Playwright Report
        uses: actions/upload-artifact@v4
        with:
          name: playwright-report
          path: playwright-report/
          retention-days: 7
byte
5.800
baris
195
Jenis
yml
Commit terakhir
28 Oktober 2026