RepoAuditor 0.3.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. {repoauditor-0.3.0 → repoauditor-0.4.0}/PKG-INFO +1 -1
  2. {repoauditor-0.3.0 → repoauditor-0.4.0}/pyproject.toml +1 -0
  3. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/CommunityStandardsQuery.py +23 -18
  4. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRulesetRequirementImpl.py +2 -2
  5. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHubPlugin.py +1 -1
  6. repoauditor-0.4.0/src/RepoAuditor/Plugins/ScientificSoftware/Module.py +26 -0
  7. repoauditor-0.4.0/src/RepoAuditor/Plugins/ScientificSoftware/Requirements/Citation.py +63 -0
  8. repoauditor-0.4.0/src/RepoAuditor/Plugins/ScientificSoftware/ScientificSoftwareQuery.py +24 -0
  9. repoauditor-0.4.0/src/RepoAuditor/Plugins/ScientificSoftwarePlugin.py +20 -0
  10. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Query.py +3 -2
  11. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/__init__.py +1 -1
  12. repoauditor-0.4.0/src/RepoAuditor/py.typed +0 -0
  13. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/CommunityStandards/CommunityStandardsQuery_UnitTest.py +7 -10
  14. repoauditor-0.4.0/tests/Plugins/ScientificSoftware/ScientificSoftwareQuery_UnitTest.py +16 -0
  15. repoauditor-0.4.0/tests/Plugins/ScientificSoftware_EndToEndTest.py +35 -0
  16. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/__snapshots__/GitHubEnterprise_EndToEndTest.ambr +25 -25
  17. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/__snapshots__/GitHub_EndToEndTest.ambr +26 -26
  18. repoauditor-0.4.0/tests/Plugins/__snapshots__/ScientificSoftware_EndToEndTest.ambr +65 -0
  19. repoauditor-0.4.0/tests/__init__.py +0 -0
  20. {repoauditor-0.3.0 → repoauditor-0.4.0}/.copier-answers.yml +0 -0
  21. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/CODEOWNERS +0 -0
  22. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  23. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/ISSUE_TEMPLATE/custom.md +0 -0
  25. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  26. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/actions/release_impl/action.yml +0 -0
  27. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/pull_request_template.md +0 -0
  28. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/release_sources.yaml +0 -0
  29. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/workflows/CICD.yml +0 -0
  30. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/workflows/CICD_impl.yml +0 -0
  31. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/workflows/EndToEnd.yml +0 -0
  32. {repoauditor-0.3.0 → repoauditor-0.4.0}/.github/workflows/codeql.yml +0 -0
  33. {repoauditor-0.3.0 → repoauditor-0.4.0}/.gitignore +0 -0
  34. {repoauditor-0.3.0 → repoauditor-0.4.0}/.pre-commit-config.yaml +0 -0
  35. {repoauditor-0.3.0 → repoauditor-0.4.0}/.python-version +0 -0
  36. {repoauditor-0.3.0 → repoauditor-0.4.0}/CODE_OF_CONDUCT.md +0 -0
  37. {repoauditor-0.3.0 → repoauditor-0.4.0}/GOVERNANCE.md +0 -0
  38. {repoauditor-0.3.0 → repoauditor-0.4.0}/LICENSE +0 -0
  39. {repoauditor-0.3.0 → repoauditor-0.4.0}/MAINTAINERS.md +0 -0
  40. {repoauditor-0.3.0 → repoauditor-0.4.0}/README.md +0 -0
  41. {repoauditor-0.3.0 → repoauditor-0.4.0}/SECURITY.md +0 -0
  42. {repoauditor-0.3.0 → repoauditor-0.4.0}/default_config.yaml +0 -0
  43. {repoauditor-0.3.0 → repoauditor-0.4.0}/docs/CONTRIBUTING.md +0 -0
  44. {repoauditor-0.3.0 → repoauditor-0.4.0}/docs/DEVELOPMENT.md +0 -0
  45. {repoauditor-0.3.0 → repoauditor-0.4.0}/docs/PAT.md +0 -0
  46. {repoauditor-0.3.0 → repoauditor-0.4.0}/docs/config_file.md +0 -0
  47. {repoauditor-0.3.0 → repoauditor-0.4.0}/docs/index.md +0 -0
  48. {repoauditor-0.3.0 → repoauditor-0.4.0}/docs/troubleshooting.md +0 -0
  49. {repoauditor-0.3.0 → repoauditor-0.4.0}/docs/usage.md +0 -0
  50. {repoauditor-0.3.0 → repoauditor-0.4.0}/minisign_key.pub +0 -0
  51. {repoauditor-0.3.0 → repoauditor-0.4.0}/mkdocs.yml +0 -0
  52. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/AutoGitSemVer.yaml +0 -0
  53. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/CommandLineProcessor.py +0 -0
  54. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Display.py +0 -0
  55. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/EntryPoint.py +0 -0
  56. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/ExecuteModules.py +0 -0
  57. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Impl/ParallelSequentialProcessor.py +0 -0
  58. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Impl/__init__.py +0 -0
  59. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Module.py +0 -0
  60. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugin.py +0 -0
  61. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Impl/ExistsRequirementImpl.py +0 -0
  62. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Impl/__init__.py +0 -0
  63. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Module.py +0 -0
  64. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOfConduct.py +0 -0
  65. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOwners.py +0 -0
  66. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/Contributing.py +0 -0
  67. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/IssueTemplates.py +0 -0
  68. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/LicenseFile.py +0 -0
  69. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/PullRequestTemplates.py +0 -0
  70. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/ReadMe.py +0 -0
  71. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/SecurityPolicy.py +0 -0
  72. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/__init__.py +0 -0
  73. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandards/__init__.py +0 -0
  74. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/CommunityStandardsPlugin.py +0 -0
  75. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionQuery.py +0 -0
  76. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowDeletions.py +0 -0
  77. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowMainlineForcePushes.py +0 -0
  78. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals.py +0 -0
  79. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DoNotAllowBypassSettings.py +0 -0
  80. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/EnsureStatusChecks.py +0 -0
  81. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicEnableRequirementImpl.py +0 -0
  82. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicValueRequirementImpl.py +0 -0
  83. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/__init__.py +0 -0
  84. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush.py +0 -0
  85. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovals.py +0 -0
  86. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireCodeOwnerReview.py +0 -0
  87. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireConversationResolution.py +0 -0
  88. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireLinearHistory.py +0 -0
  89. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequirePullRequests.py +0 -0
  90. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireSignedCommits.py +0 -0
  91. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireStatusChecksToPass.py +0 -0
  92. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireUpToDateBranches.py +0 -0
  93. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/__init__.py +0 -0
  94. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQuery.py +0 -0
  95. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/Protected.py +0 -0
  96. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/__init__.py +0 -0
  97. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/Impl/Common.py +0 -0
  98. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRequirementImpl.py +0 -0
  99. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/Impl/ValueRequirementImpl.py +0 -0
  100. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/Impl/__init__.py +0 -0
  101. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/Module.py +0 -0
  102. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetQuery.py +0 -0
  103. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/AllowMainlineForcePushes.py +0 -0
  104. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/DismissStalePullRequestApprovals.py +0 -0
  105. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/EnsureStatusChecks.py +0 -0
  106. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireApprovalMostRecentPush.py +0 -0
  107. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireApprovals.py +0 -0
  108. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireCodeOwnerReview.py +0 -0
  109. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireCodeScanningResults.py +0 -0
  110. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireConversationResolution.py +0 -0
  111. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireLinearHistory.py +0 -0
  112. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequirePullRequests.py +0 -0
  113. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireSignedCommits.py +0 -0
  114. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireStatusChecksToPass.py +0 -0
  115. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireSuccessfulDeployments.py +0 -0
  116. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireUpToDateBranches.py +0 -0
  117. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RestrictCreations.py +0 -0
  118. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RestrictDeletions.py +0 -0
  119. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RestrictUpdates.py +0 -0
  120. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/__init__.py +0 -0
  121. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardQuery.py +0 -0
  122. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/AutoMerge.py +0 -0
  123. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DefaultBranch.py +0 -0
  124. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DeleteHeadBranches.py +0 -0
  125. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DependabotSecurityUpdates.py +0 -0
  126. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Description.py +0 -0
  127. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardEnableRequirementImpl.py +0 -0
  128. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardValueRequirementImpl.py +0 -0
  129. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/__init__.py +0 -0
  130. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/License.py +0 -0
  131. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommit.py +0 -0
  132. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommitMessage.py +0 -0
  133. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Private.py +0 -0
  134. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/RebaseMergeCommit.py +0 -0
  135. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanning.py +0 -0
  136. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanningPushProtection.py +0 -0
  137. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashCommitMerge.py +0 -0
  138. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashMergeCommitMessage.py +0 -0
  139. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SuggestUpdatingPullRequestBranches.py +0 -0
  140. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportDiscussions.py +0 -0
  141. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportIssues.py +0 -0
  142. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportProjects.py +0 -0
  143. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportWikis.py +0 -0
  144. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/TemplateRepository.py +0 -0
  145. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/WebCommitSignoff.py +0 -0
  146. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/__init__.py +0 -0
  147. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHub/__init__.py +0 -0
  148. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHubBase/Module.py +0 -0
  149. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Plugins/GitHubBase/__init__.py +0 -0
  150. {repoauditor-0.3.0/src/RepoAuditor/Plugins → repoauditor-0.4.0/src/RepoAuditor/Plugins/ScientificSoftware/Requirements}/__init__.py +0 -0
  151. {repoauditor-0.3.0/tests → repoauditor-0.4.0/src/RepoAuditor/Plugins/ScientificSoftware}/__init__.py +0 -0
  152. /repoauditor-0.3.0/src/RepoAuditor/py.typed → /repoauditor-0.4.0/src/RepoAuditor/Plugins/__init__.py +0 -0
  153. {repoauditor-0.3.0 → repoauditor-0.4.0}/src/RepoAuditor/Requirement.py +0 -0
  154. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/CommandLineProcessor_UnitTest.py +0 -0
  155. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/EntryPoint_UnitTest.py +0 -0
  156. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/ExecuteModules_UnitTest.py +0 -0
  157. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Module_UnitTest.py +0 -0
  158. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugin_UnitTest.py +0 -0
  159. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/CommunityStandards/CommunityStandards_UnitTest.py +0 -0
  160. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/CommunityStandards/ExistsRequirementImpl_UnitTest.py +0 -0
  161. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/CommunityStandards_EndToEndTest.py +0 -0
  162. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubEnterprise_EndToEndTest.py +0 -0
  163. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicBranchProtectionQuery_UnitTest.py +0 -0
  164. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals_UnitTest.py +0 -0
  165. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/EnsureStatusChecks_UnitTest.py +0 -0
  166. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush_UnitTest.py +0 -0
  167. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovals_UnitTest.py +0 -0
  168. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireCodeOwnerReview_UnitTest.py +0 -0
  169. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireUpToDateBranches_UnitTest.py +0 -0
  170. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ClassicValueRequirementImpl_UnitTest.py +0 -0
  171. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/DefaultBranchQuery_UnitTest.py +0 -0
  172. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/DefaultBranchRequirements/Protected_UnitTest.py +0 -0
  173. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/EnableRulesetRequirementImpl_UnitTest.py +0 -0
  174. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/GitHubModule_UnitTest.py +0 -0
  175. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/GitHubSession_UnitTest.py +0 -0
  176. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/AllowMainlineForcePushesRule_UnitTest.py +0 -0
  177. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/DismissStalePullRequestApprovalsRule_UnitTest.py +0 -0
  178. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/EnsureStatusChecksRule_UnitTest.py +0 -0
  179. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequireApprovalMostRecentPushRule_UnitTest.py +0 -0
  180. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequireApprovalsRule_UnitTest.py +0 -0
  181. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequireCodeOwnerReviewRule_UnitTest.py +0 -0
  182. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequireConversationResolutionRule_UnitTest.py +0 -0
  183. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequirePullRequests_UnitTest.py +0 -0
  184. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequireSignedCommits_UnitTest.py +0 -0
  185. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequireStatusChecksToPassRule_UnitTest.py +0 -0
  186. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/RequireUpToDateBranchesRule_UnitTest.py +0 -0
  187. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulesetRequirements/__init__.py +0 -0
  188. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/RulsesetQuery_UnitTest.py +0 -0
  189. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardQuery_UnitTest.py +0 -0
  190. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/DependabotSecurityUpdates_UnitTest.py +0 -0
  191. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/Description_UnitTest.py +0 -0
  192. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/License_UnitTest.py +0 -0
  193. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/MergeCommitMessage_UnitTest.py +0 -0
  194. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/Private_UnitTest.py +0 -0
  195. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/SecretScanningPushProtection_UnitTest.py +0 -0
  196. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/SecretScanning_UnitTest.py +0 -0
  197. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/StandardRequirements/SquashMergeCommitMessage_UnitTest.py +0 -0
  198. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/ValueRequrementImpl_UnitTest.py +0 -0
  199. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHubModule/fixtures.py +0 -0
  200. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/GitHub_EndToEndTest.py +0 -0
  201. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/__snapshots__/CommunityStandards_EndToEndTest.ambr +0 -0
  202. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/conftest.py +0 -0
  203. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Plugins/utilities.py +0 -0
  204. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Query_UnitTest.py +0 -0
  205. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/Requirement_UnitTest.py +0 -0
  206. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/__snapshots__/ExecuteModules_UnitTest.ambr +0 -0
  207. {repoauditor-0.3.0 → repoauditor-0.4.0}/tests/conftest.py +0 -0
  208. {repoauditor-0.3.0 → repoauditor-0.4.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: RepoAuditor
3
- Version: 0.3.0
3
+ Version: 0.4.0
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
@@ -41,6 +41,7 @@ repoauditor = "RepoAuditor:EntryPoint.app"
41
41
  [project.entry-points.RepoAuditor]
42
42
  GitHubPlugin = "RepoAuditor.Plugins.GitHubPlugin"
43
43
  CommunityStandardsPlugin = "RepoAuditor.Plugins.CommunityStandardsPlugin"
44
+ ScientificSoftwarePlugin = "RepoAuditor.Plugins.ScientificSoftwarePlugin"
44
45
 
45
46
  [build-system]
46
47
  requires = ["hatchling"]
@@ -23,24 +23,8 @@ from RepoAuditor.Plugins.CommunityStandards.Requirements.SecurityPolicy import S
23
23
  from RepoAuditor.Query import ExecutionStyle, Query
24
24
 
25
25
 
26
- class CommunityStandardsQuery(Query):
27
- """Query with requirements that check for repository Community Standards files."""
28
-
29
- def __init__(self) -> None:
30
- super().__init__(
31
- "CommunityStandardsQuery",
32
- ExecutionStyle.Parallel,
33
- [
34
- ReadMe(),
35
- CodeOfConduct(),
36
- Contributing(),
37
- LicenseFile(),
38
- SecurityPolicy(),
39
- IssueTemplates(),
40
- PullRequestTemplate(),
41
- CodeOwners(),
42
- ],
43
- )
26
+ class CloneRepositoryMixin:
27
+ """A mixin class to clone a repository to a temporary directory."""
44
28
 
45
29
  # ----------------------------------------------------------------------
46
30
  @override
@@ -84,9 +68,30 @@ class CommunityStandardsQuery(Query):
84
68
 
85
69
  return module_data
86
70
 
71
+ # ----------------------------------------------------------------------
87
72
  @override
88
73
  def Cleanup(self, module_data: dict[str, Any]) -> None:
89
74
  """Clean up the cloned repository."""
90
75
  repo_dir = module_data["repo_dir"]
91
76
  repo_dir.cleanup()
92
77
  del module_data
78
+
79
+
80
+ class CommunityStandardsQuery(CloneRepositoryMixin, Query):
81
+ """Query with requirements that check for repository Community Standards files."""
82
+
83
+ def __init__(self) -> None:
84
+ super().__init__(
85
+ "CommunityStandardsQuery",
86
+ ExecutionStyle.Parallel,
87
+ [
88
+ ReadMe(),
89
+ CodeOfConduct(),
90
+ Contributing(),
91
+ LicenseFile(),
92
+ SecurityPolicy(),
93
+ IssueTemplates(),
94
+ PullRequestTemplate(),
95
+ CodeOwners(),
96
+ ],
97
+ )
@@ -42,7 +42,7 @@ class EnableRulesetRequirementImpl(EnableRequirementImpl):
42
42
  """\
43
43
  1) Visit '{session.github_url}/settings/rules'.
44
44
  2) Find or create a ruleset on the branch '{branch}'.
45
- 3) Go to '{__ruleset_value}'.
45
+ 3) Go to {__ruleset_value}.
46
46
  4) {__enabled_str} the rule.
47
47
  """
48
48
  )
@@ -129,7 +129,7 @@ class EnableRulesetRequirementImpl(EnableRequirementImpl):
129
129
 
130
130
  return self.EvaluateImplResult(
131
131
  EvaluateResult.Error,
132
- f"{self.github_settings_value} rule active in ruleset '{ruleset['name']}'. It should be set to {expected_rule_enabled}",
132
+ f"{self.github_settings_value} rule active in ruleset '{ruleset['name']}'. It should be set to {expected_rule_enabled}.",
133
133
  provide_resolution=True,
134
134
  provide_rationale=provide_rationale,
135
135
  )
@@ -14,7 +14,7 @@ from RepoAuditor.Plugins.GitHub.Module import GitHubModule
14
14
 
15
15
 
16
16
  # ----------------------------------------------------------------------
17
- @pluggy.HookimplMarker(APP_NAME)
17
+ @pluggy.HookimplMarker(APP_NAME)(tryfirst=True)
18
18
  def GetModule() -> Module:
19
19
  """Return GitHub Module."""
20
20
  return GitHubModule()
@@ -0,0 +1,26 @@
1
+ # -------------------------------------------------------------------------------
2
+ # |
3
+ # | Copyright (c) 2024 Scientific Software Engineering Center at Georgia Tech
4
+ # | Distributed under the MIT License.
5
+ # |
6
+ # -------------------------------------------------------------------------------
7
+ """Contains the ScientificSoftwareModule object."""
8
+
9
+ from RepoAuditor.Module import ExecutionStyle
10
+ from RepoAuditor.Plugins.GitHubBase.Module import GitHubBaseModule
11
+ from RepoAuditor.Plugins.ScientificSoftware.ScientificSoftwareQuery import ScientificSoftwareQuery
12
+
13
+
14
+ class ScientificSoftwareModule(GitHubBaseModule):
15
+ """Module that validates existence of repository files for Scientific Software."""
16
+
17
+ def __init__(self) -> None:
18
+ super().__init__(
19
+ "ScientificSoftware",
20
+ "Validates existence of repository files for Scientific Software.",
21
+ ExecutionStyle.Parallel,
22
+ [
23
+ ScientificSoftwareQuery(),
24
+ ],
25
+ requires_explicit_include=True,
26
+ )
@@ -0,0 +1,63 @@
1
+ # -------------------------------------------------------------------------------
2
+ # |
3
+ # | Copyright (c) 2024 Scientific Software Engineering Center at Georgia Tech
4
+ # | Distributed under the MIT License.
5
+ # |
6
+ # -------------------------------------------------------------------------------
7
+ """Contains the Citation requirement."""
8
+
9
+ import textwrap
10
+
11
+ from RepoAuditor.Plugins.CommunityStandards.Impl.ExistsRequirementImpl import ExistsRequirementImpl
12
+
13
+
14
+ class Citation(ExistsRequirementImpl):
15
+ """Validates that a CITATION file is present which is used to make the repository citable.
16
+
17
+ Details of how GitHub looks for citation files can be found here: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files
18
+ """
19
+
20
+ def __init__(self) -> None:
21
+ super().__init__(
22
+ "Citation",
23
+ filename="CITATION",
24
+ possible_locations=[
25
+ # GitHub requires the citation file be in the root directory
26
+ "CITATION.cff",
27
+ "CITATION",
28
+ "CITATIONS",
29
+ "CITATION.bib",
30
+ "CITATIONS.bib",
31
+ "CITATION.md",
32
+ "CITATIONS.md",
33
+ "citation.cff",
34
+ "citation",
35
+ "citations",
36
+ "citation.bib",
37
+ "citations.bib",
38
+ "citation.md",
39
+ "citations.md",
40
+ # R packages are located in the `inst` directory
41
+ "inst/CITATION",
42
+ ],
43
+ resolution=textwrap.dedent(
44
+ """\
45
+ 1) Create a CITATION/CITATIONS file in in the root directory.
46
+
47
+ 2) It can have any of the following extensions:
48
+ - [blank] e.g. `CITATION`
49
+ - CITATION.cff
50
+ - CITATION.md
51
+ - CITATION.bib
52
+ """
53
+ ),
54
+ rationale=textwrap.dedent(
55
+ """\
56
+ A citation file helps users correctly cite your software.
57
+
58
+ For more details, please see
59
+ https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files
60
+ """
61
+ ),
62
+ dynamic_arg_name="unrequired",
63
+ )
@@ -0,0 +1,24 @@
1
+ # -------------------------------------------------------------------------------
2
+ # |
3
+ # | Copyright (c) 2024 Scientific Software Engineering Center at Georgia Tech
4
+ # | Distributed under the MIT License.
5
+ # |
6
+ # -------------------------------------------------------------------------------
7
+ """Contains the ScientificSoftwareQuery object."""
8
+
9
+ from RepoAuditor.Plugins.CommunityStandards.CommunityStandardsQuery import CloneRepositoryMixin
10
+ from RepoAuditor.Plugins.ScientificSoftware.Requirements.Citation import Citation
11
+ from RepoAuditor.Query import ExecutionStyle, Query
12
+
13
+
14
+ class ScientificSoftwareQuery(CloneRepositoryMixin, Query):
15
+ """Query with requirements that check the repository for Scientific Software specific files."""
16
+
17
+ def __init__(self) -> None:
18
+ super().__init__(
19
+ "ScientificSoftwareQuery",
20
+ ExecutionStyle.Parallel,
21
+ [
22
+ Citation(),
23
+ ],
24
+ )
@@ -0,0 +1,20 @@
1
+ # -------------------------------------------------------------------------------
2
+ # |
3
+ # | Copyright (c) 2024 Scientific Software Engineering Center at Georgia Tech
4
+ # | Distributed under the MIT License.
5
+ # |
6
+ # -------------------------------------------------------------------------------
7
+ """Contains Plugin functionality."""
8
+
9
+ import pluggy
10
+
11
+ from RepoAuditor import APP_NAME
12
+ from RepoAuditor.Module import Module
13
+ from RepoAuditor.Plugins.ScientificSoftware.Module import ScientificSoftwareModule
14
+
15
+
16
+ # ----------------------------------------------------------------------
17
+ @pluggy.HookimplMarker(APP_NAME)
18
+ def GetModule() -> Module:
19
+ """Return Scientific Software Module."""
20
+ return ScientificSoftwareModule()
@@ -8,6 +8,7 @@
8
8
 
9
9
  import threading
10
10
  from abc import ABC, abstractmethod
11
+ from collections.abc import Sequence
11
12
  from dataclasses import dataclass
12
13
  from typing import Any, Optional, Protocol
13
14
 
@@ -53,7 +54,7 @@ class Query(ABC):
53
54
  self,
54
55
  name: str,
55
56
  style: ExecutionStyle,
56
- requirements: list[Requirement],
57
+ requirements: Sequence[Requirement],
57
58
  ) -> None:
58
59
  self.name = name
59
60
  self.style = style
@@ -75,7 +76,7 @@ class Query(ABC):
75
76
  status_func: OnStatusFunc,
76
77
  *,
77
78
  max_num_threads: Optional[int] = None,
78
- ) -> list["Query.EvaluateInfo"]:
79
+ ) -> Sequence["Query.EvaluateInfo"]:
79
80
  """Evaluate the Query given the query data and the data from the requirements."""
80
81
  status_info = StatusInfo()
81
82
  status_info_lock = threading.Lock()
@@ -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.3.0"
5
+ __version__ = "0.4.0"
File without changes
@@ -36,6 +36,8 @@ def patch_temp_directory(monkeypatch):
36
36
  class TestCommunityStandardsQuery:
37
37
  """Tests for CommunityStandardsQuery class."""
38
38
 
39
+ query = CommunityStandardsQuery()
40
+
39
41
  def test_GetData(self, module_data, monkeypatch):
40
42
  """Test the GetData method."""
41
43
  monkeypatch.setattr(
@@ -53,8 +55,7 @@ class TestCommunityStandardsQuery:
53
55
  mock_clone_from,
54
56
  )
55
57
 
56
- query = CommunityStandardsQuery()
57
- query_data = query.GetData(module_data)
58
+ query_data = self.query.GetData(module_data)
58
59
 
59
60
  assert query_data["repo_dir"].name == "test_temp_directory"
60
61
 
@@ -77,8 +78,7 @@ class TestCommunityStandardsQuery:
77
78
 
78
79
  monkeypatch.setattr(Repo, "clone_from", mock_clone_from)
79
80
 
80
- query = CommunityStandardsQuery()
81
- _ = query.GetData(module_data)
81
+ _ = self.query.GetData(module_data)
82
82
 
83
83
  def test_GetData_does_not_add_pat(self, module_data, monkeypatch):
84
84
  """Test the GetData method preserves the URL when no PAT is provided"""
@@ -97,8 +97,7 @@ class TestCommunityStandardsQuery:
97
97
 
98
98
  monkeypatch.setattr(Repo, "clone_from", mock_clone_from)
99
99
 
100
- query = CommunityStandardsQuery()
101
- _ = query.GetData(module_data)
100
+ _ = self.query.GetData(module_data)
102
101
 
103
102
  def test_GetData_handles_gitpython_errors(self, module_data, monkeypatch):
104
103
  """Test the GetData method handles errors raised by the gitpyhon module"""
@@ -115,15 +114,13 @@ class TestCommunityStandardsQuery:
115
114
 
116
115
  monkeypatch.setattr(Repo, "clone_from", mock_clone_from)
117
116
 
118
- query = CommunityStandardsQuery()
119
117
  with pytest.raises(RuntimeError) as e_info:
120
- _ = query.GetData(module_data)
118
+ _ = self.query.GetData(module_data)
121
119
  assert gitpython_error_msg in str(e_info)
122
120
 
123
121
  def test_Cleanup(self, module_data):
124
122
  """Test the Cleanup method."""
125
- query = CommunityStandardsQuery()
126
123
  module_data["repo_dir"] = MockTemporaryDirectory()
127
- result = query.Cleanup(module_data)
124
+ result = self.query.Cleanup(module_data)
128
125
 
129
126
  assert result is None
@@ -0,0 +1,16 @@
1
+ # -------------------------------------------------------------------------------
2
+ # |
3
+ # | Copyright (c) 2024 Scientific Software Engineering Center at Georgia Tech
4
+ # | Distributed under the MIT License.
5
+ # |
6
+ # -------------------------------------------------------------------------------
7
+ """Unit tests for ScientificSoftwareQuery.py"""
8
+
9
+ from RepoAuditor.Plugins.ScientificSoftware.ScientificSoftwareQuery import ScientificSoftwareQuery
10
+ from CommunityStandards.CommunityStandardsQuery_UnitTest import TestCommunityStandardsQuery
11
+
12
+
13
+ class TestScientificSoftwareQuery(TestCommunityStandardsQuery):
14
+ """Tests for ScientificSoftwareQuery class."""
15
+
16
+ query = ScientificSoftwareQuery()
@@ -0,0 +1,35 @@
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 ScientificSoftware plugin."""
8
+
9
+ import pytest
10
+ from dbrownell_Common.TestHelpers.StreamTestHelpers import (
11
+ InitializeStreamCapabilities,
12
+ )
13
+ from typer.testing import CliRunner
14
+ from utilities import ScrubDurationGithuburlAndSpaces
15
+
16
+ from RepoAuditor.EntryPoint import app
17
+
18
+ # ----------------------------------------------------------------------
19
+ pytest.fixture(InitializeStreamCapabilities(), scope="session", autouse=True)
20
+
21
+
22
+ # ----------------------------------------------------------------------
23
+ class TestScientificSoftware:
24
+ """End-to-end tests for files in a GitHub repository which implements scientific software."""
25
+
26
+ # ----------------------------------------------------------------------
27
+ def test_NoCitation(self, pat_args, snapshot):
28
+ """Test if no CITATION file exists in the repository."""
29
+ result = CliRunner().invoke(
30
+ app,
31
+ pat_args,
32
+ )
33
+
34
+ assert result.exit_code == -1, result.output
35
+ assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
@@ -744,7 +744,7 @@
744
744
  │ │ ---------- │ │
745
745
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
746
746
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
747
- │ │ 3) Go to ''Block force pushes''. │ │
747
+ │ │ 3) Go to 'Block force pushes'. │ │
748
748
  │ │ 4) Enable the rule. │ │
749
749
  │ │ │ │
750
750
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -810,14 +810,14 @@
810
810
  │ │ are pushed' is set to False. │ │
811
811
  │ │ │ │
812
812
  │ │ ERROR: 'Require a pull request before merging -> Dismiss stale pull request approvals when new commits are │ │
813
- │ │ pushed' rule active in ruleset 'main'. It should be set to False │ │
813
+ │ │ pushed' rule active in ruleset 'main'. It should be set to False. │ │
814
814
  │ │ │ │
815
815
  │ │ Resolution │ │
816
816
  │ │ ---------- │ │
817
817
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
818
818
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
819
- │ │ 3) Go to ''Require a pull request before merging -> Dismiss stale pull request approvals when new commits are │ │
820
- │ │ pushed''. │ │
819
+ │ │ 3) Go to 'Require a pull request before merging -> Dismiss stale pull request approvals when new commits are │ │
820
+ │ │ pushed'. │ │
821
821
  │ │ 4) Disable the rule. │ │
822
822
  │ │ │ │
823
823
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -866,13 +866,13 @@
866
866
  │ │ set to False. │ │
867
867
  │ │ │ │
868
868
  │ │ ERROR: 'Require a pull request before merging -> Require approval of the most recent reviewable push' rule │ │
869
- │ │ active in ruleset 'main'. It should be set to False │ │
869
+ │ │ active in ruleset 'main'. It should be set to False. │ │
870
870
  │ │ │ │
871
871
  │ │ Resolution │ │
872
872
  │ │ ---------- │ │
873
873
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
874
874
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
875
- │ │ 3) Go to ''Require a pull request before merging -> Require approval of the most recent reviewable push''. │ │
875
+ │ │ 3) Go to 'Require a pull request before merging -> Require approval of the most recent reviewable push'. │ │
876
876
  │ │ 4) Disable the rule. │ │
877
877
  │ │ │ │
878
878
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -920,7 +920,7 @@
920
920
  │ │ Validates that 'Require a pull request before merging -> Required approvals' is set to False. │ │
921
921
  │ │ │ │
922
922
  │ │ ERROR: 'Require a pull request before merging -> Required approvals' rule active in ruleset 'main'. It should be │ │
923
- │ │ set to False │ │
923
+ │ │ set to False. │ │
924
924
  │ │ │ │
925
925
  │ │ Resolution │ │
926
926
  │ │ ---------- │ │
@@ -980,7 +980,7 @@
980
980
  │ │ ---------- │ │
981
981
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
982
982
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
983
- │ │ 3) Go to ''Require a pull request before merging -> Require review from Code Owners''. │ │
983
+ │ │ 3) Go to 'Require a pull request before merging -> Require review from Code Owners'. │ │
984
984
  │ │ 4) Enable the rule. │ │
985
985
  │ │ │ │
986
986
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1027,13 +1027,13 @@
1027
1027
  │ │ │ │
1028
1028
  │ │ Validates that 'Require code scanning results' is set to False. │ │
1029
1029
  │ │ │ │
1030
- │ │ ERROR: 'Require code scanning results' rule active in ruleset 'main'. It should be set to False │ │
1030
+ │ │ ERROR: 'Require code scanning results' rule active in ruleset 'main'. It should be set to False. │ │
1031
1031
  │ │ │ │
1032
1032
  │ │ Resolution │ │
1033
1033
  │ │ ---------- │ │
1034
1034
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1035
1035
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1036
- │ │ 3) Go to ''Require code scanning results''. │ │
1036
+ │ │ 3) Go to 'Require code scanning results'. │ │
1037
1037
  │ │ 4) Disable the rule. │ │
1038
1038
  │ │ │ │
1039
1039
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1082,13 +1082,13 @@
1082
1082
  │ │ to False. │ │
1083
1083
  │ │ │ │
1084
1084
  │ │ ERROR: 'Require a pull request before merging -> Require conversation resolution before merging' rule active in │ │
1085
- │ │ ruleset 'main'. It should be set to False │ │
1085
+ │ │ ruleset 'main'. It should be set to False. │ │
1086
1086
  │ │ │ │
1087
1087
  │ │ Resolution │ │
1088
1088
  │ │ ---------- │ │
1089
1089
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1090
1090
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1091
- │ │ 3) Go to ''Require a pull request before merging -> Require conversation resolution before merging''. │ │
1091
+ │ │ 3) Go to 'Require a pull request before merging -> Require conversation resolution before merging'. │ │
1092
1092
  │ │ 4) Disable the rule. │ │
1093
1093
  │ │ │ │
1094
1094
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1141,7 +1141,7 @@
1141
1141
  │ │ ---------- │ │
1142
1142
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1143
1143
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1144
- │ │ 3) Go to ''Require linear history''. │ │
1144
+ │ │ 3) Go to 'Require linear history'. │ │
1145
1145
  │ │ 4) Enable the rule. │ │
1146
1146
  │ │ │ │
1147
1147
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1188,13 +1188,13 @@
1188
1188
  │ │ │ │
1189
1189
  │ │ Validates that 'Require a pull request before merging' is set to False. │ │
1190
1190
  │ │ │ │
1191
- │ │ ERROR: 'Require a pull request before merging' rule active in ruleset 'main'. It should be set to False │ │
1191
+ │ │ ERROR: 'Require a pull request before merging' rule active in ruleset 'main'. It should be set to False. │ │
1192
1192
  │ │ │ │
1193
1193
  │ │ Resolution │ │
1194
1194
  │ │ ---------- │ │
1195
1195
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1196
1196
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1197
- │ │ 3) Go to ''Require a pull request before merging''. │ │
1197
+ │ │ 3) Go to 'Require a pull request before merging'. │ │
1198
1198
  │ │ 4) Disable the rule. │ │
1199
1199
  │ │ │ │
1200
1200
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1241,13 +1241,13 @@
1241
1241
  │ │ │ │
1242
1242
  │ │ Validates that 'Require signed commits' is set to False. │ │
1243
1243
  │ │ │ │
1244
- │ │ ERROR: 'Require signed commits' rule active in ruleset 'main'. It should be set to False │ │
1244
+ │ │ ERROR: 'Require signed commits' rule active in ruleset 'main'. It should be set to False. │ │
1245
1245
  │ │ │ │
1246
1246
  │ │ Resolution │ │
1247
1247
  │ │ ---------- │ │
1248
1248
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1249
1249
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1250
- │ │ 3) Go to ''Require signed commits''. │ │
1250
+ │ │ 3) Go to 'Require signed commits'. │ │
1251
1251
  │ │ 4) Disable the rule. │ │
1252
1252
  │ │ │ │
1253
1253
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1294,13 +1294,13 @@
1294
1294
  │ │ │ │
1295
1295
  │ │ Validates that 'Require status checks to pass' is set to False. │ │
1296
1296
  │ │ │ │
1297
- │ │ ERROR: 'Require status checks to pass' rule active in ruleset 'main'. It should be set to False │ │
1297
+ │ │ ERROR: 'Require status checks to pass' rule active in ruleset 'main'. It should be set to False. │ │
1298
1298
  │ │ │ │
1299
1299
  │ │ Resolution │ │
1300
1300
  │ │ ---------- │ │
1301
1301
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1302
1302
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1303
- │ │ 3) Go to ''Require status checks to pass''. │ │
1303
+ │ │ 3) Go to 'Require status checks to pass'. │ │
1304
1304
  │ │ 4) Disable the rule. │ │
1305
1305
  │ │ │ │
1306
1306
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1353,7 +1353,7 @@
1353
1353
  │ │ ---------- │ │
1354
1354
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1355
1355
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1356
- │ │ 3) Go to ''Require deployments to succeed''. │ │
1356
+ │ │ 3) Go to 'Require deployments to succeed'. │ │
1357
1357
  │ │ 4) Enable the rule. │ │
1358
1358
  │ │ │ │
1359
1359
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1402,13 +1402,13 @@
1402
1402
  │ │ False. │ │
1403
1403
  │ │ │ │
1404
1404
  │ │ ERROR: 'Require status checks to pass -> Require branches to be up to date before merging' rule active in │ │
1405
- │ │ ruleset 'main'. It should be set to False │ │
1405
+ │ │ ruleset 'main'. It should be set to False. │ │
1406
1406
  │ │ │ │
1407
1407
  │ │ Resolution │ │
1408
1408
  │ │ ---------- │ │
1409
1409
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1410
1410
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1411
- │ │ 3) Go to ''Require status checks to pass -> Require branches to be up to date before merging''. │ │
1411
+ │ │ 3) Go to 'Require status checks to pass -> Require branches to be up to date before merging'. │ │
1412
1412
  │ │ 4) Disable the rule. │ │
1413
1413
  │ │ │ │
1414
1414
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1461,7 +1461,7 @@
1461
1461
  │ │ ---------- │ │
1462
1462
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1463
1463
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1464
- │ │ 3) Go to ''Restrict creations''. │ │
1464
+ │ │ 3) Go to 'Restrict creations'. │ │
1465
1465
  │ │ 4) Enable the rule. │ │
1466
1466
  │ │ │ │
1467
1467
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1514,7 +1514,7 @@
1514
1514
  │ │ ---------- │ │
1515
1515
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1516
1516
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1517
- │ │ 3) Go to ''Restrict deletions''. │ │
1517
+ │ │ 3) Go to 'Restrict deletions'. │ │
1518
1518
  │ │ 4) Enable the rule. │ │
1519
1519
  │ │ │ │
1520
1520
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
@@ -1567,7 +1567,7 @@
1567
1567
  │ │ ---------- │ │
1568
1568
  │ │ 1) Visit '<scrubbed-github-url>'. │ │
1569
1569
  │ │ 2) Find or create a ruleset on the branch 'main'. │ │
1570
- │ │ 3) Go to ''Restrict updates''. │ │
1570
+ │ │ 3) Go to 'Restrict updates'. │ │
1571
1571
  │ │ 4) Enable the rule. │ │
1572
1572
  │ │ │ │
1573
1573
  │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │