name: performance on: pull_request: types: [labeled, synchronize, opened] branches: - main push: branches: - main permissions: contents: read pull-requests: write jobs: build: if: contains(github.event.pull_request.labels.*.name, 'performance') runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up pnpm uses: pnpm/action-setup@v4 - name: Set up Node.js uses: actions/setup-node@v4 - name: Create pnpm store directory run: mkdir -p ~/.pnpm-store - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build project run: pnpm build - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: rdp-dist path: dist capture-report: if: contains(github.event.pull_request.labels.*.name, 'performance') needs: [build] runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Chrome uses: browser-actions/setup-chrome@v1 id: setup-chrome - name: Set up pnpm uses: pnpm/action-setup@v4 - name: Set up Node.js uses: actions/setup-node@v4 - name: Download build artifacts uses: actions/download-artifact@v4 with: name: rdp-dist path: dist - name: Create pnpm store directory run: mkdir -p ~/.pnpm-store - name: Install dependencies run: pnpm install --frozen-lockfile - name: Start server run: pnpm --filter performance-tests start-server & env: CHROME_PATH: ${{ steps.setup-chrome.outputs.chrome-path }} - name: Wait for server to start run: pnpx wait-on http://localhost:4173 --timeout 10000 - name: Capture performance test run: pnpm --filter performance-tests run capture env: CHROME_PATH: ${{ steps.setup-chrome.outputs.chrome-path }} CI: true - name: Upload report uses: actions/upload-artifact@v4 with: name: report path: ./performance-tests/reports/report.html