openhound-github 0.11.0__tar.gz → 0.12.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. {openhound_github-0.11.0 → openhound_github-0.12.0}/PKG-INFO +1 -1
  2. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Environment.md +0 -1
  3. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Repository.md +4 -0
  4. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/graphql.py +4 -0
  5. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/lookup.py +19 -0
  6. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/repository.py +10 -0
  7. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/resources/organization.py +12 -5
  8. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/transforms.py +7 -1
  9. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_environment_resources.py +36 -0
  10. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_repository_rulesets.py +43 -2
  11. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/CODE_OF_CONDUCT.md +0 -0
  12. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/CONTRIBUTING.md +0 -0
  13. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/GOVERNANCE.md +0 -0
  14. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/GitHub-COC-Header.png +0 -0
  15. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/GitHub-CONTRIB-Header.png +0 -0
  16. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/GitHub-GOV-Header.png +0 -0
  17. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/GitHub-Header.png +0 -0
  18. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/GitHub-LIC-Header.png +0 -0
  19. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/GitHub-SEC-Header.png +0 -0
  20. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/SECURITY.md +0 -0
  21. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/SO-Dark.svg +0 -0
  22. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/SO-FOSS-Dark.svg +0 -0
  23. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/SO-FOSS-Light.svg +0 -0
  24. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/SO-Light.svg +0 -0
  25. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/workflows/publish.yml +0 -0
  26. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/workflows/release-on-merge.yml +0 -0
  27. {openhound_github-0.11.0 → openhound_github-0.12.0}/.github/workflows/validate-branch.yml +0 -0
  28. {openhound_github-0.11.0 → openhound_github-0.12.0}/.gitignore +0 -0
  29. {openhound_github-0.11.0 → openhound_github-0.12.0}/.gitmodules +0 -0
  30. {openhound_github-0.11.0 → openhound_github-0.12.0}/.pre-commit-config.yaml +0 -0
  31. {openhound_github-0.11.0 → openhound_github-0.12.0}/LICENSE.md +0 -0
  32. {openhound_github-0.11.0 → openhound_github-0.12.0}/README.md +0 -0
  33. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_AddAssignee.md +0 -0
  34. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_AddCollaborator.md +0 -0
  35. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_AddLabel.md +0 -0
  36. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_AddMember.md +0 -0
  37. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_AdminTo.md +0 -0
  38. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
  39. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_AssignedTo.md +0 -0
  40. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
  41. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
  42. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CallsWorkflow.md +0 -0
  43. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanAccess.md +0 -0
  44. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanAccessSecret.md +0 -0
  45. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
  46. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateBranch.md +0 -0
  47. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
  48. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateInternalRepositories.md +0 -0
  49. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreatePrivateRepositories.md +0 -0
  50. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreatePublicRepositories.md +0 -0
  51. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateRepositories.md +0 -0
  52. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
  53. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
  54. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
  55. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanEditProtection.md +0 -0
  56. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanInterceptJob.md +0 -0
  57. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanPwnRequest.md +0 -0
  58. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanReadSecret.md +0 -0
  59. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
  60. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanRequestOIDCTokenFor.md +0 -0
  61. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanUseRunner.md +0 -0
  62. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CanWriteBranch.md +0 -0
  63. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CloseDiscussion.md +0 -0
  64. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CloseIssue.md +0 -0
  65. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ClosePullRequest.md +0 -0
  66. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_Contains.md +0 -0
  67. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
  68. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
  69. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CreateEnterpriseOrganizations.md +0 -0
  70. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CreateRepository.md +0 -0
  71. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
  72. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CreateTag.md +0 -0
  73. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_CreateTeam.md +0 -0
  74. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
  75. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
  76. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
  77. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteIssue.md +0 -0
  78. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteTag.md +0 -0
  79. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_DependsOn.md +0 -0
  80. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_DeploysTo.md +0 -0
  81. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
  82. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
  83. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
  84. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditEnterpriseCustomPropertiesForOrganizations.md +0 -0
  85. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
  86. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
  87. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
  88. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoProtections.md +0 -0
  89. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasBaseRole.md +0 -0
  90. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
  91. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasMember.md +0 -0
  92. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
  93. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
  94. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasRole.md +0 -0
  95. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasRunner.md +0 -0
  96. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
  97. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasSecret.md +0 -0
  98. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_HasVariable.md +0 -0
  99. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_InheritedFrom.md +0 -0
  100. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_InstalledAs.md +0 -0
  101. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_InviteMember.md +0 -0
  102. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_IsEligibleFor.md +0 -0
  103. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
  104. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
  105. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
  106. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseAdmins.md +0 -0
  107. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseIdentityProvider.md +0 -0
  108. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseMembers.md +0 -0
  109. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseOrganizationAdmins.md +0 -0
  110. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseOrganizations.md +0 -0
  111. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseReferrals.md +0 -0
  112. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseTeams.md +0 -0
  113. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
  114. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
  115. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
  116. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
  117. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
  118. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
  119. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
  120. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageTopics.md +0 -0
  121. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ManageWebhooks.md +0 -0
  122. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_MapsToUser.md +0 -0
  123. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
  124. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
  125. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_MemberOf.md +0 -0
  126. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
  127. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
  128. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
  129. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
  130. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_Owns.md +0 -0
  131. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ProtectedBy.md +0 -0
  132. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
  133. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
  134. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseAuditLog.md +0 -0
  135. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseDomainVerification.md +0 -0
  136. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseMembers.md +0 -0
  137. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseOrgProjects.md +0 -0
  138. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseOrganizationAdmin.md +0 -0
  139. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
  140. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
  141. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
  142. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReadRepoContents.md +0 -0
  143. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_RemoveAssignee.md +0 -0
  144. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_RemoveLabel.md +0 -0
  145. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
  146. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenIssue.md +0 -0
  147. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
  148. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_RequestPrReview.md +0 -0
  149. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
  150. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
  151. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
  152. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_RunOrgMigration.md +0 -0
  153. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_RunsOn.md +0 -0
  154. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_SetEnterpriseInteractionLimits.md +0 -0
  155. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
  156. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_SetIssueType.md +0 -0
  157. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_SetMilestone.md +0 -0
  158. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_SetSocialPreview.md +0 -0
  159. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_SyncedTo.md +0 -0
  160. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
  161. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
  162. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_TransferRepository.md +0 -0
  163. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_UsesSecret.md +0 -0
  164. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_UsesVariable.md +0 -0
  165. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ValidToken.md +0 -0
  166. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
  167. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseActionsUsageMetrics.md +0 -0
  168. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseBilling.md +0 -0
  169. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseSecretScanningAlerts.md +0 -0
  170. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
  171. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
  172. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseActionsPolicies.md +0 -0
  173. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseBilling.md +0 -0
  174. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterprisePersonalAccessTokenPolicies.md +0 -0
  175. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseSso.md +0 -0
  176. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseTeamMembers.md +0 -0
  177. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
  178. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
  179. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
  180. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
  181. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
  182. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
  183. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteRepoContents.md +0 -0
  184. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
  185. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_App.md +0 -0
  186. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_AppInstallation.md +0 -0
  187. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Branch.md +0 -0
  188. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
  189. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Enterprise.md +0 -0
  190. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseManagedUser.md +0 -0
  191. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRole.md +0 -0
  192. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRunner.md +0 -0
  193. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
  194. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseTeam.md +0 -0
  195. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
  196. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentSecret.md +0 -0
  197. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
  198. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
  199. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRole.md +0 -0
  200. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRunner.md +0 -0
  201. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
  202. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgSecret.md +0 -0
  203. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgVariable.md +0 -0
  204. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Organization.md +0 -0
  205. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_PersonalAccessToken.md +0 -0
  206. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +0 -0
  207. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoRole.md +0 -0
  208. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoRunner.md +0 -0
  209. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoSecret.md +0 -0
  210. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoVariable.md +0 -0
  211. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Runner.md +0 -0
  212. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_RunnerGroup.md +0 -0
  213. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
  214. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Secret.md +0 -0
  215. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
  216. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Team.md +0 -0
  217. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_TeamRole.md +0 -0
  218. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_User.md +0 -0
  219. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Variable.md +0 -0
  220. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_Workflow.md +0 -0
  221. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_WorkflowJob.md +0 -0
  222. {openhound_github-0.11.0 → openhound_github-0.12.0}/descriptions/nodes/GH_WorkflowStep.md +0 -0
  223. {openhound_github-0.11.0 → openhound_github-0.12.0}/docs/og-docs.json +0 -0
  224. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
  225. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -0
  226. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -0
  227. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-enterprise-owners-role.json +0 -0
  228. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
  229. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-organizations.json +0 -0
  230. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
  231. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
  232. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -0
  233. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
  234. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
  235. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
  236. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/README.md +0 -0
  237. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
  238. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/active-leaked-secrets.json +0 -0
  239. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
  240. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/all-actions-allowed.json +0 -0
  241. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/app-installations-all-repos.json +0 -0
  242. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
  243. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
  244. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
  245. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
  246. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
  247. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
  248. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-self-approval.json +0 -0
  249. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
  250. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/bypass-pr-requirements.json +0 -0
  251. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/dangerous-branch-perms.json +0 -0
  252. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/default-repository-permissions.json +0 -0
  253. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
  254. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
  255. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
  256. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
  257. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/environments-admin-bypass.json +0 -0
  258. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/expired-pats.json +0 -0
  259. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/external-identities-without-scim.json +0 -0
  260. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/github-to-azure-identity.json +0 -0
  261. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/global-repo-perms.json +0 -0
  262. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/hybrid-identities.json +0 -0
  263. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
  264. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/members-can-create-pages.json +0 -0
  265. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/members-can-create-public-repos.json +0 -0
  266. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/members-can-delete-repos.json +0 -0
  267. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
  268. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
  269. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/org-owners.json +0 -0
  270. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/orgs-without-2fa.json +0 -0
  271. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/pats-all-repo-access.json +0 -0
  272. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/pending-pat-requests.json +0 -0
  273. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
  274. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
  275. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
  276. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/public-repos.json +0 -0
  277. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
  278. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/push-to-protected-branches.json +0 -0
  279. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
  280. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
  281. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/repository-workflows.json +0 -0
  282. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/saml-configuration.json +0 -0
  283. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/secret-scanning-alerts.json +0 -0
  284. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
  285. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
  286. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/self-hosted-runners-can-intercept-broad-token-jobs.json +0 -0
  287. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/shared-self-hosted-runners-can-intercept-secret-bearing-jobs.json +0 -0
  288. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/team-membership-admin.json +0 -0
  289. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/team-structure.json +0 -0
  290. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/unprotected-branches.json +0 -0
  291. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
  292. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/unprotected-default-branches.json +0 -0
  293. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
  294. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-interceptable-by-self-hosted-runners.json +0 -0
  295. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-broad-token-write-permissions.json +0 -0
  296. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-id-token-write-on-self-hosted-runners.json +0 -0
  297. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-id-token-write.json +0 -0
  298. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-observed-oidc-auth-steps.json +0 -0
  299. {openhound_github-0.11.0 → openhound_github-0.12.0}/extension/schema.json +0 -0
  300. {openhound_github-0.11.0 → openhound_github-0.12.0}/justfile +0 -0
  301. {openhound_github-0.11.0 → openhound_github-0.12.0}/pyproject.toml +0 -0
  302. {openhound_github-0.11.0 → openhound_github-0.12.0}/scripts/generate_gh_description_docs.py +0 -0
  303. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/main.py +0 -0
  304. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/__init__.py +0 -0
  305. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/auth.py +0 -0
  306. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/extension.yaml +0 -0
  307. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/github_rest_client.py +0 -0
  308. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/github_retry.py +0 -0
  309. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/graph.py +0 -0
  310. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/helpers.py +0 -0
  311. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/kinds/edges.py +0 -0
  312. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/kinds/nodes.py +0 -0
  313. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/main.py +0 -0
  314. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/__init__.py +0 -0
  315. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/actions_permission.py +0 -0
  316. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/app_installation.py +0 -0
  317. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/branch.py +0 -0
  318. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
  319. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/branch_protection_rule.py +0 -0
  320. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/branch_push_allowance.py +0 -0
  321. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise.py +0 -0
  322. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_admin.py +0 -0
  323. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_helpers.py +0 -0
  324. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_managed_user.py +0 -0
  325. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_member.py +0 -0
  326. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_organization.py +0 -0
  327. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role.py +0 -0
  328. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role_team.py +0 -0
  329. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role_user.py +0 -0
  330. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team.py +0 -0
  331. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_member.py +0 -0
  332. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_organization.py +0 -0
  333. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_role.py +0 -0
  334. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_user.py +0 -0
  335. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/env_secret.py +0 -0
  336. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/env_variable.py +0 -0
  337. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/environment.py +0 -0
  338. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/environment_branch_policy.py +0 -0
  339. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/external_identity.py +0 -0
  340. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/org.py +0 -0
  341. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/org_role.py +0 -0
  342. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/org_role_member.py +0 -0
  343. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/org_role_team.py +0 -0
  344. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/org_secret.py +0 -0
  345. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/org_variable.py +0 -0
  346. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/permissions.py +0 -0
  347. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token.py +0 -0
  348. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token_access.py +0 -0
  349. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token_request.py +0 -0
  350. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/projected_enterprise_team.py +0 -0
  351. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/repo_role_assignment.py +0 -0
  352. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/repository_role.py +0 -0
  353. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/repository_secret.py +0 -0
  354. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/repository_variable.py +0 -0
  355. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/runner.py +0 -0
  356. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
  357. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/saml_helpers.py +0 -0
  358. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/saml_issuer.py +0 -0
  359. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/saml_provider.py +0 -0
  360. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/saml_service_provider.py +0 -0
  361. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/scim_user.py +0 -0
  362. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/secret_scanning_alert.py +0 -0
  363. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/team.py +0 -0
  364. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/team_member.py +0 -0
  365. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/team_role.py +0 -0
  366. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/user.py +0 -0
  367. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/workflow.py +0 -0
  368. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/workflow_job.py +0 -0
  369. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/workflow_reference.py +0 -0
  370. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/models/workflow_step.py +0 -0
  371. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/resources/__init__.py +0 -0
  372. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/resources/enterprise.py +0 -0
  373. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/runner_ids.py +0 -0
  374. {openhound_github-0.11.0 → openhound_github-0.12.0}/src/openhound_github/source.py +0 -0
  375. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_app_auth.py +0 -0
  376. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_branch_collection_gate.py +0 -0
  377. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_branch_protection_traversability.py +0 -0
  378. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_credential_permission_models.py +0 -0
  379. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/actions-permissions.json +0 -0
  380. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/actionsecrets.json +0 -0
  381. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/app.json +0 -0
  382. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/appinstalls.json +0 -0
  383. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/branch-policies.json +0 -0
  384. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/branch-prot-rules.json +0 -0
  385. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/branches.json +0 -0
  386. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/custom-roles.json +0 -0
  387. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/environments.json +0 -0
  388. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/org-pat-request.json +0 -0
  389. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/org-pat.json +0 -0
  390. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/org-role-teams.json +0 -0
  391. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/org-role-users.json +0 -0
  392. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/org-roles.json +0 -0
  393. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/org.json +0 -0
  394. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/pat-repositories.json +0 -0
  395. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/repo-collaborators.json +0 -0
  396. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/repo-teams.json +0 -0
  397. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/repositories.json +0 -0
  398. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/scimusers.json +0 -0
  399. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/secrets.json +0 -0
  400. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/secretscanningalert.json +0 -0
  401. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/selected-org-secrets.json +0 -0
  402. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/variables.json +0 -0
  403. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_data/api/workflows.json +0 -0
  404. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_description_docs.py +0 -0
  405. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_enterprise_capabilities.py +0 -0
  406. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_enterprise_organization.py +0 -0
  407. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_enterprise_resources.py +0 -0
  408. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_environment_model.py +0 -0
  409. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_environment_reviewer_lookup.py +0 -0
  410. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_error_resilience.py +0 -0
  411. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_github_app_retry.py +0 -0
  412. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_github_rest_client.py +0 -0
  413. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_github_retry.py +0 -0
  414. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_helpers.py +0 -0
  415. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_lookup.py +0 -0
  416. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_org_scim_resources.py +0 -0
  417. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_org_secret_models.py +0 -0
  418. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_runner_ids.py +0 -0
  419. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_runner_models.py +0 -0
  420. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_runner_resources.py +0 -0
  421. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_saml_helpers.py +0 -0
  422. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_saml_models.py +0 -0
  423. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_scim_models.py +0 -0
  424. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_source_endpoints.py +0 -0
  425. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_source_org_canonicalization.py +0 -0
  426. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_team_external_groups.py +0 -0
  427. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_variable_models.py +0 -0
  428. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_workflow_interception_path.py +0 -0
  429. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_workflow_model.py +0 -0
  430. {openhound_github-0.11.0 → openhound_github-0.12.0}/tests/test_workflow_resources.py +0 -0
  431. {openhound_github-0.11.0 → openhound_github-0.12.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openhound-github
3
- Version: 0.11.0
3
+ Version: 0.12.0
4
4
  Summary: Github collector for OpenHound
5
5
  Author-email: "jdreijer@specterops.io" <jdreijer@specterops.io>, Jared Atkinson <jatkinson@specterops.io>
6
6
  License-File: LICENSE.md
@@ -59,5 +59,4 @@ graph LR
59
59
  n8 -.->|GH_ApprovesDeploymentTo| n1
60
60
  n8 -->|GH_CanDeployToEnvironment| n1
61
61
  n9 -.->|GH_DeploysTo| n1
62
- n9 -->|GH_CanRequestOIDCTokenFor| n1
63
62
  ```
@@ -6,6 +6,8 @@ Represents a GitHub repository within the organization. Repository nodes capture
6
6
 
7
7
  For repositories with active workflows, the collector records the applicable default workflow permissions and whether workflows may approve pull request reviews. These properties preserve the repository-level policy input later used to derive effective GITHUB_TOKEN permissions for GH_WorkflowJob nodes.
8
8
 
9
+ The `branch_count` and `environment_count` properties preserve GitHub-reported totals from the repository GraphQL response. These values can be compared to collected GH_Branch and GH_Environment children to identify incomplete collection before relying on branch- or environment-dependent analysis.
10
+
9
11
  ## Properties
10
12
 
11
13
  | Property | Type | Description |
@@ -44,6 +46,8 @@ For repositories with active workflows, the collector records the applicable def
44
46
  | `secret_scanning` | `string` | Status of secret scanning (e.g., `enabled`, `disabled`). |
45
47
  | `branch_ruleset_count` | `integer` | Number of branch-targeted rulesets that apply to this repository. |
46
48
  | `has_branch_rulesets` | `boolean` | Whether at least one branch-targeted ruleset applies to this repository. |
49
+ | `branch_count` | `integer` | Number of branch refs reported by GitHub for this repository. |
50
+ | `environment_count` | `integer` | Number of deployment environments reported by GitHub for this repository. |
47
51
  | `query_branches` | `string` | Query for branches. |
48
52
  | `query_protected_branches` | `string` | Query for protected branches. |
49
53
  | `query_branch_protection_rules` | `string` | Query for branch protection rules. |
@@ -271,6 +271,7 @@ query RepoRefs($login: String!, $count: Int!, $after: String) {
271
271
  totalCount
272
272
  }
273
273
  refs(first: 100, refPrefix: "refs/heads/") {
274
+ totalCount
274
275
  nodes {
275
276
  id
276
277
  name
@@ -279,6 +280,9 @@ query RepoRefs($login: String!, $count: Int!, $after: String) {
279
280
  }
280
281
  pageInfo { endCursor hasNextPage }
281
282
  }
283
+ environments(first: 1) {
284
+ totalCount
285
+ }
282
286
  }
283
287
  pageInfo { endCursor hasNextPage }
284
288
  }
@@ -602,6 +602,25 @@ class GithubLookup(LookupManager):
602
602
  return None
603
603
  return int(row[0])
604
604
 
605
+ @lru_cache
606
+ def repository_graphql_counts(
607
+ self, repository_node_id: str
608
+ ) -> tuple[int | None, int | None]:
609
+ row = self._find_single_row(
610
+ f"""
611
+ SELECT branch_count, environment_count
612
+ FROM {self.schema}.repositories_graphql
613
+ WHERE id = ?
614
+ """,
615
+ [repository_node_id],
616
+ )
617
+ if row is None:
618
+ return None, None
619
+ return (
620
+ None if row[0] is None else int(row[0]),
621
+ None if row[1] is None else int(row[1]),
622
+ )
623
+
605
624
  @lru_cache
606
625
  def repository_workflow_permissions(
607
626
  self, repository_node_id: str
@@ -46,6 +46,8 @@ class GHRepositoryProperties(GHNodeProperties):
46
46
  secret_scanning: Status of secret scanning (e.g., `enabled`, `disabled`).
47
47
  branch_ruleset_count: Number of branch-targeted rulesets that apply to this repository.
48
48
  has_branch_rulesets: Whether at least one branch-targeted ruleset applies to this repository.
49
+ branch_count: Number of branch refs reported by GitHub for this repository.
50
+ environment_count: Number of deployment environments reported by GitHub for this repository.
49
51
  query_branches: Query for branches.
50
52
  query_protected_branches: Query for protected branches.
51
53
  query_branch_protection_rules: Query for branch protection rules.
@@ -94,6 +96,8 @@ class GHRepositoryProperties(GHNodeProperties):
94
96
  secret_scanning: str | None = None
95
97
  branch_ruleset_count: int | None = None
96
98
  has_branch_rulesets: bool | None = None
99
+ branch_count: int | None = None
100
+ environment_count: int | None = None
97
101
  query_branches: str | None = None
98
102
  query_protected_branches: str | None = None
99
103
  query_branch_protection_rules: str | None = None
@@ -149,6 +153,7 @@ class Branch(BaseModel):
149
153
  class Ref(BaseModel):
150
154
  page_info: PageInfo = Field(alias="pageInfo")
151
155
  nodes: list[Branch]
156
+ total_count: int | None = Field(alias="totalCount", default=None)
152
157
 
153
158
 
154
159
  class RepositoryQL(BaseModel):
@@ -158,6 +163,8 @@ class RepositoryQL(BaseModel):
158
163
  name: str
159
164
  refs: Ref
160
165
  branch_ruleset_count: int | None = None
166
+ branch_count: int | None = None
167
+ environment_count: int | None = None
161
168
 
162
169
  # Additional
163
170
  org_login: str
@@ -230,6 +237,7 @@ class Repository(BaseAsset):
230
237
  def as_node(self) -> GHNode:
231
238
  rid = self.node_id
232
239
  branch_ruleset_count = self._lookup.repository_branch_ruleset_count(rid)
240
+ branch_count, environment_count = self._lookup.repository_graphql_counts(rid)
233
241
  workflow_permissions = self._lookup.repository_workflow_permissions(rid)
234
242
  default_workflow_permissions, can_approve_pull_request_reviews = (
235
243
  workflow_permissions if workflow_permissions else (None, None)
@@ -272,6 +280,8 @@ class Repository(BaseAsset):
272
280
  if branch_ruleset_count is not None
273
281
  else None
274
282
  ),
283
+ branch_count=branch_count,
284
+ environment_count=environment_count,
275
285
  # secret_scanning=self.secret_scanning,
276
286
  query_branches=f"MATCH p=(:GH_Repository {{node_id: '{rid}'}})-[:GH_Contains]->(:GH_Branch) RETURN p",
277
287
  query_protected_branches=f"MATCH p=(:GH_Repository {{node_id: '{rid}'}})-[:GH_Contains]->(:GH_Branch)<-[:GH_ProtectedBy]-(:GH_BranchProtectionRule) RETURN p",
@@ -1224,10 +1224,14 @@ def repositories_graphql(ctx: SourceContext):
1224
1224
  for repo in repos_page["nodes"]:
1225
1225
  repo_record = {**repo}
1226
1226
  branch_rulesets = repo_record.pop("branchRulesets", None) or {}
1227
+ environments = repo_record.pop("environments", None) or {}
1228
+ refs = repo_record.get("refs") or {}
1227
1229
  emitted_repositories += 1
1228
1230
  yield {
1229
1231
  **repo_record,
1230
1232
  "branch_ruleset_count": branch_rulesets.get("totalCount"),
1233
+ "branch_count": refs.get("totalCount"),
1234
+ "environment_count": environments.get("totalCount"),
1231
1235
  "org_login": org_name,
1232
1236
  }
1233
1237
 
@@ -1447,20 +1451,23 @@ def workflow_steps(workflow: Workflow):
1447
1451
 
1448
1452
 
1449
1453
  @app.transformer(name="environments", columns=Environment, parallelized=True)
1450
- def environments(repo: Repository, ctx: SourceContext):
1454
+ def environments(repo: RepositoryQL, ctx: SourceContext):
1451
1455
  """Fetch deployment environments for a repository.
1452
1456
 
1453
1457
  Args:
1454
- repo (Repository): The repository to fetch environments for.
1458
+ repo (RepositoryQL): Repository metadata with the GitHub-reported environment count.
1455
1459
  ctx (SourceContext): The shared context containing the REST client and organization name.
1456
1460
 
1457
1461
  Yields:
1458
1462
  Environment (Environment): Deployment environment record.
1459
1463
  """
1460
1464
 
1461
- full_name = repo.full_name
1465
+ if repo.environment_count == 0:
1466
+ return
1467
+
1468
+ full_name = f"{repo.org_login}/{repo.name}"
1462
1469
  repo_name = repo.name
1463
- repo_node_id = repo.node_id
1470
+ repo_node_id = repo.id
1464
1471
  client = _client_for_org(ctx, repo.org_login)
1465
1472
  for page in client.paginate(
1466
1473
  f"/repos/{full_name}/environments",
@@ -2334,12 +2341,12 @@ def organization_resources(ctx: SourceContext):
2334
2341
  repo_roles_base = RepositoryRoleCache(ctx)
2335
2342
  repos_resource = repositories(ctx)
2336
2343
  workflows_resource = repos_resource | workflows(ctx)
2337
- environments_resource = repos_resource | environments(ctx)
2338
2344
  personal_access_tokens_resource = personal_access_tokens(ctx)
2339
2345
 
2340
2346
  teams_resource = teams(ctx)
2341
2347
  team_external_groups_resource = team_external_groups(ctx)
2342
2348
  repositories_graphql_resource = repositories_graphql(ctx)
2349
+ environments_resource = repositories_graphql_resource | environments(ctx)
2343
2350
  app_installs_resource = app_installations(ctx)
2344
2351
  runner_groups_resource = runner_groups(ctx)
2345
2352
  runner_group_access_resource = runner_groups_resource | org_runner_group_access(ctx)
@@ -20,7 +20,9 @@ def ensure_optional_input_tables(
20
20
  );
21
21
  CREATE TABLE IF NOT EXISTS {schema}.repositories_graphql (
22
22
  id VARCHAR,
23
- branch_ruleset_count BIGINT
23
+ branch_ruleset_count BIGINT,
24
+ branch_count BIGINT,
25
+ environment_count BIGINT
24
26
  );
25
27
  CREATE TABLE IF NOT EXISTS {schema}.branch_protection_rules (
26
28
  id VARCHAR,
@@ -198,6 +200,10 @@ def ensure_optional_input_tables(
198
200
  ADD COLUMN IF NOT EXISTS id VARCHAR;
199
201
  ALTER TABLE {schema}.repositories_graphql
200
202
  ADD COLUMN IF NOT EXISTS branch_ruleset_count BIGINT;
203
+ ALTER TABLE {schema}.repositories_graphql
204
+ ADD COLUMN IF NOT EXISTS branch_count BIGINT;
205
+ ALTER TABLE {schema}.repositories_graphql
206
+ ADD COLUMN IF NOT EXISTS environment_count BIGINT;
201
207
 
202
208
  ALTER TABLE {schema}.branch_protection_rules
203
209
  ADD COLUMN IF NOT EXISTS id VARCHAR;
@@ -5,6 +5,7 @@ import pytest
5
5
  from openhound_github.resources.organization import (
6
6
  OrgContext,
7
7
  SourceContext,
8
+ environments,
8
9
  environment_branch_policies,
9
10
  environment_secrets,
10
11
  environment_variables,
@@ -41,6 +42,41 @@ def _environment(name: str) -> SimpleNamespace:
41
42
  )
42
43
 
43
44
 
45
+ def _repository(environment_count: int | None) -> SimpleNamespace:
46
+ return SimpleNamespace(
47
+ id="REPO_1",
48
+ name="repo",
49
+ org_login="acme",
50
+ environment_count=environment_count,
51
+ )
52
+
53
+
54
+ @pytest.mark.parametrize("environment_count", [1, None])
55
+ def test_environments_queries_when_repository_may_have_environments(
56
+ environment_count: int | None,
57
+ ) -> None:
58
+ client = _FakeClient()
59
+
60
+ rows = list(environments.__wrapped__(_repository(environment_count), _ctx(client)))
61
+
62
+ assert rows == []
63
+ assert client.paginate_calls == [
64
+ (
65
+ "/repos/acme/repo/environments",
66
+ {"params": {"per_page": 100}, "data_selector": "environments"},
67
+ )
68
+ ]
69
+
70
+
71
+ def test_environments_skips_query_when_repository_has_no_environments() -> None:
72
+ client = _FakeClient()
73
+
74
+ rows = list(environments.__wrapped__(_repository(0), _ctx(client)))
75
+
76
+ assert rows == []
77
+ assert client.paginate_calls == []
78
+
79
+
44
80
  @pytest.mark.parametrize(
45
81
  ("transformer", "suffix"),
46
82
  [
@@ -38,6 +38,8 @@ def _repository_page_data(
38
38
  repository_name: str,
39
39
  *,
40
40
  branch_ruleset_count: int | None = None,
41
+ branch_count: int | None = None,
42
+ environment_count: int | None = None,
41
43
  repository_end_cursor: str | None = None,
42
44
  repositories_has_next_page: bool = False,
43
45
  ) -> dict:
@@ -54,12 +56,14 @@ def _repository_page_data(
54
56
  "name": repository_name,
55
57
  "branchRulesets": {"totalCount": branch_ruleset_count},
56
58
  "refs": {
59
+ "totalCount": branch_count,
57
60
  "nodes": [],
58
61
  "pageInfo": {
59
62
  "endCursor": None,
60
63
  "hasNextPage": False,
61
64
  },
62
65
  },
66
+ "environments": {"totalCount": environment_count},
63
67
  }
64
68
  ]
65
69
  }
@@ -122,8 +126,18 @@ def _make_repository() -> Repository:
122
126
  )
123
127
 
124
128
 
125
- def test_repositories_graphql_flattens_branch_ruleset_count() -> None:
126
- client = _FakeClient()
129
+ def test_repositories_graphql_flattens_repository_counts() -> None:
130
+ client = _FakeClient(
131
+ _graphql_response(
132
+ _repository_page_data(
133
+ "R_1",
134
+ "repo",
135
+ branch_ruleset_count=2,
136
+ branch_count=7,
137
+ environment_count=3,
138
+ )
139
+ )
140
+ )
127
141
  ctx = SourceContext(
128
142
  client=client,
129
143
  organizations=[OrgContext(client=client, org_name="org")],
@@ -136,10 +150,13 @@ def test_repositories_graphql_flattens_branch_ruleset_count() -> None:
136
150
  "id": "R_1",
137
151
  "name": "repo",
138
152
  "refs": {
153
+ "totalCount": 7,
139
154
  "nodes": [],
140
155
  "pageInfo": {"endCursor": None, "hasNextPage": False},
141
156
  },
142
157
  "branch_ruleset_count": 2,
158
+ "branch_count": 7,
159
+ "environment_count": 3,
143
160
  "org_login": "org",
144
161
  }
145
162
  ]
@@ -390,6 +407,7 @@ def test_repository_node_surfaces_branch_ruleset_presence() -> None:
390
407
  lookup = MagicMock()
391
408
  lookup.org_id_for_login.return_value = "O_1"
392
409
  lookup.repository_branch_ruleset_count.return_value = 2
410
+ lookup.repository_graphql_counts.return_value = (7, 3)
393
411
  lookup.repository_workflow_permissions.return_value = ("read", False)
394
412
  repo._lookup = lookup
395
413
 
@@ -397,10 +415,13 @@ def test_repository_node_surfaces_branch_ruleset_presence() -> None:
397
415
 
398
416
  assert node.properties.branch_ruleset_count == 2
399
417
  assert node.properties.has_branch_rulesets is True
418
+ assert node.properties.branch_count == 7
419
+ assert node.properties.environment_count == 3
400
420
  assert node.properties.default_workflow_permissions == "read"
401
421
  assert node.properties.can_approve_pull_request_reviews is False
402
422
  assert node.properties.size == 0
403
423
  lookup.repository_branch_ruleset_count.assert_called_once_with("R_1")
424
+ lookup.repository_graphql_counts.assert_called_once_with("R_1")
404
425
  lookup.repository_workflow_permissions.assert_called_once_with("R_1")
405
426
 
406
427
 
@@ -409,6 +430,7 @@ def test_repository_node_preserves_unknown_branch_ruleset_presence() -> None:
409
430
  lookup = MagicMock()
410
431
  lookup.org_id_for_login.return_value = "O_1"
411
432
  lookup.repository_branch_ruleset_count.return_value = None
433
+ lookup.repository_graphql_counts.return_value = (None, None)
412
434
  lookup.repository_workflow_permissions.return_value = None
413
435
  repo._lookup = lookup
414
436
 
@@ -416,6 +438,8 @@ def test_repository_node_preserves_unknown_branch_ruleset_presence() -> None:
416
438
 
417
439
  assert node.properties.branch_ruleset_count is None
418
440
  assert node.properties.has_branch_rulesets is None
441
+ assert node.properties.branch_count is None
442
+ assert node.properties.environment_count is None
419
443
  assert node.properties.default_workflow_permissions is None
420
444
  assert node.properties.can_approve_pull_request_reviews is None
421
445
 
@@ -436,6 +460,23 @@ def test_repository_branch_ruleset_count_lookup_returns_int() -> None:
436
460
  assert lookup.repository_branch_ruleset_count("R_2") is None
437
461
 
438
462
 
463
+ def test_repository_graphql_counts_lookup_returns_ints() -> None:
464
+ connection = duckdb.connect(":memory:")
465
+ connection.execute("CREATE SCHEMA github")
466
+ connection.execute(
467
+ "CREATE TABLE github.repositories_graphql (id VARCHAR, branch_count BIGINT, environment_count BIGINT)"
468
+ )
469
+ connection.execute(
470
+ "INSERT INTO github.repositories_graphql VALUES ('R_1', 7, 3), ('R_2', NULL, NULL)"
471
+ )
472
+
473
+ lookup = GithubLookup(connection)
474
+
475
+ assert lookup.repository_graphql_counts("R_1") == (7, 3)
476
+ assert lookup.repository_graphql_counts("R_2") == (None, None)
477
+ assert lookup.repository_graphql_counts("R_3") == (None, None)
478
+
479
+
439
480
  def test_repository_workflow_permissions_lookup_returns_collected_policy() -> None:
440
481
  connection = duckdb.connect(":memory:")
441
482
  connection.execute("CREATE SCHEMA github")