mcpField
O
orchestrate-multi-repo-sdks

orchestrate-multi-repo-sdks

github.com/speakeasy-api云与 DevOps1879 次安装37 周前更新
代码仓库

关于 orchestrate-multi-repo-sdks

用于从 API 规范仓库协调多个语言 SDK 仓库的生成流程,涵盖 PR 触发生成、状态报告,以及关联 SDK PR 的合并或关闭。

主要功能

  1. 01触发多个 SDK 仓库生成
  2. 02协调 SDK 拉取请求
  3. 03在规范 PR 中报告生成状态
  4. 04支持由不同团队维护语言 SDK

适用场景

  1. 01API 规范 PR 打开时生成 SDK
  2. 02规范 PR 关闭时处理 SDK PR
  3. 03协调不同团队的 SDK 发布

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/speakeasy-api/sdk-generation-skills --skill orchestrate-multi-repo-sdks

安装后在 Claude Code 中输入/orchestrate-multi-repo-sdks确认已加载。

详细介绍

编排多仓库 SDK

管理 SDK 生成流程,其中每种语言的 SDK 都位于单独的仓库中(例如,myapi-typescript、myapi-python、myapi-go)。

使用场景

  • 不同语言的 SDK 位于单独的仓库中
  • 需要由 PR 触发跨仓库的 SDK 生成
  • 需要自动协调 PR(在规范 PR 关闭时合并或关闭 SDK PR)
  • 不同团队维护不同语言的 SDK
  • 用户提到:“多仓库 SDK”“跨仓库工作流”“SDK PR 同步”

架构

┌─────────────────────────────────────────────────────────┐
│                  API Spec Repository                     │
├─────────────────────────────────────────────────────────┤
│  PR opened    │  PR merged/closed    │  Main push       │
│      ↓        │        ↓             │      ↓           │
│  kick-off     │  reconcile-prs       │  sync            │
└───────────────┴──────────────────────┴──────────────────┘
        │                │                    │
        ▼                ▼                    ▼
┌──────────────┐  ┌──────────────┐  ┌──────────────┐
│ typescript   │  │ python-sdk   │  │ go-sdk       │
│ SDK PR       │  │ SDK PR       │  │ SDK PR       │
└──────────────┘  └──────────────┘  └──────────────┘

工作流 1:启动生成(PR 触发)

当规范 PR 创建时,在每个语言仓库中触发 SDK 生成:

# .github/workflows/kick-off-generation.yaml
name: Kick Off SDK Generation
on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  trigger_sdk_repos:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - repo: myapi-typescript
          - repo: myapi-python
          - repo: myapi-go
    steps:
      - name: Trigger SDK generation
        env:
          GH_TOKEN: ${{ secrets.SDK_REPOS_PAT }}
        run: |
          gh workflow run sdk_generation.yaml \
            --repo "your-org/${{ matrix.repo }}" \
            --field feature_branch="${{ github.head_ref }}"

工作流 2:协调 PR(合并/关闭时)

在规范 PR 关闭时,自动合并或关闭 SDK PR:

# .github/workflows/reconcile-prs.yaml
name: Reconcile SDK PRs
on:
  pull_request:
    types: [closed]

jobs:
  manage_sdk_prs:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        repo: [myapi-typescript, myapi-python, myapi-go]
    steps:
      - name: Manage SDK PR
        env:
          GH_TOKEN: ${{ secrets.SDK_REPOS_PAT }}
        run: |
          branch="${{ github.event.pull_request.head.ref }}"
          was_merged="${{ github.event.pull_request.merged }}"

          pr_number=$(gh pr list --repo "your-org/${{ matrix.repo }}" \
            --head "$branch" --json number --jq '.[0].number')

          if [[ -n "$pr_number" ]]; then
            if [[ "$was_merged" == "true" ]]; then
              gh pr merge "$pr_number" --repo "your-org/${{ matrix.repo }}" \
                --squash --delete-branch
            else
              gh pr close "$pr_number" --repo "your-org/${{ matrix.repo }}"
            fi
          fi

SDK 仓库工作流

每个 SDK 仓库都需要一个可调度的工作流:

# .github/workflows/sdk_generation.yaml (in each SDK repo)
name: SDK Generation
on:
  workflow_dispatch:
    inputs:
      feature_branch:
        description: 'Feature branch from spec repo'
        required: false

jobs:
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Create branch
        if: inputs.feature_branch != ''
        run: git checkout -b "${{ inputs.feature_branch }}"

      - name: Generate SDK
        run: speakeasy run -y
        env:
          SPEAKEASY_API_KEY: ${{ secrets.SPEAKEASY_API_KEY }}

      - name: Create PR
        if: inputs.feature_branch != ''
        run: |
          git add -A && git commit -m "chore: regenerate SDK" || exit 0
          git push -u origin "${{ inputs.feature_branch }}"
          gh pr create --title "SDK update" --body "Auto-generated" || true

所需密钥

密钥位置用途
SPEAKEASY_API_KEY所有仓库Speakeasy CLI 身份验证
SDK_REPOS_PAT规范仓库具有 SDK 仓库 repo 范围的 PAT

PR 状态报告

将 SDK 生成状态报告回规范 PR:

- name: Update PR comment
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    marker=""
    comment="$marker
    ### ${{ matrix.repo }} SDK
    | Status | PR |
    |--------|-----|
    | ✅ Success | [View PR](url) |"

    gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \
      -f body="$comment"

多仓库与单仓库

方面多仓库单仓库
隔离性独立版本控制共享版本控制
CI 复杂度较高较低
最适合不同团队/节奏统一发布

故障排除

问题解决方案
PAT 权限确保具有 repo + actions 范围
找不到分支SDK 仓库必须在 main 上配置工作流
未创建 PR检查分支是否已有 PR

相关技能

  • start-new-sdk-project - SDK 仓库设置
  • orchestrate-multi-target-sdks - 单个仓库,多个目标

评论

支持 Markdown