orchestrate-multi-target-sdks
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseOrchestrate Multi-Target SDKs
编排多目标SDK
Generate multiple SDK variants (e.g., core, Azure, GCP) from different OpenAPI sources in a single repository.
从单个仓库中的不同OpenAPI源生成多个SDK变体(如核心版、Azure版、GCP版)。
When to Use
适用场景
- Generating cloud-specific SDK variants (Azure, GCP, AWS)
- Creating regional API variants (US, EU, APAC)
- Building partner-branded/white-label SDKs
- Managing multiple OpenAPI sources in one repo
- User says: "multi-target SDK", "Azure variant", "SDK monorepo"
- 生成云厂商专属SDK变体(Azure、GCP、AWS)
- 创建区域化API变体(美国、欧盟、亚太)
- 构建合作伙伴品牌/白标SDK
- 在单个仓库中管理多个OpenAPI源
- 用户提及:“多目标SDK”、“Azure变体”、“SDK单仓”
Quick Start
快速开始
Configure multiple sources and targets in :
workflow.yamlyaml
workflowVersion: 1.0.0
speakeasyVersion: latest
sources:
main-source:
inputs:
- location: registry.speakeasyapi.dev/org/repo/main-openapi:main
azure-source:
inputs:
- location: registry.speakeasyapi.dev/org/repo/azure-openapi:main
targets:
main-sdk:
target: typescript
source: main-source
output: ./
azure-sdk:
target: typescript
source: azure-source
output: ./packages/azure在中配置多个源和目标:
workflow.yamlyaml
workflowVersion: 1.0.0
speakeasyVersion: latest
sources:
main-source:
inputs:
- location: registry.speakeasyapi.dev/org/repo/main-openapi:main
azure-source:
inputs:
- location: registry.speakeasyapi.dev/org/repo/azure-openapi:main
targets:
main-sdk:
target: typescript
source: main-source
output: ./
azure-sdk:
target: typescript
source: azure-source
output: ./packages/azureRepository Structure
仓库结构
my-multi-sdk/
├── .speakeasy/
│ ├── workflow.yaml # Multi-target config
│ └── gen.yaml # Main SDK config
├── src/ # Main SDK source
├── packages/
│ ├── azure/
│ │ ├── .speakeasy/
│ │ │ └── gen.yaml # Azure-specific config
│ │ └── src/
│ └── gcp/
│ ├── .speakeasy/
│ │ └── gen.yaml # GCP-specific config
│ └── src/
├── .github/workflows/
│ ├── sdk_generation_main.yaml
│ ├── sdk_generation_azure.yaml
│ └── sdk_generation_gcp.yaml
└── package.jsonmy-multi-sdk/
├── .speakeasy/
│ ├── workflow.yaml # 多目标配置
│ └── gen.yaml # 主SDK配置
├── src/ # 主SDK源码
├── packages/
│ ├── azure/
│ │ ├── .speakeasy/
│ │ │ └── gen.yaml # Azure专属配置
│ │ └── src/
│ └── gcp/
│ ├── .speakeasy/
│ │ └── gen.yaml # GCP专属配置
│ └── src/
├── .github/workflows/
│ ├── sdk_generation_main.yaml
│ ├── sdk_generation_azure.yaml
│ └── sdk_generation_gcp.yaml
└── package.jsonPer-Target gen.yaml
各目标专属gen.yaml
Each variant has its own configuration:
yaml
undefined每个变体都有自己的配置:
yaml
undefinedpackages/azure/.speakeasy/gen.yaml
packages/azure/.speakeasy/gen.yaml
configVersion: 2.0.0
generation:
sdkClassName: MySDKAzure
typescript:
version: 1.0.0
packageName: '@myorg/mysdk-azure'
envVarPrefix: MYSDK_AZURE
undefinedconfigVersion: 2.0.0
generation:
sdkClassName: MySDKAzure
typescript:
version: 1.0.0
packageName: '@myorg/mysdk-azure'
envVarPrefix: MYSDK_AZURE
undefinedNaming Conventions
命名规范
| Variant | Package Name | Class Name |
|---|---|---|
| Main | | |
| Azure | | |
| GCP | | |
| 变体 | 包名 | 类名 |
|---|---|---|
| 主版 | | |
| Azure版 | | |
| GCP版 | | |
CI Workflow Per Target
各目标CI工作流
Create separate workflows for independent regeneration:
yaml
undefined创建独立的工作流以实现单独重新生成:
yaml
undefined.github/workflows/sdk_generation_azure.yaml
.github/workflows/sdk_generation_azure.yaml
name: Generate Azure SDK
on:
workflow_dispatch:
inputs:
force:
type: boolean
default: false
jobs:
generate:
uses: speakeasy-api/sdk-generation-action/.github/workflows/workflow-executor.yaml@v15
with:
target: azure-sdk
mode: pr
secrets:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
speakeasy_api_key: ${{ secrets.SPEAKEASY_API_KEY }}
undefinedname: Generate Azure SDK
on:
workflow_dispatch:
inputs:
force:
type: boolean
default: false
jobs:
generate:
uses: speakeasy-api/sdk-generation-action/.github/workflows/workflow-executor.yaml@v15
with:
target: azure-sdk
mode: pr
secrets:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
speakeasy_api_key: ${{ secrets.SPEAKEASY_API_KEY }}
undefinedVersioning Strategies
版本控制策略
Lockstep: All variants share the same version (simpler).
Independent: Each variant has its own version (more flexible).
yaml
undefined同步版本:所有变体使用相同版本(更简单)。
独立版本:每个变体拥有自己的版本(更灵活)。
yaml
undefinedIndependent versioning
独立版本示例
Main: version: 2.1.0
主版: version: 2.1.0
Azure: version: 1.8.0
Azure版: version: 1.8.0
GCP: version: 1.3.0
GCP版: version: 1.3.0
undefinedundefinedSharing Code Across Variants
跨变体共享代码
Option 1: Duplicate hooks in each variant (simpler)
Option 2: Create shared package:
shared/
├── package.json # @myorg/mysdk-shared
└── src/
└── hooks.ts方案1:在每个变体中复制钩子(更简单)
方案2:创建共享包:
shared/
├── package.json # @myorg/mysdk-shared
└── src/
└── hooks.tsTroubleshooting
故障排除
| Issue | Solution |
|---|---|
| Wrong target generated | Specify |
| Config not found | Ensure |
| Circular dependencies | Use workspace protocols in package.json |
| 问题 | 解决方案 |
|---|---|
| 生成了错误的目标 | 在 |
| 未找到配置 | 确保输出目录中存在 |
| 循环依赖 | 在package.json中使用工作区协议 |
Related Skills
相关技能
- - Initial SDK setup
start-new-sdk-project - - Language-specific configuration
configure-sdk-options - - Per-source overlays
manage-openapi-overlays - - Single repo per language
orchestrate-multi-repo-sdks
- - 初始化SDK项目
start-new-sdk-project - - 语言专属配置
configure-sdk-options - - 各源专属覆盖配置
manage-openapi-overlays - - 单语言单仓库
orchestrate-multi-repo-sdks