openhound-github 0.5.0__tar.gz → 0.5.2__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.
- {openhound_github-0.5.0 → openhound_github-0.5.2}/PKG-INFO +7 -1
- {openhound_github-0.5.0 → openhound_github-0.5.2}/README.md +6 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/auth.py +28 -12
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/resources/organization.py +11 -3
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/source.py +11 -6
- openhound_github-0.5.2/tests/test_app_auth.py +156 -0
- openhound_github-0.5.2/tests/test_environment_resources.py +73 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/CODE_OF_CONDUCT.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/CONTRIBUTING.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GOVERNANCE.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-COC-Header.png +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-CONTRIB-Header.png +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-GOV-Header.png +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-Header.png +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-LIC-Header.png +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/GitHub-SEC-Header.png +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SECURITY.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-Dark.svg +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-FOSS-Dark.svg +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-FOSS-Light.svg +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/SO-Light.svg +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/workflows/publish.yml +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/workflows/release-on-merge.yml +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.github/workflows/validate-branch.yml +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.gitignore +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.gitmodules +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/.pre-commit-config.yaml +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/LICENSE.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddAssignee.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddCollaborator.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddLabel.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AddMember.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AdminTo.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_AssignedTo.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CallsWorkflow.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanAccess.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanCreateBranch.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanEditProtection.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanPwnRequest.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanUseRunner.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanWriteBranch.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CloseDiscussion.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CloseIssue.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ClosePullRequest.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_Contains.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateRepository.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateTag.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateTeam.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteIssue.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteTag.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DependsOn.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeploysTo.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoProtections.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_GrantsAccessTo.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasBaseRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasBranch.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasEnvironment.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasJob.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasMember.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasSecret.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasStep.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasVariable.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_HasWorkflow.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_InheritedFrom.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_InstalledAs.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_InviteMember.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageTopics.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ManageWebhooks.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MapsToUser.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_MemberOf.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_Owns.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ProtectedBy.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReadRepoContents.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RemoveAssignee.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RemoveLabel.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReopenIssue.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RequestPrReview.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_RunOrgMigration.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetIssueType.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetMilestone.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SetSocialPreview.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_SyncedTo.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_TransferRepository.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_UsesSecret.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_UsesVariable.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ValidToken.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteRepoContents.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_App.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_AppInstallation.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Branch.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnterpriseRunner.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Environment.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnvironmentSecret.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgRunner.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgSecret.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_OrgVariable.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Organization.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_PersonalAccessToken.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoRunner.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoSecret.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_RepoVariable.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Repository.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Team.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_TeamRole.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_User.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_Workflow.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_WorkflowJob.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/nodes/GH_WorkflowStep.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/docs/og-docs.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-organizations.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/README.md +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/active-leaked-secrets.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/all-actions-allowed.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/app-installations-all-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-self-approval.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/bypass-pr-requirements.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dangerous-branch-perms.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/default-repository-permissions.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/environments-admin-bypass.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/expired-pats.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/external-identities-without-scim.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/github-to-azure-identity.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/global-repo-perms.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/hybrid-identities.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-create-pages.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-create-public-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-delete-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/org-owners.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/orgs-without-2fa.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/pats-all-repo-access.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/pending-pat-requests.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/public-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/push-to-protected-branches.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/repository-workflows.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/saml-configuration.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/secret-scanning-alerts.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/team-membership-admin.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/team-structure.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/unprotected-branches.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/unprotected-default-branches.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/extension/schema.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/justfile +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/pyproject.toml +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/main.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/__init__.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/extension.yaml +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/graph.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/graphql.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/helpers.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/kinds/edges.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/kinds/nodes.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/lookup.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/main.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/__init__.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/actions_permission.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/app_installation.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch_protection_rule.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/branch_push_allowance.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_admin.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_helpers.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_managed_user.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_member.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_organization.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_role.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_role_team.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_role_user.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team_member.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team_organization.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_team_role.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/enterprise_user.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/env_secret.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/env_variable.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/environment.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/environment_branch_policy.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/external_identity.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_role.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_role_member.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_role_team.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_secret.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/org_variable.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/personal_access_token.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/personal_access_token_access.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/personal_access_token_request.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/projected_enterprise_team.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repo_role_assignment.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository_role.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository_secret.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/repository_variable.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/runner.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_helpers.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_issuer.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_provider.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/saml_service_provider.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/scim_user.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/secret_scanning_alert.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/team.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/team_member.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/team_role.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/user.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/workflow.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/workflow_job.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/models/workflow_step.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/resources/__init__.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/resources/enterprise.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/runner_ids.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/transforms.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_branch_collection_gate.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_branch_protection_traversability.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/actions-permissions.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/actionsecrets.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/app.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/appinstalls.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/branch-policies.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/branch-prot-rules.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/branches.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/custom-roles.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/environments.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-pat-request.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-pat.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-role-teams.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-role-users.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org-roles.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/org.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/pat-repositories.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/repo-collaborators.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/repo-teams.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/repositories.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/scimusers.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/secrets.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/secretscanningalert.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/selected-org-secrets.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/variables.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_data/api/workflows.json +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_enterprise_capabilities.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_enterprise_organization.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_enterprise_resources.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_environment_model.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_error_resilience.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_external_identity_tenant_matching.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_github_rest_client.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_github_retry.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_org_secret_models.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_repository_rulesets.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_runner_ids.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_runner_models.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_runner_resources.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_saml_helpers.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_saml_models.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_scim_models.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_variable_models.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/tests/test_workflow_model.py +0 -0
- {openhound_github-0.5.0 → openhound_github-0.5.2}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: openhound-github
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
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
|
|
@@ -45,6 +45,12 @@ The openhound-github extension collects resources from Github organizations and
|
|
|
45
45
|
edges for
|
|
46
46
|
BloodHound.
|
|
47
47
|
|
|
48
|
+
### GitHub App JWT issuer
|
|
49
|
+
|
|
50
|
+
Enterprise GitHub App credentials accept either `client_id` or `app_id` as the
|
|
51
|
+
JWT issuer. When both are configured, `client_id` is preferred. At least one
|
|
52
|
+
identifier must be supplied together with `key_path` and `enterprise_name`.
|
|
53
|
+
|
|
48
54
|
### Enterprise SCIM and hybrid correlations
|
|
49
55
|
|
|
50
56
|
When `SOURCES__GITHUB__COLLECT_ENTERPRISE_SCIM=true`, a token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
|
|
@@ -34,6 +34,12 @@ The openhound-github extension collects resources from Github organizations and
|
|
|
34
34
|
edges for
|
|
35
35
|
BloodHound.
|
|
36
36
|
|
|
37
|
+
### GitHub App JWT issuer
|
|
38
|
+
|
|
39
|
+
Enterprise GitHub App credentials accept either `client_id` or `app_id` as the
|
|
40
|
+
JWT issuer. When both are configured, `client_id` is preferred. At least one
|
|
41
|
+
identifier must be supplied together with `key_path` and `enterprise_name`.
|
|
42
|
+
|
|
37
43
|
### Enterprise SCIM and hybrid correlations
|
|
38
44
|
|
|
39
45
|
When `SOURCES__GITHUB__COLLECT_ENTERPRISE_SCIM=true`, a token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
|
|
@@ -27,7 +27,7 @@ class AccountConfig(BaseModel):
|
|
|
27
27
|
|
|
28
28
|
class InstallationResponse(BaseModel):
|
|
29
29
|
id: int
|
|
30
|
-
client_id: str
|
|
30
|
+
client_id: str | None = None
|
|
31
31
|
account: AccountConfig
|
|
32
32
|
target_type: str
|
|
33
33
|
app_id: int | None = None
|
|
@@ -39,15 +39,32 @@ class TokenResponse(BaseModel):
|
|
|
39
39
|
expires_at: datetime
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
def resolve_github_app_jwt_issuer(
|
|
43
|
+
*, client_id: str | None, app_id: str | int | None
|
|
44
|
+
) -> str:
|
|
45
|
+
"""Select the configured identifier for GitHub App JWT authentication."""
|
|
46
|
+
normalized_client_id = str(client_id).strip() if client_id is not None else ""
|
|
47
|
+
if normalized_client_id:
|
|
48
|
+
return normalized_client_id
|
|
49
|
+
|
|
50
|
+
normalized_app_id = str(app_id).strip() if app_id is not None else ""
|
|
51
|
+
if normalized_app_id:
|
|
52
|
+
return normalized_app_id
|
|
53
|
+
|
|
54
|
+
raise ValueError(
|
|
55
|
+
"GitHub App credentials require either client_id or app_id for the JWT issuer"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
|
|
42
59
|
class GithubSession:
|
|
43
60
|
def __init__(
|
|
44
61
|
self,
|
|
45
|
-
|
|
62
|
+
jwt_issuer: str,
|
|
46
63
|
private_key_path: str,
|
|
47
64
|
api_uri: str = "https://api.github.com/",
|
|
48
65
|
):
|
|
49
66
|
self.api_uri = api_uri
|
|
50
|
-
self.
|
|
67
|
+
self.jwt_issuer = jwt_issuer
|
|
51
68
|
self.private_key_path = private_key_path
|
|
52
69
|
self.client = RESTClient(
|
|
53
70
|
base_url=self.api_uri,
|
|
@@ -59,9 +76,11 @@ class GithubSession:
|
|
|
59
76
|
now_utc = datetime.now(timezone.utc).timestamp()
|
|
60
77
|
header = {"alg": "RS256", "typ": "JWT"}
|
|
61
78
|
claims = {
|
|
62
|
-
"iss": self.
|
|
79
|
+
"iss": self.jwt_issuer,
|
|
63
80
|
"iat": int(now_utc - 10), # Issued 10 seconds in the past
|
|
64
|
-
"exp": int(
|
|
81
|
+
"exp": int(
|
|
82
|
+
now_utc + 540
|
|
83
|
+
), # Expires in 9 minutes (GitHub max is 10, leaving room for clock drift)
|
|
65
84
|
}
|
|
66
85
|
|
|
67
86
|
try:
|
|
@@ -86,12 +105,12 @@ class GithubInstallation(GithubSession):
|
|
|
86
105
|
def __init__(
|
|
87
106
|
self,
|
|
88
107
|
installation_id: str,
|
|
89
|
-
|
|
108
|
+
jwt_issuer: str,
|
|
90
109
|
private_key_path: str,
|
|
91
110
|
api_uri: str = "https://api.github.com/",
|
|
92
111
|
):
|
|
93
112
|
self.installation_id = installation_id
|
|
94
|
-
super().__init__(
|
|
113
|
+
super().__init__(jwt_issuer, private_key_path, api_uri)
|
|
95
114
|
|
|
96
115
|
@property
|
|
97
116
|
def token(self) -> TokenResponse:
|
|
@@ -108,14 +127,11 @@ class GithubInstallation(GithubSession):
|
|
|
108
127
|
class GithubApp(GithubSession):
|
|
109
128
|
def __init__(
|
|
110
129
|
self,
|
|
111
|
-
|
|
130
|
+
jwt_issuer: str,
|
|
112
131
|
private_key_path: str,
|
|
113
132
|
api_uri: str = "https://api.github.com/",
|
|
114
133
|
):
|
|
115
|
-
|
|
116
|
-
self.private_key_path = private_key_path
|
|
117
|
-
self.api_uri = api_uri
|
|
118
|
-
super().__init__(client_id, private_key_path, api_uri)
|
|
134
|
+
super().__init__(jwt_issuer, private_key_path, api_uri)
|
|
119
135
|
|
|
120
136
|
@property
|
|
121
137
|
def installations(self) -> Iterator[InstallationResponse]:
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/src/openhound_github/resources/organization.py
RENAMED
|
@@ -4,6 +4,7 @@ from dataclasses import dataclass, field
|
|
|
4
4
|
from datetime import datetime
|
|
5
5
|
from threading import Lock
|
|
6
6
|
from typing import Any, Iterator
|
|
7
|
+
from urllib.parse import quote
|
|
7
8
|
|
|
8
9
|
from dlt.sources.helpers import requests
|
|
9
10
|
from dlt.sources.helpers.rest_client.client import RESTClient
|
|
@@ -131,6 +132,10 @@ def _client_for_org(ctx: SourceContext, org_login: str) -> RESTClient:
|
|
|
131
132
|
return ctx.client
|
|
132
133
|
|
|
133
134
|
|
|
135
|
+
def _encode_path_segment(value: str) -> str:
|
|
136
|
+
return quote(value, safe="")
|
|
137
|
+
|
|
138
|
+
|
|
134
139
|
def _repository_roles(ctx: SourceContext) -> list[dict[str, Any]]:
|
|
135
140
|
roles: list[dict[str, Any]] = []
|
|
136
141
|
for org in ctx.organizations:
|
|
@@ -1297,6 +1302,7 @@ def environment_variables(environment: Environment, ctx: SourceContext):
|
|
|
1297
1302
|
EnvironmentVariable (EnvironmentVariable): Environment variable record.
|
|
1298
1303
|
"""
|
|
1299
1304
|
env_name = environment.name
|
|
1305
|
+
encoded_env_name = _encode_path_segment(env_name)
|
|
1300
1306
|
env_node_id = environment.node_id
|
|
1301
1307
|
|
|
1302
1308
|
full_repo_name = environment.repository_full_name
|
|
@@ -1305,7 +1311,7 @@ def environment_variables(environment: Environment, ctx: SourceContext):
|
|
|
1305
1311
|
|
|
1306
1312
|
client = _client_for_org(ctx, environment.org_login)
|
|
1307
1313
|
for page in client.paginate(
|
|
1308
|
-
f"/repos/{full_repo_name}/environments/{
|
|
1314
|
+
f"/repos/{full_repo_name}/environments/{encoded_env_name}/variables"
|
|
1309
1315
|
):
|
|
1310
1316
|
for item in page:
|
|
1311
1317
|
yield {
|
|
@@ -1341,10 +1347,11 @@ def environment_branch_policies(environment: Environment, ctx: SourceContext):
|
|
|
1341
1347
|
repo_name = environment.repository_name
|
|
1342
1348
|
repo_node_id = environment.repository_node_id
|
|
1343
1349
|
env_name = environment.name
|
|
1350
|
+
encoded_env_name = _encode_path_segment(env_name)
|
|
1344
1351
|
env_node_id = environment.node_id
|
|
1345
1352
|
client = _client_for_org(ctx, environment.org_login)
|
|
1346
1353
|
for page in client.paginate(
|
|
1347
|
-
f"/repos/{full_repo_name}/environments/{
|
|
1354
|
+
f"/repos/{full_repo_name}/environments/{encoded_env_name}/deployment-branch-policies"
|
|
1348
1355
|
):
|
|
1349
1356
|
for policy in page:
|
|
1350
1357
|
yield {
|
|
@@ -1377,10 +1384,11 @@ def environment_secrets(environment: Environment, ctx: SourceContext):
|
|
|
1377
1384
|
full_repo_name = environment.repository_full_name
|
|
1378
1385
|
|
|
1379
1386
|
env_name = environment.name
|
|
1387
|
+
encoded_env_name = _encode_path_segment(env_name)
|
|
1380
1388
|
env_node_id = environment.node_id
|
|
1381
1389
|
client = _client_for_org(ctx, environment.org_login)
|
|
1382
1390
|
for page in client.paginate(
|
|
1383
|
-
f"/repos/{full_repo_name}/environments/{
|
|
1391
|
+
f"/repos/{full_repo_name}/environments/{encoded_env_name}/secrets"
|
|
1384
1392
|
):
|
|
1385
1393
|
for secret in page:
|
|
1386
1394
|
yield {
|
|
@@ -18,6 +18,7 @@ from openhound_github.auth import (
|
|
|
18
18
|
GithubApp,
|
|
19
19
|
GitHubAppInstallationAuth,
|
|
20
20
|
GithubInstallation,
|
|
21
|
+
resolve_github_app_jwt_issuer,
|
|
21
22
|
)
|
|
22
23
|
from openhound_github.helpers import github_retry_policy
|
|
23
24
|
from openhound_github.main import app
|
|
@@ -75,8 +76,8 @@ class GithubCredentials(CredentialsConfiguration):
|
|
|
75
76
|
|
|
76
77
|
@configspec
|
|
77
78
|
class GithubEnterpriseAppCredentials(CredentialsConfiguration):
|
|
78
|
-
client_id: str = None
|
|
79
|
-
app_id: str = None
|
|
79
|
+
client_id: str | None = None
|
|
80
|
+
app_id: str | None = None
|
|
80
81
|
key_path: str = None
|
|
81
82
|
enterprise_name: str = None
|
|
82
83
|
pat_token: str | None = None
|
|
@@ -151,6 +152,10 @@ def source(
|
|
|
151
152
|
return client(BearerTokenAuth(token=token))
|
|
152
153
|
|
|
153
154
|
if credentials.auth == "enterprise_app":
|
|
155
|
+
jwt_issuer = resolve_github_app_jwt_issuer(
|
|
156
|
+
client_id=credentials.client_id,
|
|
157
|
+
app_id=credentials.app_id,
|
|
158
|
+
)
|
|
154
159
|
ctx = SourceContext(
|
|
155
160
|
enterprise_name=credentials.enterprise_name,
|
|
156
161
|
collect_enterprise_scim=bool(collect_enterprise_scim),
|
|
@@ -165,14 +170,14 @@ def source(
|
|
|
165
170
|
elif credentials.pat_token:
|
|
166
171
|
ctx.scim_client = ctx.sso_client
|
|
167
172
|
github_app_session = GithubApp(
|
|
168
|
-
|
|
173
|
+
jwt_issuer=jwt_issuer,
|
|
169
174
|
private_key_path=credentials.key_path,
|
|
170
175
|
)
|
|
171
176
|
for installation in github_app_session.installations:
|
|
172
177
|
if installation.target_type == "Organization":
|
|
173
178
|
org_installation = GithubInstallation(
|
|
174
179
|
installation_id=installation.id,
|
|
175
|
-
|
|
180
|
+
jwt_issuer=jwt_issuer,
|
|
176
181
|
private_key_path=credentials.key_path,
|
|
177
182
|
)
|
|
178
183
|
ctx.organizations.append(
|
|
@@ -189,7 +194,7 @@ def source(
|
|
|
189
194
|
if installation.target_type == "Enterprise":
|
|
190
195
|
es_installation = GithubInstallation(
|
|
191
196
|
installation_id=installation.id,
|
|
192
|
-
|
|
197
|
+
jwt_issuer=jwt_issuer,
|
|
193
198
|
private_key_path=credentials.key_path,
|
|
194
199
|
)
|
|
195
200
|
ctx.client = client(
|
|
@@ -206,7 +211,7 @@ def source(
|
|
|
206
211
|
)
|
|
207
212
|
org_installation = GithubInstallation(
|
|
208
213
|
installation_id=credentials.install_id,
|
|
209
|
-
|
|
214
|
+
jwt_issuer=credentials.client_id,
|
|
210
215
|
private_key_path=credentials.key_path,
|
|
211
216
|
)
|
|
212
217
|
ctx.organizations.append(
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import importlib
|
|
4
|
+
from types import SimpleNamespace
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
from dlt.common.configuration.resolve import resolve_configuration
|
|
8
|
+
|
|
9
|
+
from openhound_github import auth
|
|
10
|
+
from openhound_github.auth import (
|
|
11
|
+
AccountConfig,
|
|
12
|
+
GithubSession,
|
|
13
|
+
InstallationResponse,
|
|
14
|
+
resolve_github_app_jwt_issuer,
|
|
15
|
+
)
|
|
16
|
+
from openhound_github.source import GithubEnterpriseAppCredentials
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.mark.parametrize(
|
|
20
|
+
("client_id", "app_id", "expected"),
|
|
21
|
+
(
|
|
22
|
+
("Iv1.client-id", None, "Iv1.client-id"),
|
|
23
|
+
(None, "123456", "123456"),
|
|
24
|
+
("Iv1.preferred", "123456", "Iv1.preferred"),
|
|
25
|
+
(" Iv1.trimmed ", "123456", "Iv1.trimmed"),
|
|
26
|
+
),
|
|
27
|
+
)
|
|
28
|
+
def test_resolve_github_app_jwt_issuer_prefers_client_id(
|
|
29
|
+
client_id: str | None,
|
|
30
|
+
app_id: str | None,
|
|
31
|
+
expected: str,
|
|
32
|
+
) -> None:
|
|
33
|
+
assert resolve_github_app_jwt_issuer(client_id=client_id, app_id=app_id) == expected
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_resolve_github_app_jwt_issuer_requires_an_identifier() -> None:
|
|
37
|
+
with pytest.raises(
|
|
38
|
+
ValueError,
|
|
39
|
+
match="require either client_id or app_id for the JWT issuer",
|
|
40
|
+
):
|
|
41
|
+
resolve_github_app_jwt_issuer(client_id=None, app_id=None)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@pytest.mark.parametrize(
|
|
45
|
+
("client_id", "app_id"),
|
|
46
|
+
(("Iv1.client-id", None), (None, "123456")),
|
|
47
|
+
)
|
|
48
|
+
def test_enterprise_app_configuration_accepts_either_identifier(
|
|
49
|
+
client_id: str | None,
|
|
50
|
+
app_id: str | None,
|
|
51
|
+
) -> None:
|
|
52
|
+
credentials = resolve_configuration(
|
|
53
|
+
GithubEnterpriseAppCredentials(
|
|
54
|
+
client_id=client_id,
|
|
55
|
+
app_id=app_id,
|
|
56
|
+
key_path="/tmp/github-app.pem",
|
|
57
|
+
enterprise_name="example-enterprise",
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
assert credentials.is_partial() is False
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def test_github_session_uses_explicit_jwt_issuer(
|
|
65
|
+
monkeypatch: pytest.MonkeyPatch, tmp_path
|
|
66
|
+
) -> None:
|
|
67
|
+
key_path = tmp_path / "github-app.pem"
|
|
68
|
+
key_path.write_text("test-private-key", encoding="utf-8")
|
|
69
|
+
captured_claims: dict[str, object] = {}
|
|
70
|
+
|
|
71
|
+
monkeypatch.setattr(auth.RSAKey, "import_key", lambda _: object())
|
|
72
|
+
|
|
73
|
+
def fake_encode(header, claims, key):
|
|
74
|
+
captured_claims.update(claims)
|
|
75
|
+
return "encoded-jwt"
|
|
76
|
+
|
|
77
|
+
monkeypatch.setattr(auth.jwt, "encode", fake_encode)
|
|
78
|
+
|
|
79
|
+
session = GithubSession(
|
|
80
|
+
jwt_issuer="123456",
|
|
81
|
+
private_key_path=str(key_path),
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
assert session.jwt == "encoded-jwt"
|
|
85
|
+
assert captured_claims["iss"] == "123456"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def test_legacy_installation_response_does_not_require_client_id() -> None:
|
|
89
|
+
installation = InstallationResponse(
|
|
90
|
+
id=42,
|
|
91
|
+
account=AccountConfig(id=7, login="example-org"),
|
|
92
|
+
target_type="Organization",
|
|
93
|
+
app_id=123456,
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
assert installation.client_id is None
|
|
97
|
+
assert installation.app_id == 123456
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def test_enterprise_source_reuses_selected_issuer_for_installation_tokens(
|
|
101
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
102
|
+
) -> None:
|
|
103
|
+
source_module = importlib.import_module("openhound_github.source")
|
|
104
|
+
captured_issuers: list[str] = []
|
|
105
|
+
|
|
106
|
+
class FakeGithubApp:
|
|
107
|
+
def __init__(self, jwt_issuer: str, private_key_path: str) -> None:
|
|
108
|
+
captured_issuers.append(jwt_issuer)
|
|
109
|
+
self.installations = (
|
|
110
|
+
SimpleNamespace(
|
|
111
|
+
id=11,
|
|
112
|
+
target_type="Organization",
|
|
113
|
+
account=SimpleNamespace(login="example-org"),
|
|
114
|
+
),
|
|
115
|
+
SimpleNamespace(
|
|
116
|
+
id=12,
|
|
117
|
+
target_type="Enterprise",
|
|
118
|
+
account=SimpleNamespace(slug="example-enterprise"),
|
|
119
|
+
),
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
class FakeGithubInstallation:
|
|
123
|
+
def __init__(
|
|
124
|
+
self,
|
|
125
|
+
installation_id: int,
|
|
126
|
+
jwt_issuer: str,
|
|
127
|
+
private_key_path: str,
|
|
128
|
+
) -> None:
|
|
129
|
+
captured_issuers.append(jwt_issuer)
|
|
130
|
+
|
|
131
|
+
class FakeRESTClient:
|
|
132
|
+
def __init__(self, **kwargs) -> None:
|
|
133
|
+
pass
|
|
134
|
+
|
|
135
|
+
monkeypatch.setattr(source_module, "GithubApp", FakeGithubApp)
|
|
136
|
+
monkeypatch.setattr(source_module, "GithubInstallation", FakeGithubInstallation)
|
|
137
|
+
monkeypatch.setattr(
|
|
138
|
+
source_module, "GitHubAppInstallationAuth", lambda **_: object()
|
|
139
|
+
)
|
|
140
|
+
monkeypatch.setattr(source_module, "RESTClient", FakeRESTClient)
|
|
141
|
+
monkeypatch.setattr(source_module, "enterprise_resources", lambda _: ())
|
|
142
|
+
monkeypatch.setattr(source_module, "organization_resources", lambda _: ())
|
|
143
|
+
|
|
144
|
+
resources = source_module.source.__wrapped__(
|
|
145
|
+
credentials=GithubEnterpriseAppCredentials(
|
|
146
|
+
app_id="123456",
|
|
147
|
+
key_path="/tmp/github-app.pem",
|
|
148
|
+
enterprise_name="example-enterprise",
|
|
149
|
+
),
|
|
150
|
+
host="https://api.github.com",
|
|
151
|
+
collect_enterprise_scim=False,
|
|
152
|
+
emit_legacy_scim_correlations=False,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
assert resources == ()
|
|
156
|
+
assert captured_issuers == ["123456", "123456", "123456"]
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from types import SimpleNamespace
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from openhound_github.resources.organization import (
|
|
6
|
+
OrgContext,
|
|
7
|
+
SourceContext,
|
|
8
|
+
environment_branch_policies,
|
|
9
|
+
environment_secrets,
|
|
10
|
+
environment_variables,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class _FakeClient:
|
|
15
|
+
def __init__(self):
|
|
16
|
+
self.paginate_calls: list[tuple[str, dict]] = []
|
|
17
|
+
|
|
18
|
+
def paginate(self, path: str, **kwargs):
|
|
19
|
+
self.paginate_calls.append((path, kwargs))
|
|
20
|
+
return iter([])
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _ctx(client: _FakeClient) -> SourceContext:
|
|
24
|
+
return SourceContext(
|
|
25
|
+
client=client,
|
|
26
|
+
organizations=[OrgContext(client=client, org_name="acme")],
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _environment(name: str) -> SimpleNamespace:
|
|
31
|
+
return SimpleNamespace(
|
|
32
|
+
name=name,
|
|
33
|
+
node_id="ENV_1",
|
|
34
|
+
org_login="acme",
|
|
35
|
+
repository_name="repo",
|
|
36
|
+
repository_full_name="acme/repo",
|
|
37
|
+
repository_node_id="REPO_1",
|
|
38
|
+
has_custom_branch_policies=True,
|
|
39
|
+
required_reviewers=False,
|
|
40
|
+
prevent_self_review=False,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@pytest.mark.parametrize(
|
|
45
|
+
("transformer", "suffix"),
|
|
46
|
+
[
|
|
47
|
+
(environment_variables, "variables"),
|
|
48
|
+
(environment_secrets, "secrets"),
|
|
49
|
+
(environment_branch_policies, "deployment-branch-policies"),
|
|
50
|
+
],
|
|
51
|
+
)
|
|
52
|
+
@pytest.mark.parametrize(
|
|
53
|
+
("environment_name", "encoded_name"),
|
|
54
|
+
[
|
|
55
|
+
("feature/test", "feature%2Ftest"),
|
|
56
|
+
("QA Environment", "QA%20Environment"),
|
|
57
|
+
(
|
|
58
|
+
"PCF_PROD_Deployment / deploy-PROD",
|
|
59
|
+
"PCF_PROD_Deployment%20%2F%20deploy-PROD",
|
|
60
|
+
),
|
|
61
|
+
],
|
|
62
|
+
)
|
|
63
|
+
def test_environment_child_resources_encode_environment_names_in_paths(
|
|
64
|
+
transformer, suffix: str, environment_name: str, encoded_name: str
|
|
65
|
+
) -> None:
|
|
66
|
+
client = _FakeClient()
|
|
67
|
+
|
|
68
|
+
rows = list(transformer.__wrapped__(_environment(environment_name), _ctx(client)))
|
|
69
|
+
|
|
70
|
+
assert rows == []
|
|
71
|
+
assert client.paginate_calls == [
|
|
72
|
+
(f"/repos/acme/repo/environments/{encoded_name}/{suffix}", {})
|
|
73
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_ApprovesDeploymentTo.md
RENAMED
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_BypassBranchProtection.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanAssumeIdentity.md
RENAMED
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanCreateEnvironment.md
RENAMED
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanDeployToEnvironment.md
RENAMED
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanEditEnvironment.md
RENAMED
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CanEditProtection.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateDiscussionCategory.md
RENAMED
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteAlertsCodeScanning.md
RENAMED
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_DeleteDiscussionComment.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditCategoryOnDiscussion.md
RENAMED
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditDiscussionCategory.md
RENAMED
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditDiscussionComment.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhound_github-0.5.0 → openhound_github-0.5.2}/descriptions/edges/GH_EditRepoProtections.md
RENAMED
|
File without changes
|