RepoAuditor 0.3.1__tar.gz → 0.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {repoauditor-0.3.1 → repoauditor-0.4.1}/PKG-INFO +1 -1
- {repoauditor-0.3.1 → repoauditor-0.4.1}/docs/DEVELOPMENT.md +1 -1
- {repoauditor-0.3.1 → repoauditor-0.4.1}/pyproject.toml +1 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/CommunityStandardsQuery.py +23 -18
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetQuery.py +3 -3
- repoauditor-0.3.1/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/AllowMainlineForcePushes.py → repoauditor-0.4.1/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/BlockMainlineForcePushes.py +7 -7
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHubPlugin.py +1 -1
- repoauditor-0.4.1/src/RepoAuditor/Plugins/ScientificSoftware/Module.py +26 -0
- repoauditor-0.4.1/src/RepoAuditor/Plugins/ScientificSoftware/Requirements/Citation.py +63 -0
- repoauditor-0.4.1/src/RepoAuditor/Plugins/ScientificSoftware/ScientificSoftwareQuery.py +24 -0
- repoauditor-0.4.1/src/RepoAuditor/Plugins/ScientificSoftwarePlugin.py +20 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Query.py +3 -2
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/__init__.py +1 -1
- repoauditor-0.4.1/src/RepoAuditor/py.typed +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/CommunityStandards/CommunityStandardsQuery_UnitTest.py +7 -10
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubEnterprise_EndToEndTest.py +3 -3
- repoauditor-0.3.1/tests/Plugins/GitHubModule/RulesetRequirements/AllowMainlineForcePushesRule_UnitTest.py → repoauditor-0.4.1/tests/Plugins/GitHubModule/RulesetRequirements/BlockMainlineForcePushesRule_UnitTest.py +7 -7
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequireUpToDateBranchesRule_UnitTest.py +1 -1
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHub_EndToEndTest.py +3 -3
- repoauditor-0.4.1/tests/Plugins/ScientificSoftware/ScientificSoftwareQuery_UnitTest.py +16 -0
- repoauditor-0.4.1/tests/Plugins/ScientificSoftware_EndToEndTest.py +35 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/__snapshots__/GitHubEnterprise_EndToEndTest.ambr +32 -32
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/__snapshots__/GitHub_EndToEndTest.ambr +44 -44
- repoauditor-0.4.1/tests/Plugins/__snapshots__/ScientificSoftware_EndToEndTest.ambr +65 -0
- repoauditor-0.4.1/tests/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.copier-answers.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/CODEOWNERS +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/ISSUE_TEMPLATE/custom.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/actions/release_impl/action.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/pull_request_template.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/release_sources.yaml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/workflows/CICD.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/workflows/CICD_impl.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/workflows/EndToEnd.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.github/workflows/codeql.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.gitignore +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.pre-commit-config.yaml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/.python-version +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/CODE_OF_CONDUCT.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/GOVERNANCE.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/LICENSE +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/MAINTAINERS.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/README.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/SECURITY.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/default_config.yaml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/docs/CONTRIBUTING.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/docs/PAT.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/docs/config_file.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/docs/index.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/docs/troubleshooting.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/docs/usage.md +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/minisign_key.pub +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/mkdocs.yml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/AutoGitSemVer.yaml +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/CommandLineProcessor.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Display.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/EntryPoint.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/ExecuteModules.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Impl/ParallelSequentialProcessor.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Impl/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Module.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugin.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Impl/ExistsRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Impl/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Module.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOfConduct.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOwners.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/Contributing.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/IssueTemplates.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/LicenseFile.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/PullRequestTemplates.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/ReadMe.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/SecurityPolicy.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandards/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/CommunityStandardsPlugin.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionQuery.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowDeletions.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowMainlineForcePushes.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DoNotAllowBypassSettings.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/EnsureStatusChecks.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicEnableRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicValueRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovals.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireCodeOwnerReview.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireConversationResolution.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireLinearHistory.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequirePullRequests.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireSignedCommits.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireStatusChecksToPass.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireUpToDateBranches.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQuery.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/Protected.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/Impl/Common.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRulesetRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/Impl/ValueRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/Impl/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/Module.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/DismissStalePullRequestApprovals.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/EnsureStatusChecks.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireApprovalMostRecentPush.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireApprovals.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireCodeOwnerReview.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireCodeScanningResults.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireConversationResolution.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireLinearHistory.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequirePullRequests.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireSignedCommits.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireStatusChecksToPass.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireSuccessfulDeployments.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireUpToDateBranches.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RestrictCreations.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RestrictDeletions.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RestrictUpdates.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardQuery.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/AutoMerge.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DefaultBranch.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DeleteHeadBranches.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DependabotSecurityUpdates.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Description.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardEnableRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardValueRequirementImpl.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/License.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommit.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommitMessage.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Private.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/RebaseMergeCommit.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanning.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanningPushProtection.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashCommitMerge.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashMergeCommitMessage.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SuggestUpdatingPullRequestBranches.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportDiscussions.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportIssues.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportProjects.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportWikis.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/TemplateRepository.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/WebCommitSignoff.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHub/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHubBase/Module.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Plugins/GitHubBase/__init__.py +0 -0
- {repoauditor-0.3.1/src/RepoAuditor/Plugins → repoauditor-0.4.1/src/RepoAuditor/Plugins/ScientificSoftware/Requirements}/__init__.py +0 -0
- {repoauditor-0.3.1/tests → repoauditor-0.4.1/src/RepoAuditor/Plugins/ScientificSoftware}/__init__.py +0 -0
- /repoauditor-0.3.1/src/RepoAuditor/py.typed → /repoauditor-0.4.1/src/RepoAuditor/Plugins/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/src/RepoAuditor/Requirement.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/CommandLineProcessor_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/EntryPoint_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/ExecuteModules_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Module_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugin_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/CommunityStandards/CommunityStandards_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/CommunityStandards/ExistsRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/CommunityStandards_EndToEndTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicBranchProtectionQuery_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/EnsureStatusChecks_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovals_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireCodeOwnerReview_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireUpToDateBranches_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ClassicValueRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/DefaultBranchQuery_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/DefaultBranchRequirements/Protected_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/EnableRulesetRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/GitHubModule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/GitHubSession_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/DismissStalePullRequestApprovalsRule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/EnsureStatusChecksRule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequireApprovalMostRecentPushRule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequireApprovalsRule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequireCodeOwnerReviewRule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequireConversationResolutionRule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequirePullRequests_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequireSignedCommits_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/RequireStatusChecksToPassRule_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulesetRequirements/__init__.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/RulsesetQuery_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardQuery_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/DependabotSecurityUpdates_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/Description_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/License_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/MergeCommitMessage_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/Private_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/SecretScanningPushProtection_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/SecretScanning_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/StandardRequirements/SquashMergeCommitMessage_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/ValueRequrementImpl_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/GitHubModule/fixtures.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/__snapshots__/CommunityStandards_EndToEndTest.ambr +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/conftest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Plugins/utilities.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Query_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/Requirement_UnitTest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/__snapshots__/ExecuteModules_UnitTest.ambr +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/tests/conftest.py +0 -0
- {repoauditor-0.3.1 → repoauditor-0.4.1}/uv.lock +0 -0
|
@@ -107,7 +107,7 @@ Please follow the steps below to complete the configuration.
|
|
|
107
107
|
- Enable `Require status checks to pass`.
|
|
108
108
|
- Enable `Require branches to be up to date before merging`.
|
|
109
109
|
- Set the `CI+CD Workflow / Validate (ubuntu-latest, 3.12)` or an equivalent check.
|
|
110
|
-
-
|
|
110
|
+
- Enable `Block force pushes`.
|
|
111
111
|
- Be sure to hit `Save changes` at the end.
|
|
112
112
|
|
|
113
113
|
### Development Activities
|
|
@@ -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
|
|
27
|
-
"""
|
|
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
|
+
)
|
|
@@ -11,8 +11,8 @@ 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.GitHub.RulesetRequirements.
|
|
15
|
-
|
|
14
|
+
from RepoAuditor.Plugins.GitHub.RulesetRequirements.BlockMainlineForcePushes import (
|
|
15
|
+
BlockMainlineForcePushesRule,
|
|
16
16
|
)
|
|
17
17
|
from RepoAuditor.Plugins.GitHub.RulesetRequirements.DismissStalePullRequestApprovals import (
|
|
18
18
|
DismissStalePullRequestApprovalsRule,
|
|
@@ -68,7 +68,7 @@ class RulesetQuery(Query):
|
|
|
68
68
|
RequireStatusChecksToPassRule(),
|
|
69
69
|
RequireUpToDateBranchesRule(),
|
|
70
70
|
EnsureStatusChecksRule(),
|
|
71
|
-
|
|
71
|
+
BlockMainlineForcePushesRule(),
|
|
72
72
|
RequireCodeScanningResultsRule(),
|
|
73
73
|
],
|
|
74
74
|
)
|
|
@@ -4,21 +4,21 @@
|
|
|
4
4
|
# | Distributed under the MIT License.
|
|
5
5
|
# |
|
|
6
6
|
# -------------------------------------------------------------------------------
|
|
7
|
-
"""Contains the
|
|
7
|
+
"""Contains the BlockMainlineForcePushesRule requirement."""
|
|
8
8
|
|
|
9
9
|
import textwrap
|
|
10
10
|
|
|
11
11
|
from RepoAuditor.Plugins.GitHub.Impl.EnableRulesetRequirementImpl import EnableRulesetRequirementImpl
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class
|
|
15
|
-
"""Requirement for rule to
|
|
14
|
+
class BlockMainlineForcePushesRule(EnableRulesetRequirementImpl):
|
|
15
|
+
"""Requirement for rule to block force pushes to the mainline branch."""
|
|
16
16
|
|
|
17
17
|
def __init__(self) -> None:
|
|
18
18
|
super().__init__(
|
|
19
|
-
name="
|
|
20
|
-
enabled_by_default=
|
|
21
|
-
dynamic_arg_name="
|
|
19
|
+
name="BlockMainlineForcePushesRule",
|
|
20
|
+
enabled_by_default=True,
|
|
21
|
+
dynamic_arg_name="no",
|
|
22
22
|
github_ruleset_type="non_fast_forward",
|
|
23
23
|
github_ruleset_value="Block force pushes",
|
|
24
24
|
get_configuration_value_func=self._GetValue,
|
|
@@ -34,7 +34,7 @@ class AllowMainlineForcePushesRule(EnableRulesetRequirementImpl):
|
|
|
34
34
|
|
|
35
35
|
Reasons to Override this Default
|
|
36
36
|
--------------------------------
|
|
37
|
-
|
|
37
|
+
- If the repository only has a single developer or if is private.
|
|
38
38
|
""",
|
|
39
39
|
),
|
|
40
40
|
)
|
|
@@ -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:
|
|
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
|
-
) ->
|
|
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()
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -538,9 +538,9 @@ class TestRulesets:
|
|
|
538
538
|
assert result.exit_code == -1, result.output
|
|
539
539
|
assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
|
|
540
540
|
|
|
541
|
-
def
|
|
542
|
-
"""Test for requirement `Block force pushes to the specified branch` is
|
|
543
|
-
result = CliRunner().invoke(app, pat_args + ["--GitHub-
|
|
541
|
+
def test_NoBlockMainlineForcePushesRule(self, pat_args, snapshot):
|
|
542
|
+
"""Test for requirement `Block force pushes to the specified branch` is disabled in the ruleset for the `main` branch."""
|
|
543
|
+
result = CliRunner().invoke(app, pat_args + ["--GitHub-no-BlockMainlineForcePushesRule"])
|
|
544
544
|
|
|
545
545
|
# Since the repo ruleset has the requirement disabled,
|
|
546
546
|
# we should get an error.
|
|
@@ -4,22 +4,22 @@
|
|
|
4
4
|
# | Distributed under the MIT License.
|
|
5
5
|
# |
|
|
6
6
|
# -------------------------------------------------------------------------------
|
|
7
|
-
"""Unit tests for
|
|
7
|
+
"""Unit tests for BlockMainlineForcePushesRule.py"""
|
|
8
8
|
|
|
9
|
-
from RepoAuditor.Plugins.GitHub.RulesetRequirements.
|
|
10
|
-
|
|
9
|
+
from RepoAuditor.Plugins.GitHub.RulesetRequirements.BlockMainlineForcePushes import (
|
|
10
|
+
BlockMainlineForcePushesRule,
|
|
11
11
|
)
|
|
12
12
|
from RepoAuditor.Requirement import EvaluateResult
|
|
13
13
|
|
|
14
14
|
from . import create_rule
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
class
|
|
18
|
-
"""Unit tests for the
|
|
17
|
+
class TestBlockMainlineForcePushesRule:
|
|
18
|
+
"""Unit tests for the BlockMainlineForcePushesRule requirement."""
|
|
19
19
|
|
|
20
20
|
def test_Enabled(self, query_data):
|
|
21
21
|
"""Test if the rule is enabled on the main branch."""
|
|
22
|
-
requirement =
|
|
22
|
+
requirement = BlockMainlineForcePushesRule()
|
|
23
23
|
|
|
24
24
|
query_data["rules"].append(
|
|
25
25
|
create_rule(
|
|
@@ -36,7 +36,7 @@ class TestAllowMainlineForcePushesRule:
|
|
|
36
36
|
|
|
37
37
|
def test_Disabled(self, query_data):
|
|
38
38
|
"""Test if the rule is disabled by not providing the appropriate rule within the ruleset."""
|
|
39
|
-
requirement =
|
|
39
|
+
requirement = BlockMainlineForcePushesRule()
|
|
40
40
|
|
|
41
41
|
query_data["rules"].append(
|
|
42
42
|
create_rule(
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# | Distributed under the MIT License.
|
|
5
5
|
# |
|
|
6
6
|
# -------------------------------------------------------------------------------
|
|
7
|
-
"""Unit tests for
|
|
7
|
+
"""Unit tests for RequireUpToDateBranchesRule.py"""
|
|
8
8
|
|
|
9
9
|
from RepoAuditor.Plugins.GitHub.RulesetRequirements.RequireUpToDateBranches import (
|
|
10
10
|
RequireUpToDateBranchesRule,
|
|
@@ -568,9 +568,9 @@ class TestRulesets:
|
|
|
568
568
|
assert result.exit_code == -1, result.output
|
|
569
569
|
assert ScrubDurationGithuburlAndSpaces(result.stdout) == snapshot
|
|
570
570
|
|
|
571
|
-
def
|
|
572
|
-
"""Test for requirement `Block force pushes to the specified branch` is
|
|
573
|
-
result = CliRunner().invoke(app, pat_args + ["--GitHub-
|
|
571
|
+
def test_NoBlockMainlineForcePushesRule(self, pat_args, snapshot):
|
|
572
|
+
"""Test for requirement `Block force pushes to the specified branch` is disabled in the ruleset for the `main` branch."""
|
|
573
|
+
result = CliRunner().invoke(app, pat_args + ["--GitHub-no-BlockMainlineForcePushesRule"])
|
|
574
574
|
|
|
575
575
|
# Since the repo ruleset has the requirement disabled,
|
|
576
576
|
# we should get an error.
|
|
@@ -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
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
│ │
|
|
24
24
|
│ [31m╭─[0m[31m [Error] AllowDeletions [0m[31m────────────────────────────────────────────────────────────────────────────────────────[0m[31m─╮[0m │
|
|
25
25
|
│ [31m│[0m [31m│[0m │
|
|
26
|
-
│ [31m│[0m Validates that 'Allow deletions' is set to
|
|
26
|
+
│ [31m│[0m Validates that 'Allow deletions' is set to False. [31m│[0m │
|
|
27
27
|
│ [31m│[0m [31m│[0m │
|
|
28
28
|
│ [31m│[0m ERROR: 'Allow deletions' must be set to 'True' (it is currently set to 'False'). [31m│[0m │
|
|
29
29
|
│ [31m│[0m [31m│[0m │
|
|
@@ -712,7 +712,24 @@
|
|
|
712
712
|
|
|
713
713
|
'''
|
|
714
714
|
# ---
|
|
715
|
-
# name: TestRulesets.
|
|
715
|
+
# name: TestRulesets.test_Default
|
|
716
|
+
'''
|
|
717
|
+
Processing 1 module...
|
|
718
|
+
Processing 'GitHub' (1 of 1)...
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
DONE! ([31;1m-1[0m, <scrubbed duration>)
|
|
724
|
+
DONE! ([31;1m-1[0m, <scrubbed duration>)
|
|
725
|
+
[31;1mERROR:[0m 'branch'
|
|
726
|
+
|
|
727
|
+
Results: DONE! ([31;1m-1[0m, <scrubbed duration>)
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
'''
|
|
731
|
+
# ---
|
|
732
|
+
# name: TestRulesets.test_DismissStalePullRequestApprovalsRule
|
|
716
733
|
'''
|
|
717
734
|
Processing 1 module...
|
|
718
735
|
Processing 'GitHub' (1 of 1)...
|
|
@@ -734,18 +751,21 @@
|
|
|
734
751
|
│ [37mErrors: 1 (1.89%)[0m │
|
|
735
752
|
│ [37mSkipped: 5 (9.43%)[0m │
|
|
736
753
|
│ │
|
|
737
|
-
│ [31m╭─[0m[31m [Error]
|
|
754
|
+
│ [31m╭─[0m[31m [Error] DismissStalePullRequestApprovalsRule [0m[31m──────────────────────────────────────────────────────────────────[0m[31m─╮[0m │
|
|
738
755
|
│ [31m│[0m [31m│[0m │
|
|
739
|
-
│ [31m│[0m Validates that '
|
|
756
|
+
│ [31m│[0m Validates that 'Require a pull request before merging -> Dismiss stale pull request approvals when new commits [31m│[0m │
|
|
757
|
+
│ [31m│[0m are pushed' is set to False. [31m│[0m │
|
|
740
758
|
│ [31m│[0m [31m│[0m │
|
|
741
|
-
│ [31m│[0m ERROR:
|
|
759
|
+
│ [31m│[0m ERROR: 'Require a pull request before merging -> Dismiss stale pull request approvals when new commits are [31m│[0m │
|
|
760
|
+
│ [31m│[0m pushed' rule active in ruleset 'main'. It should be set to False. [31m│[0m │
|
|
742
761
|
│ [31m│[0m [31m│[0m │
|
|
743
762
|
│ [31m│[0m Resolution [31m│[0m │
|
|
744
763
|
│ [31m│[0m ---------- [31m│[0m │
|
|
745
764
|
│ [31m│[0m 1) Visit '<scrubbed-github-url>'. [31m│[0m │
|
|
746
765
|
│ [31m│[0m 2) Find or create a ruleset on the branch 'main'. [31m│[0m │
|
|
747
|
-
│ [31m│[0m 3) Go to '
|
|
748
|
-
│ [31m│[0m
|
|
766
|
+
│ [31m│[0m 3) Go to 'Require a pull request before merging -> Dismiss stale pull request approvals when new commits are [31m│[0m │
|
|
767
|
+
│ [31m│[0m pushed'. [31m│[0m │
|
|
768
|
+
│ [31m│[0m 4) Disable the rule. [31m│[0m │
|
|
749
769
|
│ [31m│[0m [31m│[0m │
|
|
750
770
|
│ [31m╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯[0m │
|
|
751
771
|
│ [37m╭─[0m[37m Metrics [0m[37m───────────────────────────────────────────────────────────────────────────────────────────────────────[0m[37m─╮[0m │
|
|
@@ -765,24 +785,7 @@
|
|
|
765
785
|
|
|
766
786
|
'''
|
|
767
787
|
# ---
|
|
768
|
-
# name: TestRulesets.
|
|
769
|
-
'''
|
|
770
|
-
Processing 1 module...
|
|
771
|
-
Processing 'GitHub' (1 of 1)...
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
DONE! ([31;1m-1[0m, <scrubbed duration>)
|
|
777
|
-
DONE! ([31;1m-1[0m, <scrubbed duration>)
|
|
778
|
-
[31;1mERROR:[0m 'branch'
|
|
779
|
-
|
|
780
|
-
Results: DONE! ([31;1m-1[0m, <scrubbed duration>)
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
'''
|
|
784
|
-
# ---
|
|
785
|
-
# name: TestRulesets.test_DismissStalePullRequestApprovalsRule
|
|
788
|
+
# name: TestRulesets.test_NoBlockMainlineForcePushesRule
|
|
786
789
|
'''
|
|
787
790
|
Processing 1 module...
|
|
788
791
|
Processing 'GitHub' (1 of 1)...
|
|
@@ -804,20 +807,17 @@
|
|
|
804
807
|
│ [37mErrors: 1 (1.89%)[0m │
|
|
805
808
|
│ [37mSkipped: 5 (9.43%)[0m │
|
|
806
809
|
│ │
|
|
807
|
-
│ [31m╭─[0m[31m [Error]
|
|
810
|
+
│ [31m╭─[0m[31m [Error] BlockMainlineForcePushesRule [0m[31m──────────────────────────────────────────────────────────────────────────[0m[31m─╮[0m │
|
|
808
811
|
│ [31m│[0m [31m│[0m │
|
|
809
|
-
│ [31m│[0m Validates that '
|
|
810
|
-
│ [31m│[0m are pushed' is set to False. [31m│[0m │
|
|
812
|
+
│ [31m│[0m Validates that 'Block force pushes' is set to False. [31m│[0m │
|
|
811
813
|
│ [31m│[0m [31m│[0m │
|
|
812
|
-
│ [31m│[0m ERROR: '
|
|
813
|
-
│ [31m│[0m pushed' rule active in ruleset 'main'. It should be set to False. [31m│[0m │
|
|
814
|
+
│ [31m│[0m ERROR: 'Block force pushes' rule active in ruleset 'main'. It should be set to False. [31m│[0m │
|
|
814
815
|
│ [31m│[0m [31m│[0m │
|
|
815
816
|
│ [31m│[0m Resolution [31m│[0m │
|
|
816
817
|
│ [31m│[0m ---------- [31m│[0m │
|
|
817
818
|
│ [31m│[0m 1) Visit '<scrubbed-github-url>'. [31m│[0m │
|
|
818
819
|
│ [31m│[0m 2) Find or create a ruleset on the branch 'main'. [31m│[0m │
|
|
819
|
-
│ [31m│[0m 3) Go to '
|
|
820
|
-
│ [31m│[0m pushed'. [31m│[0m │
|
|
820
|
+
│ [31m│[0m 3) Go to 'Block force pushes'. [31m│[0m │
|
|
821
821
|
│ [31m│[0m 4) Disable the rule. [31m│[0m │
|
|
822
822
|
│ [31m│[0m [31m│[0m │
|
|
823
823
|
│ [31m╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯[0m │
|