Skip to content

1 org に複数の GitHub アカウント/Organization を紐づけられるようにする #283

@coji

Description

@coji

課題

現在、1 Upflow organization につき GitHub App installation は 1 つしか紐づけられない。
個人アカウント(例: github.com/coji)と所属する GitHub Organization(例: github.com/techtalkjp)の両方の repos を同じテナントで追跡したいケースに対応できない。

実際のコードで確認した制約

1. github_app_links スキーマ (db/shared.sql:144-160)

  • PRIMARY KEY (organization_id) で 1 org 1 レコード固定
  • UNIQUE (installation_id) / UNIQUE (github_account_id)
  • github_org は単数カラム

2. クエリ層 (app/services/github-integration-queries.server.ts:12)

  • getGithubAppLink(organizationId)executeTakeFirst() で単一 link を返す前提

3. Octokit 解決 (app/services/github-octokit.server.ts:90-117)

  • resolveOctokitFromOrg(org) が org に対して単一の githubAppLink.installationId から Octokit を生成
  • 呼び出し側は「org → 1 Octokit」を前提にしている

4. tenant DB の repositories (db/tenant.sql:23-40)

  • integration_id は持つが、どの installation 経由で fetch するかの情報はない
  • つまり repositories を installation ごとに分けて crawl する仕組みが存在しない

5. Webhook (app/services/github-webhook-installation.server.ts)

  • findActiveLinkByInstallationOrAccountexecuteTakeFirst() で1件前提
  • installation.created ハンドラは既存 link の行を UPDATE する設計(= 1 org 1 link 前提)

設計・対応方針

設計判断・スキーマ変更・移行方針・受け入れ条件は RDD を正とする:

📄 docs/rdd/issue-283-multiple-github-accounts.md

実装は stacked PR で段階的に進める。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions