Skip to content

Add RefreshIndicator and improve loading handling #5017

Add RefreshIndicator and improve loading handling

Add RefreshIndicator and improve loading handling #5017

Workflow file for this run

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'