openhound-github 0.20.2__tar.gz → 0.21.1__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 (447) hide show
  1. openhound_github-0.21.1/.dockerignore +15 -0
  2. openhound_github-0.21.1/.github/workflows/publish-container.yml +127 -0
  3. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/workflows/publish.yml +18 -1
  4. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/workflows/release-on-merge.yml +16 -2
  5. openhound_github-0.21.1/Dockerfile +35 -0
  6. {openhound_github-0.20.2 → openhound_github-0.21.1}/PKG-INFO +76 -1
  7. {openhound_github-0.20.2 → openhound_github-0.21.1}/README.md +75 -0
  8. {openhound_github-0.20.2 → openhound_github-0.21.1}/pyproject.toml +3 -0
  9. openhound_github-0.21.1/src/scheduler.py +25 -0
  10. {openhound_github-0.20.2 → openhound_github-0.21.1}/uv.lock +6 -0
  11. openhound_github-0.20.2/.gitmodules +0 -3
  12. openhound_github-0.20.2/docs/og-docs.json +0 -15
  13. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/CODE_OF_CONDUCT.md +0 -0
  14. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/CONTRIBUTING.md +0 -0
  15. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/GOVERNANCE.md +0 -0
  16. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/SECURITY.md +0 -0
  17. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/SO-Dark.svg +0 -0
  18. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/SO-FOSS-Dark.svg +0 -0
  19. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/SO-FOSS-Light.svg +0 -0
  20. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/SO-Light.svg +0 -0
  21. {openhound_github-0.20.2 → openhound_github-0.21.1}/.github/workflows/validate-branch.yml +0 -0
  22. {openhound_github-0.20.2 → openhound_github-0.21.1}/.gitignore +0 -0
  23. {openhound_github-0.20.2 → openhound_github-0.21.1}/.pre-commit-config.yaml +0 -0
  24. {openhound_github-0.20.2 → openhound_github-0.21.1}/LICENSE.md +0 -0
  25. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AddAssignee.md +0 -0
  26. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AddCollaborator.md +0 -0
  27. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AddLabel.md +0 -0
  28. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AddMember.md +0 -0
  29. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AddedDeployKey.md +0 -0
  30. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AdminTo.md +0 -0
  31. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
  32. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AssignedTo.md +0 -0
  33. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_AuthorizedForOrganization.md +0 -0
  34. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
  35. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
  36. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CallsWorkflow.md +0 -0
  37. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanAccess.md +0 -0
  38. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanAccessSecret.md +0 -0
  39. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
  40. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanCreateBranch.md +0 -0
  41. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
  42. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanCreateInternalRepositories.md +0 -0
  43. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanCreatePrivateRepositories.md +0 -0
  44. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanCreatePublicRepositories.md +0 -0
  45. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanCreateRepositories.md +0 -0
  46. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
  47. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
  48. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
  49. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanEditProtection.md +0 -0
  50. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanInterceptJob.md +0 -0
  51. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanPwnRequest.md +0 -0
  52. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanReadSecret.md +0 -0
  53. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
  54. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanRequestOIDCTokenFor.md +0 -0
  55. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanUseRunner.md +0 -0
  56. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CanWriteBranch.md +0 -0
  57. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CloseDiscussion.md +0 -0
  58. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CloseIssue.md +0 -0
  59. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ClosePullRequest.md +0 -0
  60. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_Contains.md +0 -0
  61. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
  62. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
  63. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CreateEnterpriseOrganizations.md +0 -0
  64. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CreateRepository.md +0 -0
  65. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
  66. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CreateTag.md +0 -0
  67. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_CreateTeam.md +0 -0
  68. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
  69. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
  70. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
  71. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_DeleteIssue.md +0 -0
  72. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_DeleteTag.md +0 -0
  73. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_DependsOn.md +0 -0
  74. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_DeploysTo.md +0 -0
  75. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
  76. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
  77. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
  78. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditEnterpriseCustomPropertiesForOrganizations.md +0 -0
  79. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
  80. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
  81. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
  82. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_EditRepoProtections.md +0 -0
  83. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasBaseRole.md +0 -0
  84. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
  85. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasMember.md +0 -0
  86. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
  87. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
  88. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasRole.md +0 -0
  89. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasRunner.md +0 -0
  90. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
  91. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasSecret.md +0 -0
  92. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_HasVariable.md +0 -0
  93. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_InheritedFrom.md +0 -0
  94. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_InstalledAs.md +0 -0
  95. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_InviteMember.md +0 -0
  96. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_IsEligibleFor.md +0 -0
  97. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
  98. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
  99. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
  100. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageEnterpriseAdmins.md +0 -0
  101. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageEnterpriseIdentityProvider.md +0 -0
  102. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageEnterpriseMembers.md +0 -0
  103. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageEnterpriseOrganizationAdmins.md +0 -0
  104. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageEnterpriseOrganizations.md +0 -0
  105. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageEnterpriseReferrals.md +0 -0
  106. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageEnterpriseTeams.md +0 -0
  107. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
  108. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
  109. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
  110. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
  111. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
  112. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
  113. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
  114. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageTopics.md +0 -0
  115. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ManageWebhooks.md +0 -0
  116. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_MapsToUser.md +0 -0
  117. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
  118. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
  119. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_MemberOf.md +0 -0
  120. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
  121. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
  122. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
  123. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
  124. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_Owns.md +0 -0
  125. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ProtectedBy.md +0 -0
  126. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
  127. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
  128. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadEnterpriseAuditLog.md +0 -0
  129. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadEnterpriseDomainVerification.md +0 -0
  130. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadEnterpriseMembers.md +0 -0
  131. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadEnterpriseOrgProjects.md +0 -0
  132. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadEnterpriseOrganizationAdmin.md +0 -0
  133. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
  134. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
  135. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
  136. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReadRepoContents.md +0 -0
  137. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_RemoveAssignee.md +0 -0
  138. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_RemoveLabel.md +0 -0
  139. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
  140. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReopenIssue.md +0 -0
  141. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
  142. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_RequestPrReview.md +0 -0
  143. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_RequestsAccessTo.md +0 -0
  144. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
  145. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
  146. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
  147. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_RunOrgMigration.md +0 -0
  148. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_RunsOn.md +0 -0
  149. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ScopedTo.md +0 -0
  150. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_SetEnterpriseInteractionLimits.md +0 -0
  151. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
  152. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_SetIssueType.md +0 -0
  153. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_SetMilestone.md +0 -0
  154. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_SetSocialPreview.md +0 -0
  155. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_SyncedTo.md +0 -0
  156. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
  157. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
  158. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_TransferRepository.md +0 -0
  159. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_UsesSecret.md +0 -0
  160. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_UsesVariable.md +0 -0
  161. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ValidToken.md +0 -0
  162. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
  163. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ViewEnterpriseActionsUsageMetrics.md +0 -0
  164. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ViewEnterpriseBilling.md +0 -0
  165. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ViewEnterpriseSecretScanningAlerts.md +0 -0
  166. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
  167. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
  168. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteEnterpriseActionsPolicies.md +0 -0
  169. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteEnterpriseBilling.md +0 -0
  170. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteEnterprisePersonalAccessTokenPolicies.md +0 -0
  171. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteEnterpriseSso.md +0 -0
  172. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteEnterpriseTeamMembers.md +0 -0
  173. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
  174. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
  175. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
  176. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
  177. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
  178. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
  179. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteRepoContents.md +0 -0
  180. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
  181. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_App.md +0 -0
  182. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_AppInstallation.md +0 -0
  183. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Branch.md +0 -0
  184. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
  185. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_ClassicPersonalAccessToken.md +0 -0
  186. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_DeployKey.md +0 -0
  187. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Enterprise.md +0 -0
  188. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnterpriseManagedUser.md +0 -0
  189. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnterpriseRole.md +0 -0
  190. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnterpriseRunner.md +0 -0
  191. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
  192. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnterpriseTeam.md +0 -0
  193. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Environment.md +0 -0
  194. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
  195. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnvironmentSecret.md +0 -0
  196. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
  197. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
  198. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_OrgRole.md +0 -0
  199. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_OrgRunner.md +0 -0
  200. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
  201. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_OrgSecret.md +0 -0
  202. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_OrgVariable.md +0 -0
  203. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Organization.md +0 -0
  204. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_PersonalAccessToken.md +0 -0
  205. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +0 -0
  206. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_RepoRole.md +0 -0
  207. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_RepoRunner.md +0 -0
  208. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_RepoSecret.md +0 -0
  209. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_RepoVariable.md +0 -0
  210. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Repository.md +0 -0
  211. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Runner.md +0 -0
  212. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_RunnerGroup.md +0 -0
  213. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
  214. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Scope.md +0 -0
  215. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Secret.md +0 -0
  216. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
  217. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Team.md +0 -0
  218. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_TeamRole.md +0 -0
  219. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_User.md +0 -0
  220. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Variable.md +0 -0
  221. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_Workflow.md +0 -0
  222. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_WorkflowJob.md +0 -0
  223. {openhound_github-0.20.2 → openhound_github-0.21.1}/descriptions/nodes/GH_WorkflowStep.md +0 -0
  224. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
  225. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -0
  226. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -0
  227. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-enterprise-owners-role.json +0 -0
  228. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
  229. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-organizations.json +0 -0
  230. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
  231. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
  232. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -0
  233. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
  234. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
  235. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
  236. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/README.md +0 -0
  237. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
  238. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/active-leaked-secrets.json +0 -0
  239. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
  240. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/all-actions-allowed.json +0 -0
  241. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/app-installations-all-repos.json +0 -0
  242. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
  243. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
  244. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
  245. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
  246. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
  247. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
  248. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-self-approval.json +0 -0
  249. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
  250. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/bypass-pr-requirements.json +0 -0
  251. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/dangerous-branch-perms.json +0 -0
  252. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/default-repository-permissions.json +0 -0
  253. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
  254. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
  255. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
  256. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
  257. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/environments-admin-bypass.json +0 -0
  258. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/expired-pats.json +0 -0
  259. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/external-identities-without-scim.json +0 -0
  260. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/github-to-azure-identity.json +0 -0
  261. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/global-repo-perms.json +0 -0
  262. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/hybrid-identities.json +0 -0
  263. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
  264. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/members-can-create-pages.json +0 -0
  265. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/members-can-create-public-repos.json +0 -0
  266. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/members-can-delete-repos.json +0 -0
  267. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
  268. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
  269. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/org-owners.json +0 -0
  270. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/orgs-without-2fa.json +0 -0
  271. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/pats-all-repo-access.json +0 -0
  272. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/pending-pat-requests.json +0 -0
  273. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
  274. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
  275. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
  276. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/public-repos.json +0 -0
  277. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
  278. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/push-to-protected-branches.json +0 -0
  279. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
  280. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
  281. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/repository-workflows.json +0 -0
  282. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/saml-configuration.json +0 -0
  283. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/secret-scanning-alerts.json +0 -0
  284. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
  285. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
  286. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/self-hosted-runners-can-intercept-broad-token-jobs.json +0 -0
  287. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/shared-self-hosted-runners-can-intercept-secret-bearing-jobs.json +0 -0
  288. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/team-membership-admin.json +0 -0
  289. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/team-structure.json +0 -0
  290. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/unprotected-branches.json +0 -0
  291. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
  292. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/unprotected-default-branches.json +0 -0
  293. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
  294. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/workflow-jobs-interceptable-by-self-hosted-runners.json +0 -0
  295. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/workflow-jobs-with-broad-token-write-permissions.json +0 -0
  296. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/workflow-jobs-with-id-token-write-on-self-hosted-runners.json +0 -0
  297. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/workflow-jobs-with-id-token-write.json +0 -0
  298. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/saved_searches/workflow-jobs-with-observed-oidc-auth-steps.json +0 -0
  299. {openhound_github-0.20.2 → openhound_github-0.21.1}/extension/schema.json +0 -0
  300. {openhound_github-0.20.2 → openhound_github-0.21.1}/justfile +0 -0
  301. {openhound_github-0.20.2 → openhound_github-0.21.1}/scripts/generate_gh_description_docs.py +0 -0
  302. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/main.py +0 -0
  303. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/__init__.py +0 -0
  304. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/auth.py +0 -0
  305. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/extension.yaml +0 -0
  306. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/github_rest_client.py +0 -0
  307. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/github_retry.py +0 -0
  308. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/graph.py +0 -0
  309. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/graphql.py +0 -0
  310. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/helpers.py +0 -0
  311. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/kinds/edges.py +0 -0
  312. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/kinds/nodes.py +0 -0
  313. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/lookup.py +0 -0
  314. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/main.py +0 -0
  315. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/__init__.py +0 -0
  316. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/actions_permission.py +0 -0
  317. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/app_installation.py +0 -0
  318. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/branch.py +0 -0
  319. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
  320. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/branch_protection_rule.py +0 -0
  321. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/branch_push_allowance.py +0 -0
  322. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/classic_personal_access_token.py +0 -0
  323. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/deploy_key.py +0 -0
  324. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise.py +0 -0
  325. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_admin.py +0 -0
  326. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_credential_inventory.py +0 -0
  327. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_helpers.py +0 -0
  328. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_managed_user.py +0 -0
  329. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_member.py +0 -0
  330. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_organization.py +0 -0
  331. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_role.py +0 -0
  332. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_role_team.py +0 -0
  333. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_role_user.py +0 -0
  334. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_team.py +0 -0
  335. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_team_member.py +0 -0
  336. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_team_organization.py +0 -0
  337. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_team_role.py +0 -0
  338. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/enterprise_user.py +0 -0
  339. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/env_secret.py +0 -0
  340. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/env_variable.py +0 -0
  341. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/environment.py +0 -0
  342. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/environment_branch_policy.py +0 -0
  343. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/external_identity.py +0 -0
  344. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/org.py +0 -0
  345. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/org_role.py +0 -0
  346. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/org_role_member.py +0 -0
  347. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/org_role_team.py +0 -0
  348. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/org_secret.py +0 -0
  349. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/org_variable.py +0 -0
  350. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/permissions.py +0 -0
  351. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/personal_access_token.py +0 -0
  352. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/personal_access_token_access.py +0 -0
  353. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/personal_access_token_request.py +0 -0
  354. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/projected_enterprise_team.py +0 -0
  355. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/repo_role_assignment.py +0 -0
  356. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/repository.py +0 -0
  357. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/repository_role.py +0 -0
  358. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/repository_secret.py +0 -0
  359. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/repository_variable.py +0 -0
  360. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/runner.py +0 -0
  361. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
  362. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/saml_helpers.py +0 -0
  363. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/saml_issuer.py +0 -0
  364. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/saml_provider.py +0 -0
  365. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/saml_service_provider.py +0 -0
  366. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/scim_user.py +0 -0
  367. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/scope.py +0 -0
  368. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/secret_scanning_alert.py +0 -0
  369. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/team.py +0 -0
  370. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/team_member.py +0 -0
  371. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/team_role.py +0 -0
  372. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/user.py +0 -0
  373. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/workflow.py +0 -0
  374. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/workflow_job.py +0 -0
  375. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/workflow_reference.py +0 -0
  376. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/models/workflow_step.py +0 -0
  377. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/resources/__init__.py +0 -0
  378. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/resources/enterprise.py +0 -0
  379. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/resources/organization.py +0 -0
  380. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/runner_ids.py +0 -0
  381. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/source.py +0 -0
  382. {openhound_github-0.20.2 → openhound_github-0.21.1}/src/openhound_github/transforms.py +0 -0
  383. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_app_auth.py +0 -0
  384. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_app_installation_repo_access.py +0 -0
  385. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_branch_collection_gate.py +0 -0
  386. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_branch_protection_traversability.py +0 -0
  387. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_classic_personal_access_tokens.py +0 -0
  388. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_credential_permission_models.py +0 -0
  389. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/actions-permissions.json +0 -0
  390. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/actionsecrets.json +0 -0
  391. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/app.json +0 -0
  392. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/appinstalls.json +0 -0
  393. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/branch-policies.json +0 -0
  394. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/branch-prot-rules.json +0 -0
  395. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/branches.json +0 -0
  396. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/custom-roles.json +0 -0
  397. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/environments.json +0 -0
  398. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/org-pat-request.json +0 -0
  399. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/org-pat.json +0 -0
  400. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/org-role-teams.json +0 -0
  401. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/org-role-users.json +0 -0
  402. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/org-roles.json +0 -0
  403. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/org.json +0 -0
  404. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/pat-repositories.json +0 -0
  405. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/repo-collaborators.json +0 -0
  406. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/repo-teams.json +0 -0
  407. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/repositories.json +0 -0
  408. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/scimusers.json +0 -0
  409. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/secrets.json +0 -0
  410. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/secretscanningalert.json +0 -0
  411. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/selected-org-secrets.json +0 -0
  412. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/variables.json +0 -0
  413. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_data/api/workflows.json +0 -0
  414. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_deploy_key_models.py +0 -0
  415. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_deploy_key_resources.py +0 -0
  416. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_description_docs.py +0 -0
  417. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_enterprise_capabilities.py +0 -0
  418. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_enterprise_organization.py +0 -0
  419. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_enterprise_resources.py +0 -0
  420. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_environment_model.py +0 -0
  421. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_environment_resources.py +0 -0
  422. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_environment_reviewer_lookup.py +0 -0
  423. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_error_resilience.py +0 -0
  424. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_github_app_retry.py +0 -0
  425. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_github_rest_client.py +0 -0
  426. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_github_retry.py +0 -0
  427. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_helpers.py +0 -0
  428. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_lookup.py +0 -0
  429. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_org_role_model.py +0 -0
  430. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_org_scim_resources.py +0 -0
  431. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_org_secret_models.py +0 -0
  432. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_preproc.py +0 -0
  433. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_repository_rulesets.py +0 -0
  434. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_repository_scopes.py +0 -0
  435. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_runner_ids.py +0 -0
  436. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_runner_models.py +0 -0
  437. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_runner_resources.py +0 -0
  438. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_saml_helpers.py +0 -0
  439. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_saml_models.py +0 -0
  440. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_scim_models.py +0 -0
  441. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_source_endpoints.py +0 -0
  442. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_source_org_canonicalization.py +0 -0
  443. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_team_external_groups.py +0 -0
  444. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_variable_models.py +0 -0
  445. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_workflow_interception_path.py +0 -0
  446. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_workflow_model.py +0 -0
  447. {openhound_github-0.20.2 → openhound_github-0.21.1}/tests/test_workflow_resources.py +0 -0
@@ -0,0 +1,15 @@
1
+ # Only application inputs belong in the build context.
2
+ **
3
+ !Dockerfile
4
+ !.dockerignore
5
+ !pyproject.toml
6
+ !uv.lock
7
+ !README.md
8
+ !LICENSE.md
9
+ !src/
10
+ !src/**
11
+ **/__pycache__/
12
+ **/*.pyc
13
+ **/.dlt/
14
+ **/*.pem
15
+ **/*.key
@@ -0,0 +1,127 @@
1
+ name: Build and publish container
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ tag:
7
+ description: Existing release tag to build
8
+ required: true
9
+ type: string
10
+
11
+ permissions:
12
+ contents: read
13
+ packages: write
14
+
15
+ concurrency:
16
+ group: container-${{ inputs.tag }}
17
+ cancel-in-progress: false
18
+
19
+ jobs:
20
+ publish:
21
+ if: >-
22
+ github.repository == 'SpecterOps/openhound-github' &&
23
+ github.event_name == 'pull_request' &&
24
+ github.event.action == 'closed' &&
25
+ github.event.pull_request.merged == true &&
26
+ github.event.pull_request.base.ref == 'main'
27
+ runs-on: ubuntu-latest
28
+ strategy:
29
+ matrix:
30
+ target: [cli, enterprise]
31
+ steps:
32
+ - name: Validate release tag
33
+ env:
34
+ RELEASE_TAG: ${{ inputs.tag }}
35
+ run: |
36
+ [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || {
37
+ echo "Expected a release tag such as v0.20.0" >&2
38
+ exit 1
39
+ }
40
+
41
+ - name: Checkout release
42
+ uses: actions/checkout@v4
43
+ with:
44
+ ref: refs/tags/${{ inputs.tag }}
45
+
46
+ - name: Set image metadata
47
+ id: image
48
+ env:
49
+ RELEASE_TAG: ${{ inputs.tag }}
50
+ REPOSITORY: ${{ github.repository }}
51
+ TARGET: ${{ matrix.target }}
52
+ run: |
53
+ VERSION=${RELEASE_TAG#v}
54
+ IMAGE="ghcr.io/${REPOSITORY,,}"
55
+ SUFFIX=""
56
+ if [[ "$TARGET" == cli ]]; then SUFFIX="-cli"; fi
57
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
58
+ echo "tag=$IMAGE:$VERSION$SUFFIX" >> "$GITHUB_OUTPUT"
59
+
60
+ - name: Set up QEMU
61
+ uses: docker/setup-qemu-action@v4
62
+
63
+ - name: Set up Docker Buildx
64
+ uses: docker/setup-buildx-action@v4
65
+
66
+ - name: Build smoke-test image
67
+ uses: docker/build-push-action@v7
68
+ with:
69
+ context: .
70
+ target: ${{ matrix.target }}
71
+ platforms: linux/amd64
72
+ load: true
73
+ tags: openhound-github:smoke
74
+ build-args: |
75
+ COLLECTOR_VERSION=${{ steps.image.outputs.version }}
76
+ cache-from: type=gha,scope=${{ matrix.target }}
77
+
78
+ - name: Verify runtime and installed collector
79
+ env:
80
+ EXPECTED_VERSION: ${{ steps.image.outputs.version }}
81
+ run: |
82
+ docker run --rm --entrypoint python -e EXPECTED_VERSION openhound-github:smoke -c '
83
+ import importlib.metadata as metadata
84
+ import os
85
+ import runpy
86
+ from unittest.mock import patch
87
+ import openhound_github.main
88
+ assert os.getuid() != 0
89
+ assert metadata.version("openhound-github") == os.environ["EXPECTED_VERSION"]
90
+ entries = metadata.entry_points(group="openhound.sources")
91
+ assert any(entry.name == "github" and entry.load() for entry in entries)
92
+ with patch.dict(os.environ, {
93
+ "DESTINATION__BLOODHOUNDENTERPRISE__URL": "https://example.invalid",
94
+ "DESTINATION__BLOODHOUNDENTERPRISE__TOKEN_ID": "smoke-test-id",
95
+ "DESTINATION__BLOODHOUNDENTERPRISE__TOKEN_KEY": "smoke-test-key",
96
+ }), patch("openhound.scheduler.service.Service", autospec=True) as service:
97
+ runpy.run_path("/app/src/scheduler.py", run_name="__main__")
98
+ assert service.call_args.kwargs["collector_name"] == "github"
99
+ service.return_value.start.assert_called_once_with()
100
+ '
101
+
102
+ - name: Verify CLI
103
+ if: matrix.target == 'cli'
104
+ run: docker run --rm openhound-github:smoke --help
105
+
106
+ - name: Log in to GHCR
107
+ uses: docker/login-action@v3
108
+ with:
109
+ registry: ghcr.io
110
+ username: ${{ github.actor }}
111
+ password: ${{ secrets.GITHUB_TOKEN }}
112
+
113
+ - name: Build and push multi-architecture image
114
+ uses: docker/build-push-action@v7
115
+ with:
116
+ context: .
117
+ target: ${{ matrix.target }}
118
+ platforms: linux/amd64,linux/arm64
119
+ push: true
120
+ sbom: true
121
+ tags: ${{ steps.image.outputs.tag }}
122
+ labels: |
123
+ org.opencontainers.image.source=https://github.com/${{ github.repository }}
124
+ org.opencontainers.image.version=${{ steps.image.outputs.version }}
125
+ build-args: |
126
+ COLLECTOR_VERSION=${{ steps.image.outputs.version }}
127
+ cache-from: type=gha,scope=${{ matrix.target }}
@@ -14,10 +14,12 @@ on:
14
14
 
15
15
  permissions:
16
16
  contents: read
17
- id-token: write
18
17
 
19
18
  jobs:
20
19
  build:
20
+ permissions:
21
+ contents: read
22
+ id-token: write
21
23
  environment: pypi
22
24
  runs-on: ubuntu-latest
23
25
 
@@ -44,3 +46,18 @@ jobs:
44
46
 
45
47
  - name: Publish package
46
48
  run: uv publish
49
+
50
+ container:
51
+ needs: build
52
+ permissions:
53
+ contents: read
54
+ packages: write
55
+ if: >-
56
+ github.repository == 'SpecterOps/openhound-github' &&
57
+ github.event_name == 'pull_request' &&
58
+ github.event.action == 'closed' &&
59
+ github.event.pull_request.merged == true &&
60
+ github.event.pull_request.base.ref == 'main'
61
+ uses: ./.github/workflows/publish-container.yml
62
+ with:
63
+ tag: ${{ inputs.tag || github.ref_name }}
@@ -11,10 +11,20 @@ on:
11
11
  - "pyproject.toml"
12
12
  - "uv.lock"
13
13
  - "README.md"
14
+ - "Dockerfile"
15
+ - ".dockerignore"
16
+ - ".github/workflows/publish.yml"
17
+ - ".github/workflows/publish-container.yml"
14
18
 
15
19
  permissions:
16
20
  contents: write
17
21
  id-token: write # This is required for requesting the JWT for the OIDC provider
22
+ packages: write
23
+
24
+ concurrency:
25
+ group: release-main
26
+ queue: max
27
+ cancel-in-progress: false
18
28
 
19
29
  jobs:
20
30
 
@@ -28,18 +38,23 @@ jobs:
28
38
  # needs: test-core
29
39
  if: github.event.pull_request.merged == true
30
40
  runs-on: ubuntu-latest
41
+ outputs:
42
+ new_version: ${{ steps.versioning.outputs.new_version }}
31
43
 
32
44
  steps:
33
45
  - name: Checkout
34
46
  uses: actions/checkout@v4
35
47
  with:
36
48
  fetch-depth: 0
49
+ ref: ${{ github.event.pull_request.merge_commit_sha }}
37
50
 
38
51
  - name: Fetch tags
39
52
  run: git fetch --tags
40
53
 
41
54
  - name: Determine next version
42
55
  id: versioning
56
+ env:
57
+ BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
43
58
  run: |
44
59
  # Get latest tag or fallback
45
60
  LATEST_TAG=$(git tag --sort=-v:refname | head -n 1)
@@ -52,7 +67,6 @@ jobs:
52
67
  VERSION=${LATEST_TAG#v}
53
68
  IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
54
69
 
55
- BRANCH_NAME="${{ github.event.pull_request.head.ref }}"
56
70
  echo "Merged branch: $BRANCH_NAME"
57
71
 
58
72
  if [[ "$BRANCH_NAME" == fix/* || "$BRANCH_NAME" == patch/* || "$BRANCH_NAME" == chore/* ]]; then
@@ -86,7 +100,7 @@ jobs:
86
100
 
87
101
  publish:
88
102
  needs: tag-release
89
- if: github.event.pull_request.merged == true
103
+ if: needs.tag-release.outputs.new_version != ''
90
104
  uses: ./.github/workflows/publish.yml
91
105
  with:
92
106
  tag: ${{ needs.tag-release.outputs.new_version }}
@@ -0,0 +1,35 @@
1
+ # syntax=docker/dockerfile:1
2
+ FROM ghcr.io/astral-sh/uv:python3.13-trixie-slim AS builder
3
+
4
+ ENV UV_COMPILE_BYTECODE=1 \
5
+ UV_LINK_MODE=copy \
6
+ UV_PYTHON_DOWNLOADS=0
7
+
8
+ ARG COLLECTOR_VERSION
9
+ ENV SETUPTOOLS_SCM_PRETEND_VERSION=${COLLECTOR_VERSION}
10
+
11
+ WORKDIR /app
12
+ COPY pyproject.toml uv.lock README.md LICENSE.md ./
13
+ COPY src ./src
14
+ RUN test -n "$COLLECTOR_VERSION"
15
+ RUN --mount=type=cache,target=/root/.cache/uv \
16
+ uv sync --no-dev --group container --frozen --no-editable
17
+
18
+ FROM gcr.io/distroless/python3-debian13:nonroot AS base
19
+
20
+ ENV PYTHONDONTWRITEBYTECODE=1 \
21
+ PYTHONUNBUFFERED=1 \
22
+ PYTHONPATH=/app/.venv/lib/python3.13/site-packages \
23
+ LOG_CONTAINER=true \
24
+ RUNTIME__LOG_PATH=/app/logs \
25
+ DESTINATION__BLOODHOUNDENTERPRISE__COLLECTOR_NAME=github
26
+
27
+ COPY --from=builder --chown=nonroot:nonroot /app /app
28
+ WORKDIR /app
29
+
30
+ FROM base AS cli
31
+ ENTRYPOINT ["python", "-m", "openhound"]
32
+ CMD ["--help"]
33
+
34
+ FROM base AS enterprise
35
+ ENTRYPOINT ["python", "src/scheduler.py"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openhound-github
3
- Version: 0.20.2
3
+ Version: 0.21.1
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
@@ -154,3 +154,78 @@ Follow the OpenHound GitHub collector docs to get started:
154
154
  - [Configure an organization GitHub App](https://bloodhound.specterops.io/openhound/collectors/github/configure-app)
155
155
  - [Configure an enterprise GitHub App](https://bloodhound.specterops.io/openhound/collectors/github/configure-enterprise-app)
156
156
  - [Configure a personal access token](https://bloodhound.specterops.io/openhound/collectors/github/configure-pat)
157
+
158
+ ## Container images
159
+
160
+ After a release-triggering pull request merges into `main` in
161
+ `SpecterOps/openhound-github`, the release workflow publishes the PyPI package
162
+ first, then builds images for `linux/amd64` and `linux/arm64` in GitHub Container
163
+ Registry. Container builds are skipped for forks, other branches, and standalone
164
+ tag pushes. Both images use the same release version:
165
+
166
+ - `ghcr.io/specterops/openhound-github:<version>` starts the BloodHound Enterprise scheduler.
167
+ - `ghcr.io/specterops/openhound-github:<version>-cli` runs the OpenHound CLI.
168
+
169
+ For example, release tag `v0.20.0` produces image tags `0.20.0` and `0.20.0-cli`.
170
+ Use a version containing the container files; releases predating this workflow
171
+ cannot be built without backporting those files. No moving `latest` tag is published.
172
+
173
+ ### Run the scheduler
174
+
175
+ Prepare your `.dlt/config.toml`, `.dlt/secrets.toml`, and GitHub App private key
176
+ following the collector configuration documentation above. Mount the directory
177
+ read-only and use the container path for the key (for example,
178
+ `/app/.dlt/github-app.pem`). The container runs as UID/GID `65532`; mounted
179
+ files must be readable by that user.
180
+
181
+ ```sh
182
+ docker run --rm --init \
183
+ --mount type=bind,src="$(pwd)/.dlt",dst=/app/.dlt,readonly \
184
+ ghcr.io/specterops/openhound-github:<version>
185
+ ```
186
+
187
+ Set the BloodHound Enterprise destination URL, token ID, and token key in
188
+ `.dlt/secrets.toml`:
189
+
190
+ ```toml
191
+ [destination.bloodhoundenterprise]
192
+ url = "https://<tenant>.bloodhoundenterprise.io"
193
+ token_id = "<token-id>"
194
+ token_key = "<token-key>"
195
+ ```
196
+
197
+ The image defaults the collector name to `github`. OpenHound manages the
198
+ scheduler polling interval internally. Collection state and output are stored
199
+ inside the container unless you mount persistent storage for them.
200
+
201
+ To inspect the CLI:
202
+
203
+ ```sh
204
+ docker run --rm ghcr.io/specterops/openhound-github:<version>-cli --help
205
+ ```
206
+
207
+ ### Build and publish
208
+
209
+ To build locally without publishing:
210
+
211
+ ```sh
212
+ docker build --target cli --build-arg COLLECTOR_VERSION=0.20.0 \
213
+ -t openhound-github:0.20.0-cli .
214
+ docker build --target enterprise --build-arg COLLECTOR_VERSION=0.20.0 \
215
+ -t openhound-github:0.20.0 .
216
+ ```
217
+
218
+ `COLLECTOR_VERSION` sets the GitHub collector package version; the OpenHound
219
+ framework version is resolved separately from `uv.lock`. The container-only
220
+ dependency group installs the framework without development tools.
221
+
222
+ To retry a failed container publication, re-run the failed jobs in the original
223
+ release workflow run. The container workflow authenticates using `GITHUB_TOKEN`
224
+ with `packages: write`; AWS credentials and personal access tokens are not
225
+ needed. Runtime checks run before each image is pushed, and both architectures
226
+ include an SBOM.
227
+
228
+ After the first publication, a package administrator should verify the GHCR
229
+ package's visibility and repository access. New packages default to private;
230
+ make the package public if anonymous pulls are intended. If the package
231
+ already exists, grant this repository's Actions workflows write access to it.
@@ -143,3 +143,78 @@ Follow the OpenHound GitHub collector docs to get started:
143
143
  - [Configure an organization GitHub App](https://bloodhound.specterops.io/openhound/collectors/github/configure-app)
144
144
  - [Configure an enterprise GitHub App](https://bloodhound.specterops.io/openhound/collectors/github/configure-enterprise-app)
145
145
  - [Configure a personal access token](https://bloodhound.specterops.io/openhound/collectors/github/configure-pat)
146
+
147
+ ## Container images
148
+
149
+ After a release-triggering pull request merges into `main` in
150
+ `SpecterOps/openhound-github`, the release workflow publishes the PyPI package
151
+ first, then builds images for `linux/amd64` and `linux/arm64` in GitHub Container
152
+ Registry. Container builds are skipped for forks, other branches, and standalone
153
+ tag pushes. Both images use the same release version:
154
+
155
+ - `ghcr.io/specterops/openhound-github:<version>` starts the BloodHound Enterprise scheduler.
156
+ - `ghcr.io/specterops/openhound-github:<version>-cli` runs the OpenHound CLI.
157
+
158
+ For example, release tag `v0.20.0` produces image tags `0.20.0` and `0.20.0-cli`.
159
+ Use a version containing the container files; releases predating this workflow
160
+ cannot be built without backporting those files. No moving `latest` tag is published.
161
+
162
+ ### Run the scheduler
163
+
164
+ Prepare your `.dlt/config.toml`, `.dlt/secrets.toml`, and GitHub App private key
165
+ following the collector configuration documentation above. Mount the directory
166
+ read-only and use the container path for the key (for example,
167
+ `/app/.dlt/github-app.pem`). The container runs as UID/GID `65532`; mounted
168
+ files must be readable by that user.
169
+
170
+ ```sh
171
+ docker run --rm --init \
172
+ --mount type=bind,src="$(pwd)/.dlt",dst=/app/.dlt,readonly \
173
+ ghcr.io/specterops/openhound-github:<version>
174
+ ```
175
+
176
+ Set the BloodHound Enterprise destination URL, token ID, and token key in
177
+ `.dlt/secrets.toml`:
178
+
179
+ ```toml
180
+ [destination.bloodhoundenterprise]
181
+ url = "https://<tenant>.bloodhoundenterprise.io"
182
+ token_id = "<token-id>"
183
+ token_key = "<token-key>"
184
+ ```
185
+
186
+ The image defaults the collector name to `github`. OpenHound manages the
187
+ scheduler polling interval internally. Collection state and output are stored
188
+ inside the container unless you mount persistent storage for them.
189
+
190
+ To inspect the CLI:
191
+
192
+ ```sh
193
+ docker run --rm ghcr.io/specterops/openhound-github:<version>-cli --help
194
+ ```
195
+
196
+ ### Build and publish
197
+
198
+ To build locally without publishing:
199
+
200
+ ```sh
201
+ docker build --target cli --build-arg COLLECTOR_VERSION=0.20.0 \
202
+ -t openhound-github:0.20.0-cli .
203
+ docker build --target enterprise --build-arg COLLECTOR_VERSION=0.20.0 \
204
+ -t openhound-github:0.20.0 .
205
+ ```
206
+
207
+ `COLLECTOR_VERSION` sets the GitHub collector package version; the OpenHound
208
+ framework version is resolved separately from `uv.lock`. The container-only
209
+ dependency group installs the framework without development tools.
210
+
211
+ To retry a failed container publication, re-run the failed jobs in the original
212
+ release workflow run. The container workflow authenticates using `GITHUB_TOKEN`
213
+ with `packages: write`; AWS credentials and personal access tokens are not
214
+ needed. Runtime checks run before each image is pushed, and both architectures
215
+ include an SBOM.
216
+
217
+ After the first publication, a package administrator should verify the GHCR
218
+ package's visibility and repository access. New packages default to private;
219
+ make the package public if anonymous pulls are intended. If the package
220
+ already exists, grant this repository's Actions workflows write access to it.
@@ -27,6 +27,9 @@ local_scheme = "no-local-version"
27
27
  "src/openhound_github/extension.yaml" = "openhound_github/extension.yaml"
28
28
 
29
29
  [dependency-groups]
30
+ container = [
31
+ "openhound>=0.4.0",
32
+ ]
30
33
  dev = [
31
34
  "openhound>=0.4.0",
32
35
  "pre-commit>=4.5.1",
@@ -0,0 +1,25 @@
1
+ """Start the BloodHound Enterprise scheduler for the configured collector."""
2
+
3
+ import logging
4
+
5
+ import dlt
6
+
7
+ from openhound.scheduler.service import Service
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ def start() -> None:
13
+ collector_name = dlt.config["destination.bloodhoundenterprise.collector_name"]
14
+ logger.info("Initializing service for collector '%s'.", collector_name)
15
+ service = Service(
16
+ bhe_uri=dlt.secrets["destination.bloodhoundenterprise.url"],
17
+ token_key=dlt.secrets["destination.bloodhoundenterprise.token_key"],
18
+ token_id=dlt.secrets["destination.bloodhoundenterprise.token_id"],
19
+ collector_name=collector_name,
20
+ )
21
+ service.start()
22
+
23
+
24
+ if __name__ == "__main__":
25
+ start()
@@ -879,6 +879,9 @@ dependencies = [
879
879
  ]
880
880
 
881
881
  [package.dev-dependencies]
882
+ container = [
883
+ { name = "openhound" },
884
+ ]
882
885
  dev = [
883
886
  { name = "mypy" },
884
887
  { name = "openhound" },
@@ -895,6 +898,9 @@ requires-dist = [
895
898
  ]
896
899
 
897
900
  [package.metadata.requires-dev]
901
+ container = [
902
+ { name = "openhound", specifier = ">=0.4.0" },
903
+ ]
898
904
  dev = [
899
905
  { name = "mypy", specifier = ">=1.19.1" },
900
906
  { name = "openhound", specifier = ">=0.4.0" },
@@ -1,3 +0,0 @@
1
- [submodule "docs/og-docs-automation"]
2
- path = docs/og-docs-automation
3
- url = https://github.com/SpecterOps/og-docs-automation
@@ -1,15 +0,0 @@
1
- {
2
- "extensionSchemaPath": "extension/schema.json",
3
- "extensionShortName": "GitHub",
4
- "collectorName": "github",
5
- "gitHubBaseUrl": "https://github.com/SpecterOps/openhound-github",
6
- "stripTitlePrefix": "GitHub: ",
7
- "savedSearchesDir": "extension/saved_searches",
8
- "zoneRulesDir": "extension/privilege_zone_rules",
9
- "nodeDescriptionsDir": "descriptions/nodes",
10
- "edgeDescriptionsDir": "descriptions/edges",
11
- "openHoundStructure": true,
12
- "imagesDir": "descriptions/images",
13
- "iconSize": 32,
14
- "iconScale": 0.55
15
- }