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. 02SDKのプルリクエストを調整
  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 がそれぞれ独自のリポジトリ(例:myapi-typescript、myapi-python、myapi-go)にある場合に、SDK の生成を管理します。

使用する場面

  • 異なる言語の 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 - 単一リポジトリで複数のターゲットを管理する

コメント