openhound-github 0.10.1__tar.gz → 0.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openhound_github-0.10.1 → openhound_github-0.12.0}/PKG-INFO +1 -1
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_AppInstallation.md +4 -2
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Enterprise.md +2 -1
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRunner.md +0 -3
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Environment.md +0 -1
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentSecret.md +1 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRunner.md +0 -3
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgSecret.md +1 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Organization.md +2 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_PersonalAccessToken.md +6 -4
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +5 -1
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoRunner.md +0 -3
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoSecret.md +1 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Repository.md +6 -2
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Runner.md +3 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_WorkflowJob.md +24 -24
- openhound_github-0.12.0/extension/privilege_zone_rules/t0-app-installations-all-repos.json +8 -0
- openhound_github-0.12.0/extension/privilege_zone_rules/t0-apps-all-repos.json +8 -0
- openhound_github-0.12.0/extension/privilege_zone_rules/t0-pats-all-repos.json +8 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/scripts/generate_gh_description_docs.py +6 -1
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/graphql.py +4 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/lookup.py +30 -4
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/app_installation.py +4 -3
- openhound_github-0.12.0/src/openhound_github/models/permissions.py +18 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token.py +10 -14
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token_request.py +13 -1
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository.py +10 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow.py +1 -16
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow_job.py +7 -2
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/resources/organization.py +24 -8
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/transforms.py +7 -1
- openhound_github-0.12.0/tests/test_credential_permission_models.py +112 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_environment_resources.py +36 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_repository_rulesets.py +43 -2
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_runner_models.py +15 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_workflow_model.py +29 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_workflow_resources.py +59 -0
- openhound_github-0.10.1/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -8
- openhound_github-0.10.1/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -8
- openhound_github-0.10.1/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -8
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/CONTRIBUTING.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GOVERNANCE.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-COC-Header.png +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-CONTRIB-Header.png +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-GOV-Header.png +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-Header.png +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-LIC-Header.png +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/GitHub-SEC-Header.png +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SECURITY.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-Dark.svg +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-FOSS-Dark.svg +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-FOSS-Light.svg +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/SO-Light.svg +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/workflows/publish.yml +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/workflows/release-on-merge.yml +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.github/workflows/validate-branch.yml +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.gitignore +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.gitmodules +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/.pre-commit-config.yaml +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/LICENSE.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/README.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddAssignee.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddCollaborator.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddLabel.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AddMember.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AdminTo.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_AssignedTo.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CallsWorkflow.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanAccess.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanAccessSecret.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateBranch.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateInternalRepositories.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreatePrivateRepositories.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreatePublicRepositories.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateRepositories.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanEditProtection.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanInterceptJob.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanPwnRequest.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanReadSecret.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanRequestOIDCTokenFor.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanUseRunner.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CanWriteBranch.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CloseDiscussion.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CloseIssue.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ClosePullRequest.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_Contains.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateEnterpriseOrganizations.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateRepository.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateTag.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_CreateTeam.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteIssue.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeleteTag.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DependsOn.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_DeploysTo.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditEnterpriseCustomPropertiesForOrganizations.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_EditRepoProtections.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasBaseRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasMember.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasRunner.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasSecret.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_HasVariable.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_InheritedFrom.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_InstalledAs.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_InviteMember.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_IsEligibleFor.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseAdmins.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseIdentityProvider.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseMembers.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseOrganizationAdmins.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseOrganizations.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseReferrals.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageEnterpriseTeams.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageTopics.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ManageWebhooks.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MapsToUser.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_MemberOf.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_Owns.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ProtectedBy.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseAuditLog.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseDomainVerification.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseMembers.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseOrgProjects.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadEnterpriseOrganizationAdmin.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReadRepoContents.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RemoveAssignee.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RemoveLabel.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenIssue.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RequestPrReview.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RunOrgMigration.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_RunsOn.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetEnterpriseInteractionLimits.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetIssueType.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetMilestone.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SetSocialPreview.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_SyncedTo.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_TransferRepository.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_UsesSecret.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_UsesVariable.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ValidToken.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseActionsUsageMetrics.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseBilling.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewEnterpriseSecretScanningAlerts.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseActionsPolicies.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseBilling.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterprisePersonalAccessTokenPolicies.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseSso.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteEnterpriseTeamMembers.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteRepoContents.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_App.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Branch.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseManagedUser.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseTeam.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_OrgVariable.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RepoVariable.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_RunnerGroup.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Secret.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Team.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_TeamRole.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_User.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Variable.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_Workflow.md +1 -1
- {openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_WorkflowStep.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/docs/og-docs.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-enterprise-owners-role.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-organizations.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/README.md +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/active-leaked-secrets.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/all-actions-allowed.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/app-installations-all-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-self-approval.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/bypass-pr-requirements.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dangerous-branch-perms.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/default-repository-permissions.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/environments-admin-bypass.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/expired-pats.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/external-identities-without-scim.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/github-to-azure-identity.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/global-repo-perms.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/hybrid-identities.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-create-pages.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-create-public-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-delete-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/org-owners.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/orgs-without-2fa.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/pats-all-repo-access.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/pending-pat-requests.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/public-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/push-to-protected-branches.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/repository-workflows.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/saml-configuration.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/secret-scanning-alerts.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/self-hosted-runners-can-intercept-broad-token-jobs.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/shared-self-hosted-runners-can-intercept-secret-bearing-jobs.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/team-membership-admin.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/team-structure.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/unprotected-branches.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/unprotected-default-branches.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-interceptable-by-self-hosted-runners.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-broad-token-write-permissions.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-id-token-write-on-self-hosted-runners.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-id-token-write.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/saved_searches/workflow-jobs-with-observed-oidc-auth-steps.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/extension/schema.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/justfile +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/pyproject.toml +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/main.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/__init__.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/auth.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/extension.yaml +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/github_rest_client.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/github_retry.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/graph.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/helpers.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/kinds/edges.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/kinds/nodes.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/main.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/__init__.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/actions_permission.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch_protection_rule.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/branch_push_allowance.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_admin.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_helpers.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_managed_user.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_member.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_organization.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role_team.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_role_user.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_member.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_organization.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_team_role.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/enterprise_user.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/env_secret.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/env_variable.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/environment.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/environment_branch_policy.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/external_identity.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_role.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_role_member.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_role_team.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_secret.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/org_variable.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/personal_access_token_access.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/projected_enterprise_team.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repo_role_assignment.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository_role.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository_secret.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository_variable.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/runner.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_helpers.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_issuer.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_provider.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/saml_service_provider.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/scim_user.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/secret_scanning_alert.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/team.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/team_member.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/team_role.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/user.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow_reference.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/workflow_step.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/resources/__init__.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/resources/enterprise.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/runner_ids.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/source.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_app_auth.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_branch_collection_gate.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_branch_protection_traversability.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/actions-permissions.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/actionsecrets.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/app.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/appinstalls.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/branch-policies.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/branch-prot-rules.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/branches.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/custom-roles.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/environments.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-pat-request.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-pat.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-role-teams.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-role-users.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org-roles.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/org.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/pat-repositories.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/repo-collaborators.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/repo-teams.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/repositories.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/scimusers.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/secrets.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/secretscanningalert.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/selected-org-secrets.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/variables.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_data/api/workflows.json +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_description_docs.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_enterprise_capabilities.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_enterprise_organization.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_enterprise_resources.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_environment_model.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_environment_reviewer_lookup.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_error_resilience.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_github_app_retry.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_github_rest_client.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_github_retry.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_helpers.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_lookup.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_org_scim_resources.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_org_secret_models.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_runner_ids.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_runner_resources.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_saml_helpers.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_saml_models.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_scim_models.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_source_endpoints.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_source_org_canonicalization.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_team_external_groups.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_variable_models.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/tests/test_workflow_interception_path.py +0 -0
- {openhound_github-0.10.1 → openhound_github-0.12.0}/uv.lock +0 -0
{openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_AppInstallation.md
RENAMED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## General Information
|
|
4
4
|
|
|
5
|
-
Represents a GitHub App installed on an organization. App installations have specific permissions and can be scoped to all repositories or a selection of repositories. The permissions granted to the
|
|
5
|
+
Represents a GitHub App installed on an organization. App installations have specific permissions and can be scoped to all repositories or a selection of repositories. The permissions granted to the installation are stored as `scope:access` values such as `contents:write` in the `permissions` property.
|
|
6
|
+
|
|
7
|
+
Unlike fine-grained personal access tokens, GitHub does not expose separate organization and repository permission buckets for app installations, so this property remains a single flat permission list.
|
|
6
8
|
|
|
7
9
|
Each installation is linked to its parent GH_App via a GH_InstalledAs edge. For installations with `repository_selection` set to `all`, GH_CanAccess edges are created to every repository in the organization. For installations with `repository_selection` set to `selected`, repository-level edges cannot be enumerated with a PAT (requires app installation token authentication).
|
|
8
10
|
|
|
@@ -24,7 +26,7 @@ Each installation is linked to its parent GH_App via a GH_InstalledAs edge. For
|
|
|
24
26
|
| `repositories_url` | `string` | API URL to list repositories accessible to this installation. |
|
|
25
27
|
| `repository_selection` | `string` | Whether the app has access to `all` repositories or `selected` repositories. |
|
|
26
28
|
| `target_type` | `string` | The target type of the installation (e.g., `Organization`). |
|
|
27
|
-
| `permissions` | `string` |
|
|
29
|
+
| `permissions` | `list[string]` | Permissions granted to the installation in `scope:access` form. |
|
|
28
30
|
| `events` | `string` | JSON string of the webhook events the app subscribes to. |
|
|
29
31
|
| `created_at` | `datetime` | When the app was installed. |
|
|
30
32
|
| `updated_at` | `datetime` | When the installation was last updated. |
|
|
@@ -23,8 +23,9 @@ A GitHub Enterprise account that contains organizations, enterprise teams, roles
|
|
|
23
23
|
| `created_at` | `string` | When the enterprise was created. |
|
|
24
24
|
| `updated_at` | `string` | When the enterprise was last updated. |
|
|
25
25
|
| `billing_email` | `string` | The enterprise billing email. |
|
|
26
|
-
| `security_contact_email` | `string` | The enterprise security contact email. |
|
|
27
26
|
| `viewer_is_admin` | `boolean` | Whether the authenticated viewer is an enterprise admin. |
|
|
27
|
+
| `github_deployment_type` | `string` | The GitHub deployment type, such as `ghec` or `ghes`. |
|
|
28
|
+
| `ghes_version` | `string` | The GitHub Enterprise Server version, when applicable. |
|
|
28
29
|
| `environment_name` | `string` | The enterprise environment name. |
|
|
29
30
|
| `query_organizations` | `string` | Query for contained organizations. |
|
|
30
31
|
|
{openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_EnterpriseRunner.md
RENAMED
|
@@ -44,9 +44,6 @@ When the runner is not explicitly marked ephemeral, GH_CanInterceptJob edges ide
|
|
|
44
44
|
graph LR
|
|
45
45
|
n0["GH_EnterpriseRunnerGroup"]
|
|
46
46
|
n1["GH_EnterpriseRunner"]
|
|
47
|
-
n2["GH_WorkflowJob"]
|
|
48
47
|
n0 -.->|GH_Contains| n1
|
|
49
48
|
n0 -->|GH_HasRunner| n1
|
|
50
|
-
n2 -.->|GH_RunsOn| n1
|
|
51
|
-
n1 -->|GH_CanInterceptJob| n2
|
|
52
49
|
```
|
|
@@ -44,9 +44,6 @@ When the runner is not explicitly marked ephemeral, GH_CanInterceptJob edges ide
|
|
|
44
44
|
graph LR
|
|
45
45
|
n0["GH_OrgRunnerGroup"]
|
|
46
46
|
n1["GH_OrgRunner"]
|
|
47
|
-
n2["GH_WorkflowJob"]
|
|
48
47
|
n0 -.->|GH_Contains| n1
|
|
49
48
|
n0 -->|GH_HasRunner| n1
|
|
50
|
-
n2 -.->|GH_RunsOn| n1
|
|
51
|
-
n1 -->|GH_CanInterceptJob| n2
|
|
52
49
|
```
|
|
@@ -72,6 +72,8 @@ Represents a GitHub organization. This is the root node of the graph and serves
|
|
|
72
72
|
| `self_hosted_runners_enabled_repositories` | `string` | Which repositories may use self-hosted runners: `all`, `selected`, or `none`. |
|
|
73
73
|
| `default_workflow_permissions` | `string` | The default workflow permissions property. |
|
|
74
74
|
| `can_approve_pull_request_reviews` | `boolean` | The can approve pull request reviews property. |
|
|
75
|
+
| `github_deployment_type` | `string` | The GitHub deployment type, such as `ghec` or `ghes`. |
|
|
76
|
+
| `ghes_version` | `string` | The GitHub Enterprise Server version, when applicable. |
|
|
75
77
|
| `query_organization_roles` | `string` | Query for organization roles. |
|
|
76
78
|
| `query_users` | `string` | Query for users. |
|
|
77
79
|
| `query_teams` | `string` | Query for teams. |
|
{openhound_github-0.10.1 → openhound_github-0.12.0}/descriptions/nodes/GH_PersonalAccessToken.md
RENAMED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## General Information
|
|
4
4
|
|
|
5
|
-
Represents a fine-grained personal access token that has been granted access to organization resources. PATs are linked to their owning user, the organization, and the repositories they can access.
|
|
5
|
+
Represents a fine-grained personal access token that has been granted access to organization resources. PATs are linked to their owning user, the organization, and the repositories they can access.
|
|
6
|
+
|
|
7
|
+
The granted permissions are stored separately as `organization_permissions` and `repository_permissions`. Each property is a list of `scope:access` values such as `members:read` or `contents:write`, matching the permission format used on GH_WorkflowJob nodes.
|
|
6
8
|
|
|
7
9
|
## Properties
|
|
8
10
|
|
|
@@ -18,9 +20,9 @@ Represents a fine-grained personal access token that has been granted access to
|
|
|
18
20
|
| `owner_node_id` | `string` | The GraphQL node ID of the token owner. |
|
|
19
21
|
| `token_expires_at` | `datetime` | The ISO 8601 timestamp of when the token expires. |
|
|
20
22
|
| `token_last_used_at` | `datetime` | The ISO 8601 timestamp of when the token was last used. |
|
|
21
|
-
| `access_granted_at` | `datetime` | The ISO 8601 timestamp of when the token was granted to the organization.
|
|
22
|
-
| `organization_permissions` | `string` |
|
|
23
|
-
| `repository_permissions` | `string` |
|
|
23
|
+
| `access_granted_at` | `datetime` | The ISO 8601 timestamp of when the token was granted to the organization. |
|
|
24
|
+
| `organization_permissions` | `list[string]` | Organization-scoped permissions in `scope:access` form. |
|
|
25
|
+
| `repository_permissions` | `list[string]` | Repository-scoped permissions in `scope:access` form. |
|
|
24
26
|
| `token_name` | `string` | The user-assigned display name of the token. |
|
|
25
27
|
| `owner_login` | `string` | The login handle of the user who owns the token. |
|
|
26
28
|
| `repository_selection` | `string` | Whether the token has access to `all`, `subset`, or `none` of the organization's repositories. |
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## General Information
|
|
4
4
|
|
|
5
|
-
Represents a pending request from an organization member to access organization resources with a fine-grained personal access token. PAT requests are linked to their owning user and the organization.
|
|
5
|
+
Represents a pending request from an organization member to access organization resources with a fine-grained personal access token. PAT requests are linked to their owning user and the organization.
|
|
6
|
+
|
|
7
|
+
The requested permissions are stored separately as `organization_permissions` and `repository_permissions`. Each property is a list of `scope:access` values such as `members:read` or `contents:write`, matching the permission format used on GH_WorkflowJob nodes.
|
|
6
8
|
|
|
7
9
|
## Properties
|
|
8
10
|
|
|
@@ -18,6 +20,8 @@ Represents a pending request from an organization member to access organization
|
|
|
18
20
|
| `repository_selection` | `string` | Whether the request targets `all`, `subset`, or `none` of the organization's repositories. |
|
|
19
21
|
| `reason` | `string` | The rationale provided by the requester for the access request. |
|
|
20
22
|
| `org_name` | `string` | The org name property. |
|
|
23
|
+
| `organization_permissions` | `list[string]` | Requested organization-scoped permissions in `scope:access` form. |
|
|
24
|
+
| `repository_permissions` | `list[string]` | Requested repository-scoped permissions in `scope:access` form. |
|
|
21
25
|
| `query_organization_permissions` | `string` | Query for organization permissions. |
|
|
22
26
|
| `query_user` | `string` | Query for user. |
|
|
23
27
|
| `query_repositories` | `string` | Query for repositories. |
|
|
@@ -44,9 +44,6 @@ When the runner is not explicitly marked ephemeral, GH_CanInterceptJob edges ide
|
|
|
44
44
|
graph LR
|
|
45
45
|
n0["GH_Repository"]
|
|
46
46
|
n1["GH_RepoRunner"]
|
|
47
|
-
n2["GH_WorkflowJob"]
|
|
48
47
|
n0 -.->|GH_CanUseRunner| n1
|
|
49
48
|
n0 -.->|GH_Contains| n1
|
|
50
|
-
n2 -.->|GH_RunsOn| n1
|
|
51
|
-
n1 -->|GH_CanInterceptJob| n2
|
|
52
49
|
```
|
|
@@ -6,6 +6,8 @@ Represents a GitHub repository within the organization. Repository nodes capture
|
|
|
6
6
|
|
|
7
7
|
For repositories with active workflows, the collector records the applicable default workflow permissions and whether workflows may approve pull request reviews. These properties preserve the repository-level policy input later used to derive effective GITHUB_TOKEN permissions for GH_WorkflowJob nodes.
|
|
8
8
|
|
|
9
|
+
The `branch_count` and `environment_count` properties preserve GitHub-reported totals from the repository GraphQL response. These values can be compared to collected GH_Branch and GH_Environment children to identify incomplete collection before relying on branch- or environment-dependent analysis.
|
|
10
|
+
|
|
9
11
|
## Properties
|
|
10
12
|
|
|
11
13
|
| Property | Type | Description |
|
|
@@ -39,11 +41,13 @@ For repositories with active workflows, the collector records the applicable def
|
|
|
39
41
|
| `environment_name` | `string` | The name of the environment (GitHub organization). |
|
|
40
42
|
| `actions_enabled` | `boolean` | Whether GitHub Actions is enabled for this repository. |
|
|
41
43
|
| `self_hosted_runners_enabled` | `boolean` | Whether the repository may use self-hosted runners. |
|
|
44
|
+
| `default_workflow_permissions` | `string` | The repository's applicable default GITHUB_TOKEN workflow permissions. |
|
|
45
|
+
| `can_approve_pull_request_reviews` | `boolean` | Whether workflows may approve pull request reviews. |
|
|
42
46
|
| `secret_scanning` | `string` | Status of secret scanning (e.g., `enabled`, `disabled`). |
|
|
43
47
|
| `branch_ruleset_count` | `integer` | Number of branch-targeted rulesets that apply to this repository. |
|
|
44
48
|
| `has_branch_rulesets` | `boolean` | Whether at least one branch-targeted ruleset applies to this repository. |
|
|
45
|
-
| `
|
|
46
|
-
| `
|
|
49
|
+
| `branch_count` | `integer` | Number of branch refs reported by GitHub for this repository. |
|
|
50
|
+
| `environment_count` | `integer` | Number of deployment environments reported by GitHub for this repository. |
|
|
47
51
|
| `query_branches` | `string` | Query for branches. |
|
|
48
52
|
| `query_protected_branches` | `string` | Query for protected branches. |
|
|
49
53
|
| `query_branch_protection_rules` | `string` | Query for branch protection rules. |
|
|
@@ -47,32 +47,32 @@ When `runs_on_is_dynamic` is true, runner matching and interception status remai
|
|
|
47
47
|
|
|
48
48
|
```mermaid
|
|
49
49
|
graph LR
|
|
50
|
-
n0["
|
|
50
|
+
n0["GH_Runner"]
|
|
51
51
|
n1["GH_WorkflowJob"]
|
|
52
|
-
n2["
|
|
53
|
-
n3["
|
|
54
|
-
n4["
|
|
55
|
-
n5["
|
|
56
|
-
n6["
|
|
57
|
-
n7["
|
|
58
|
-
n8["
|
|
59
|
-
n9["
|
|
52
|
+
n2["GH_Workflow"]
|
|
53
|
+
n3["GH_Environment"]
|
|
54
|
+
n4["GH_EnvironmentSecret"]
|
|
55
|
+
n5["GH_EnvironmentVariable"]
|
|
56
|
+
n6["GH_OrgSecret"]
|
|
57
|
+
n7["GH_OrgVariable"]
|
|
58
|
+
n8["GH_RepoSecret"]
|
|
59
|
+
n9["GH_RepoVariable"]
|
|
60
60
|
n10["GH_WorkflowStep"]
|
|
61
|
-
n0
|
|
62
|
-
|
|
63
|
-
n1
|
|
64
|
-
n1 -.->|
|
|
65
|
-
n1
|
|
66
|
-
n1 -.->|
|
|
67
|
-
n1 -.->|
|
|
68
|
-
n1
|
|
69
|
-
n1 -.->|
|
|
70
|
-
n1
|
|
71
|
-
n1 -->|GH_CanAccessSecret|
|
|
72
|
-
n1
|
|
73
|
-
n1
|
|
74
|
-
|
|
75
|
-
n1 -.->|GH_CallsWorkflow|
|
|
61
|
+
n0 -->|GH_CanInterceptJob| n1
|
|
62
|
+
n2 -.->|GH_Contains| n1
|
|
63
|
+
n1 -->|GH_CanRequestOIDCTokenFor| n3
|
|
64
|
+
n1 -.->|GH_DeploysTo| n3
|
|
65
|
+
n1 -->|GH_CanAccessSecret| n4
|
|
66
|
+
n1 -.->|GH_UsesSecret| n4
|
|
67
|
+
n1 -.->|GH_UsesVariable| n5
|
|
68
|
+
n1 -->|GH_CanAccessSecret| n6
|
|
69
|
+
n1 -.->|GH_UsesSecret| n6
|
|
70
|
+
n1 -.->|GH_UsesVariable| n7
|
|
71
|
+
n1 -->|GH_CanAccessSecret| n8
|
|
72
|
+
n1 -.->|GH_UsesSecret| n8
|
|
73
|
+
n1 -.->|GH_UsesVariable| n9
|
|
74
|
+
n1 -.->|GH_RunsOn| n0
|
|
75
|
+
n1 -.->|GH_CallsWorkflow| n2
|
|
76
76
|
n1 -.->|GH_DependsOn| n1
|
|
77
77
|
n1 -.->|GH_Contains| n10
|
|
78
78
|
```
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "GitHub: Tier Zero App Installations (All Repositories)",
|
|
3
|
+
"description": "GitHub App installations scoped to all repositories in the organization that have repository-control write permissions. A compromised app credential may grant code, workflow, Actions, or administrative control across every repository. Installations with only read or lower-impact write permissions are excluded.",
|
|
4
|
+
"cypher": "MATCH (n:GH_AppInstallation {repository_selection:'all'})\nWHERE ANY(permission IN n.permissions WHERE permission IN ['contents:write', 'administration:write', 'workflows:write', 'actions:write'])\nRETURN n",
|
|
5
|
+
"enabled": true,
|
|
6
|
+
"zone": "Tier Zero",
|
|
7
|
+
"allow_disable": true
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "GitHub: Tier Zero Apps (All-Repository Installations)",
|
|
3
|
+
"description": "GitHub App definitions whose installations have repository-control write permissions across all repositories. The app owner controls the private key that can generate tokens for any installation. Compromise of the app's private key may grant code, workflow, Actions, or administrative control across every repository in organizations where it is installed. Apps whose installations have only read or lower-impact write permissions are excluded.",
|
|
4
|
+
"cypher": "MATCH (n:GH_App)-[:GH_InstalledAs]->(i:GH_AppInstallation {repository_selection:'all'})\nWHERE ANY(permission IN i.permissions WHERE permission IN ['contents:write', 'administration:write', 'workflows:write', 'actions:write'])\nRETURN n",
|
|
5
|
+
"enabled": true,
|
|
6
|
+
"zone": "Tier Zero",
|
|
7
|
+
"allow_disable": true
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "GitHub: Tier Zero PATs (All Repositories)",
|
|
3
|
+
"description": "Fine-grained personal access tokens scoped to all repositories in the organization that have repository-control write permissions. A single compromised token may grant code, workflow, Actions, or administrative control across every repository. PATs with only read or lower-impact write permissions are excluded.",
|
|
4
|
+
"cypher": "MATCH (n:GH_PersonalAccessToken {repository_selection:'all'})\nWHERE ANY(permission IN n.repository_permissions WHERE permission IN ['contents:write', 'administration:write', 'workflows:write', 'actions:write'])\nRETURN n",
|
|
5
|
+
"enabled": true,
|
|
6
|
+
"zone": "Tier Zero",
|
|
7
|
+
"allow_disable": true
|
|
8
|
+
}
|
|
@@ -175,7 +175,12 @@ def extract_general_information(path: Path) -> str | None:
|
|
|
175
175
|
text = text[match.end() :].strip()
|
|
176
176
|
else:
|
|
177
177
|
text = re.sub(r"^# .+?\n+", "", text, count=1).strip()
|
|
178
|
-
text = re.split(
|
|
178
|
+
text = re.split(
|
|
179
|
+
r"^## (?:Properties|Edge Schema|Diagram)\s*$",
|
|
180
|
+
text,
|
|
181
|
+
maxsplit=1,
|
|
182
|
+
flags=re.MULTILINE,
|
|
183
|
+
)[0].strip()
|
|
179
184
|
text = re.sub(r"\n```mermaid\n.*?\n```\s*$", "", text, flags=re.DOTALL).strip()
|
|
180
185
|
return text or None
|
|
181
186
|
|
|
@@ -271,6 +271,7 @@ query RepoRefs($login: String!, $count: Int!, $after: String) {
|
|
|
271
271
|
totalCount
|
|
272
272
|
}
|
|
273
273
|
refs(first: 100, refPrefix: "refs/heads/") {
|
|
274
|
+
totalCount
|
|
274
275
|
nodes {
|
|
275
276
|
id
|
|
276
277
|
name
|
|
@@ -279,6 +280,9 @@ query RepoRefs($login: String!, $count: Int!, $after: String) {
|
|
|
279
280
|
}
|
|
280
281
|
pageInfo { endCursor hasNextPage }
|
|
281
282
|
}
|
|
283
|
+
environments(first: 1) {
|
|
284
|
+
totalCount
|
|
285
|
+
}
|
|
282
286
|
}
|
|
283
287
|
pageInfo { endCursor hasNextPage }
|
|
284
288
|
}
|
|
@@ -278,6 +278,16 @@ class GithubLookup(LookupManager):
|
|
|
278
278
|
if actions_enabled is not True:
|
|
279
279
|
return []
|
|
280
280
|
|
|
281
|
+
org_node_id = self.org_id_for_login(org_login)
|
|
282
|
+
if not org_node_id:
|
|
283
|
+
return [
|
|
284
|
+
(node_id, ephemeral)
|
|
285
|
+
for _source_order, node_id, ephemeral in sorted(
|
|
286
|
+
matching_runners,
|
|
287
|
+
key=lambda runner: (runner[0], runner[1]),
|
|
288
|
+
)
|
|
289
|
+
]
|
|
290
|
+
|
|
281
291
|
for (
|
|
282
292
|
runner_group_id,
|
|
283
293
|
runner_group_name,
|
|
@@ -320,9 +330,6 @@ class GithubLookup(LookupManager):
|
|
|
320
330
|
continue
|
|
321
331
|
|
|
322
332
|
if inherited:
|
|
323
|
-
org_node_id = self.org_id_for_login(org_login)
|
|
324
|
-
if not org_node_id:
|
|
325
|
-
continue
|
|
326
333
|
if (
|
|
327
334
|
self.enterprise_runner_group_restricted_to_workflows_for_inherited_org_group(
|
|
328
335
|
org_node_id, runner_group_name
|
|
@@ -370,7 +377,7 @@ class GithubLookup(LookupManager):
|
|
|
370
377
|
):
|
|
371
378
|
add_matching_runner(
|
|
372
379
|
1,
|
|
373
|
-
runner_node_id(
|
|
380
|
+
runner_node_id(org_node_id, int(runner_id)),
|
|
374
381
|
raw_labels,
|
|
375
382
|
ephemeral,
|
|
376
383
|
)
|
|
@@ -595,6 +602,25 @@ class GithubLookup(LookupManager):
|
|
|
595
602
|
return None
|
|
596
603
|
return int(row[0])
|
|
597
604
|
|
|
605
|
+
@lru_cache
|
|
606
|
+
def repository_graphql_counts(
|
|
607
|
+
self, repository_node_id: str
|
|
608
|
+
) -> tuple[int | None, int | None]:
|
|
609
|
+
row = self._find_single_row(
|
|
610
|
+
f"""
|
|
611
|
+
SELECT branch_count, environment_count
|
|
612
|
+
FROM {self.schema}.repositories_graphql
|
|
613
|
+
WHERE id = ?
|
|
614
|
+
""",
|
|
615
|
+
[repository_node_id],
|
|
616
|
+
)
|
|
617
|
+
if row is None:
|
|
618
|
+
return None, None
|
|
619
|
+
return (
|
|
620
|
+
None if row[0] is None else int(row[0]),
|
|
621
|
+
None if row[1] is None else int(row[1]),
|
|
622
|
+
)
|
|
623
|
+
|
|
598
624
|
@lru_cache
|
|
599
625
|
def repository_workflow_permissions(
|
|
600
626
|
self, repository_node_id: str
|
{openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/app_installation.py
RENAMED
|
@@ -12,6 +12,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
|
|
|
12
12
|
from openhound_github.kinds import edges as ek
|
|
13
13
|
from openhound_github.kinds import nodes as nk
|
|
14
14
|
from openhound_github.main import app
|
|
15
|
+
from openhound_github.models.permissions import normalize_permission_declaration
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
@dataclass
|
|
@@ -28,7 +29,7 @@ class GHAppInstallationProperties(GHNodeProperties):
|
|
|
28
29
|
repositories_url: API URL to list repositories accessible to this installation.
|
|
29
30
|
repository_selection: Whether the app has access to `all` repositories or `selected` repositories.
|
|
30
31
|
target_type: The target type of the installation (e.g., `Organization`).
|
|
31
|
-
permissions:
|
|
32
|
+
permissions: Permissions granted to the installation in `scope:access` form.
|
|
32
33
|
events: JSON string of the webhook events the app subscribes to.
|
|
33
34
|
created_at: When the app was installed.
|
|
34
35
|
updated_at: When the installation was last updated.
|
|
@@ -47,7 +48,7 @@ class GHAppInstallationProperties(GHNodeProperties):
|
|
|
47
48
|
repositories_url: str | None = None
|
|
48
49
|
repository_selection: str | None = None
|
|
49
50
|
target_type: str | None = None
|
|
50
|
-
permissions: str | None = None
|
|
51
|
+
permissions: list[str] | None = None
|
|
51
52
|
events: str | None = None
|
|
52
53
|
created_at: datetime | None = None
|
|
53
54
|
updated_at: datetime | None = None
|
|
@@ -141,7 +142,7 @@ class AppInstallation(BaseAsset):
|
|
|
141
142
|
repositories_url=self.repositories_url,
|
|
142
143
|
repository_selection=self.repository_selection,
|
|
143
144
|
target_type=self.target_type,
|
|
144
|
-
permissions=
|
|
145
|
+
permissions=normalize_permission_declaration(self.permissions),
|
|
145
146
|
events=json.dumps(self.events) if self.events else None,
|
|
146
147
|
created_at=self.created_at,
|
|
147
148
|
updated_at=self.updated_at,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def normalize_permission_declaration(value: Any) -> list[str] | None:
|
|
5
|
+
"""Normalize GitHub permission payloads into query-friendly scope:access values."""
|
|
6
|
+
if value is None:
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
if isinstance(value, str):
|
|
10
|
+
return [value]
|
|
11
|
+
|
|
12
|
+
if isinstance(value, list):
|
|
13
|
+
return [str(item) for item in value]
|
|
14
|
+
|
|
15
|
+
if isinstance(value, dict):
|
|
16
|
+
return [f"{key!s}:{item!s}" for key, item in value.items()]
|
|
17
|
+
|
|
18
|
+
return [str(value)]
|
|
@@ -2,7 +2,6 @@ from dataclasses import dataclass
|
|
|
2
2
|
from datetime import datetime
|
|
3
3
|
from typing import ClassVar
|
|
4
4
|
|
|
5
|
-
from dlt.common import json
|
|
6
5
|
from dlt.common.libs.pydantic import DltConfig
|
|
7
6
|
from openhound.core.asset import BaseAsset, EdgeDef, NodeDef
|
|
8
7
|
from openhound.core.models.entries_dataclass import Edge, EdgePath, EdgeProperties
|
|
@@ -12,6 +11,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
|
|
|
12
11
|
from openhound_github.kinds import edges as ek
|
|
13
12
|
from openhound_github.kinds import nodes as nk
|
|
14
13
|
from openhound_github.main import app
|
|
14
|
+
from openhound_github.models.permissions import normalize_permission_declaration
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class Permissions(BaseModel):
|
|
@@ -35,10 +35,10 @@ class GHPersonalAccessTokenProperties(GHNodeProperties):
|
|
|
35
35
|
owner_id: The GitHub ID of the token owner.
|
|
36
36
|
owner_node_id: The GraphQL node ID of the token owner.
|
|
37
37
|
token_expires_at: The ISO 8601 timestamp of when the token expires.
|
|
38
|
-
organization_permissions:
|
|
39
|
-
repository_permissions:
|
|
38
|
+
organization_permissions: Organization-scoped permissions in `scope:access` form.
|
|
39
|
+
repository_permissions: Repository-scoped permissions in `scope:access` form.
|
|
40
40
|
token_last_used_at: The ISO 8601 timestamp of when the token was last used.
|
|
41
|
-
access_granted_at: The ISO 8601 timestamp of when the token was granted to the organization.
|
|
41
|
+
access_granted_at: The ISO 8601 timestamp of when the token was granted to the organization.
|
|
42
42
|
token_name: The user-assigned display name of the token.
|
|
43
43
|
owner_login: The login handle of the user who owns the token.
|
|
44
44
|
repository_selection: Whether the token has access to `all`, `subset`, or `none` of the organization's repositories.
|
|
@@ -55,8 +55,8 @@ class GHPersonalAccessTokenProperties(GHNodeProperties):
|
|
|
55
55
|
token_expires_at: datetime | None = None
|
|
56
56
|
token_last_used_at: datetime | None = None
|
|
57
57
|
access_granted_at: datetime | None = None
|
|
58
|
-
organization_permissions: str | None = None
|
|
59
|
-
repository_permissions: str | None = None
|
|
58
|
+
organization_permissions: list[str] | None = None
|
|
59
|
+
repository_permissions: list[str] | None = None
|
|
60
60
|
token_name: str | None = None
|
|
61
61
|
owner_login: str | None = None
|
|
62
62
|
repository_selection: str | None = None
|
|
@@ -144,15 +144,11 @@ class PersonalAccessToken(BaseAsset):
|
|
|
144
144
|
environment_name=self.org_login,
|
|
145
145
|
token_expires_at=self.token_expires_at,
|
|
146
146
|
owner_id=self.owner.id if self.owner else None,
|
|
147
|
-
organization_permissions=(
|
|
148
|
-
|
|
149
|
-
if self.permissions and self.permissions.organization
|
|
150
|
-
else None
|
|
147
|
+
organization_permissions=normalize_permission_declaration(
|
|
148
|
+
self.permissions.organization if self.permissions else None
|
|
151
149
|
),
|
|
152
|
-
repository_permissions=(
|
|
153
|
-
|
|
154
|
-
if self.permissions and self.permissions.repository
|
|
155
|
-
else None
|
|
150
|
+
repository_permissions=normalize_permission_declaration(
|
|
151
|
+
self.permissions.repository if self.permissions else None
|
|
156
152
|
),
|
|
157
153
|
token_last_used_at=self.token_last_used_at,
|
|
158
154
|
query_organization_permissions=f"MATCH p=(:GH_PersonalAccessToken {{node_id:'{pid}'}})-[:GH_CanAccess]->(:GH_Organization) RETURN p",
|
|
@@ -9,6 +9,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
|
|
|
9
9
|
from openhound_github.kinds import edges as ek
|
|
10
10
|
from openhound_github.kinds import nodes as nk
|
|
11
11
|
from openhound_github.main import app
|
|
12
|
+
from openhound_github.models.permissions import normalize_permission_declaration
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class Owner(BaseModel):
|
|
@@ -29,19 +30,23 @@ class GHPersonalAccessTokenRequestProperties(GHNodeProperties):
|
|
|
29
30
|
repository_selection: Whether the request targets `all`, `subset`, or `none` of the organization's repositories.
|
|
30
31
|
reason: The rationale provided by the requester for the access request.
|
|
31
32
|
org_name: The org name property.
|
|
33
|
+
organization_permissions: Requested organization-scoped permissions in `scope:access` form.
|
|
34
|
+
repository_permissions: Requested repository-scoped permissions in `scope:access` form.
|
|
32
35
|
query_organization_permissions: Query for organization permissions.
|
|
33
36
|
query_user: Query for user.
|
|
34
37
|
query_repositories: Query for repositories.
|
|
35
38
|
"""
|
|
36
39
|
|
|
37
40
|
# TODO: Check for the following fields
|
|
38
|
-
# owner_id, owner_node_id, toke_id, token_expires_at, token_last_used_at,
|
|
41
|
+
# owner_id, owner_node_id, toke_id, token_expires_at, token_last_used_at, and environment_name
|
|
39
42
|
|
|
40
43
|
token_name: str | None = None
|
|
41
44
|
owner_login: str | None = None
|
|
42
45
|
repository_selection: str | None = None
|
|
43
46
|
reason: str | None = None
|
|
44
47
|
org_name: str | None = None
|
|
48
|
+
organization_permissions: list[str] | None = None
|
|
49
|
+
repository_permissions: list[str] | None = None
|
|
45
50
|
query_organization_permissions: str | None = None
|
|
46
51
|
query_user: str | None = None
|
|
47
52
|
query_repositories: str | None = None
|
|
@@ -102,6 +107,7 @@ class PersonalAccessTokenRequest(BaseAsset):
|
|
|
102
107
|
@property
|
|
103
108
|
def as_node(self) -> GHNode:
|
|
104
109
|
rid = self.node_id
|
|
110
|
+
permissions = self.permissions or {}
|
|
105
111
|
return GHNode(
|
|
106
112
|
kinds=[nk.PERSONAL_ACCESS_TOKEN_REQUEST],
|
|
107
113
|
properties=GHPersonalAccessTokenRequestProperties(
|
|
@@ -114,6 +120,12 @@ class PersonalAccessTokenRequest(BaseAsset):
|
|
|
114
120
|
repository_selection=self.repository_selection,
|
|
115
121
|
reason=self.reason,
|
|
116
122
|
org_name=self.org_login,
|
|
123
|
+
organization_permissions=normalize_permission_declaration(
|
|
124
|
+
permissions.get("organization")
|
|
125
|
+
),
|
|
126
|
+
repository_permissions=normalize_permission_declaration(
|
|
127
|
+
permissions.get("repository")
|
|
128
|
+
),
|
|
117
129
|
query_organization_permissions=f"MATCH p=(:GH_PersonalAccessTokenRequest {{node_id:'{rid}'}})-[:GH_CanAccess]->(:GH_Organization) RETURN p",
|
|
118
130
|
query_user=f"MATCH p=(:GH_User)-[:GH_HasPersonalAccessTokenRequest]->(:GH_PersonalAccessTokenRequest {{node_id:'{rid}'}}) RETURN p",
|
|
119
131
|
query_repositories=f"MATCH p=(:GH_PersonalAccessTokenRequest {{node_id:'{rid}'}})-[:GH_CanAccess]->(:GH_Repository) RETURN p LIMIT 1000",
|
{openhound_github-0.10.1 → openhound_github-0.12.0}/src/openhound_github/models/repository.py
RENAMED
|
@@ -46,6 +46,8 @@ class GHRepositoryProperties(GHNodeProperties):
|
|
|
46
46
|
secret_scanning: Status of secret scanning (e.g., `enabled`, `disabled`).
|
|
47
47
|
branch_ruleset_count: Number of branch-targeted rulesets that apply to this repository.
|
|
48
48
|
has_branch_rulesets: Whether at least one branch-targeted ruleset applies to this repository.
|
|
49
|
+
branch_count: Number of branch refs reported by GitHub for this repository.
|
|
50
|
+
environment_count: Number of deployment environments reported by GitHub for this repository.
|
|
49
51
|
query_branches: Query for branches.
|
|
50
52
|
query_protected_branches: Query for protected branches.
|
|
51
53
|
query_branch_protection_rules: Query for branch protection rules.
|
|
@@ -94,6 +96,8 @@ class GHRepositoryProperties(GHNodeProperties):
|
|
|
94
96
|
secret_scanning: str | None = None
|
|
95
97
|
branch_ruleset_count: int | None = None
|
|
96
98
|
has_branch_rulesets: bool | None = None
|
|
99
|
+
branch_count: int | None = None
|
|
100
|
+
environment_count: int | None = None
|
|
97
101
|
query_branches: str | None = None
|
|
98
102
|
query_protected_branches: str | None = None
|
|
99
103
|
query_branch_protection_rules: str | None = None
|
|
@@ -149,6 +153,7 @@ class Branch(BaseModel):
|
|
|
149
153
|
class Ref(BaseModel):
|
|
150
154
|
page_info: PageInfo = Field(alias="pageInfo")
|
|
151
155
|
nodes: list[Branch]
|
|
156
|
+
total_count: int | None = Field(alias="totalCount", default=None)
|
|
152
157
|
|
|
153
158
|
|
|
154
159
|
class RepositoryQL(BaseModel):
|
|
@@ -158,6 +163,8 @@ class RepositoryQL(BaseModel):
|
|
|
158
163
|
name: str
|
|
159
164
|
refs: Ref
|
|
160
165
|
branch_ruleset_count: int | None = None
|
|
166
|
+
branch_count: int | None = None
|
|
167
|
+
environment_count: int | None = None
|
|
161
168
|
|
|
162
169
|
# Additional
|
|
163
170
|
org_login: str
|
|
@@ -230,6 +237,7 @@ class Repository(BaseAsset):
|
|
|
230
237
|
def as_node(self) -> GHNode:
|
|
231
238
|
rid = self.node_id
|
|
232
239
|
branch_ruleset_count = self._lookup.repository_branch_ruleset_count(rid)
|
|
240
|
+
branch_count, environment_count = self._lookup.repository_graphql_counts(rid)
|
|
233
241
|
workflow_permissions = self._lookup.repository_workflow_permissions(rid)
|
|
234
242
|
default_workflow_permissions, can_approve_pull_request_reviews = (
|
|
235
243
|
workflow_permissions if workflow_permissions else (None, None)
|
|
@@ -272,6 +280,8 @@ class Repository(BaseAsset):
|
|
|
272
280
|
if branch_ruleset_count is not None
|
|
273
281
|
else None
|
|
274
282
|
),
|
|
283
|
+
branch_count=branch_count,
|
|
284
|
+
environment_count=environment_count,
|
|
275
285
|
# secret_scanning=self.secret_scanning,
|
|
276
286
|
query_branches=f"MATCH p=(:GH_Repository {{node_id: '{rid}'}})-[:GH_Contains]->(:GH_Branch) RETURN p",
|
|
277
287
|
query_protected_branches=f"MATCH p=(:GH_Repository {{node_id: '{rid}'}})-[:GH_Contains]->(:GH_Branch)<-[:GH_ProtectedBy]-(:GH_BranchProtectionRule) RETURN p",
|
|
@@ -24,6 +24,7 @@ from openhound_github.graph import GHNode, GHNodeProperties
|
|
|
24
24
|
from openhound_github.kinds import edges as ek
|
|
25
25
|
from openhound_github.kinds import nodes as nk
|
|
26
26
|
from openhound_github.main import app
|
|
27
|
+
from openhound_github.models.permissions import normalize_permission_declaration
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
class GithubActionsLoader(yaml.SafeLoader):
|
|
@@ -124,22 +125,6 @@ READ_ONLY_GITHUB_TOKEN_PERMISSION_SCOPES = {"models", "vulnerability-alerts"}
|
|
|
124
125
|
WRITE_ONLY_GITHUB_TOKEN_PERMISSION_SCOPES = {"id-token"}
|
|
125
126
|
|
|
126
127
|
|
|
127
|
-
def normalize_permission_declaration(value: Any) -> list[str] | None:
|
|
128
|
-
if value is None:
|
|
129
|
-
return None
|
|
130
|
-
|
|
131
|
-
if isinstance(value, str):
|
|
132
|
-
return [value]
|
|
133
|
-
|
|
134
|
-
if isinstance(value, list):
|
|
135
|
-
return [str(item) for item in value]
|
|
136
|
-
|
|
137
|
-
if isinstance(value, dict):
|
|
138
|
-
return [f"{key!s}:{item!s}" for key, item in value.items()]
|
|
139
|
-
|
|
140
|
-
return [str(value)]
|
|
141
|
-
|
|
142
|
-
|
|
143
128
|
def _empty_github_token_permissions() -> dict[str, str]:
|
|
144
129
|
return {scope: "none" for scope in GITHUB_TOKEN_PERMISSION_SCOPES}
|
|
145
130
|
|