diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 49f39f1ce08..1efface82ad 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,279 +4,279 @@ # Note: Please keep this synchronized with the `teams.json` file in the repository root. # That file is used for some automated workflows, and maps controller to owning team(s). -/.github/ @MetaMask/core-platform +/.github/ @MetaMask/core-platform ## Accounts Team -/packages/accounts-controller @MetaMask/accounts-engineers -/packages/multichain-transactions-controller @MetaMask/accounts-engineers -/packages/multichain-account-service @MetaMask/accounts-engineers -/packages/account-tree-controller @MetaMask/accounts-engineers -/packages/profile-sync-controller @MetaMask/accounts-engineers -/packages/money-account-controller @MetaMask/accounts-engineers -/packages/snap-account-service @MetaMask/accounts-engineers +/packages/accounts-controller @MetaMask/accounts-engineers +/packages/multichain-transactions-controller @MetaMask/accounts-engineers +/packages/multichain-account-service @MetaMask/accounts-engineers +/packages/account-tree-controller @MetaMask/accounts-engineers +/packages/profile-sync-controller @MetaMask/accounts-engineers +/packages/money-account-controller @MetaMask/accounts-engineers +/packages/snap-account-service @MetaMask/accounts-engineers ## Auth Team -/packages/authenticated-user-storage @MetaMask/auth-engineers +/packages/authenticated-user-storage @MetaMask/auth-engineers ## Assets Team -/packages/assets-controllers @MetaMask/metamask-assets -/packages/network-enablement-controller @MetaMask/metamask-assets -/packages/assets-controller @MetaMask/metamask-assets +/packages/assets-controllers @MetaMask/metamask-assets +/packages/network-enablement-controller @MetaMask/metamask-assets +/packages/assets-controller @MetaMask/metamask-assets ## Confirmations Team -/packages/address-book-controller @MetaMask/confirmations -/packages/approval-controller @MetaMask/confirmations -/packages/ens-controller @MetaMask/confirmations -/packages/gas-fee-controller @MetaMask/confirmations -/packages/logging-controller @MetaMask/confirmations -/packages/message-manager @MetaMask/confirmations -/packages/name-controller @MetaMask/confirmations -/packages/signature-controller @MetaMask/confirmations -/packages/transaction-controller @MetaMask/confirmations -/packages/transaction-pay-controller @MetaMask/confirmations -/packages/user-operation-controller @MetaMask/confirmations +/packages/address-book-controller @MetaMask/confirmations +/packages/approval-controller @MetaMask/confirmations +/packages/ens-controller @MetaMask/confirmations +/packages/gas-fee-controller @MetaMask/confirmations +/packages/logging-controller @MetaMask/confirmations +/packages/message-manager @MetaMask/confirmations +/packages/name-controller @MetaMask/confirmations +/packages/signature-controller @MetaMask/confirmations +/packages/transaction-controller @MetaMask/confirmations +/packages/transaction-pay-controller @MetaMask/confirmations +/packages/user-operation-controller @MetaMask/confirmations ## Transactions Team -/packages/smart-transactions-controller @MetaMask/transactions +/packages/smart-transactions-controller @MetaMask/transactions ## Delegation Team -/packages/delegation-controller @MetaMask/delegation -/packages/gator-permissions-controller @MetaMask/delegation -/packages/eip-7702-internal-rpc-middleware @MetaMask/delegation @MetaMask/core-platform +/packages/delegation-controller @MetaMask/delegation +/packages/gator-permissions-controller @MetaMask/delegation +/packages/eip-7702-internal-rpc-middleware @MetaMask/delegation @MetaMask/core-platform ## Earn Team -/packages/earn-controller @MetaMask/earn -/packages/money-account-balance-service @MetaMask/earn -/packages/money-account-api-data-service @MetaMask/earn -/packages/chomp-api-service @MetaMask/earn @MetaMask/delegation -/packages/money-account-upgrade-controller @MetaMask/earn @MetaMask/delegation +/packages/earn-controller @MetaMask/earn +/packages/money-account-balance-service @MetaMask/earn +/packages/money-account-api-data-service @MetaMask/earn +/packages/chomp-api-service @MetaMask/earn @MetaMask/delegation +/packages/money-account-upgrade-controller @MetaMask/earn @MetaMask/delegation ## Social AI Team -/packages/ai-controllers @MetaMask/social-ai -/packages/social-controllers @MetaMask/social-ai +/packages/ai-controllers @MetaMask/social-ai +/packages/social-controllers @MetaMask/social-ai ## Money Movement Team -/packages/ramps-controller @MetaMask/money-movement +/packages/ramps-controller @MetaMask/money-movement ## Networks Team -/packages/config-registry-controller @MetaMask/networks +/packages/config-registry-controller @MetaMask/networks ## Engagement Team -/packages/notification-services-controller @MetaMask/engagement +/packages/notification-services-controller @MetaMask/engagement ## Perps Team -/packages/compliance-controller @MetaMask/perps -/packages/perps-controller @MetaMask/perps +/packages/compliance-controller @MetaMask/perps +/packages/perps-controller @MetaMask/perps ## Product Safety Team -/packages/phishing-controller @MetaMask/product-safety +/packages/phishing-controller @MetaMask/product-safety ## Swaps-Bridge Team -/packages/bridge-controller @MetaMask/swaps-engineers -/packages/bridge-status-controller @MetaMask/swaps-engineers +/packages/bridge-controller @MetaMask/swaps-engineers +/packages/bridge-status-controller @MetaMask/swaps-engineers ## Mobile Platform Team -/packages/app-metadata-controller @MetaMask/mobile-platform -/packages/analytics-controller @MetaMask/mobile-platform @MetaMask/extension-platform -/packages/analytics-data-regulation-controller @MetaMask/mobile-platform @MetaMask/extension-platform -/packages/geolocation-controller @MetaMask/mobile-platform +/packages/app-metadata-controller @MetaMask/mobile-platform +/packages/analytics-controller @MetaMask/mobile-platform @MetaMask/extension-platform +/packages/analytics-data-regulation-controller @MetaMask/mobile-platform @MetaMask/extension-platform +/packages/geolocation-controller @MetaMask/mobile-platform ## Core Platform Team -/packages/base-controller @MetaMask/core-platform -/packages/base-data-service @MetaMask/core-platform -/packages/build-utils @MetaMask/core-platform -/packages/chain-agnostic-permission @MetaMask/core-platform -/packages/composable-controller @MetaMask/core-platform -/packages/connectivity-controller @MetaMask/core-platform -/packages/controller-utils @MetaMask/core-platform -/packages/eip-5792-middleware @MetaMask/core-platform -/packages/eip1193-permission-middleware @MetaMask/core-platform -/packages/eth-block-tracker @MetaMask/core-platform -/packages/eth-json-rpc-middleware @MetaMask/core-platform -/packages/eth-json-rpc-provider @MetaMask/core-platform -/packages/json-rpc-engine @MetaMask/core-platform -/packages/json-rpc-middleware-stream @MetaMask/core-platform -/packages/messenger @MetaMask/core-platform -/packages/messenger-cli @MetaMask/core-platform -/packages/multichain-api-middleware @MetaMask/core-platform -/packages/network-connection-banner-controller @MetaMask/core-platform -/packages/permission-controller @MetaMask/core-platform -/packages/permission-log-controller @MetaMask/core-platform -/packages/platform-api-docs @MetaMask/core-platform -/packages/polling-controller @MetaMask/core-platform -/packages/preferences-controller @MetaMask/core-platform -/packages/rate-limit-controller @MetaMask/core-platform -/packages/react-data-query @MetaMask/core-platform -/packages/sample-controllers @MetaMask/core-platform -/packages/selected-network-controller @MetaMask/core-platform -/packages/wallet @MetaMask/core-platform -/packages/wallet-cli @MetaMask/core-platform @MetaMask/ocap-kernel -/packages/wallet-framework-docs @MetaMask/core-platform +/packages/base-controller @MetaMask/core-platform +/packages/base-data-service @MetaMask/core-platform +/packages/build-utils @MetaMask/core-platform +/packages/chain-agnostic-permission @MetaMask/core-platform +/packages/composable-controller @MetaMask/core-platform +/packages/connectivity-controller @MetaMask/core-platform +/packages/controller-utils @MetaMask/core-platform +/packages/eip-5792-middleware @MetaMask/core-platform +/packages/eip1193-permission-middleware @MetaMask/core-platform +/packages/eth-block-tracker @MetaMask/core-platform +/packages/eth-json-rpc-middleware @MetaMask/core-platform +/packages/eth-json-rpc-provider @MetaMask/core-platform +/packages/json-rpc-engine @MetaMask/core-platform +/packages/json-rpc-middleware-stream @MetaMask/core-platform +/packages/messenger @MetaMask/core-platform +/packages/messenger-cli @MetaMask/core-platform +/packages/multichain-api-middleware @MetaMask/core-platform +/packages/network-connection-banner-controller @MetaMask/core-platform +/packages/permission-controller @MetaMask/core-platform +/packages/permission-log-controller @MetaMask/core-platform +/packages/platform-api-docs @MetaMask/core-platform +/packages/polling-controller @MetaMask/core-platform +/packages/preferences-controller @MetaMask/core-platform +/packages/rate-limit-controller @MetaMask/core-platform +/packages/react-data-query @MetaMask/core-platform +/packages/sample-controllers @MetaMask/core-platform +/packages/selected-network-controller @MetaMask/core-platform +/packages/wallet @MetaMask/core-platform +/packages/wallet-cli @MetaMask/core-platform @MetaMask/ocap-kernel +/packages/wallet-framework-docs @MetaMask/core-platform ## Web3Auth Team -/packages/seedless-onboarding-controller @MetaMask/web3auth -/packages/passkey-controller @MetaMask/web3auth -/packages/shield-controller @MetaMask/web3auth -/packages/subscription-controller @MetaMask/web3auth -/packages/claims-controller @MetaMask/web3auth +/packages/seedless-onboarding-controller @MetaMask/web3auth +/packages/passkey-controller @MetaMask/web3auth +/packages/shield-controller @MetaMask/web3auth +/packages/subscription-controller @MetaMask/web3auth +/packages/claims-controller @MetaMask/web3auth ## Joint team ownership -/packages/announcement-controller @MetaMask/core-extension-ux @MetaMask/mobile-core-ux -/packages/client-utils @MetaMask/core-extension-ux @MetaMask/mobile-core-ux -/packages/core-backend @MetaMask/core-platform @MetaMask/metamask-assets -/packages/eth-json-rpc-middleware/src/methods @MetaMask/confirmations @MetaMask/core-platform -/packages/eth-json-rpc-middleware/src/wallet.* @MetaMask/confirmations @MetaMask/core-platform -/packages/foundryup @MetaMask/mobile-platform @MetaMask/extension-platform -/packages/bitcoin-regtest-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks -/packages/java-tron-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks -/packages/local-node-utils @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks -/packages/solana-test-validator-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks -/packages/stellar-quickstart-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks -/packages/keyring-controller @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/multichain-network-controller @MetaMask/core-platform @MetaMask/accounts-engineers @MetaMask/metamask-assets -/packages/network-controller @MetaMask/core-platform @MetaMask/metamask-assets -/packages/remote-feature-flag-controller @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/sentinel-api-service @MetaMask/confirmations @MetaMask/transactions -/packages/storage-service @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/client-controller @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform -/packages/profile-metrics-controller @MetaMask/mobile-platform @MetaMask/extension-platform +/packages/announcement-controller @MetaMask/core-extension-ux @MetaMask/mobile-core-ux +/packages/client-utils @MetaMask/core-extension-ux @MetaMask/mobile-core-ux +/packages/core-backend @MetaMask/core-platform @MetaMask/metamask-assets +/packages/eth-json-rpc-middleware/src/methods @MetaMask/confirmations @MetaMask/core-platform +/packages/eth-json-rpc-middleware/src/wallet.* @MetaMask/confirmations @MetaMask/core-platform +/packages/foundryup @MetaMask/mobile-platform @MetaMask/extension-platform +/packages/bitcoin-regtest-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks +/packages/java-tron-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks +/packages/local-node-utils @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks +/packages/solana-test-validator-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks +/packages/stellar-quickstart-up @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks +/packages/keyring-controller @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/multichain-network-controller @MetaMask/core-platform @MetaMask/accounts-engineers @MetaMask/metamask-assets +/packages/network-controller @MetaMask/core-platform @MetaMask/metamask-assets +/packages/remote-feature-flag-controller @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/sentinel-api-service @MetaMask/confirmations @MetaMask/transactions +/packages/storage-service @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/client-controller @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform +/packages/profile-metrics-controller @MetaMask/mobile-platform @MetaMask/extension-platform ## Initialization -/packages/wallet/src/initialization/instances/accounts-controller/ @MetaMask/accounts-engineers -/packages/wallet/src/initialization/instances/address-book-controller/ @MetaMask/confirmations -/packages/wallet/src/initialization/instances/approval-controller/ @MetaMask/confirmations -/packages/wallet/src/initialization/instances/connectivity-controller/ @MetaMask/core-platform -/packages/wallet/src/initialization/instances/keyring-controller/ @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/wallet/src/initialization/instances/remote-feature-flag-controller/ @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/wallet/src/initialization/instances/storage-service/ @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/wallet/src/initialization/instances/transaction-controller/ @MetaMask/confirmations +/packages/wallet/src/initialization/instances/accounts-controller/ @MetaMask/accounts-engineers +/packages/wallet/src/initialization/instances/address-book-controller/ @MetaMask/confirmations +/packages/wallet/src/initialization/instances/approval-controller/ @MetaMask/confirmations +/packages/wallet/src/initialization/instances/connectivity-controller/ @MetaMask/core-platform +/packages/wallet/src/initialization/instances/keyring-controller/ @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/wallet/src/initialization/instances/remote-feature-flag-controller/ @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/wallet/src/initialization/instances/storage-service/ @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/wallet/src/initialization/instances/transaction-controller/ @MetaMask/confirmations ## Package Release related -/packages/account-tree-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/account-tree-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/accounts-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/analytics-controller/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/analytics-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/analytics-data-regulation-controller/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/analytics-data-regulation-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/accounts-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/address-book-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/address-book-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/announcement-controller/package.json @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform -/packages/announcement-controller/CHANGELOG.md @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform -/packages/client-utils/package.json @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform -/packages/client-utils/CHANGELOG.md @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform -/packages/approval-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/approval-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/assets-controllers/package.json @MetaMask/metamask-assets @MetaMask/core-platform -/packages/assets-controllers/CHANGELOG.md @MetaMask/metamask-assets @MetaMask/core-platform -/packages/assets-controller/package.json @MetaMask/metamask-assets @MetaMask/core-platform -/packages/assets-controller/CHANGELOG.md @MetaMask/metamask-assets @MetaMask/core-platform -/packages/config-registry-controller/CHANGELOG.md @MetaMask/networks @MetaMask/core-platform -/packages/config-registry-controller/package.json @MetaMask/networks @MetaMask/core-platform -/packages/delegation-controller/package.json @MetaMask/delegation @MetaMask/core-platform -/packages/delegation-controller/CHANGELOG.md @MetaMask/delegation @MetaMask/core-platform -/packages/earn-controller/package.json @MetaMask/earn @MetaMask/core-platform -/packages/earn-controller/CHANGELOG.md @MetaMask/earn @MetaMask/core-platform -/packages/money-account-balance-service/package.json @MetaMask/earn @MetaMask/core-platform -/packages/money-account-balance-service/CHANGELOG.md @MetaMask/earn @MetaMask/core-platform -/packages/money-account-api-data-service/package.json @MetaMask/earn @MetaMask/core-platform -/packages/money-account-api-data-service/CHANGELOG.md @MetaMask/earn @MetaMask/core-platform -/packages/ens-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/ens-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/gas-fee-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/gas-fee-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/gator-permissions-controller/package.json @MetaMask/delegation @MetaMask/core-platform -/packages/gator-permissions-controller/CHANGELOG.md @MetaMask/delegation @MetaMask/core-platform -/packages/geolocation-controller/package.json @MetaMask/mobile-platform @MetaMask/core-platform -/packages/geolocation-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/core-platform -/packages/keyring-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/keyring-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/passkey-controller/package.json @MetaMask/web3auth @MetaMask/core-platform -/packages/passkey-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform -/packages/logging-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/logging-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/message-manager/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/message-manager/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/multichain-account-service/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/multichain-account-service/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/name-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/name-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/notification-services-controller/package.json @MetaMask/engagement @MetaMask/core-platform -/packages/notification-services-controller/CHANGELOG.md @MetaMask/engagement @MetaMask/core-platform -/packages/compliance-controller/package.json @MetaMask/perps @MetaMask/core-platform -/packages/compliance-controller/CHANGELOG.md @MetaMask/perps @MetaMask/core-platform -/packages/perps-controller/package.json @MetaMask/perps @MetaMask/core-platform -/packages/perps-controller/CHANGELOG.md @MetaMask/perps @MetaMask/core-platform -/packages/phishing-controller/package.json @MetaMask/product-safety @MetaMask/core-platform -/packages/phishing-controller/CHANGELOG.md @MetaMask/product-safety @MetaMask/core-platform -/packages/ramps-controller/package.json @MetaMask/money-movement @MetaMask/core-platform -/packages/ramps-controller/CHANGELOG.md @MetaMask/money-movement @MetaMask/core-platform -/packages/authenticated-user-storage/package.json @MetaMask/auth-engineers @MetaMask/core-platform -/packages/authenticated-user-storage/CHANGELOG.md @MetaMask/auth-engineers @MetaMask/core-platform -/packages/profile-metrics-controller/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/profile-metrics-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/profile-sync-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/profile-sync-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/signature-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/signature-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/smart-transactions-controller/package.json @MetaMask/transactions @MetaMask/core-platform -/packages/smart-transactions-controller/CHANGELOG.md @MetaMask/transactions @MetaMask/core-platform -/packages/sentinel-api-service/package.json @MetaMask/confirmations @MetaMask/transactions @MetaMask/core-platform -/packages/sentinel-api-service/CHANGELOG.md @MetaMask/confirmations @MetaMask/transactions @MetaMask/core-platform -/packages/transaction-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/transaction-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/transaction-pay-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/transaction-pay-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/user-operation-controller/package.json @MetaMask/confirmations @MetaMask/core-platform -/packages/user-operation-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform -/packages/multichain-transactions-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/multichain-transactions-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/bridge-controller/package.json @MetaMask/swaps-engineers @MetaMask/core-platform -/packages/bridge-controller/CHANGELOG.md @MetaMask/swaps-engineers @MetaMask/core-platform -/packages/remote-feature-flag-controller/package.json @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/remote-feature-flag-controller/CHANGELOG.md @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/storage-service/package.json @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/storage-service/CHANGELOG.md @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform -/packages/bridge-status-controller/package.json @MetaMask/swaps-engineers @MetaMask/core-platform -/packages/bridge-status-controller/CHANGELOG.md @MetaMask/swaps-engineers @MetaMask/core-platform -/packages/app-metadata-controller/package.json @MetaMask/mobile-platform @MetaMask/core-platform -/packages/app-metadata-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/core-platform -/packages/foundryup/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/foundryup/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform -/packages/bitcoin-regtest-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/bitcoin-regtest-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/java-tron-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/java-tron-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/local-node-utils/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/local-node-utils/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/solana-test-validator-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/solana-test-validator-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/stellar-quickstart-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/stellar-quickstart-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform -/packages/seedless-onboarding-controller/package.json @MetaMask/web3auth @MetaMask/core-platform -/packages/seedless-onboarding-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform -/packages/shield-controller/package.json @MetaMask/web3auth @MetaMask/core-platform -/packages/shield-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform -/packages/network-enablement-controller/package.json @MetaMask/metamask-assets @MetaMask/core-platform -/packages/network-enablement-controller/CHANGELOG.md @MetaMask/metamask-assets @MetaMask/core-platform -/packages/subscription-controller/package.json @MetaMask/web3auth @MetaMask/core-platform -/packages/subscription-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform -/packages/core-backend/package.json @MetaMask/core-platform @MetaMask/metamask-assets -/packages/core-backend/CHANGELOG.md @MetaMask/core-platform @MetaMask/metamask-assets -/packages/claims-controller/package.json @MetaMask/web3auth @MetaMask/core-platform -/packages/claims-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform -/packages/ai-controllers/package.json @MetaMask/social-ai @MetaMask/core-platform -/packages/ai-controllers/CHANGELOG.md @MetaMask/social-ai @MetaMask/core-platform -/packages/client-controller/package.json @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform -/packages/client-controller/CHANGELOG.md @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform -/packages/social-controllers/package.json @MetaMask/social-ai @MetaMask/core-platform -/packages/social-controllers/CHANGELOG.md @MetaMask/social-ai @MetaMask/core-platform -/packages/money-account-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/money-account-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/chomp-api-service/package.json @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform -/packages/chomp-api-service/CHANGELOG.md @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform -/packages/money-account-upgrade-controller/package.json @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform -/packages/money-account-upgrade-controller/CHANGELOG.md @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform -/packages/snap-account-service/package.json @MetaMask/accounts-engineers @MetaMask/core-platform -/packages/snap-account-service/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/account-tree-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/account-tree-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/accounts-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/accounts-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/analytics-controller/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/analytics-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/analytics-data-regulation-controller/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/analytics-data-regulation-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/address-book-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/address-book-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/announcement-controller/package.json @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform +/packages/announcement-controller/CHANGELOG.md @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform +/packages/client-utils/package.json @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform +/packages/client-utils/CHANGELOG.md @MetaMask/core-extension-ux @MetaMask/mobile-core-ux @MetaMask/core-platform +/packages/approval-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/approval-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/assets-controllers/package.json @MetaMask/metamask-assets @MetaMask/core-platform +/packages/assets-controllers/CHANGELOG.md @MetaMask/metamask-assets @MetaMask/core-platform +/packages/assets-controller/package.json @MetaMask/metamask-assets @MetaMask/core-platform +/packages/assets-controller/CHANGELOG.md @MetaMask/metamask-assets @MetaMask/core-platform +/packages/config-registry-controller/package.json @MetaMask/networks @MetaMask/core-platform +/packages/config-registry-controller/CHANGELOG.md @MetaMask/networks @MetaMask/core-platform +/packages/delegation-controller/package.json @MetaMask/delegation @MetaMask/core-platform +/packages/delegation-controller/CHANGELOG.md @MetaMask/delegation @MetaMask/core-platform +/packages/earn-controller/package.json @MetaMask/earn @MetaMask/core-platform +/packages/earn-controller/CHANGELOG.md @MetaMask/earn @MetaMask/core-platform +/packages/money-account-balance-service/package.json @MetaMask/earn @MetaMask/core-platform +/packages/money-account-balance-service/CHANGELOG.md @MetaMask/earn @MetaMask/core-platform +/packages/money-account-api-data-service/package.json @MetaMask/earn @MetaMask/core-platform +/packages/money-account-api-data-service/CHANGELOG.md @MetaMask/earn @MetaMask/core-platform +/packages/ens-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/ens-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/gas-fee-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/gas-fee-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/gator-permissions-controller/package.json @MetaMask/delegation @MetaMask/core-platform +/packages/gator-permissions-controller/CHANGELOG.md @MetaMask/delegation @MetaMask/core-platform +/packages/geolocation-controller/package.json @MetaMask/mobile-platform @MetaMask/core-platform +/packages/geolocation-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/core-platform +/packages/keyring-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/keyring-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/passkey-controller/package.json @MetaMask/web3auth @MetaMask/core-platform +/packages/passkey-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform +/packages/logging-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/logging-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/message-manager/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/message-manager/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/multichain-account-service/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/multichain-account-service/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/name-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/name-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/notification-services-controller/package.json @MetaMask/engagement @MetaMask/core-platform +/packages/notification-services-controller/CHANGELOG.md @MetaMask/engagement @MetaMask/core-platform +/packages/compliance-controller/package.json @MetaMask/perps @MetaMask/core-platform +/packages/compliance-controller/CHANGELOG.md @MetaMask/perps @MetaMask/core-platform +/packages/perps-controller/package.json @MetaMask/perps @MetaMask/core-platform +/packages/perps-controller/CHANGELOG.md @MetaMask/perps @MetaMask/core-platform +/packages/phishing-controller/package.json @MetaMask/product-safety @MetaMask/core-platform +/packages/phishing-controller/CHANGELOG.md @MetaMask/product-safety @MetaMask/core-platform +/packages/ramps-controller/package.json @MetaMask/money-movement @MetaMask/core-platform +/packages/ramps-controller/CHANGELOG.md @MetaMask/money-movement @MetaMask/core-platform +/packages/authenticated-user-storage/package.json @MetaMask/auth-engineers @MetaMask/core-platform +/packages/authenticated-user-storage/CHANGELOG.md @MetaMask/auth-engineers @MetaMask/core-platform +/packages/profile-metrics-controller/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/profile-metrics-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/profile-sync-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/profile-sync-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/signature-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/signature-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/smart-transactions-controller/package.json @MetaMask/transactions @MetaMask/core-platform +/packages/smart-transactions-controller/CHANGELOG.md @MetaMask/transactions @MetaMask/core-platform +/packages/sentinel-api-service/package.json @MetaMask/confirmations @MetaMask/transactions @MetaMask/core-platform +/packages/sentinel-api-service/CHANGELOG.md @MetaMask/confirmations @MetaMask/transactions @MetaMask/core-platform +/packages/transaction-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/transaction-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/transaction-pay-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/transaction-pay-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/user-operation-controller/package.json @MetaMask/confirmations @MetaMask/core-platform +/packages/user-operation-controller/CHANGELOG.md @MetaMask/confirmations @MetaMask/core-platform +/packages/multichain-transactions-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/multichain-transactions-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/bridge-controller/package.json @MetaMask/swaps-engineers @MetaMask/core-platform +/packages/bridge-controller/CHANGELOG.md @MetaMask/swaps-engineers @MetaMask/core-platform +/packages/remote-feature-flag-controller/package.json @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/remote-feature-flag-controller/CHANGELOG.md @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/storage-service/package.json @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/storage-service/CHANGELOG.md @MetaMask/extension-platform @MetaMask/mobile-platform @MetaMask/core-platform +/packages/bridge-status-controller/package.json @MetaMask/swaps-engineers @MetaMask/core-platform +/packages/bridge-status-controller/CHANGELOG.md @MetaMask/swaps-engineers @MetaMask/core-platform +/packages/app-metadata-controller/package.json @MetaMask/mobile-platform @MetaMask/core-platform +/packages/app-metadata-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/core-platform +/packages/foundryup/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/foundryup/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/core-platform +/packages/bitcoin-regtest-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/bitcoin-regtest-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/java-tron-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/java-tron-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/local-node-utils/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/local-node-utils/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/solana-test-validator-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/solana-test-validator-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/stellar-quickstart-up/package.json @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/stellar-quickstart-up/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/extension-platform @MetaMask/networks @MetaMask/core-platform +/packages/seedless-onboarding-controller/package.json @MetaMask/web3auth @MetaMask/core-platform +/packages/seedless-onboarding-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform +/packages/shield-controller/package.json @MetaMask/web3auth @MetaMask/core-platform +/packages/shield-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform +/packages/network-enablement-controller/package.json @MetaMask/metamask-assets @MetaMask/core-platform +/packages/network-enablement-controller/CHANGELOG.md @MetaMask/metamask-assets @MetaMask/core-platform +/packages/subscription-controller/package.json @MetaMask/web3auth @MetaMask/core-platform +/packages/subscription-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform +/packages/core-backend/package.json @MetaMask/core-platform @MetaMask/metamask-assets +/packages/core-backend/CHANGELOG.md @MetaMask/core-platform @MetaMask/metamask-assets +/packages/claims-controller/package.json @MetaMask/web3auth @MetaMask/core-platform +/packages/claims-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/core-platform +/packages/ai-controllers/package.json @MetaMask/social-ai @MetaMask/core-platform +/packages/ai-controllers/CHANGELOG.md @MetaMask/social-ai @MetaMask/core-platform +/packages/client-controller/package.json @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform +/packages/client-controller/CHANGELOG.md @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform +/packages/social-controllers/package.json @MetaMask/social-ai @MetaMask/core-platform +/packages/social-controllers/CHANGELOG.md @MetaMask/social-ai @MetaMask/core-platform +/packages/money-account-controller/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/money-account-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/chomp-api-service/package.json @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform +/packages/chomp-api-service/CHANGELOG.md @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform +/packages/money-account-upgrade-controller/package.json @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform +/packages/money-account-upgrade-controller/CHANGELOG.md @MetaMask/earn @MetaMask/delegation @MetaMask/core-platform +/packages/snap-account-service/package.json @MetaMask/accounts-engineers @MetaMask/core-platform +/packages/snap-account-service/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/core-platform \ No newline at end of file diff --git a/.github/workflows/lint-build-test.yml b/.github/workflows/lint-build-test.yml index 4efb1a7200d..bb9b1640744 100644 --- a/.github/workflows/lint-build-test.yml +++ b/.github/workflows/lint-build-test.yml @@ -35,14 +35,15 @@ jobs: matrix: node-version: [24.x] script: - - lint:eslint - - lint:misc:check + - codeowners:check - constraints - lint:dependencies + - lint:eslint + - lint:misc:check - lint:teams + - lint:tsconfigs:all - messenger-action-types:check - readme-content:check - - lint:tsconfigs:all steps: - name: Checkout and setup environment uses: MetaMask/action-checkout-and-setup@v3 diff --git a/codeowners.ts b/codeowners.ts new file mode 100644 index 00000000000..7020d46d5df --- /dev/null +++ b/codeowners.ts @@ -0,0 +1,718 @@ +import type { + CodeownersRule, + CodeownersSection, +} from './scripts/manage-codeowners/types'; + +/** + * Metadata about a package in the monorepo, used to generate CODEOWNERS + * rules for it. + */ +type PackageInfo = { + /** + * The GitHub team(s) that own this package's top-level directory. + */ + teams: string[]; + + /** + * The package's directory name under + * `/packages/wallet/src/initialization/instances`, used to generate its rule + * in the "Initialization" section. Omit this if the package has not been + * added to the Wallet Library yet. + */ + initializationPath?: string; +}; + +/** + * Metadata about each package in the monorepo that has a CODEOWNERS entry, + * keyed by its directory name under `/packages`. This is the single source + * of truth for which team(s) own a package, and is used to populate the + * sections in `codeownersSections` below. + */ +const PACKAGES: Record = { + 'account-tree-controller': { + teams: ['@MetaMask/accounts-engineers'], + }, + 'accounts-controller': { + teams: ['@MetaMask/accounts-engineers'], + initializationPath: 'accounts-controller', + }, + 'address-book-controller': { + teams: ['@MetaMask/confirmations'], + initializationPath: 'address-book-controller', + }, + 'ai-controllers': { + teams: ['@MetaMask/social-ai'], + }, + 'analytics-controller': { + teams: ['@MetaMask/mobile-platform', '@MetaMask/extension-platform'], + }, + 'analytics-data-regulation-controller': { + teams: ['@MetaMask/mobile-platform', '@MetaMask/extension-platform'], + }, + 'announcement-controller': { + teams: ['@MetaMask/core-extension-ux', '@MetaMask/mobile-core-ux'], + }, + 'app-metadata-controller': { + teams: ['@MetaMask/mobile-platform'], + }, + 'approval-controller': { + teams: ['@MetaMask/confirmations'], + initializationPath: 'approval-controller', + }, + 'assets-controller': { + teams: ['@MetaMask/metamask-assets'], + }, + 'assets-controllers': { + teams: ['@MetaMask/metamask-assets'], + }, + 'authenticated-user-storage': { + teams: ['@MetaMask/auth-engineers'], + }, + 'base-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'base-data-service': { + teams: ['@MetaMask/core-platform'], + }, + 'bitcoin-regtest-up': { + teams: [ + '@MetaMask/mobile-platform', + '@MetaMask/extension-platform', + '@MetaMask/networks', + ], + }, + 'bridge-controller': { + teams: ['@MetaMask/swaps-engineers'], + }, + 'bridge-status-controller': { + teams: ['@MetaMask/swaps-engineers'], + }, + 'build-utils': { + teams: ['@MetaMask/core-platform'], + }, + 'chain-agnostic-permission': { + teams: ['@MetaMask/core-platform'], + }, + 'chomp-api-service': { + teams: ['@MetaMask/earn', '@MetaMask/delegation'], + }, + 'claims-controller': { + teams: ['@MetaMask/web3auth'], + }, + 'client-controller': { + teams: [ + '@MetaMask/core-platform', + '@MetaMask/extension-platform', + '@MetaMask/mobile-platform', + ], + }, + 'client-utils': { + teams: ['@MetaMask/core-extension-ux', '@MetaMask/mobile-core-ux'], + }, + 'compliance-controller': { + teams: ['@MetaMask/perps'], + }, + 'composable-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'config-registry-controller': { + teams: ['@MetaMask/networks'], + }, + 'connectivity-controller': { + teams: ['@MetaMask/core-platform'], + initializationPath: 'connectivity-controller', + }, + 'controller-utils': { + teams: ['@MetaMask/core-platform'], + }, + 'core-backend': { + teams: ['@MetaMask/core-platform', '@MetaMask/metamask-assets'], + }, + 'delegation-controller': { + teams: ['@MetaMask/delegation'], + }, + 'earn-controller': { + teams: ['@MetaMask/earn'], + }, + 'eip-5792-middleware': { + teams: ['@MetaMask/core-platform'], + }, + 'eip-7702-internal-rpc-middleware': { + teams: ['@MetaMask/delegation', '@MetaMask/core-platform'], + }, + 'eip1193-permission-middleware': { + teams: ['@MetaMask/core-platform'], + }, + 'ens-controller': { + teams: ['@MetaMask/confirmations'], + }, + 'eth-block-tracker': { + teams: ['@MetaMask/core-platform'], + }, + 'eth-json-rpc-middleware': { + teams: ['@MetaMask/core-platform'], + }, + 'eth-json-rpc-provider': { + teams: ['@MetaMask/core-platform'], + }, + foundryup: { + teams: ['@MetaMask/mobile-platform', '@MetaMask/extension-platform'], + }, + 'gas-fee-controller': { + teams: ['@MetaMask/confirmations'], + }, + 'gator-permissions-controller': { + teams: ['@MetaMask/delegation'], + }, + 'geolocation-controller': { + teams: ['@MetaMask/mobile-platform'], + }, + 'java-tron-up': { + teams: [ + '@MetaMask/mobile-platform', + '@MetaMask/extension-platform', + '@MetaMask/networks', + ], + }, + 'json-rpc-engine': { + teams: ['@MetaMask/core-platform'], + }, + 'json-rpc-middleware-stream': { + teams: ['@MetaMask/core-platform'], + }, + 'keyring-controller': { + teams: ['@MetaMask/accounts-engineers', '@MetaMask/core-platform'], + initializationPath: 'keyring-controller', + }, + 'local-node-utils': { + teams: [ + '@MetaMask/mobile-platform', + '@MetaMask/extension-platform', + '@MetaMask/networks', + ], + }, + 'logging-controller': { + teams: ['@MetaMask/confirmations'], + }, + 'message-manager': { + teams: ['@MetaMask/confirmations'], + }, + messenger: { + teams: ['@MetaMask/core-platform'], + }, + 'messenger-cli': { + teams: ['@MetaMask/core-platform'], + }, + 'money-account-api-data-service': { + teams: ['@MetaMask/earn'], + }, + 'money-account-balance-service': { + teams: ['@MetaMask/earn'], + }, + 'money-account-controller': { + teams: ['@MetaMask/accounts-engineers'], + }, + 'money-account-upgrade-controller': { + teams: ['@MetaMask/earn', '@MetaMask/delegation'], + }, + 'multichain-account-service': { + teams: ['@MetaMask/accounts-engineers'], + }, + 'multichain-api-middleware': { + teams: ['@MetaMask/core-platform'], + }, + 'multichain-network-controller': { + teams: [ + '@MetaMask/core-platform', + '@MetaMask/accounts-engineers', + '@MetaMask/metamask-assets', + ], + }, + 'multichain-transactions-controller': { + teams: ['@MetaMask/accounts-engineers'], + }, + 'name-controller': { + teams: ['@MetaMask/confirmations'], + }, + 'network-connection-banner-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'network-controller': { + teams: ['@MetaMask/core-platform', '@MetaMask/metamask-assets'], + }, + 'network-enablement-controller': { + teams: ['@MetaMask/metamask-assets'], + }, + 'notification-services-controller': { + teams: ['@MetaMask/engagement'], + }, + 'passkey-controller': { + teams: ['@MetaMask/web3auth'], + }, + 'permission-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'permission-log-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'perps-controller': { + teams: ['@MetaMask/perps'], + }, + 'phishing-controller': { + teams: ['@MetaMask/product-safety'], + }, + 'platform-api-docs': { + teams: ['@MetaMask/core-platform'], + }, + 'polling-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'preferences-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'profile-metrics-controller': { + teams: ['@MetaMask/mobile-platform', '@MetaMask/extension-platform'], + }, + 'profile-sync-controller': { + teams: ['@MetaMask/accounts-engineers'], + }, + 'ramps-controller': { + teams: ['@MetaMask/money-movement'], + }, + 'rate-limit-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'react-data-query': { + teams: ['@MetaMask/core-platform'], + }, + 'remote-feature-flag-controller': { + teams: [ + '@MetaMask/extension-platform', + '@MetaMask/mobile-platform', + '@MetaMask/core-platform', + ], + initializationPath: 'remote-feature-flag-controller', + }, + 'sample-controllers': { + teams: ['@MetaMask/core-platform'], + }, + 'seedless-onboarding-controller': { + teams: ['@MetaMask/web3auth'], + }, + 'selected-network-controller': { + teams: ['@MetaMask/core-platform'], + }, + 'sentinel-api-service': { + teams: ['@MetaMask/confirmations', '@MetaMask/transactions'], + }, + 'shield-controller': { + teams: ['@MetaMask/web3auth'], + }, + 'signature-controller': { + teams: ['@MetaMask/confirmations'], + }, + 'smart-transactions-controller': { + teams: ['@MetaMask/transactions'], + }, + 'snap-account-service': { + teams: ['@MetaMask/accounts-engineers'], + }, + 'social-controllers': { + teams: ['@MetaMask/social-ai'], + }, + 'solana-test-validator-up': { + teams: [ + '@MetaMask/mobile-platform', + '@MetaMask/extension-platform', + '@MetaMask/networks', + ], + }, + 'stellar-quickstart-up': { + teams: [ + '@MetaMask/mobile-platform', + '@MetaMask/extension-platform', + '@MetaMask/networks', + ], + }, + 'storage-service': { + teams: [ + '@MetaMask/extension-platform', + '@MetaMask/mobile-platform', + '@MetaMask/core-platform', + ], + initializationPath: 'storage-service', + }, + 'subscription-controller': { + teams: ['@MetaMask/web3auth'], + }, + 'transaction-controller': { + teams: ['@MetaMask/confirmations'], + initializationPath: 'transaction-controller', + }, + 'transaction-pay-controller': { + teams: ['@MetaMask/confirmations'], + }, + 'user-operation-controller': { + teams: ['@MetaMask/confirmations'], + }, + wallet: { + teams: ['@MetaMask/core-platform'], + }, + 'wallet-cli': { + teams: ['@MetaMask/core-platform', '@MetaMask/ocap-kernel'], + }, + 'wallet-framework-docs': { + teams: ['@MetaMask/core-platform'], + }, +}; + +/** + * The CODEOWNERS sections, in the order they should appear in the generated + * `.github/CODEOWNERS` file. + */ +const codeownersSections: CodeownersSection[] = [ + buildFirstSection(), + ...buildTeamSections(), + buildJointTeamOwnershipSection(), + buildInitializationSection(), + buildPackageReleaseSection(), +]; + +/** + * Builds the section at the top of CODEOWNERS that is reserved for files that + * should always be owned by Core Platform. + * + * @returns The first section. + */ +function buildFirstSection(): CodeownersSection { + return { + rules: [{ pattern: '/.github/', owners: ['@MetaMask/core-platform'] }], + }; +} + +/** + * Build sections within CODEOWNERS that define teams and the packages they own. + * + * @returns The team sections. + */ +function buildTeamSections(): CodeownersSection[] { + return [ + { + title: 'Accounts Team', + rules: [ + buildRuleForPackage('accounts-controller'), + buildRuleForPackage('multichain-transactions-controller'), + buildRuleForPackage('multichain-account-service'), + buildRuleForPackage('account-tree-controller'), + buildRuleForPackage('profile-sync-controller'), + buildRuleForPackage('money-account-controller'), + buildRuleForPackage('snap-account-service'), + ], + }, + { + title: 'Auth Team', + rules: [buildRuleForPackage('authenticated-user-storage')], + }, + { + title: 'Assets Team', + rules: [ + buildRuleForPackage('assets-controllers'), + buildRuleForPackage('network-enablement-controller'), + buildRuleForPackage('assets-controller'), + ], + }, + { + title: 'Confirmations Team', + rules: [ + buildRuleForPackage('address-book-controller'), + buildRuleForPackage('approval-controller'), + buildRuleForPackage('ens-controller'), + buildRuleForPackage('gas-fee-controller'), + buildRuleForPackage('logging-controller'), + buildRuleForPackage('message-manager'), + buildRuleForPackage('name-controller'), + buildRuleForPackage('signature-controller'), + buildRuleForPackage('transaction-controller'), + buildRuleForPackage('transaction-pay-controller'), + buildRuleForPackage('user-operation-controller'), + ], + }, + { + title: 'Transactions Team', + rules: [buildRuleForPackage('smart-transactions-controller')], + }, + { + title: 'Delegation Team', + rules: [ + buildRuleForPackage('delegation-controller'), + buildRuleForPackage('gator-permissions-controller'), + buildRuleForPackage('eip-7702-internal-rpc-middleware'), + ], + }, + { + title: 'Earn Team', + rules: [ + buildRuleForPackage('earn-controller'), + buildRuleForPackage('money-account-balance-service'), + buildRuleForPackage('money-account-api-data-service'), + buildRuleForPackage('chomp-api-service'), + buildRuleForPackage('money-account-upgrade-controller'), + ], + }, + { + title: 'Social AI Team', + rules: [ + buildRuleForPackage('ai-controllers'), + buildRuleForPackage('social-controllers'), + ], + }, + { + title: 'Money Movement Team', + rules: [buildRuleForPackage('ramps-controller')], + }, + { + title: 'Networks Team', + rules: [buildRuleForPackage('config-registry-controller')], + }, + { + title: 'Engagement Team', + rules: [buildRuleForPackage('notification-services-controller')], + }, + { + title: 'Perps Team', + rules: [ + buildRuleForPackage('compliance-controller'), + buildRuleForPackage('perps-controller'), + ], + }, + { + title: 'Product Safety Team', + rules: [buildRuleForPackage('phishing-controller')], + }, + { + title: 'Swaps-Bridge Team', + rules: [ + buildRuleForPackage('bridge-controller'), + buildRuleForPackage('bridge-status-controller'), + ], + }, + { + title: 'Mobile Platform Team', + rules: [ + buildRuleForPackage('app-metadata-controller'), + buildRuleForPackage('analytics-controller'), + buildRuleForPackage('analytics-data-regulation-controller'), + buildRuleForPackage('geolocation-controller'), + ], + }, + { + title: 'Core Platform Team', + rules: [ + buildRuleForPackage('base-controller'), + buildRuleForPackage('base-data-service'), + buildRuleForPackage('build-utils'), + buildRuleForPackage('chain-agnostic-permission'), + buildRuleForPackage('composable-controller'), + buildRuleForPackage('connectivity-controller'), + buildRuleForPackage('controller-utils'), + buildRuleForPackage('eip-5792-middleware'), + buildRuleForPackage('eip1193-permission-middleware'), + buildRuleForPackage('eth-block-tracker'), + buildRuleForPackage('eth-json-rpc-middleware'), + buildRuleForPackage('eth-json-rpc-provider'), + buildRuleForPackage('json-rpc-engine'), + buildRuleForPackage('json-rpc-middleware-stream'), + buildRuleForPackage('messenger'), + buildRuleForPackage('messenger-cli'), + buildRuleForPackage('multichain-api-middleware'), + buildRuleForPackage('network-connection-banner-controller'), + buildRuleForPackage('permission-controller'), + buildRuleForPackage('permission-log-controller'), + buildRuleForPackage('platform-api-docs'), + buildRuleForPackage('polling-controller'), + buildRuleForPackage('preferences-controller'), + buildRuleForPackage('rate-limit-controller'), + buildRuleForPackage('react-data-query'), + buildRuleForPackage('sample-controllers'), + buildRuleForPackage('selected-network-controller'), + buildRuleForPackage('wallet'), + buildRuleForPackage('wallet-cli'), + buildRuleForPackage('wallet-framework-docs'), + ], + }, + { + title: 'Web3Auth Team', + rules: [ + buildRuleForPackage('seedless-onboarding-controller'), + buildRuleForPackage('passkey-controller'), + buildRuleForPackage('shield-controller'), + buildRuleForPackage('subscription-controller'), + buildRuleForPackage('claims-controller'), + ], + }, + ]; +} + +/** + * Builds the section that defines packages owned by multiple teams. + * + * @returns The "Joint team ownership" section. + */ +function buildJointTeamOwnershipSection(): CodeownersSection { + return { + title: 'Joint team ownership', + rules: [ + buildRuleForPackage('announcement-controller'), + buildRuleForPackage('client-utils'), + buildRuleForPackage('core-backend'), + { + pattern: '/packages/eth-json-rpc-middleware/src/methods', + owners: ['@MetaMask/confirmations', '@MetaMask/core-platform'], + }, + { + pattern: '/packages/eth-json-rpc-middleware/src/wallet.*', + owners: ['@MetaMask/confirmations', '@MetaMask/core-platform'], + }, + buildRuleForPackage('foundryup'), + buildRuleForPackage('bitcoin-regtest-up'), + buildRuleForPackage('java-tron-up'), + buildRuleForPackage('local-node-utils'), + buildRuleForPackage('solana-test-validator-up'), + buildRuleForPackage('stellar-quickstart-up'), + buildRuleForPackage('keyring-controller'), + buildRuleForPackage('multichain-network-controller'), + buildRuleForPackage('network-controller'), + buildRuleForPackage('remote-feature-flag-controller'), + buildRuleForPackage('sentinel-api-service'), + buildRuleForPackage('storage-service'), + buildRuleForPackage('client-controller'), + buildRuleForPackage('profile-metrics-controller'), + ], + }; +} + +/** + * Builds the section that maps initialization code for packages in `@metamask/wallet` to the + * teams that own those packages. + * + * @returns The "Initialization" section. + */ +function buildInitializationSection(): CodeownersSection { + return { + title: 'Initialization', + rules: Object.keys(PACKAGES) + .filter((name) => PACKAGES[name].initializationPath !== undefined) + .sort() + .map((name) => { + const { teams, initializationPath } = PACKAGES[name]; + return { + pattern: `/packages/wallet/src/initialization/instances/${initializationPath}/`, + owners: teams, + }; + }), + }; +} + +/** + * Builds the "Package Release related" section from all packages in `PACKAGES`. + * The Core Platform team is added to each rule's owners (if not already + * present), since that team co-owns the release process for every package. + * + * @returns The "Package Release related" CODEOWNERS section. + */ +function buildPackageReleaseSection(): CodeownersSection { + // These packages are currently not alphabetized. + const packageNames = [ + 'account-tree-controller', + 'accounts-controller', + 'analytics-controller', + 'analytics-data-regulation-controller', + 'address-book-controller', + 'announcement-controller', + 'client-utils', + 'approval-controller', + 'assets-controllers', + 'assets-controller', + 'config-registry-controller', + 'delegation-controller', + 'earn-controller', + 'money-account-balance-service', + 'money-account-api-data-service', + 'ens-controller', + 'gas-fee-controller', + 'gator-permissions-controller', + 'geolocation-controller', + 'keyring-controller', + 'passkey-controller', + 'logging-controller', + 'message-manager', + 'multichain-account-service', + 'name-controller', + 'notification-services-controller', + 'compliance-controller', + 'perps-controller', + 'phishing-controller', + 'ramps-controller', + 'authenticated-user-storage', + 'profile-metrics-controller', + 'profile-sync-controller', + 'signature-controller', + 'smart-transactions-controller', + 'sentinel-api-service', + 'transaction-controller', + 'transaction-pay-controller', + 'user-operation-controller', + 'multichain-transactions-controller', + 'bridge-controller', + 'remote-feature-flag-controller', + 'storage-service', + 'bridge-status-controller', + 'app-metadata-controller', + 'foundryup', + 'bitcoin-regtest-up', + 'java-tron-up', + 'local-node-utils', + 'solana-test-validator-up', + 'stellar-quickstart-up', + 'seedless-onboarding-controller', + 'shield-controller', + 'network-enablement-controller', + 'subscription-controller', + 'core-backend', + 'claims-controller', + 'ai-controllers', + 'client-controller', + 'social-controllers', + 'money-account-controller', + 'chomp-api-service', + 'money-account-upgrade-controller', + 'snap-account-service', + ] as const satisfies (keyof typeof PACKAGES)[]; + + return { + title: 'Package Release related', + rules: packageNames.flatMap((name) => { + const { teams } = PACKAGES[name]; + const workspacePath = `/packages/${name}`; + const owners = teams.includes('@MetaMask/core-platform') + ? teams + : [...teams, '@MetaMask/core-platform']; + return [ + { pattern: `${workspacePath}/package.json`, owners }, + { pattern: `${workspacePath}/CHANGELOG.md`, owners }, + ]; + }), + }; +} + +/** + * Builds the rule that maps a package's directory to the team(s) that own it. + * + * @param name - The package's directory name under `/packages`. + * @returns The rule for the package. + */ +function buildRuleForPackage(name: keyof typeof PACKAGES): CodeownersRule { + return { pattern: `/packages/${name}`, owners: PACKAGES[name].teams }; +} + +export default codeownersSections; diff --git a/package.json b/package.json index 452273b2a56..6ff17946b93 100644 --- a/package.json +++ b/package.json @@ -20,16 +20,18 @@ "build:types": "tsc --build tsconfig.build.json --verbose", "changelog:update": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:update", "changelog:validate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:validate", + "codeowners:check": "tsx scripts/manage-codeowners.ts check", + "codeowners:generate": "tsx scripts/manage-codeowners.ts generate", "create-package": "tsx scripts/create-package", "create-release-branch": "create-release-branch --formatter oxfmt", "docs:platform-api:build": "yarn workspace @metamask/platform-api-docs cli ../.. --build --project-label Core", "docs:platform-api:dev": "yarn workspace @metamask/platform-api-docs cli ../.. --dev --project-label Core", "docs:platform-api:serve": "yarn workspace @metamask/platform-api-docs cli ../.. --serve --project-label Core", - "lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn messenger-action-types:check && yarn readme-content:check && yarn lint:tsconfigs:all", + "lint": "yarn lint:eslint && echo && yarn lint:misc --check && yarn constraints && yarn lint:dependencies && yarn lint:teams && yarn messenger-action-types:check && yarn readme-content:check && yarn lint:tsconfigs:all && yarn codeowners:check", "lint:dependencies": "knip --dependencies && yarn dedupe --check", "lint:dependencies:fix": "knip --dependencies && yarn dedupe", "lint:eslint": "yarn build:only-clean && NODE_OPTIONS='--max-old-space-size=8192' yarn eslint", - "lint:fix": "yarn lint:eslint --fix --prune-suppressions && echo && yarn lint:misc --write && yarn constraints --fix && yarn lint:dependencies:fix && yarn messenger-action-types:generate && yarn readme-content:update", + "lint:fix": "yarn lint:eslint --fix --prune-suppressions && echo && yarn lint:misc --write && yarn constraints --fix && yarn lint:dependencies:fix && yarn messenger-action-types:generate && yarn readme-content:update && yarn codeowners:generate", "lint:misc": "oxfmt --ignore-path .gitignore", "lint:misc:check": "yarn lint:misc --check", "lint:teams": "tsx scripts/lint-teams-json.ts", diff --git a/scripts/manage-codeowners.ts b/scripts/manage-codeowners.ts new file mode 100755 index 00000000000..387d7776918 --- /dev/null +++ b/scripts/manage-codeowners.ts @@ -0,0 +1,8 @@ +#!/usr/bin/env yarn tsx + +import { main } from './manage-codeowners/main'; + +main().catch(function (error) { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/manage-codeowners/main.ts b/scripts/manage-codeowners/main.ts new file mode 100644 index 00000000000..5e7e3efa7fc --- /dev/null +++ b/scripts/manage-codeowners/main.ts @@ -0,0 +1,108 @@ +import fs from 'fs'; +import * as path from 'path'; +import yargs from 'yargs'; + +import codeownersSections from '../../codeowners'; + +/** + * The path to the generated CODEOWNERS file. + */ +const CODEOWNERS_FILE_PATH = path.resolve( + __dirname, + '../../.github/CODEOWNERS', +); + +/** + * The lines that appear before the CODEOWNERS rules. + */ +const CODEOWNERS_PRELUDE = ` +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. + +# Note: Please keep this synchronized with the \`teams.json\` file in the repository root. +# That file is used for some automated workflows, and maps controller to owning team(s). +`.trim(); + +/** + * The entrypoint to the script. + */ +export async function main(): Promise { + await yargs(process.argv.slice(2)) + .command( + 'check', + 'Check whether CODEOWNERS is up to date without writing changes.', + checkCodeowners, + ) + .command( + 'generate', + 'Generate the repository CODEOWNERS file.', + generateCodeowners, + ) + .demandCommand(1, 'Please specify either `check` or `generate`.') + .strict() + .help('help') + .usage('Manage the repository CODEOWNERS file.\nUsage: $0 ') + .parseAsync(); +} + +/** + * Generates a new version of CODEOWNERS in memory from the configuration in + * `codeowners.ts` and compares it to the existing file, printing an error if + * there are any differences or otherwise silently succeeding. + */ +async function checkCodeowners(): Promise { + const existingContent = await fs.promises.readFile( + CODEOWNERS_FILE_PATH, + 'utf8', + ); + const generatedContent = generateCodeownersFileContent(); + + if (existingContent !== generatedContent) { + console.error( + 'CODEOWNERS is out of date. Run `yarn codeowners:generate` to update it.', + ); + process.exitCode = 1; + } +} + +/** + * Generates the CODEOWNERS file on disk. + */ +async function generateCodeowners(): Promise { + await fs.promises.writeFile( + CODEOWNERS_FILE_PATH, + generateCodeownersFileContent(), + ); +} + +/** + * Generates the content of the CODEOWNERS file from the configuration in + * `codeowners.ts`. + * + * @returns The full CODEOWNERS file contents. + */ +function generateCodeownersFileContent(): string { + const sectionLines = codeownersSections.map((section) => { + const lines: string[] = []; + + // This is useful to discriminate the union. + // eslint-disable-next-line no-restricted-syntax + if ('title' in section) { + lines.push(`## ${section.title}`); + } + + const maxPatternLength = Math.max( + ...section.rules.map((rule) => rule.pattern.length), + ); + const patternLengthWithPadding = maxPatternLength + 4; + for (const rule of section.rules) { + lines.push( + rule.pattern.padEnd(patternLengthWithPadding) + rule.owners.join(' '), + ); + } + + return lines.join('\n'); + }); + + return [CODEOWNERS_PRELUDE, ...sectionLines].join('\n\n'); +} diff --git a/scripts/manage-codeowners/types.ts b/scripts/manage-codeowners/types.ts new file mode 100644 index 00000000000..d61d84f44aa --- /dev/null +++ b/scripts/manage-codeowners/types.ts @@ -0,0 +1,32 @@ +/** + * A single CODEOWNERS rule: a file pattern and the owners responsible for it. + */ +export type CodeownersRule = { + /** + * The file pattern matched by the rule. + */ + pattern: string; + + /** + * The GitHub owners assigned to the pattern. + */ + owners: string[]; +}; + +/** + * A group of CODEOWNERS rules rendered together under an optional heading. + * Sections are generally tied to the team(s) responsible for the patterns + * within them. + */ +export type CodeownersSection = { + /** + * The heading rendered above the section's rules. Omit this for rules that + * apply repository-wide and should not be grouped under a team heading. + */ + title?: string; + + /** + * The rules that belong to this section. + */ + rules: CodeownersRule[]; +}; diff --git a/tsconfig.json b/tsconfig.json index 02abeac1da9..83755477993 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -304,5 +304,11 @@ } ], "files": [], - "include": ["./docs", "./types", "./scripts", "./knip.config.ts"] + "include": [ + "./docs", + "./types", + "./scripts", + "./codeowners.ts", + "./knip.config.ts" + ] }