From b89d51dc8c2a70dcae732f1683072229eccd85d6 Mon Sep 17 00:00:00 2001 From: Lubos Date: Thu, 23 Oct 2025 12:47:58 +0800 Subject: [PATCH] chore: format examples --- examples/openapi-ts-next/openapi-ts.config.ts | 2 +- .../openapi-ts-next/src/client/client.gen.ts | 2 +- .../openapi-ts-pinia-colada/.eslintrc.cjs | 3 +- .../.eslintrc.cjs | 3 +- scripts/examples-generate.sh | 89 ++++++++++++++----- 5 files changed, 73 insertions(+), 26 deletions(-) diff --git a/examples/openapi-ts-next/openapi-ts.config.ts b/examples/openapi-ts-next/openapi-ts.config.ts index ff06af2b1..bd8c28b15 100644 --- a/examples/openapi-ts-next/openapi-ts.config.ts +++ b/examples/openapi-ts-next/openapi-ts.config.ts @@ -11,7 +11,7 @@ export default defineConfig({ plugins: [ { name: '@hey-api/client-next', - runtimeConfigPath: './src/hey-api.ts', + runtimeConfigPath: '../hey-api', }, '@hey-api/sdk', { diff --git a/examples/openapi-ts-next/src/client/client.gen.ts b/examples/openapi-ts-next/src/client/client.gen.ts index 4e785697c..321368cc7 100644 --- a/examples/openapi-ts-next/src/client/client.gen.ts +++ b/examples/openapi-ts-next/src/client/client.gen.ts @@ -1,12 +1,12 @@ // This file is auto-generated by @hey-api/openapi-ts +import { createClientConfig } from '../hey-api'; import { type ClientOptions, type Config, createClient, createConfig, } from './client'; -import { createClientConfig } from './src/hey-api.ts'; import type { ClientOptions as ClientOptions2 } from './types.gen'; /** diff --git a/examples/openapi-ts-pinia-colada/.eslintrc.cjs b/examples/openapi-ts-pinia-colada/.eslintrc.cjs index ff3a044fa..491d6ae84 100644 --- a/examples/openapi-ts-pinia-colada/.eslintrc.cjs +++ b/examples/openapi-ts-pinia-colada/.eslintrc.cjs @@ -10,6 +10,5 @@ module.exports = { ], parserOptions: { ecmaVersion: 'latest' - }, - root: true + } } diff --git a/examples/openapi-ts-tanstack-vue-query/.eslintrc.cjs b/examples/openapi-ts-tanstack-vue-query/.eslintrc.cjs index ff3a044fa..491d6ae84 100644 --- a/examples/openapi-ts-tanstack-vue-query/.eslintrc.cjs +++ b/examples/openapi-ts-tanstack-vue-query/.eslintrc.cjs @@ -10,6 +10,5 @@ module.exports = { ], parserOptions: { ecmaVersion: 'latest' - }, - root: true + } } diff --git a/scripts/examples-generate.sh b/scripts/examples-generate.sh index 89792b670..55cda530e 100755 --- a/scripts/examples-generate.sh +++ b/scripts/examples-generate.sh @@ -9,33 +9,82 @@ set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -echo "Generating client code for all examples..." +echo "⏳ Generating client code for all examples..." +# Find all examples with openapi-ts script and generate code in parallel +# Concurrency control: adjust this number depending on CI machine resources +CONCURRENCY=${CONCURRENCY:-4} +tmpdir=$(mktemp -d) +# Use a simple space-separated list of pids and per-pid files for metadata +PIDS="" + +wait_for_slot() { + # Wait until number of background jobs is less than CONCURRENCY + while [ "$(jobs -rp | wc -l)" -ge "$CONCURRENCY" ]; do + sleep 0.2 + done +} -# Find all examples with openapi-ts script and generate code for dir in "$ROOT_DIR"/examples/*/; do - example_name=$(basename "$dir") package_json="$dir/package.json" - - # Skip if package.json doesn't exist if [ ! -f "$package_json" ]; then continue fi - - # Check if the example has openapi-ts script - if grep -q "\"openapi-ts\":" "$package_json"; then - echo "" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "📦 Generating: $example_name" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - - # Run openapi-ts for this example - (cd "$dir" && pnpm openapi-ts) - - echo "✅ Completed: $example_name" + + if ! grep -q "\"openapi-ts\":" "$package_json"; then + continue fi + + example_name=$(basename "$dir") + echo "📦 Scheduling: $example_name" + + wait_for_slot + + log="$tmpdir/${example_name}.log" + ( + echo "Generating: $example_name" + set -e + cd "$dir" + echo "-> Running pnpm openapi-ts" + pnpm openapi-ts + + # Format generated files in this example only to keep the step fast + if command -v pnpm >/dev/null 2>&1 && pnpm -w -s --version >/dev/null 2>&1; then + pnpm -s exec prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}" || true + pnpm -s exec eslint --fix "src/**/*.{ts,tsx,js,jsx,json,md}" || true + else + if [ -x "node_modules/.bin/prettier" ]; then + ./node_modules/.bin/prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}" || true + fi + if [ -x "node_modules/.bin/eslint" ]; then + ./node_modules/.bin/eslint --fix "src/**/*.{ts,tsx,js,jsx,json,md}" || true + fi + fi + + echo "Completed: $example_name" + ) >"$log" 2>&1 & + + pid=$! + PIDS="$PIDS $pid" + printf '%s' "$example_name" >"$tmpdir/$pid.name" + printf '%s' "$log" >"$tmpdir/$pid.log" done -echo "" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +failed=0 +for pid in $PIDS; do + if wait "$pid"; then + name=$(cat "$tmpdir/$pid.name" 2>/dev/null || echo "$pid") + echo "✅ $name succeeded" + else + name=$(cat "$tmpdir/$pid.name" 2>/dev/null || echo "$pid") + log=$(cat "$tmpdir/$pid.log" 2>/dev/null || echo "(no log)") + echo "❌ $name failed — see log: $tmpdir/$pid.log" + failed=1 + fi +done + +if [ "$failed" -ne 0 ]; then + echo "One or more examples failed to generate. Logs are in: $tmpdir" + exit 1 +fi + echo "✨ All examples generated successfully!" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -- 2.51.2