Add RefreshIndicator and improve loading handling #5017
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main, develop] | |
| paths-ignore: | |
| - '**/*.md' | |
| - 'content/**' | |
| - 'docs/**' | |
| - 'apps/site/**' | |
| - '.changeset/**' | |
| pull_request: | |
| branches: [main, develop] | |
| paths-ignore: | |
| - '**/*.md' | |
| - 'content/**' | |
| - 'docs/**' | |
| - 'apps/site/**' | |
| - '.changeset/**' | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| changeset-check: | |
| name: Changeset Fixed Group Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Verify all packages are in changeset fixed group | |
| run: node scripts/check-changeset-fixed.mjs | |
| test: | |
| name: Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Verify pnpm version | |
| run: pnpm --version | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '20.x' | |
| cache: 'pnpm' | |
| # Per-branch turbo cache. PRs restore from base branch via restore-keys | |
| # for maximum cache hit rate; only changed packages re-run. | |
| - name: Turbo Cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: node_modules/.cache/turbo | |
| key: turbo-${{ runner.os }}-test-${{ github.sha }} | |
| restore-keys: | | |
| turbo-${{ runner.os }}-test- | |
| turbo-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| # PRs: skip coverage instrumentation (v8 adds 40-100% overhead) and | |
| # leverage turbo per-package cache so unchanged packages are skipped. | |
| - name: Run tests (PR — fast, no coverage) | |
| if: github.event_name == 'pull_request' | |
| run: pnpm turbo run test --concurrency=4 | |
| # Push to main/develop: still run coverage so Codecov stays current. | |
| - name: Run tests with coverage (push) | |
| if: github.event_name == 'push' | |
| run: pnpm test:coverage --coverage.reporter=json --coverage.reporter=text | |
| - name: Upload coverage to Codecov | |
| if: github.event_name == 'push' | |
| uses: codecov/codecov-action@v6 | |
| with: | |
| fail_ci_if_error: false | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| # Build + E2E merged into one job: avoids artifact upload/download (~30s) | |
| # and a duplicate `pnpm install` (~60s). Turbo cache makes the build | |
| # essentially free on subsequent runs. | |
| e2e: | |
| name: Build & E2E | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Verify pnpm version | |
| run: pnpm --version | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '20.x' | |
| cache: 'pnpm' | |
| - name: Turbo Cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: node_modules/.cache/turbo | |
| key: turbo-${{ runner.os }}-build-${{ github.sha }} | |
| restore-keys: | | |
| turbo-${{ runner.os }}-build- | |
| turbo-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Build Core & Console | |
| run: | | |
| pnpm turbo run build --filter='./packages/*' | |
| pnpm --filter @object-ui/console build | |
| - name: Verify build artifacts | |
| run: | | |
| if [ ! -d "packages/core/dist" ]; then | |
| echo "Protocol package build failed" | |
| exit 1 | |
| fi | |
| echo "All packages built successfully" | |
| - name: Get Playwright version | |
| id: playwright-version | |
| run: echo "version=$(pnpm list @playwright/test --depth=0 --json | jq -r '.[0].devDependencies["@playwright/test"].version')" >> $GITHUB_OUTPUT | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@v5 | |
| id: playwright-cache | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ runner.os }}-${{ steps.playwright-version.outputs.version }} | |
| - name: Install Playwright browsers | |
| if: steps.playwright-cache.outputs.cache-hit != 'true' | |
| run: pnpm exec playwright install --with-deps chromium | |
| - name: Install Playwright system dependencies | |
| if: steps.playwright-cache.outputs.cache-hit == 'true' | |
| run: pnpm exec playwright install-deps chromium | |
| - name: Run E2E tests | |
| run: pnpm test:e2e --project=chromium | |
| - name: Upload Playwright report | |
| uses: actions/upload-artifact@v7 | |
| if: ${{ !cancelled() && failure() }} | |
| with: | |
| name: playwright-report | |
| path: playwright-report/ | |
| retention-days: 14 | |
| docs: | |
| name: Build Docs | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| submodules: true | |
| - name: Check for docs changes | |
| id: docs-changes | |
| run: | | |
| if [ "${{ github.event_name }}" = "push" ]; then | |
| echo "should_run=true" >> "$GITHUB_OUTPUT" | |
| else | |
| # Check if docs-related files changed in this PR | |
| CHANGED=$(git diff --name-only ${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }} -- \ | |
| 'apps/site/' 'content/' 2>/dev/null || echo "") | |
| if [ -n "$CHANGED" ]; then | |
| echo "should_run=true" >> "$GITHUB_OUTPUT" | |
| echo "Docs-related files changed:" | |
| echo "$CHANGED" | |
| else | |
| echo "should_run=false" >> "$GITHUB_OUTPUT" | |
| echo "No docs-related files changed, skipping build" | |
| fi | |
| fi | |
| - name: Enable Corepack | |
| if: steps.docs-changes.outputs.should_run == 'true' | |
| run: corepack enable | |
| - name: Verify pnpm version | |
| if: steps.docs-changes.outputs.should_run == 'true' | |
| run: pnpm --version | |
| - name: Setup Node.js | |
| if: steps.docs-changes.outputs.should_run == 'true' | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '20.x' | |
| cache: 'pnpm' | |
| - name: Turbo Cache | |
| if: steps.docs-changes.outputs.should_run == 'true' | |
| uses: actions/cache@v5 | |
| with: | |
| path: node_modules/.cache/turbo | |
| key: turbo-${{ runner.os }}-docs-${{ github.sha }} | |
| restore-keys: | | |
| turbo-${{ runner.os }}-docs- | |
| turbo-${{ runner.os }}- | |
| - name: Install dependencies | |
| if: steps.docs-changes.outputs.should_run == 'true' | |
| run: pnpm install --frozen-lockfile | |
| - name: Build Site | |
| if: steps.docs-changes.outputs.should_run == 'true' | |
| run: pnpm turbo run build --filter='@object-ui/site' |