name: SDK Codegen Drift # Re-runs the @toolctrl/api-client-ts generation pipeline on PRs that touch # the upstream OpenAPI surface (apps/api/src/openapi.ts) or the SDK package # itself, then verifies the committed src/generated/ tree is in sync with # the captured openapi.json. # # Drift is a hard failure: regenerating + committing is part of the PR. # # Spec: docs/improvement-plan/08-mobile-cli-storybook-sdk/ts-sdk.md on: pull_request: paths: - "apps/api/src/openapi.ts" - "apps/api/src/openapi.test.ts" - "packages/api-client-ts/**" - "packages/api-types/**" - ".github/workflows/sdk-codegen.yml" permissions: contents: read pull-requests: write jobs: drift-check: name: Verify SDK codegen is in sync with OpenAPI spec runs-on: ubuntu-latest timeout-minutes: 15 steps: - name: Checkout PR head uses: actions/checkout@v4 - name: Enable Corepack run: corepack enable - name: Prepare pnpm 10.33.0 run: corepack prepare pnpm@10.33.0 --activate - name: Configure pnpm store run: pnpm config set store-dir .pnpm-store - name: Cache pnpm store uses: actions/cache@v4 with: path: .pnpm-store key: ${{ runner.os }}-pnpm-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm- - name: Install dependencies run: pnpm install --frozen-lockfile --prefer-offline - name: Regenerate OpenAPI capture run: pnpm --filter @toolctrl/api-client-ts generate-spec - name: Regenerate typed client (Hey-API) run: pnpm --filter @toolctrl/api-client-ts generate - name: Fail if generated code drifts from committed state run: | if ! git diff --exit-code --stat \ packages/api-client-ts/openapi.json \ packages/api-client-ts/src/generated; then echo "" echo "SDK codegen drift detected. Run:" echo "" echo " pnpm --filter @toolctrl/api-client-ts generate:all" echo "" echo "then commit packages/api-client-ts/openapi.json and packages/api-client-ts/src/generated/." exit 1 fi echo "SDK codegen is in sync with the upstream OpenAPI spec." - name: Typecheck SDK packages run: | pnpm --filter @toolctrl/api-client-ts typecheck pnpm --filter @toolctrl/api-types typecheck - name: Run SDK tests run: | pnpm --filter @toolctrl/api-client-ts test pnpm --filter @toolctrl/api-types test