chore: update versions (#282) #1010
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] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| # Cancel in-progress runs for the same workflow/ref | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
| env: | |
| # Turbo configuration | |
| TURBO_TOKEN: ${{ secrets.VERCEL_TOKEN }} | |
| TURBO_TEAM: ${{ vars.VERCEL_TEAM }} | |
| TURBO_CACHE: remote:rw | |
| # Node configuration | |
| NODE_VERSION: 22 | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| checks: write | |
| jobs: | |
| # Build job runs first to generate artifacts (excluding docs) | |
| build: | |
| name: Build Packages | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Build packages | |
| run: pnpm build --filter '!@styleframe/docs' --filter '!@styleframe/playground' --filter '!@styleframe/storybook' --filter '!@styleframe/app' | |
| env: | |
| NODE_ENV: production | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| path: | | |
| engine/*/dist | |
| theme/dist | |
| tooling/*/dist | |
| testing/*/dist | |
| retention-days: 7 | |
| # Build docs separately | |
| build-docs: | |
| name: Build Docs | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Build docs | |
| run: pnpm build --filter '@styleframe/docs' | |
| env: | |
| NODE_ENV: production | |
| - name: Upload docs build | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: docs-build | |
| path: | | |
| apps/docs/.nuxt | |
| apps/docs/.output | |
| retention-days: 7 | |
| # Build playground separately | |
| build-playground: | |
| name: Build Playground | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: build-artifacts | |
| path: . | |
| - name: Build playground | |
| run: pnpm build --filter '@styleframe/playground' | |
| env: | |
| NODE_ENV: production | |
| - name: Upload playground build | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: playground-build | |
| path: apps/playground/dist | |
| retention-days: 7 | |
| # Build storybook separately | |
| build-storybook: | |
| name: Build Storybook | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: build-artifacts | |
| path: . | |
| - name: Build storybook | |
| run: pnpm build --filter '@styleframe/storybook' | |
| env: | |
| NODE_ENV: production | |
| - name: Upload storybook build | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: storybook-build | |
| path: apps/storybook/storybook-static | |
| retention-days: 7 | |
| # Build app separately | |
| build-app: | |
| name: Build App | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Build app | |
| run: pnpm build --filter '@styleframe/app' | |
| env: | |
| NODE_ENV: production | |
| - name: Upload app build | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: app-build | |
| path: | | |
| apps/app/.nuxt | |
| apps/app/.output | |
| retention-days: 7 | |
| # Lint job - runs oxlint and oxfmt format check | |
| lint: | |
| name: Lint | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: build-artifacts | |
| path: . | |
| - name: Run oxlint | |
| run: pnpm lint | |
| - name: Check formatting with oxfmt | |
| run: pnpm run format:check | |
| # Type checking job | |
| typecheck: | |
| name: Type Check | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: build-artifacts | |
| path: . | |
| - name: Run type checking | |
| run: pnpm typecheck | |
| # Test job | |
| unit-tests: | |
| name: Unit Tests | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: build-artifacts | |
| path: . | |
| - name: Run tests | |
| run: pnpm test -- --coverage | |
| env: | |
| NODE_ENV: test | |
| - name: Upload coverage reports | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: ./engine/*/coverage/lcov.info,./theme/*/coverage/lcov.info | |
| slug: styleframe-dev/styleframe | |
| fail_ci_if_error: false | |
| detect-changes: | |
| name: Detect Changes | |
| runs-on: ubuntu-latest | |
| outputs: | |
| run-integration: ${{ steps.check.outputs.run }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check for relevant changes | |
| id: check | |
| run: | | |
| # Always run on push to main or manual dispatch | |
| if [[ "${{ github.event_name }}" != "pull_request" ]]; then | |
| echo "run=true" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| # Run if engine/ or tooling/ changed | |
| CHANGED=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) | |
| if echo "$CHANGED" | grep -qE '^(engine|tooling)/'; then | |
| echo "run=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "run=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| integration-tests: | |
| name: Integration Tests | |
| runs-on: ubuntu-latest | |
| needs: [build, detect-changes] | |
| if: needs.detect-changes.outputs.run-integration == 'true' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: build-artifacts | |
| path: . | |
| - name: Install Playwright Browsers | |
| run: pnpm exec playwright install --with-deps | |
| working-directory: testing/integration | |
| - name: Run Integration tests | |
| run: pnpm test:integration | |
| - name: Upload Playwright report | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: playwright-report | |
| path: testing/integration/playwright-report | |
| retention-days: 30 | |
| ci-success: | |
| name: CI Success | |
| runs-on: ubuntu-latest | |
| needs: | |
| [ | |
| build, | |
| build-docs, | |
| build-playground, | |
| build-storybook, | |
| build-app, | |
| lint, | |
| typecheck, | |
| unit-tests, | |
| detect-changes, | |
| integration-tests, | |
| ] | |
| if: always() | |
| steps: | |
| - name: Check job status | |
| run: | | |
| if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" ]]; then | |
| exit 1 | |
| fi |