Migrate GitHub teams to infrastructure-as-code (#5)

* Migrate GitHub teams to infrastructure-as-code

- Add 25 teams with proper hierarchy (steering-committee, SDK teams, working groups, interest groups)
- Add 67 team members with their assignments
- Add repository access configuration for all 21 repositories
- Refactor github.ts to use config-driven approach with repoAccess.ts
- Mark all MCP teams as GitHub-only with onlyOnPlatforms
- Use RepositoryCollaborators for authoritative access management

Note: GitHub Projects V2 permissions are not yet supported by Pulumi and must be managed manually. See https://github.com/pulumi/pulumi-github/issues/1006

* Add individual user collaborators to repository access

Preserves direct collaborator access for users who have explicit permissions outside of team membership, including:
- jspahrsummers: admin on multiple core repos
- Go SDK collaborators (neild, rsc, rolandshoemaker, h9jiang)
- C# SDK collaborators (jeffhandley, MackinnonBuck, jozkee, localden, PederHP)
- Rust SDK collaborators (jamadeo, jokemanfire, 4t145)
- Inspector collaborators (richardkmichael, olaservo, an-dustin, ashwin-ant)
- Financial services IG collaborators (aniabot, imfing, sambhav, KengoA, nitsanh)
- And others

Without this, RepositoryCollaborators (authoritative mode) would remove all individual user access.
This commit is contained in:
adam jones 2025-10-03 22:33:37 +01:00 • committed by Adam Jones
commit 7883dbc5e3
No known key found for this signature in database

View file

@ -9,20 +9,163 @@ import { defineGroups } from './utils';
// Groups are created on all platforms (GitHub and Google) by default.
// To limit a group to specific platforms, set the onlyOnPlatforms array (e.g., onlyOnPlatforms: ['google']).
export const GROUPS = defineGroups([
// MCP Organization Structure
{
name: 'test-parent',
description: 'All maintainers. Users should not be added directly to this group.',
name: 'steering-committee',
description: 'MCP Steering Committee',
onlyOnPlatforms: ['github'],
},
{
name: 'test-child',
description: 'Registry maintainers',
memberOf: ['test-parent'],
name: 'core',
description: 'Core team',
memberOf: ['steering-committee'],
onlyOnPlatforms: ['github'],
},
{
name: 'test-email-group',
description: 'Example email group that accepts external emails',
isEmailGroup: true,
name: 'core-maintainers',
description: 'Core maintainers',
memberOf: ['steering-committee'],
onlyOnPlatforms: ['github'],
},
{
name: 'moderators',
description: 'Community moderators',
memberOf: ['steering-committee'],
onlyOnPlatforms: ['github'],
},
{
name: 'docs-maintaners',
description: 'MCP docs maintainers',
memberOf: ['steering-committee'],
onlyOnPlatforms: ['github'],
},
// SDK Maintainers
{
name: 'sdk-maintainers',
description: 'Authors and maintainers of official MCP SDKs',
memberOf: ['steering-committee'],
onlyOnPlatforms: ['github'],
},
{
name: 'csharp-sdk',
description: 'Official C# SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'go-sdk',
description: 'The Go SDK Team',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'java-sdk',
description: 'Official Java SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'kotlin-sdk',
description: 'Official Kotlin SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'php-sdk',
description: 'Official PHP SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'python-sdk',
description: 'Official Python SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'python-sdk-auth',
description: 'Auth related owners',
memberOf: ['python-sdk'],
onlyOnPlatforms: ['github'],
},
{
name: 'ruby-sdk',
description: 'Official Ruby SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'rust-sdk',
description: 'Official Rust SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'swift-sdk',
description: 'Official Swift SDK maintainers',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'typescript-sdk',
description: 'Official TypeScript SDK',
memberOf: ['sdk-maintainers'],
onlyOnPlatforms: ['github'],
},
{
name: 'typescript-sdk-auth',
description: 'Code owners for auth in Typescript SDK',
memberOf: ['typescript-sdk'],
onlyOnPlatforms: ['github'],
},
// Working Groups
{
name: 'working-groups',
description: 'MCP Working Groups',
memberOf: ['steering-committee'],
onlyOnPlatforms: ['github'],
},
{
name: 'auth-wg',
description: 'Authentication Working Group',
memberOf: ['working-groups'],
onlyOnPlatforms: ['github'],
},
{
name: 'registry-wg',
description: 'Official registry builders and maintainers',
memberOf: ['working-groups'],
},
{
name: 'security-wg',
description: 'Security Working Group',
memberOf: ['working-groups'],
onlyOnPlatforms: ['github'],
},
{
name: 'transport-wg',
description: 'Transport Working Group',
memberOf: ['working-groups'],
onlyOnPlatforms: ['github'],
},
// Interest Groups
{
name: 'interest-groups',
description: 'Interest Groups',
memberOf: ['steering-committee'],
onlyOnPlatforms: ['github'],
},
{
name: 'ig-financial-services',
description: 'Financial Services Interest Group',
memberOf: ['interest-groups'],
onlyOnPlatforms: ['github'],
},
// Email-only groups
{
name: 'antitrust',
description: 'Antitrust compliance contacts',