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:
parent
5b2b01db21
commit
7883dbc5e3
5 changed files with 772 additions and 10 deletions
|
|
@ -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',
|
||||
|
|
|
|||
329
src/config/repoAccess.ts
Normal file
329
src/config/repoAccess.ts
Normal file
|
|
@ -0,0 +1,329 @@
|
|||
// Repository access configuration
|
||||
// Each repository lists all teams and users that should have access and their permission level
|
||||
|
||||
export interface RepositoryAccess {
|
||||
repository: string;
|
||||
teams?: Array<{
|
||||
team: string; // Team slug
|
||||
permission: 'pull' | 'triage' | 'push' | 'maintain' | 'admin';
|
||||
}>;
|
||||
users?: Array<{
|
||||
username: string; // GitHub username
|
||||
permission: 'pull' | 'triage' | 'push' | 'maintain' | 'admin';
|
||||
}>;
|
||||
}
|
||||
|
||||
export const REPOSITORY_ACCESS: RepositoryAccess[] = [
|
||||
{
|
||||
repository: 'docs',
|
||||
users: [
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
],
|
||||
teams: [
|
||||
{ team: 'auth-wg', permission: 'push' },
|
||||
{ team: 'core', permission: 'maintain' },
|
||||
{ team: 'core-maintainers', permission: 'push' },
|
||||
{ team: 'csharp-sdk', permission: 'push' },
|
||||
{ team: 'docs-maintaners', permission: 'push' },
|
||||
{ team: 'go-sdk', permission: 'push' },
|
||||
{ team: 'ig-financial-services', permission: 'push' },
|
||||
{ team: 'interest-groups', permission: 'push' },
|
||||
{ team: 'java-sdk', permission: 'push' },
|
||||
{ team: 'kotlin-sdk', permission: 'push' },
|
||||
{ team: 'moderators', permission: 'push' },
|
||||
{ team: 'php-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk-auth', permission: 'push' },
|
||||
{ team: 'registry-wg', permission: 'push' },
|
||||
{ team: 'ruby-sdk', permission: 'push' },
|
||||
{ team: 'rust-sdk', permission: 'push' },
|
||||
{ team: 'sdk-maintainers', permission: 'push' },
|
||||
{ team: 'security-wg', permission: 'admin' },
|
||||
{ team: 'steering-committee', permission: 'push' },
|
||||
{ team: 'swift-sdk', permission: 'push' },
|
||||
{ team: 'transport-wg', permission: 'push' },
|
||||
{ team: 'typescript-sdk', permission: 'push' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'push' },
|
||||
{ team: 'working-groups', permission: 'push' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: '.github',
|
||||
users: [
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
],
|
||||
teams: [
|
||||
{ team: 'auth-wg', permission: 'triage' },
|
||||
{ team: 'core', permission: 'maintain' },
|
||||
{ team: 'core-maintainers', permission: 'push' },
|
||||
{ team: 'csharp-sdk', permission: 'triage' },
|
||||
{ team: 'docs-maintaners', permission: 'triage' },
|
||||
{ team: 'go-sdk', permission: 'triage' },
|
||||
{ team: 'ig-financial-services', permission: 'triage' },
|
||||
{ team: 'interest-groups', permission: 'triage' },
|
||||
{ team: 'java-sdk', permission: 'triage' },
|
||||
{ team: 'kotlin-sdk', permission: 'triage' },
|
||||
{ team: 'moderators', permission: 'push' },
|
||||
{ team: 'php-sdk', permission: 'triage' },
|
||||
{ team: 'python-sdk', permission: 'triage' },
|
||||
{ team: 'python-sdk-auth', permission: 'triage' },
|
||||
{ team: 'registry-wg', permission: 'triage' },
|
||||
{ team: 'ruby-sdk', permission: 'triage' },
|
||||
{ team: 'rust-sdk', permission: 'triage' },
|
||||
{ team: 'sdk-maintainers', permission: 'triage' },
|
||||
{ team: 'security-wg', permission: 'admin' },
|
||||
{ team: 'steering-committee', permission: 'triage' },
|
||||
{ team: 'swift-sdk', permission: 'triage' },
|
||||
{ team: 'transport-wg', permission: 'triage' },
|
||||
{ team: 'typescript-sdk', permission: 'triage' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'triage' },
|
||||
{ team: 'working-groups', permission: 'triage' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'inspector',
|
||||
users: [
|
||||
{ username: 'richardkmichael', permission: 'triage' },
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
{ username: 'olaservo', permission: 'push' },
|
||||
{ username: 'an-dustin', permission: 'admin' },
|
||||
{ username: 'ashwin-ant', permission: 'admin' },
|
||||
],
|
||||
teams: [
|
||||
{ team: 'auth-wg', permission: 'push' },
|
||||
{ team: 'core', permission: 'maintain' },
|
||||
{ team: 'core-maintainers', permission: 'push' },
|
||||
{ team: 'csharp-sdk', permission: 'push' },
|
||||
{ team: 'docs-maintaners', permission: 'push' },
|
||||
{ team: 'go-sdk', permission: 'push' },
|
||||
{ team: 'ig-financial-services', permission: 'push' },
|
||||
{ team: 'interest-groups', permission: 'push' },
|
||||
{ team: 'java-sdk', permission: 'push' },
|
||||
{ team: 'kotlin-sdk', permission: 'push' },
|
||||
{ team: 'moderators', permission: 'push' },
|
||||
{ team: 'php-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk-auth', permission: 'push' },
|
||||
{ team: 'registry-wg', permission: 'push' },
|
||||
{ team: 'ruby-sdk', permission: 'push' },
|
||||
{ team: 'rust-sdk', permission: 'push' },
|
||||
{ team: 'sdk-maintainers', permission: 'push' },
|
||||
{ team: 'security-wg', permission: 'admin' },
|
||||
{ team: 'steering-committee', permission: 'push' },
|
||||
{ team: 'swift-sdk', permission: 'push' },
|
||||
{ team: 'transport-wg', permission: 'push' },
|
||||
{ team: 'typescript-sdk', permission: 'push' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'push' },
|
||||
{ team: 'working-groups', permission: 'push' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'modelcontextprotocol',
|
||||
users: [
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
],
|
||||
teams: [
|
||||
{ team: 'auth-wg', permission: 'push' },
|
||||
{ team: 'core', permission: 'maintain' },
|
||||
{ team: 'core-maintainers', permission: 'push' },
|
||||
{ team: 'csharp-sdk', permission: 'triage' },
|
||||
{ team: 'docs-maintaners', permission: 'push' },
|
||||
{ team: 'go-sdk', permission: 'triage' },
|
||||
{ team: 'ig-financial-services', permission: 'triage' },
|
||||
{ team: 'interest-groups', permission: 'triage' },
|
||||
{ team: 'java-sdk', permission: 'triage' },
|
||||
{ team: 'kotlin-sdk', permission: 'triage' },
|
||||
{ team: 'moderators', permission: 'triage' },
|
||||
{ team: 'php-sdk', permission: 'triage' },
|
||||
{ team: 'python-sdk', permission: 'triage' },
|
||||
{ team: 'python-sdk-auth', permission: 'triage' },
|
||||
{ team: 'registry-wg', permission: 'triage' },
|
||||
{ team: 'ruby-sdk', permission: 'triage' },
|
||||
{ team: 'rust-sdk', permission: 'triage' },
|
||||
{ team: 'sdk-maintainers', permission: 'triage' },
|
||||
{ team: 'security-wg', permission: 'admin' },
|
||||
{ team: 'steering-committee', permission: 'triage' },
|
||||
{ team: 'swift-sdk', permission: 'triage' },
|
||||
{ team: 'transport-wg', permission: 'triage' },
|
||||
{ team: 'typescript-sdk', permission: 'triage' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'triage' },
|
||||
{ team: 'working-groups', permission: 'triage' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'quickstart-resources',
|
||||
users: [
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
],
|
||||
teams: [
|
||||
{ team: 'auth-wg', permission: 'push' },
|
||||
{ team: 'core', permission: 'maintain' },
|
||||
{ team: 'core-maintainers', permission: 'push' },
|
||||
{ team: 'csharp-sdk', permission: 'push' },
|
||||
{ team: 'docs-maintaners', permission: 'push' },
|
||||
{ team: 'go-sdk', permission: 'push' },
|
||||
{ team: 'ig-financial-services', permission: 'push' },
|
||||
{ team: 'interest-groups', permission: 'push' },
|
||||
{ team: 'java-sdk', permission: 'push' },
|
||||
{ team: 'kotlin-sdk', permission: 'push' },
|
||||
{ team: 'moderators', permission: 'push' },
|
||||
{ team: 'php-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk-auth', permission: 'push' },
|
||||
{ team: 'registry-wg', permission: 'push' },
|
||||
{ team: 'ruby-sdk', permission: 'push' },
|
||||
{ team: 'rust-sdk', permission: 'push' },
|
||||
{ team: 'sdk-maintainers', permission: 'push' },
|
||||
{ team: 'security-wg', permission: 'admin' },
|
||||
{ team: 'steering-committee', permission: 'push' },
|
||||
{ team: 'swift-sdk', permission: 'push' },
|
||||
{ team: 'transport-wg', permission: 'push' },
|
||||
{ team: 'typescript-sdk', permission: 'push' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'push' },
|
||||
{ team: 'working-groups', permission: 'push' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'servers',
|
||||
users: [
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
{ username: 'slimslenderslacks', permission: 'push' },
|
||||
],
|
||||
teams: [
|
||||
{ team: 'auth-wg', permission: 'push' },
|
||||
{ team: 'core', permission: 'admin' },
|
||||
{ team: 'core-maintainers', permission: 'push' },
|
||||
{ team: 'csharp-sdk', permission: 'push' },
|
||||
{ team: 'docs-maintaners', permission: 'push' },
|
||||
{ team: 'go-sdk', permission: 'push' },
|
||||
{ team: 'ig-financial-services', permission: 'push' },
|
||||
{ team: 'interest-groups', permission: 'push' },
|
||||
{ team: 'java-sdk', permission: 'push' },
|
||||
{ team: 'kotlin-sdk', permission: 'push' },
|
||||
{ team: 'moderators', permission: 'push' },
|
||||
{ team: 'php-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk', permission: 'push' },
|
||||
{ team: 'python-sdk-auth', permission: 'push' },
|
||||
{ team: 'registry-wg', permission: 'push' },
|
||||
{ team: 'ruby-sdk', permission: 'push' },
|
||||
{ team: 'rust-sdk', permission: 'push' },
|
||||
{ team: 'sdk-maintainers', permission: 'push' },
|
||||
{ team: 'security-wg', permission: 'admin' },
|
||||
{ team: 'steering-committee', permission: 'push' },
|
||||
{ team: 'swift-sdk', permission: 'push' },
|
||||
{ team: 'transport-wg', permission: 'push' },
|
||||
{ team: 'typescript-sdk', permission: 'push' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'push' },
|
||||
{ team: 'working-groups', permission: 'push' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'csharp-sdk',
|
||||
teams: [{ team: 'csharp-sdk', permission: 'admin' }],
|
||||
users: [
|
||||
{ username: 'jeffhandley', permission: 'admin' },
|
||||
{ username: 'MackinnonBuck', permission: 'admin' },
|
||||
{ username: 'jozkee', permission: 'admin' },
|
||||
{ username: 'localden', permission: 'admin' },
|
||||
{ username: 'PederHP', permission: 'triage' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'go-sdk',
|
||||
teams: [{ team: 'go-sdk', permission: 'admin' }],
|
||||
users: [
|
||||
{ username: 'neild', permission: 'push' },
|
||||
{ username: 'rsc', permission: 'push' },
|
||||
{ username: 'rolandshoemaker', permission: 'push' },
|
||||
{ username: 'h9jiang', permission: 'maintain' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'java-sdk',
|
||||
teams: [{ team: 'java-sdk', permission: 'admin' }],
|
||||
},
|
||||
{
|
||||
repository: 'kotlin-sdk',
|
||||
teams: [{ team: 'kotlin-sdk', permission: 'admin' }],
|
||||
},
|
||||
{
|
||||
repository: 'php-sdk',
|
||||
teams: [{ team: 'php-sdk', permission: 'admin' }],
|
||||
},
|
||||
{
|
||||
repository: 'python-sdk',
|
||||
teams: [
|
||||
{ team: 'python-sdk', permission: 'admin' },
|
||||
{ team: 'python-sdk-auth', permission: 'admin' },
|
||||
],
|
||||
users: [
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'ruby-sdk',
|
||||
teams: [{ team: 'ruby-sdk', permission: 'admin' }],
|
||||
},
|
||||
{
|
||||
repository: 'rust-sdk',
|
||||
teams: [{ team: 'rust-sdk', permission: 'admin' }],
|
||||
users: [
|
||||
{ username: 'jamadeo', permission: 'admin' },
|
||||
{ username: 'jokemanfire', permission: 'push' },
|
||||
{ username: '4t145', permission: 'push' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'swift-sdk',
|
||||
teams: [{ team: 'swift-sdk', permission: 'admin' }],
|
||||
},
|
||||
{
|
||||
repository: 'typescript-sdk',
|
||||
teams: [
|
||||
{ team: 'typescript-sdk', permission: 'admin' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'admin' },
|
||||
],
|
||||
users: [
|
||||
{ username: 'jspahrsummers', permission: 'admin' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'create-python-server',
|
||||
teams: [
|
||||
{ team: 'python-sdk', permission: 'admin' },
|
||||
{ team: 'python-sdk-auth', permission: 'admin' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'create-typescript-server',
|
||||
teams: [
|
||||
{ team: 'typescript-sdk', permission: 'admin' },
|
||||
{ team: 'typescript-sdk-auth', permission: 'admin' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'registry',
|
||||
teams: [{ team: 'registry-wg', permission: 'admin' }],
|
||||
users: [
|
||||
{ username: 'rdimitrov', permission: 'admin' },
|
||||
],
|
||||
},
|
||||
{
|
||||
repository: 'static',
|
||||
teams: [{ team: 'registry-wg', permission: 'push' }],
|
||||
},
|
||||
{
|
||||
repository: 'financial-services-interest-group',
|
||||
teams: [{ team: 'ig-financial-services', permission: 'admin' }],
|
||||
users: [
|
||||
{ username: 'aniabot', permission: 'pull' },
|
||||
{ username: 'imfing', permission: 'triage' },
|
||||
{ username: 'sambhav', permission: 'admin' },
|
||||
{ username: 'KengoA', permission: 'triage' },
|
||||
{ username: 'nitsanh', permission: 'pull' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
// GitHub Projects V2 permissions are NOT managed by Pulumi - no support yet
|
||||
// See: https://github.com/pulumi/pulumi-github/issues/1006
|
||||
|
|
@ -1,10 +1,279 @@
|
|||
import type { Member } from './utils';
|
||||
|
||||
export const MEMBERS: readonly Member[] = [
|
||||
{
|
||||
github: '000-000-000-000-000',
|
||||
memberOf: ['core-maintainers'],
|
||||
},
|
||||
{
|
||||
github: 'CodeWithKyrian',
|
||||
memberOf: ['php-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'D-McAdams',
|
||||
memberOf: ['auth-wg'],
|
||||
},
|
||||
{
|
||||
github: 'Kehrlann',
|
||||
memberOf: ['java-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'Kludex',
|
||||
memberOf: ['python-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'Nyholm',
|
||||
memberOf: ['php-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'Ololoshechkin',
|
||||
memberOf: ['kotlin-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'aaronpk',
|
||||
memberOf: ['auth-wg'],
|
||||
},
|
||||
{
|
||||
github: 'alexhancock',
|
||||
memberOf: ['rust-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'an-dustin',
|
||||
memberOf: ['security-wg'],
|
||||
},
|
||||
{
|
||||
github: 'ansaba',
|
||||
memberOf: ['go-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'atesgoral',
|
||||
memberOf: ['ruby-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'baxen',
|
||||
memberOf: ['rust-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'bhosmer-ant',
|
||||
memberOf: ['core', 'core-maintainers', 'docs-maintaners', 'moderators'],
|
||||
},
|
||||
{
|
||||
github: 'carlpeaslee',
|
||||
memberOf: ['swift-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'chemicL',
|
||||
memberOf: ['java-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'chr-hertel',
|
||||
memberOf: ['php-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'cliffhall',
|
||||
memberOf: ['moderators'],
|
||||
},
|
||||
{
|
||||
github: 'crondinini-ant',
|
||||
memberOf: ['core'],
|
||||
},
|
||||
{
|
||||
github: 'dend',
|
||||
memberOf: ['csharp-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'devcrocod',
|
||||
memberOf: ['kotlin-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'domdomegg',
|
||||
email: 'adam@modelcontextprotocol.io',
|
||||
memberOf: ['test-child'],
|
||||
memberOf: ['core', 'registry-wg'],
|
||||
},
|
||||
{
|
||||
github: 'dsp-ant',
|
||||
email: 'david@modelcontextprotocol.io',
|
||||
memberOf: ['auth-wg', 'core', 'core-maintainers', 'docs-maintaners', 'go-sdk', 'ig-financial-services', 'moderators', 'php-sdk', 'python-sdk', 'security-wg', 'transport-wg', 'typescript-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'e5l',
|
||||
memberOf: ['kotlin-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'eiriktsarpalis',
|
||||
memberOf: ['csharp-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'evalstate',
|
||||
memberOf: ['moderators'],
|
||||
},
|
||||
{
|
||||
github: 'fabpot',
|
||||
memberOf: ['php-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'felixweinberger',
|
||||
memberOf: ['core', 'python-sdk', 'security-wg', 'typescript-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'findleyr',
|
||||
memberOf: ['go-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'halter73',
|
||||
memberOf: ['csharp-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'ignatov',
|
||||
memberOf: ['kotlin-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'ihrpr',
|
||||
memberOf: ['core', 'core-maintainers', 'docs-maintaners', 'python-sdk', 'typescript-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'jamadeo',
|
||||
memberOf: ['rust-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'jba',
|
||||
memberOf: ['go-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'jenn-newton',
|
||||
memberOf: ['security-wg'],
|
||||
},
|
||||
{
|
||||
github: 'jerome3o-anthropic',
|
||||
memberOf: ['core', 'moderators'],
|
||||
},
|
||||
{
|
||||
github: 'jonathanhefner',
|
||||
memberOf: ['docs-maintaners', 'moderators'],
|
||||
},
|
||||
{
|
||||
github: 'jspahrsummers',
|
||||
email: 'justin@modelcontextprotocol.io',
|
||||
memberOf: ['core-maintainers'],
|
||||
},
|
||||
{
|
||||
github: 'koic',
|
||||
memberOf: ['ruby-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'kpavlov',
|
||||
memberOf: ['kotlin-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'kurtisvg',
|
||||
memberOf: ['transport-wg'],
|
||||
},
|
||||
{
|
||||
github: 'localden',
|
||||
memberOf: ['auth-wg', 'core-maintainers'],
|
||||
},
|
||||
{
|
||||
github: 'maheshmurag',
|
||||
memberOf: ['core', 'moderators'],
|
||||
},
|
||||
{
|
||||
github: 'markpollack',
|
||||
memberOf: ['java-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'mattt',
|
||||
memberOf: ['swift-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'maxisbey',
|
||||
memberOf: ['core'],
|
||||
},
|
||||
{
|
||||
github: 'michaelneale',
|
||||
memberOf: ['rust-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'mikekistler',
|
||||
memberOf: ['csharp-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'nickcoai',
|
||||
memberOf: ['core-maintainers'],
|
||||
},
|
||||
{
|
||||
github: 'nicolas-grekas',
|
||||
memberOf: ['php-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'ochafik',
|
||||
memberOf: ['core', 'python-sdk', 'python-sdk-auth', 'typescript-sdk', 'typescript-sdk-auth'],
|
||||
},
|
||||
{
|
||||
github: 'og-ant',
|
||||
memberOf: ['security-wg'],
|
||||
},
|
||||
{
|
||||
github: 'olaservo',
|
||||
memberOf: ['docs-maintaners', 'moderators'],
|
||||
},
|
||||
{
|
||||
github: 'pcarleton',
|
||||
memberOf: ['core-maintainers', 'python-sdk', 'python-sdk-auth', 'typescript-sdk', 'typescript-sdk-auth'],
|
||||
},
|
||||
{
|
||||
github: 'petery-ant',
|
||||
memberOf: ['security-wg'],
|
||||
},
|
||||
{
|
||||
github: 'pronskiy',
|
||||
memberOf: ['php-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'pwwpche',
|
||||
memberOf: ['core-maintainers'],
|
||||
},
|
||||
{
|
||||
github: 'rdimitrov',
|
||||
email: 'radoslav@modelcontextprotocol.io',
|
||||
memberOf: ['registry-wg'],
|
||||
},
|
||||
{
|
||||
github: 'sambhav',
|
||||
memberOf: ['ig-financial-services'],
|
||||
},
|
||||
{
|
||||
github: 'samthanawalla',
|
||||
memberOf: ['go-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'sdubov',
|
||||
memberOf: ['kotlin-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'stephentoub',
|
||||
memberOf: ['csharp-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'tadasant',
|
||||
email: 'tadas@modelcontextprotocol.io',
|
||||
memberOf: ['moderators', 'registry-wg'],
|
||||
},
|
||||
{
|
||||
github: 'tiginamaria',
|
||||
memberOf: ['kotlin-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'toby',
|
||||
email: 'toby@modelcontextprotocol.io',
|
||||
memberOf: ['registry-wg'],
|
||||
},
|
||||
{
|
||||
github: 'topherbullock',
|
||||
memberOf: ['ruby-sdk'],
|
||||
},
|
||||
{
|
||||
github: 'tzolov',
|
||||
memberOf: ['docs-maintaners', 'java-sdk'],
|
||||
},
|
||||
{
|
||||
email: 'adamj@anthropic.com',
|
||||
|
|
@ -22,4 +291,4 @@ export const MEMBERS: readonly Member[] = [
|
|||
email: 'davideramian@anthropic.com',
|
||||
memberOf: ['antitrust'],
|
||||
},
|
||||
] as const;
|
||||
] as const;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import * as github from '@pulumi/github';
|
||||
import { GROUPS } from './config/groups';
|
||||
import { REPOSITORY_ACCESS } from './config/repoAccess';
|
||||
import type { Group } from './config/utils';
|
||||
import { MEMBERS } from './config/users';
|
||||
|
||||
|
|
@ -28,3 +29,17 @@ MEMBERS.forEach((member) => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
REPOSITORY_ACCESS.forEach((repo) => {
|
||||
new github.RepositoryCollaborators(`repo-${repo.repository}`, {
|
||||
repository: repo.repository,
|
||||
teams: repo.teams?.map((t) => ({
|
||||
teamId: teams[t.team].id,
|
||||
permission: t.permission,
|
||||
})),
|
||||
users: repo.users?.map((u) => ({
|
||||
username: u.username,
|
||||
permission: u.permission,
|
||||
})),
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -42,6 +42,9 @@ GROUPS.forEach((group: Group) => {
|
|||
});
|
||||
|
||||
group.memberOf?.forEach((parentGroupKey) => {
|
||||
// Skip if parent group doesn't exist on Google (e.g., onlyOnPlatforms: ['github'])
|
||||
if (!groups[parentGroupKey]) return;
|
||||
|
||||
new gworkspace.GroupMember(`${group.name}-in-${parentGroupKey}`, {
|
||||
groupId: groups[parentGroupKey].id,
|
||||
email: groups[group.name].email,
|
||||
|
|
@ -54,6 +57,9 @@ MEMBERS.forEach((member) => {
|
|||
if (!member.email) return;
|
||||
|
||||
member.memberOf.forEach((teamKey) => {
|
||||
// Skip if group doesn't exist on Google (e.g., onlyOnPlatforms: ['github'])
|
||||
if (!groups[teamKey]) return;
|
||||
|
||||
new gworkspace.GroupMember(`${member.email}-${teamKey}`, {
|
||||
groupId: groups[teamKey].id,
|
||||
email: member.email!,
|
||||
|
|
|
|||
Loading…
Reference in a new issue