RepoAuditor 0.2.49__tar.gz → 0.2.51__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. {repoauditor-0.2.49 → repoauditor-0.2.51}/.gitignore +1 -0
  2. {repoauditor-0.2.49 → repoauditor-0.2.51}/DEVELOPMENT.md +1 -0
  3. {repoauditor-0.2.49 → repoauditor-0.2.51}/PKG-INFO +1 -1
  4. {repoauditor-0.2.49 → repoauditor-0.2.51}/default_config.yaml +1 -2
  5. {repoauditor-0.2.49 → repoauditor-0.2.51}/pyproject.toml +0 -1
  6. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRequirementImpl.py +9 -0
  7. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub}/Impl/EnableRulesetRequirementImpl.py +1 -1
  8. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/Module.py +2 -0
  9. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub}/RulesetQuery.py +3 -3
  10. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets/Requirements → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub/RulesetRequirements}/RequirePullRequests.py +1 -1
  11. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets/Requirements → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub/RulesetRequirements}/RequireSignedCommits.py +1 -1
  12. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets/Requirements → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub/RulesetRequirements}/RequireStatusChecks.py +1 -1
  13. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubBase/Module.py +1 -1
  14. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/__init__.py +1 -1
  15. repoauditor-0.2.51/tests/Plugins/GitHubEnterprise_EndToEndTest.py +378 -0
  16. {repoauditor-0.2.49/tests/Plugins/GitHubRulesets → repoauditor-0.2.51/tests/Plugins/GitHubModule}/EnableRulesetRequirementImpl_UnitTest.py +1 -1
  17. repoauditor-0.2.49/tests/Plugins/GitHubRulesets/GitHubRuleset_UnitTest.py → repoauditor-0.2.51/tests/Plugins/GitHubModule/RulesetRequirements_UnitTest.py +3 -3
  18. {repoauditor-0.2.49/tests/Plugins/GitHubRulesets → repoauditor-0.2.51/tests/Plugins/GitHubModule}/RulsesetQuery_UnitTest.py +1 -1
  19. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/fixtures.py +1 -0
  20. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHub_EndToEndTest.py +26 -0
  21. repoauditor-0.2.51/tests/Plugins/__snapshots__/GitHubEnterprise_EndToEndTest.ambr +1351 -0
  22. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/__snapshots__/GitHub_EndToEndTest.ambr +240 -108
  23. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/utilities.py +2 -2
  24. repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets/Module.py +0 -26
  25. repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets/__init__.py +0 -0
  26. repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesetsPlugin.py +0 -19
  27. repoauditor-0.2.49/src/RepoAuditor/Plugins/__init__.py +0 -0
  28. repoauditor-0.2.49/src/github_auditor/__init__.py +0 -0
  29. repoauditor-0.2.49/tests/Plugins/GitHubRuleset_EndToEndTest.py +0 -72
  30. repoauditor-0.2.49/tests/Plugins/__snapshots__/GitHubRuleset_EndToEndTest.ambr +0 -133
  31. {repoauditor-0.2.49 → repoauditor-0.2.51}/.copier-answers.yml +0 -0
  32. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/CODEOWNERS +0 -0
  33. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  34. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  35. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/ISSUE_TEMPLATE/custom.md +0 -0
  36. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  37. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/actions/release_impl/action.yml +0 -0
  38. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/pull_request_template.md +0 -0
  39. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/release_sources.yaml +0 -0
  40. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/workflows/CICD.yml +0 -0
  41. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/workflows/CICD_impl.yml +0 -0
  42. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/workflows/EndToEnd.yml +0 -0
  43. {repoauditor-0.2.49 → repoauditor-0.2.51}/.github/workflows/codeql.yml +0 -0
  44. {repoauditor-0.2.49 → repoauditor-0.2.51}/.pre-commit-config.yaml +0 -0
  45. {repoauditor-0.2.49 → repoauditor-0.2.51}/.python-version +0 -0
  46. {repoauditor-0.2.49 → repoauditor-0.2.51}/CODE_OF_CONDUCT.md +0 -0
  47. {repoauditor-0.2.49 → repoauditor-0.2.51}/CONTRIBUTING.md +0 -0
  48. {repoauditor-0.2.49 → repoauditor-0.2.51}/GOVERNANCE.md +0 -0
  49. {repoauditor-0.2.49 → repoauditor-0.2.51}/LICENSE +0 -0
  50. {repoauditor-0.2.49 → repoauditor-0.2.51}/MAINTAINERS.md +0 -0
  51. {repoauditor-0.2.49 → repoauditor-0.2.51}/README.md +0 -0
  52. {repoauditor-0.2.49 → repoauditor-0.2.51}/SECURITY.md +0 -0
  53. {repoauditor-0.2.49 → repoauditor-0.2.51}/minisign_key.pub +0 -0
  54. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/AutoGitSemVer.yaml +0 -0
  55. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/CommandLineProcessor.py +0 -0
  56. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Display.py +0 -0
  57. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/EntryPoint.py +0 -0
  58. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/ExecuteModules.py +0 -0
  59. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Impl/ParallelSequentialProcessor.py +0 -0
  60. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Impl/__init__.py +0 -0
  61. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Module.py +0 -0
  62. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugin.py +0 -0
  63. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionQuery.py +0 -0
  64. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowDeletions.py +0 -0
  65. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowMainlineForcePushes.py +0 -0
  66. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals.py +0 -0
  67. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DoNotAllowBypassSettings.py +0 -0
  68. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/EnsureStatusChecks.py +0 -0
  69. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicEnableRequirementImpl.py +0 -0
  70. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicValueRequirementImpl.py +0 -0
  71. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/__init__.py +0 -0
  72. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush.py +0 -0
  73. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovals.py +0 -0
  74. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireCodeOwnerReview.py +0 -0
  75. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireConversationResolution.py +0 -0
  76. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireLinearHistory.py +0 -0
  77. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequirePullRequests.py +0 -0
  78. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireSignedCommits.py +0 -0
  79. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireStatusChecksToPass.py +0 -0
  80. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireUpToDateBranches.py +0 -0
  81. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/__init__.py +0 -0
  82. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQuery.py +0 -0
  83. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQueryRequirements/Protected.py +0 -0
  84. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQueryRequirements/__init__.py +0 -0
  85. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/Impl/Common.py +0 -0
  86. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/Impl/ValueRequirementImpl.py +0 -0
  87. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/Impl/__init__.py +0 -0
  88. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/Impl → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub/RulesetRequirements}/__init__.py +0 -0
  89. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQuery.py +0 -0
  90. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/AutoMerge.py +0 -0
  91. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/DefaultBranch.py +0 -0
  92. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/DeleteHeadBranches.py +0 -0
  93. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/DependabotSecurityUpdates.py +0 -0
  94. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/Description.py +0 -0
  95. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/Impl/StandardEnableRequirementImpl.py +0 -0
  96. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/Impl/StandardValueRequirementImpl.py +0 -0
  97. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/Impl}/__init__.py +0 -0
  98. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/License.py +0 -0
  99. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/MergeCommit.py +0 -0
  100. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/MergeCommitMessage.py +0 -0
  101. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/Private.py +0 -0
  102. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/RebaseMergeCommit.py +0 -0
  103. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SecretScanning.py +0 -0
  104. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SecretScanningPushProtection.py +0 -0
  105. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SquashCommitMerge.py +0 -0
  106. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SquashMergeCommitMessage.py +0 -0
  107. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SuggestUpdatingPullRequestBranches.py +0 -0
  108. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SupportDiscussions.py +0 -0
  109. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SupportIssues.py +0 -0
  110. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SupportProjects.py +0 -0
  111. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/SupportWikis.py +0 -0
  112. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/TemplateRepository.py +0 -0
  113. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements/WebCommitSignoff.py +0 -0
  114. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHub → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub/StandardQueryRequirements}/__init__.py +0 -0
  115. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubBase → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHub}/__init__.py +0 -0
  116. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubCommunityStandards/Impl → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHubBase}/__init__.py +0 -0
  117. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/CommunityStandardsQuery.py +0 -0
  118. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Impl/ExistsRequirementImpl.py +0 -0
  119. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHubCommunityStandards/Impl}/__init__.py +0 -0
  120. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Module.py +0 -0
  121. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/CodeOfConduct.py +0 -0
  122. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/CodeOwners.py +0 -0
  123. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/Contributing.py +0 -0
  124. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/IssueTemplates.py +0 -0
  125. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/LicenseFile.py +0 -0
  126. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/PullRequestTemplates.py +0 -0
  127. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/ReadMe.py +0 -0
  128. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements/SecurityPolicy.py +0 -0
  129. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubCommunityStandards → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHubCommunityStandards/Requirements}/__init__.py +0 -0
  130. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets/Impl → repoauditor-0.2.51/src/RepoAuditor/Plugins/GitHubCommunityStandards}/__init__.py +0 -0
  131. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubCommunityStandardsPlugin.py +0 -0
  132. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Plugins/GitHubPlugin.py +0 -0
  133. {repoauditor-0.2.49/src/RepoAuditor/Plugins/GitHubRulesets/Requirements → repoauditor-0.2.51/src/RepoAuditor/Plugins}/__init__.py +0 -0
  134. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Query.py +0 -0
  135. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/Requirement.py +0 -0
  136. {repoauditor-0.2.49 → repoauditor-0.2.51}/src/RepoAuditor/py.typed +0 -0
  137. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/CommandLineProcessor_UnitTest.py +0 -0
  138. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/EntryPoint_UnitTest.py +0 -0
  139. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/ExecuteModules_UnitTest.py +0 -0
  140. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Module_UnitTest.py +0 -0
  141. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugin_UnitTest.py +0 -0
  142. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubCommunityStandards/CommunityStandardsQuery_UnitTest.py +0 -0
  143. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubCommunityStandards/ExistsRequirementImpl_UnitTest.py +0 -0
  144. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubCommunityStandards/GitHubCommunityStandards_UnitTest.py +0 -0
  145. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubCommunityStandards_EndToEndTest.py +0 -0
  146. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicBranchProtectionQuery_UnitTest.py +0 -0
  147. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals_UnitTest.py +0 -0
  148. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/EnsureStatusChecks_UnitTest.py +0 -0
  149. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush_UnitTest.py +0 -0
  150. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovals_UnitTest.py +0 -0
  151. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireCodeOwnerReview_UnitTest.py +0 -0
  152. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireUpToDateBranches_UnitTest.py +0 -0
  153. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ClassicValueRequirementImpl_UnitTest.py +0 -0
  154. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/DefaultBranchQueryRequirements/Protected_UnitTest.py +0 -0
  155. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/DefaultBranchQuery_UnitTest.py +0 -0
  156. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/GitHubModule_UnitTest.py +0 -0
  157. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/GitHubSession_UnitTest.py +0 -0
  158. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/DependabotSecurityUpdates_UnitTest.py +0 -0
  159. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/Description_UnitTest.py +0 -0
  160. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/License_UnitTest.py +0 -0
  161. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/MergeCommitMessage_UnitTest.py +0 -0
  162. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/Private_UnitTest.py +0 -0
  163. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanningPushProtection_UnitTest.py +0 -0
  164. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanning_UnitTest.py +0 -0
  165. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQueryRequirements/SquashMergeCommitMessage_UnitTest.py +0 -0
  166. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/StandardQuery_UnitTest.py +0 -0
  167. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/GitHubModule/ValueRequrementImpl_UnitTest.py +0 -0
  168. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/__snapshots__/GitHubCommunityStandards_EndToEndTest.ambr +0 -0
  169. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Plugins/conftest.py +0 -0
  170. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Query_UnitTest.py +0 -0
  171. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/Requirement_UnitTest.py +0 -0
  172. {repoauditor-0.2.49 → repoauditor-0.2.51}/tests/__snapshots__/ExecuteModules_UnitTest.ambr +0 -0
  173. {repoauditor-0.2.49 → repoauditor-0.2.51}/uv.lock +0 -0
@@ -19,5 +19,6 @@ src/RepoAuditor.egg-info/**
19
19
  minisign_key.pri
20
20
 
21
21
  tests/Plugins/github_pat.txt
22
+ tests/Plugins/github_gatech_pat.txt
22
23
  .DS_Store
23
24
  post_generation_instructions.html
@@ -17,6 +17,7 @@
17
17
  | 2. Install [uv](https://github.com/astral-sh/uv). | `curl -LsSf https://astral.sh/uv/install.sh \| sh` on macOS and Linux or <br/>`powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 \| iex"` on Windows | https://docs.astral.sh |
18
18
  | 3. Install dependencies. | `uv sync` | https://docs.astral.sh/uv/concepts/projects/sync |
19
19
  | 4. Install [pre-commit](https://pre-commit.com/) hooks | `uv run pre-commit install` | https://pre-commit.com/#1-install-pre-commit |
20
+ | 5. If you wish to test against an enterprise server, add a remote named `enterprise` with the corresponding URL | E.g. `git remote add enterprise git@github.gatech.edu:sse-center/RepoAuditor.git` | |
20
21
 
21
22
  ## Development Activities
22
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: RepoAuditor
3
- Version: 0.2.49
3
+ Version: 0.2.51
4
4
  Summary: Add your description here
5
5
  Project-URL: Homepage, https://github.com/gt-sse-center/RepoAuditor
6
6
  Project-URL: Documentation, https://github.com/gt-sse-center/RepoAuditor
@@ -1,5 +1,4 @@
1
- includes: ["GitHub", "GitHubCommunityStandards", "GitHubRulesets"]
1
+ includes: ["GitHub", "GitHubCommunityStandards"]
2
2
  GitHub-url: "https://github.com/gt-sse-center/RepoAuditor"
3
3
  GitHubCommunityStandards-url: "https://github.com/gt-sse-center/RepoAuditor"
4
- GitHubRulesets-url: "https://github.com/gt-sse-center/RepoAuditor"
5
4
  # GitHub-pat: "PAT"
@@ -41,7 +41,6 @@ repo_auditor = "RepoAuditor:EntryPoint.app"
41
41
  [project.entry-points.RepoAuditor]
42
42
  GitHubPlugin = "RepoAuditor.Plugins.GitHubPlugin"
43
43
  GitHubCommunityStandardsPlugin = "RepoAuditor.Plugins.GitHubCommunityStandardsPlugin"
44
- GitHubRulesetPlugin="RepoAuditor.Plugins.GitHubRulesetsPlugin"
45
44
 
46
45
  [build-system]
47
46
  requires = ["hatchling"]
@@ -81,6 +81,15 @@ class EnableRequirementImpl(Requirement):
81
81
  ) -> Requirement.EvaluateImplResult:
82
82
  result = self.get_configuration_value_func(query_data)
83
83
  if result is None:
84
+ if query_data["session"].is_enterprise:
85
+ return Requirement.EvaluateImplResult(
86
+ EvaluateResult.DoesNotApply,
87
+ (
88
+ "Please verify with your enterprise administrator "
89
+ f"that {self.github_settings_value} is enabled."
90
+ ),
91
+ )
92
+
84
93
  if self.missing_value_is_warning:
85
94
  return CreateIncompleteDataResult()
86
95
 
@@ -33,7 +33,7 @@ class EnableRulesetRequirementImpl(EnableRequirementImpl):
33
33
  subject: Optional[str] = None,
34
34
  *,
35
35
  requires_explicit_include: bool = False,
36
- unset_set_terminology: tuple[str, str] = ("unchecked", "checked"),
36
+ unset_set_terminology: tuple[str, str] = ("disabled", "enabled"),
37
37
  missing_value_is_warning: bool = True,
38
38
  ) -> None:
39
39
  super().__init__(
@@ -9,6 +9,7 @@
9
9
  from RepoAuditor.Module import ExecutionStyle
10
10
  from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionQuery import ClassicBranchProtectionQuery
11
11
  from RepoAuditor.Plugins.GitHub.DefaultBranchQuery import DefaultBranchQuery
12
+ from RepoAuditor.Plugins.GitHub.RulesetQuery import RulesetQuery
12
13
  from RepoAuditor.Plugins.GitHub.StandardQuery import StandardQuery
13
14
  from RepoAuditor.Plugins.GitHubBase.Module import GitHubBaseModule
14
15
 
@@ -27,6 +28,7 @@ class GitHubModule(GitHubBaseModule):
27
28
  StandardQuery(),
28
29
  DefaultBranchQuery(),
29
30
  ClassicBranchProtectionQuery(),
31
+ RulesetQuery(),
30
32
  ],
31
33
  requires_explicit_include=True,
32
34
  )
@@ -11,9 +11,9 @@ from typing import Any, Optional
11
11
  from dbrownell_Common.Types import override
12
12
 
13
13
  from RepoAuditor.Impl.ParallelSequentialProcessor import ExecutionStyle
14
- from RepoAuditor.Plugins.GitHubRulesets.Requirements.RequirePullRequests import RequirePullRequests
15
- from RepoAuditor.Plugins.GitHubRulesets.Requirements.RequireSignedCommits import RequireSignedCommits
16
- from RepoAuditor.Plugins.GitHubRulesets.Requirements.RequireStatusChecks import RequireStatusChecks
14
+ from RepoAuditor.Plugins.GitHub.RulesetRequirements.RequirePullRequests import RequirePullRequests
15
+ from RepoAuditor.Plugins.GitHub.RulesetRequirements.RequireSignedCommits import RequireSignedCommits
16
+ from RepoAuditor.Plugins.GitHub.RulesetRequirements.RequireStatusChecks import RequireStatusChecks
17
17
  from RepoAuditor.Query import Query
18
18
 
19
19
 
@@ -6,7 +6,7 @@
6
6
  # -------------------------------------------------------------------------------
7
7
  """Contains the RequirePullRequests object."""
8
8
 
9
- from RepoAuditor.Plugins.GitHubRulesets.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
9
+ from RepoAuditor.Plugins.GitHub.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
10
10
 
11
11
 
12
12
  class RequirePullRequests(EnableRulesetRequirementImpl):
@@ -6,7 +6,7 @@
6
6
  # -------------------------------------------------------------------------------
7
7
  """Contains the RequireSignedCommits object."""
8
8
 
9
- from RepoAuditor.Plugins.GitHubRulesets.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
9
+ from RepoAuditor.Plugins.GitHub.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
10
10
 
11
11
 
12
12
  class RequireSignedCommits(EnableRulesetRequirementImpl):
@@ -6,7 +6,7 @@
6
6
  # -------------------------------------------------------------------------------
7
7
  """Contains the RequireStatusChecks object."""
8
8
 
9
- from RepoAuditor.Plugins.GitHubRulesets.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
9
+ from RepoAuditor.Plugins.GitHub.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
10
10
 
11
11
 
12
12
  class RequireStatusChecks(EnableRulesetRequirementImpl):
@@ -114,7 +114,7 @@ class _GitHubSession(requests.Session):
114
114
  api_url = f"https://api.github.com/repos/{username}/{repo}"
115
115
  is_enterprise = False
116
116
  else:
117
- api_url = f"{url_parts.scheme}://{url_parts.netloc}/api/v3/orgs/{username}/repos/{repo}"
117
+ api_url = f"{url_parts.scheme}://{url_parts.netloc}/api/v3/repos/{username}/{repo}"
118
118
  is_enterprise = True
119
119
 
120
120
  self.github_url = github_url
@@ -2,4 +2,4 @@ APP_NAME = "RepoAuditor"
2
2
 
3
3
  # Note that the default value below will be used until the value
4
4
  # here is explicitly updated by the Continuous Integration system.
5
- __version__ = "0.2.49"
5
+ __version__ = "0.2.51"
@@ -0,0 +1,378 @@
1
+ # -------------------------------------------------------------------------------
2
+ # |
3
+ # | Copyright (c) 2024 Scientific Software Engineering Center at Georgia Tech
4
+ # | Distributed under the MIT License.
5
+ # |
6
+ # -------------------------------------------------------------------------------
7
+ """End-to-end tests for the plugins on an enterprise URL"""
8
+
9
+ import urllib
10
+ from pathlib import Path
11
+
12
+ import pytest
13
+ from dbrownell_Common.TestHelpers.StreamTestHelpers import (
14
+ InitializeStreamCapabilities,
15
+ )
16
+ from typer.testing import CliRunner
17
+ from utilities import CheckPATFileExists, GetGithubUrl, ScrubDurationGithuburlAndSpaces
18
+
19
+ from RepoAuditor.EntryPoint import app
20
+
21
+ # ----------------------------------------------------------------------
22
+ pytest.fixture(InitializeStreamCapabilities(), scope="session", autouse=True)
23
+
24
+
25
+ # ----------------------------------------------------------------------
26
+ @pytest.fixture
27
+ def args() -> list[str]:
28
+ return [
29
+ "--include",
30
+ "GitHub",
31
+ "--GitHub-url",
32
+ GetGithubUrl("enterprise"),
33
+ # Currently GitHub Enterprise does not support GitHub hosted runners.
34
+ # As a result, no status checks show up to select and this will always fail.
35
+ "--GitHub-EnsureStatusChecks-disable",
36
+ ]
37
+
38
+
39
+ # ----------------------------------------------------------------------
40
+ @pytest.fixture
41
+ def pat_args(args) -> list[str]:
42
+ _github_pat_filename = (Path(__file__).parent / "github_gatech_pat.txt").resolve()
43
+ parsed = urllib.parse.urlparse(GetGithubUrl("enterprise"))
44
+ parsed = parsed._replace(path="")
45
+ CheckPATFileExists(_github_pat_filename, github_url=parsed.geturl())
46
+
47
+ with _github_pat_filename.open() as f:
48
+ pat_value = f.read().strip()
49
+
50
+ return args + ["--GitHub-pat", pat_value]
51
+
52
+
53
+ # ----------------------------------------------------------------------
54
+ def test_Successful(pat_args, snapshot):
55
+ """Test if RepoAuditor runs successfully with default options."""
56
+ result = CliRunner().invoke(app, pat_args)
57
+
58
+ assert result.exit_code == 0, result.output
59
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
60
+
61
+
62
+ # ----------------------------------------------------------------------
63
+ class TestStandard:
64
+ # ----------------------------------------------------------------------
65
+ def test_NoAutoMerge(self, pat_args, snapshot):
66
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-AutoMerge-false"])
67
+
68
+ assert result.exit_code == -1, result.output
69
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
70
+
71
+ # ----------------------------------------------------------------------
72
+ def test_NoDeleteHeadBranches(self, pat_args, snapshot):
73
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-DeleteHeadBranches-false"])
74
+
75
+ assert result.exit_code == -1, result.output
76
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
77
+
78
+ # ----------------------------------------------------------------------
79
+ @pytest.mark.skip(reason="Not enabled by Enterprise Administrator")
80
+ def test_NoDependabotSecurityUpdates(self, pat_args, snapshot):
81
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-DependabotSecurityUpdates-false"])
82
+
83
+ assert result.exit_code == -1, result.output
84
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
85
+
86
+ # ----------------------------------------------------------------------
87
+ def test_NoMergeCommit(self, pat_args, snapshot):
88
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-MergeCommit-false"])
89
+
90
+ assert result.exit_code == -1, result.output
91
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
92
+
93
+ # ----------------------------------------------------------------------
94
+ def test_YesRebaseMergeCommit(self, pat_args, snapshot):
95
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-RebaseMergeCommit-true"])
96
+
97
+ assert result.exit_code == -1, result.output
98
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
99
+
100
+ # ----------------------------------------------------------------------
101
+ @pytest.mark.skip(reason="Not enabled by Enterprise Administrator")
102
+ def test_NoSecretScanning(self, pat_args, snapshot):
103
+ """Test is secret scanning is not disabled."""
104
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SecretScanning-false"])
105
+
106
+ assert result.exit_code == -1, result.output
107
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
108
+
109
+ # ----------------------------------------------------------------------
110
+ @pytest.mark.skip(reason="Not enabled by Enterprise Administrator")
111
+ def test_NoSecretScanningPushProtection(self, pat_args, snapshot):
112
+ """Test is secret scanning push protection is not disabled."""
113
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SecretScanningPushProtection-false"])
114
+
115
+ assert result.exit_code == -1, result.output
116
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
117
+
118
+ # ----------------------------------------------------------------------
119
+ def test_YesSquashCommitMerge(self, pat_args, snapshot):
120
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SquashCommitMerge-true"])
121
+
122
+ assert result.exit_code == -1, result.output
123
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
124
+
125
+ # ----------------------------------------------------------------------
126
+ def test_YesSuggestUpdatingPullRequestBranches(self, pat_args, snapshot):
127
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SuggestUpdatingPullRequestBranches-true"])
128
+
129
+ assert result.exit_code == -1, result.output
130
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
131
+
132
+ # ----------------------------------------------------------------------
133
+ def test_YesSupportDiscussions(self, pat_args, snapshot):
134
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SupportDiscussions-true"])
135
+
136
+ assert result.exit_code == -1, result.output
137
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
138
+
139
+ # ----------------------------------------------------------------------
140
+ def test_NoSupportIssues(self, pat_args, snapshot):
141
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SupportIssues-false"])
142
+
143
+ assert result.exit_code == -1, result.output
144
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
145
+
146
+ # ----------------------------------------------------------------------
147
+ def test_NoSupportProjects(self, pat_args, snapshot):
148
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SupportProjects-false"])
149
+
150
+ assert result.exit_code == -1, result.output
151
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
152
+
153
+ # ----------------------------------------------------------------------
154
+ def test_NoSupportWikis(self, pat_args, snapshot):
155
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-SupportWikis-false"])
156
+
157
+ assert result.exit_code == -1, result.output
158
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
159
+
160
+ # ----------------------------------------------------------------------
161
+ def test_YesTemplateRepository(self, pat_args, snapshot):
162
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-TemplateRepository-true"])
163
+
164
+ assert result.exit_code == -1, result.output
165
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
166
+
167
+ # ----------------------------------------------------------------------
168
+ def test_NoWebCommitSignoff(self, pat_args, snapshot):
169
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-WebCommitSignoff-false"])
170
+
171
+ assert result.exit_code == -1, result.output
172
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
173
+
174
+ # ----------------------------------------------------------------------
175
+ def test_DefaultBranchValue(self, pat_args, snapshot):
176
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-DefaultBranch-value", "not_main"])
177
+
178
+ assert result.exit_code == -1, result.output
179
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
180
+
181
+ # ----------------------------------------------------------------------
182
+ def test_LicenseValue(self, pat_args, snapshot):
183
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-License-value", "Not the MIT License"])
184
+
185
+ assert result.exit_code == -1, result.output
186
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
187
+
188
+ # ----------------------------------------------------------------------
189
+ def test_MergeCommitMessageValue(self, pat_args, snapshot):
190
+ result = CliRunner().invoke(
191
+ app,
192
+ pat_args
193
+ + [
194
+ "--GitHub-MergeCommitMessage-value",
195
+ "This is not a valid merge commit message",
196
+ ],
197
+ )
198
+
199
+ assert result.exit_code == -1, result.output
200
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
201
+
202
+ # ----------------------------------------------------------------------
203
+ def test_PrivateValue(self, pat_args, snapshot):
204
+ result = CliRunner().invoke(
205
+ app,
206
+ pat_args + ["--GitHub-Private-true"],
207
+ )
208
+
209
+ assert result.exit_code == -1, result.output
210
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
211
+
212
+ # ----------------------------------------------------------------------
213
+ def test_SquashMergeCommitMessageValue(self, pat_args, snapshot):
214
+ result = CliRunner().invoke(
215
+ app,
216
+ pat_args
217
+ + [
218
+ "--GitHub-SquashMergeCommitMessage-value",
219
+ "This is not a valid squash merge commit message",
220
+ ],
221
+ )
222
+
223
+ assert result.exit_code == -1, result.output
224
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
225
+
226
+ # ----------------------------------------------------------------------
227
+ def test_Protected(self, pat_args, snapshot):
228
+ result = CliRunner().invoke(
229
+ app,
230
+ pat_args + ["--GitHub-Protected-false"],
231
+ )
232
+
233
+ assert result.exit_code == -1, result.output
234
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
235
+
236
+
237
+ # ----------------------------------------------------------------------
238
+ class TestClassic:
239
+ # ----------------------------------------------------------------------
240
+ def test_AllowDeletions(self, pat_args, snapshot):
241
+ result = CliRunner().invoke(
242
+ app,
243
+ pat_args + ["--GitHub-AllowDeletions-true"],
244
+ )
245
+
246
+ assert result.exit_code == -1, result.output
247
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
248
+
249
+ # ----------------------------------------------------------------------
250
+ def test_AllowForcePush(self, pat_args, snapshot):
251
+ result = CliRunner().invoke(
252
+ app,
253
+ pat_args + ["--GitHub-AllowMainlineForcePushes-true"],
254
+ )
255
+
256
+ assert result.exit_code == -1, result.output
257
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
258
+
259
+ # ----------------------------------------------------------------------
260
+ def test_DismissStalePullRequestApprovals(self, pat_args, snapshot):
261
+ result = CliRunner().invoke(
262
+ app,
263
+ pat_args + ["--GitHub-DismissStalePullRequestApprovals-false"],
264
+ )
265
+
266
+ assert result.exit_code == -1, result.output
267
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
268
+
269
+ # ----------------------------------------------------------------------
270
+ def test_DoNotAllowBypassSettings(self, pat_args, snapshot):
271
+ result = CliRunner().invoke(
272
+ app,
273
+ pat_args + ["--GitHub-DoNotAllowBypassSettings-false"],
274
+ )
275
+
276
+ assert result.exit_code == -1, result.output
277
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
278
+
279
+ # ----------------------------------------------------------------------
280
+ @pytest.mark.skip(reason="GitHub hosted runners not available on Enterprise")
281
+ def test_EnsureStatusChecks(self, pat_args):
282
+ result = CliRunner().invoke(
283
+ app,
284
+ pat_args + ["--GitHub-EnsureStatusChecks-disable", "--verbose"],
285
+ )
286
+
287
+ assert result.exit_code == 0, result.output
288
+ assert "[DoesNotApply] EnsureStatusChecks" in result.stdout
289
+
290
+ # ----------------------------------------------------------------------
291
+ def test_RequireApprovalMostRecentPush(self, pat_args, snapshot):
292
+ result = CliRunner().invoke(
293
+ app,
294
+ pat_args + ["--GitHub-RequireApprovalMostRecentPush-false"],
295
+ )
296
+
297
+ assert result.exit_code == -1, result.output
298
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
299
+
300
+ # ----------------------------------------------------------------------
301
+ def test_RequireApprovals(self, pat_args, snapshot):
302
+ result = CliRunner().invoke(
303
+ app,
304
+ pat_args + ["--GitHub-RequireApprovals-value", "2"],
305
+ )
306
+
307
+ assert result.exit_code == -1, result.output
308
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
309
+
310
+ # ----------------------------------------------------------------------
311
+ def test_RequireCodeOwnerReview(self, pat_args, snapshot):
312
+ result = CliRunner().invoke(
313
+ app,
314
+ pat_args + ["--GitHub-RequireCodeOwnerReview-true"],
315
+ )
316
+
317
+ assert result.exit_code == -1, result.output
318
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
319
+
320
+ # ----------------------------------------------------------------------
321
+ def test_RequireConversationResolution(self, pat_args, snapshot):
322
+ result = CliRunner().invoke(
323
+ app,
324
+ pat_args + ["--GitHub-RequireConversationResolution-false"],
325
+ )
326
+
327
+ assert result.exit_code == -1, result.output
328
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
329
+
330
+ # ----------------------------------------------------------------------
331
+ def test_RequireLinearHistory(self, pat_args, snapshot):
332
+ result = CliRunner().invoke(
333
+ app,
334
+ pat_args + ["--GitHub-RequireLinearHistory-true"],
335
+ )
336
+
337
+ assert result.exit_code == -1, result.output
338
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
339
+
340
+ # ----------------------------------------------------------------------
341
+ def test_RequirePullRequests(self, pat_args, snapshot):
342
+ result = CliRunner().invoke(
343
+ app,
344
+ pat_args + ["--GitHub-RequirePullRequests-false"],
345
+ )
346
+
347
+ assert result.exit_code == -1, result.output
348
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
349
+
350
+ # ----------------------------------------------------------------------
351
+ def test_RequireSignedCommits(self, pat_args, snapshot):
352
+ result = CliRunner().invoke(
353
+ app,
354
+ pat_args + ["--GitHub-RequireSignedCommits-false"],
355
+ )
356
+
357
+ assert result.exit_code == -1, result.output
358
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
359
+
360
+ # ----------------------------------------------------------------------
361
+ def test_RequireStatusChecksToPass(self, pat_args, snapshot):
362
+ result = CliRunner().invoke(
363
+ app,
364
+ pat_args + ["--GitHub-RequireStatusChecksToPass-false"],
365
+ )
366
+
367
+ assert result.exit_code == -1, result.output
368
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
369
+
370
+ # ----------------------------------------------------------------------
371
+ def test_RequireUpToDateBranches(self, pat_args, snapshot):
372
+ result = CliRunner().invoke(
373
+ app,
374
+ pat_args + ["--GitHub-RequireUpToDateBranches-false"],
375
+ )
376
+
377
+ assert result.exit_code == -1, result.output
378
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
@@ -6,7 +6,7 @@
6
6
  # -------------------------------------------------------------------------------
7
7
  """Unit tests for the EnableRulesetRequirementImpl requirement implementation."""
8
8
 
9
- from RepoAuditor.Plugins.GitHubRulesets.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
9
+ from RepoAuditor.Plugins.GitHub.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
10
10
  from RepoAuditor.Requirement import EvaluateResult
11
11
 
12
12
 
@@ -8,11 +8,11 @@
8
8
 
9
9
  from typing import Any
10
10
 
11
- from RepoAuditor.Plugins.GitHubRulesets.Requirements.RequirePullRequests import RequirePullRequests
12
- from RepoAuditor.Plugins.GitHubRulesets.Requirements.RequireSignedCommits import (
11
+ from RepoAuditor.Plugins.GitHub.RulesetRequirements.RequirePullRequests import RequirePullRequests
12
+ from RepoAuditor.Plugins.GitHub.RulesetRequirements.RequireSignedCommits import (
13
13
  RequireSignedCommits,
14
14
  )
15
- from RepoAuditor.Plugins.GitHubRulesets.Requirements.RequireStatusChecks import RequireStatusChecks
15
+ from RepoAuditor.Plugins.GitHub.RulesetRequirements.RequireStatusChecks import RequireStatusChecks
16
16
  from RepoAuditor.Requirement import EvaluateResult
17
17
 
18
18
 
@@ -6,7 +6,7 @@
6
6
  # -------------------------------------------------------------------------------
7
7
  """Unit tests for RulesetQuery.py"""
8
8
 
9
- from RepoAuditor.Plugins.GitHubRulesets.RulesetQuery import RulesetQuery
9
+ from RepoAuditor.Plugins.GitHub.RulesetQuery import RulesetQuery
10
10
 
11
11
 
12
12
  def get_mock_request(
@@ -19,4 +19,5 @@ def session():
19
19
  s = _GithubSession_()
20
20
  s.github_url = "https://github.com/gt-sse-center/RepoAuditor"
21
21
  s.pat = "dummy_github_pat.txt"
22
+ s.is_enterprise = False
22
23
  return s
@@ -368,6 +368,32 @@ class TestClassic:
368
368
  assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
369
369
 
370
370
 
371
+ # ----------------------------------------------------------------------
372
+ class TestRulesets:
373
+ """End-to-end tests for rulesets in a GitHub repository."""
374
+
375
+ def test_RequireStatusChecks(self, pat_args, snapshot):
376
+ """Test for Status Checks not required ruleset"""
377
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-RequireStatusChecks-enabled"])
378
+
379
+ assert result.exit_code == -1, result.output
380
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
381
+
382
+ def test_RequirePullRequests(self, pat_args, snapshot):
383
+ """Test for Pull Requests required ruleset"""
384
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-RequirePullRequests-enabled"])
385
+
386
+ assert result.exit_code == -1, result.output
387
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
388
+
389
+ def test_RequireSignedCommits(self, pat_args, snapshot):
390
+ """Test for Signed Commits required ruleset"""
391
+ result = CliRunner().invoke(app, pat_args + ["--GitHub-RequireSignedCommits-enabled"])
392
+
393
+ assert result.exit_code == -1, result.output
394
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
395
+
396
+
371
397
  # ----------------------------------------------------------------------
372
398
  # ----------------------------------------------------------------------
373
399
  # ----------------------------------------------------------------------