RepoAuditor 0.2.67__tar.gz → 0.2.69__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.2.69/DEVELOPMENT.md +132 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/PKG-INFO +47 -24
- {repoauditor-0.2.67 → repoauditor-0.2.69}/README.md +46 -23
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowDeletions.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowMainlineForcePushes.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DoNotAllowBypassSettings.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/EnsureStatusChecks.py +2 -2
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireCodeOwnerReview.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireConversationResolution.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireLinearHistory.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequirePullRequests.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireSignedCommits.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireStatusChecksToPass.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireUpToDateBranches.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/Protected.py +2 -2
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/AutoMerge.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DeleteHeadBranches.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommit.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Private.py +2 -2
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/RebaseMergeCommit.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashCommitMerge.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SuggestUpdatingPullRequestBranches.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportDiscussions.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportIssues.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportProjects.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportWikis.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/TemplateRepository.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/WebCommitSignoff.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/__init__.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubEnterprise_EndToEndTest.py +30 -30
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals_UnitTest.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/EnsureStatusChecks_UnitTest.py +6 -6
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush_UnitTest.py +1 -1
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireCodeOwnerReview_UnitTest.py +2 -2
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireUpToDateBranches_UnitTest.py +2 -2
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/DefaultBranchQueryRequirements/Protected_UnitTest.py +3 -3
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/Private_UnitTest.py +4 -4
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHub_EndToEndTest.py +27 -27
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/__snapshots__/GitHub_EndToEndTest.ambr +18 -138
- repoauditor-0.2.67/DEVELOPMENT.md +0 -38
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.copier-answers.yml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/CODEOWNERS +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/ISSUE_TEMPLATE/custom.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/actions/release_impl/action.yml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/pull_request_template.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/release_sources.yaml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/workflows/CICD.yml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/workflows/CICD_impl.yml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/workflows/EndToEnd.yml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.github/workflows/codeql.yml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.gitignore +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.pre-commit-config.yaml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/.python-version +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/CODE_OF_CONDUCT.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/CONTRIBUTING.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/GOVERNANCE.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/LICENSE +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/MAINTAINERS.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/SECURITY.md +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/default_config.yaml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/minisign_key.pub +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/pyproject.toml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/AutoGitSemVer.yaml +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/CommandLineProcessor.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Display.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/EntryPoint.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/ExecuteModules.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Impl/ParallelSequentialProcessor.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Impl/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Module.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugin.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/CommunityStandardsQuery.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Impl/ExistsRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Impl/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Module.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOfConduct.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOwners.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/Contributing.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/IssueTemplates.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/LicenseFile.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/PullRequestTemplates.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/ReadMe.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/SecurityPolicy.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandards/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/CommunityStandardsPlugin.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionQuery.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicEnableRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicValueRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovals.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQuery.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/Impl/Common.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRulesetRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/Impl/ValueRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/Impl/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/Module.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/RulesetQuery.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequirePullRequests.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireSignedCommits.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireStatusChecks.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardQuery.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DefaultBranch.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DependabotSecurityUpdates.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Description.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardEnableRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardValueRequirementImpl.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/License.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommitMessage.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanning.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanningPushProtection.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashMergeCommitMessage.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHub/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHubBase/Module.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHubBase/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/GitHubPlugin.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Plugins/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Query.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/Requirement.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/src/RepoAuditor/py.typed +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/CommandLineProcessor_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/EntryPoint_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/ExecuteModules_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Module_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugin_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/CommunityStandards/CommunityStandardsQuery_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/CommunityStandards/ExistsRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/CommunityStandards/GitHubCommunityStandards_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/CommunityStandards_EndToEndTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicBranchProtectionQuery_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovals_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ClassicValueRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/DefaultBranchQuery_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/EnableRulesetRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/GitHubModule_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/GitHubSession_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/RulesetRequirements_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/RulsesetQuery_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/DependabotSecurityUpdates_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/Description_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/License_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/MergeCommitMessage_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanningPushProtection_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanning_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQueryRequirements/SquashMergeCommitMessage_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/StandardQuery_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/ValueRequrementImpl_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/GitHubModule/fixtures.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/__snapshots__/CommunityStandards_EndToEndTest.ambr +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/__snapshots__/GitHubEnterprise_EndToEndTest.ambr +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/conftest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Plugins/utilities.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Query_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/Requirement_UnitTest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/__init__.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/__snapshots__/ExecuteModules_UnitTest.ambr +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/tests/conftest.py +0 -0
- {repoauditor-0.2.67 → repoauditor-0.2.69}/uv.lock +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# DEVELOPMENT GUIDE
|
|
2
|
+
|
|
3
|
+
## Fork setup
|
|
4
|
+
|
|
5
|
+
| Step | Command Line | Additional Information |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| 1. Fork the repository | -- | https://github.com/gt-sse-center/RepoAuditor/fork |
|
|
8
|
+
| 2. Create a PAT for your forked repository | -- | See [PAT setup instructions](README.md#personal-access-token-pat) |
|
|
9
|
+
| 3. Update your forked repository settings to match RepoAuditor's defaults | -- | -- |
|
|
10
|
+
|
|
11
|
+
## Local Development
|
|
12
|
+
|
|
13
|
+
### Enlistment
|
|
14
|
+
|
|
15
|
+
| Step | Command Line | Additional Information |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| 1. Clone the repository locally. | `git clone https://github.com/gt-sse-center/RepoAuditor` | https://git-scm.com/docs/git-clone |
|
|
18
|
+
| 2. Install [uv](https://github.com/astral-sh/uv). | `curl -LsSf https://astral.sh/uv/install.sh \| sh` on macOS and Linux or <br/>`powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 \| iex"` on Windows | https://docs.astral.sh |
|
|
19
|
+
| 3. Install dependencies. | `uv sync` | https://docs.astral.sh/uv/concepts/projects/sync |
|
|
20
|
+
| 4. Install [pre-commit](https://pre-commit.com/) hooks | `uv run pre-commit install` | https://pre-commit.com/#1-install-pre-commit |
|
|
21
|
+
| 5. If you wish to test against an enterprise server, add a remote named `enterprise` with the corresponding URL | E.g. `git remote add enterprise git@github.gatech.edu:sse-center/RepoAuditor.git` | |
|
|
22
|
+
|
|
23
|
+
### Setup
|
|
24
|
+
|
|
25
|
+
#### Basic Setup
|
|
26
|
+
|
|
27
|
+
Please follow these steps to allow for local testing.
|
|
28
|
+
|
|
29
|
+
- Fork the `RepoAuditor` repository. We will test against the fork since your generated PAT is applicable only for the fork.
|
|
30
|
+
- Create a PAT file as detailed in the [README](https://github.com/gt-sse-center/RepoAuditor/blob/main/README.md#personal-access-token-pat).
|
|
31
|
+
- Set your forked repository as the `origin` remote (this should already be the case but it's good to verify).
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
git remote add origin git@github.com:<github-username>/RepoAuditor.git
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- Update the URL in `default_config.yaml` to point to your fork.
|
|
38
|
+
- You should now be able to run the following and see valid output. There will be errors, which we will tackle next.
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
uv run RepoAuditor --config default_config.yaml --GitHub-pat PAT.txt
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### Local Testing
|
|
45
|
+
|
|
46
|
+
You can now run local tests from the project root directory with
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
uv run pytest -k 'not EndToEndTest'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### End-To-End Testing
|
|
53
|
+
|
|
54
|
+
To include tests against your `RepoAuditor` fork for comprehensive end-to-end testing, you can run:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
uv run pytest
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
In order to run end-to-end tests, which make calls to the GitHub API, you need to configure your forked repository, else you will see a large number of test failures.
|
|
61
|
+
|
|
62
|
+
Please follow the steps below to complete the configuration.
|
|
63
|
+
|
|
64
|
+
- On the `General` settings page
|
|
65
|
+
- Under `Features`
|
|
66
|
+
- Check `Wikis`.
|
|
67
|
+
- Check `Issues`.
|
|
68
|
+
- Check `Projects`.
|
|
69
|
+
- Under `Pull Requests`
|
|
70
|
+
- With `Allow merge commits`, set the `Default commit message` to `Pull request title`.
|
|
71
|
+
- Uncheck `Allow squash merging`.
|
|
72
|
+
- Uncheck `Allow rebase merging`.
|
|
73
|
+
- Check `Allow auto-merge`.
|
|
74
|
+
- Check `Automatically delete head branches`.
|
|
75
|
+
|
|
76
|
+
- On the `Branches` settings page
|
|
77
|
+
- Click `Add classic branch protection rule`.
|
|
78
|
+
- Under `Branch name pattern`, type in `main`.
|
|
79
|
+
- Check `Require a pull request before merging`.
|
|
80
|
+
- Check `Require a pull request before merging -> Dismiss stale pull request approvals when new commits are pushed`.
|
|
81
|
+
- Check `Require a pull request before merging -> Require approval of the most recent reviewable push`.
|
|
82
|
+
- Check `Require status checks to pass before merging`, and add the `CI+CD Workflow / Validate (ubuntu-latest, 3.13)` or equivalent status check.
|
|
83
|
+
- Check `Require conversation resolution before merging`.
|
|
84
|
+
- Check `Require signed commits`.
|
|
85
|
+
- Check `Do not allow bypassing the above settings`.
|
|
86
|
+
|
|
87
|
+
- On the `Advanced Security` settings page
|
|
88
|
+
- Enable `Dependabot security updates`.
|
|
89
|
+
|
|
90
|
+
- Go to the `Actions` tab
|
|
91
|
+
- Enable Workflows by clicking on `I understand my workflows, go ahead and enable them`.
|
|
92
|
+
- Run the `CI+CD` workflow. You will be asked to enable it, please do so.
|
|
93
|
+
- In the `Run workflow` dropdown to the right, click the `Run workflow` button. This should cause the action to run, don't worry if it fails, it is only needed for a check below.
|
|
94
|
+
|
|
95
|
+
- On the `Rules -> Rulesets` settings page, create a new branch ruleset called `Protect Main`:
|
|
96
|
+
- Under `Target branches`, click `Add target -> Include by pattern` and type in `main`. Finalize by clicking `Add Inclusion pattern`.
|
|
97
|
+
- Enable `Restrict deletions`
|
|
98
|
+
- Enable `Require signed commits`
|
|
99
|
+
- Enable `Require a pull request before merging` with 1 required approval.
|
|
100
|
+
- Enable `Require status checks to pass` with the `CI+CD Workflow / Validate (ubuntu-latest, 3.12)` check.
|
|
101
|
+
- Disable `Block force pushes`.
|
|
102
|
+
- Be sure to hit `Save changes` at the end.
|
|
103
|
+
|
|
104
|
+
### Development Activities
|
|
105
|
+
|
|
106
|
+
| Activity | Command Line | Description | Used During Local Development | Invoked by Continuous Integration |
|
|
107
|
+
| --- | --- | --- | :-: | :-: |
|
|
108
|
+
| Code Formatting | `uv run ruff format` or<br>`uv run ruff format --check` | Format source code using [ruff](https://github.com/astral-sh/ruff) based on settings in `pyproject.toml`. | :white_check_mark: | :white_check_mark: (via [pre-commit](https://pre-commit.com/)) |
|
|
109
|
+
| Sort Imports | `uv run ruff check --fix --select I` | Sort imports in source files. | :white_check_mark: | |
|
|
110
|
+
| Static Code Analysis | `uv run ruff check` | Validate source code using [ruff](https://github.com/astral-sh/ruff) based on settings in `pyproject.toml`. | :white_check_mark: | :white_check_mark: (via [pre-commit](https://pre-commit.com/)) |
|
|
111
|
+
| Run pre-commit scripts | `uv run pre-commit run` | Run [pre-commit](https://pre-commit.com/) scripts based on settings in `.pre-commit-config.yaml`. | :white_check_mark: | :white_check_mark: |
|
|
112
|
+
| Automated Testing | `uv run pytest` or<br/>`uv run pytest --no-cov` | Run automated tests using [pytest](https://docs.pytest.org/) and extract code coverage using [coverage](https://coverage.readthedocs.io/) based on settings in `pyproject.toml`. | :white_check_mark: | :white_check_mark: |
|
|
113
|
+
| Semantic Version Generation | `uv run python -m AutoGitSemVer.scripts.UpdatePythonVersion ./src/RepoAuditor/__init__.py ./src` | Generate a new [Semantic Version](https://semver.org/) based on git commits using [AutoGitSemVer](https://github.com/davidbrownell/AutoGitSemVer). Version information is stored in `./src/RepoAuditor/__init__.py`. | | :white_check_mark: |
|
|
114
|
+
| Python Package Creation | `uv build` | Create a python package using [uv](https://github.com/astral-sh/uv) based on settings in `pyproject.toml`. Generated packages will be written to `./dist`. | | :white_check_mark: |
|
|
115
|
+
| Sign Artifacts | `uv run --with py-minisign python -c "import minisign; minisign.SecretKey.from_file(<temp_filename>).sign_file(<filename>, trusted_comment='<package_name> v<package_version>', drop_signature=True)` | Signs artifacts using [py-minisign](https://github.com/x13a/py-minisign). Note that the private key is stored as a [GitHub secret](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions). | | :white_check_mark: |
|
|
116
|
+
| Python Package Publishing | `uv publish` | Publish a python package to [PyPi](https://pypi.org/) using [uv](https://github.com/astral-sh/uv) based on settings in `pyproject.toml`. | | :white_check_mark: |
|
|
117
|
+
|
|
118
|
+
### Contributing Changes
|
|
119
|
+
|
|
120
|
+
Pull requests are preferred, since they are specific. For more about how to create a pull request, see [this guide](https://help.github.com/articles/using-pull-requests/).
|
|
121
|
+
|
|
122
|
+
We recommend creating different branches for different (logical) changes, and creating a pull request into the `main` branch when you're done. For more information on creating branches, please see [this GitHub guide](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/).
|
|
123
|
+
|
|
124
|
+
### Verifying Signed Artifacts
|
|
125
|
+
|
|
126
|
+
Artifacts are signed and validated using [py-minisign](https://github.com/x13a/py-minisign) and the public key in the file `./minisign_key.pub`.
|
|
127
|
+
|
|
128
|
+
To verify that an artifact is valid, visit [the latest release](https://github.com/gt-sse-center/RepoAuditor/releases/latest) and download the `.minisign` signature file that corresponds to the artifact, then run the following command, replacing `<filename>` with the name of the artifact to be verified:
|
|
129
|
+
|
|
130
|
+
```shell
|
|
131
|
+
uv run --with py-minisign python -c "import minisign; minisign.PublicKey.from_file('minisign_key.pub').verify_file('<filename>')"
|
|
132
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: RepoAuditor
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.69
|
|
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
|
|
@@ -25,6 +25,8 @@ Requires-Dist: typer-config[yaml]>=1.4.2
|
|
|
25
25
|
Requires-Dist: typer>=0.15.3
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
|
|
28
|
+
# RepoAuditor - README
|
|
29
|
+
|
|
28
30
|
**Project:**
|
|
29
31
|
[](https://github.com/gt-sse-center/RepoAuditor/blob/master/LICENSE)
|
|
30
32
|
|
|
@@ -42,21 +44,28 @@ Description-Content-Type: text/markdown
|
|
|
42
44
|
<!-- Content above this delimiter will be copied to the generated README.md file. DO NOT REMOVE THIS COMMENT, as it will cause regeneration to fail. -->
|
|
43
45
|
|
|
44
46
|
## Contents
|
|
47
|
+
|
|
45
48
|
- [Installation](#installation)
|
|
46
49
|
- [Overview](#overview)
|
|
47
50
|
- [How to use RepoAuditor](#how-to-use-repoauditor)
|
|
48
|
-
- [Personal Access Token](#personal-access-token)
|
|
51
|
+
- [Personal Access Token](#personal-access-token-pat)
|
|
49
52
|
- [Example Usage](#example-usage)
|
|
53
|
+
- [Config File](#config-file)
|
|
50
54
|
- [Development](#development)
|
|
51
|
-
- [Verifying Signed Artifacts](#verifying-signed-artifacts)
|
|
52
55
|
- [Additional Information](#additional-information)
|
|
53
56
|
- [License](#license)
|
|
54
57
|
|
|
55
58
|
## Installation
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
We recommend using [uv](https://docs.astral.sh/uv/#uv) since it can install `RepoAuditor` as a tool via `uvx` into a sandbox environment for quick use.
|
|
61
|
+
This lets you directly run `RepoAuditor`.
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
uvx RepoAuditor
|
|
65
|
+
```
|
|
58
66
|
|
|
59
|
-
|
|
67
|
+
Alternatively, yuou can install `RepoAuditor` via `uv` or `pip`.
|
|
68
|
+
`uv` is preferred to `pip` since it creates and manages a virtual environment.
|
|
60
69
|
|
|
61
70
|
| Installation Method | Command |
|
|
62
71
|
| --- | --- |
|
|
@@ -70,28 +79,27 @@ We recommend using [uv](https://docs.astral.sh/uv/#uv) since `RepoAuditor` uses
|
|
|
70
79
|
<!-- Content below this delimiter will be copied to the generated README.md file. DO NOT REMOVE THIS COMMENT, as it will cause regeneration to fail. -->
|
|
71
80
|
|
|
72
81
|
Once installed, you can invoke the following to verify if `RepoAuditor` is installed correctly:
|
|
82
|
+
|
|
73
83
|
```shell
|
|
74
|
-
|
|
84
|
+
uvx RepoAuditor --version
|
|
75
85
|
```
|
|
86
|
+
|
|
76
87
|
and you should see something like
|
|
88
|
+
|
|
77
89
|
```shell
|
|
78
90
|
RepoAuditor vX.X.X
|
|
79
91
|
```
|
|
80
92
|
|
|
81
93
|
To get a list of command line options, you can run
|
|
82
|
-
```shell
|
|
83
|
-
uv run repo_auditor --help
|
|
84
|
-
```
|
|
85
94
|
|
|
86
|
-
`RepoAuditor` accepts both a set of flags as well as a configuratin YAML file. We have provided a sample configuration file called `default_config.yaml`, which can be used as:
|
|
87
95
|
```shell
|
|
88
|
-
|
|
96
|
+
uvx RepoAuditor --help
|
|
89
97
|
```
|
|
90
98
|
|
|
91
99
|
### Personal Access Token (PAT)
|
|
92
100
|
|
|
93
101
|
The most common use case for `RepoAuditor` would be to audit a GitHub repository.
|
|
94
|
-
In order to allow `RepoAuditor` to read the repository, you first need to generate a Personal Access Token or PAT
|
|
102
|
+
In order to allow `RepoAuditor` to read the repository, you first need to generate a Personal Access Token or **PAT**.
|
|
95
103
|
|
|
96
104
|
Please refer to the [GitHub documentation on Personal Access Tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) for details about a `Fine-grained PAT` which we will be using.
|
|
97
105
|
|
|
@@ -103,39 +111,53 @@ To generate the Fine-grained PAT, we perform the following steps:
|
|
|
103
111
|
4. Set an appropriate expiration date.
|
|
104
112
|
5. Under `Repository Access`, select `All repositories`.
|
|
105
113
|
6. For permissions, we need to go to `Repository permissions`.
|
|
106
|
-
7. Enable
|
|
114
|
+
7. Enable the following permissions:
|
|
115
|
+
- Read-Write access to `Contents`.
|
|
116
|
+
- Read access to `Administration` and `Secret scanning alerts`.
|
|
107
117
|
8. Click on `Generate token`.
|
|
108
118
|
9. Copy the generated string. This is your PAT.
|
|
119
|
+
10. Save the PAT to a convenient location on your machine (such as your hime directory `~/`) in the file `PAT.txt`.
|
|
109
120
|
|
|
110
|
-
|
|
121
|
+
The path to the `PAT.txt` will be passed into `RepoAuditor`. E.g.
|
|
122
|
+
|
|
123
|
+
```shell
|
|
124
|
+
uvx RepoAuditor --GitHub-pat ~/PAT.txt
|
|
125
|
+
```
|
|
111
126
|
|
|
112
127
|
### Example Usage
|
|
113
128
|
|
|
114
129
|
With the above generated PAT file, you can now run `RepoAuditor` on your GitHub repository.
|
|
115
|
-
As an example, we will use the [python-helloworld](https://github.com/dbarnett/python-helloworld) repo.
|
|
116
130
|
|
|
117
|
-
|
|
131
|
+
As a general example, we will use the [python-helloworld](https://github.com/dbarnett/python-helloworld) repository.
|
|
132
|
+
|
|
133
|
+
> **NOTE** You need to fork the repository since your default PAT only has access to repos under your account.
|
|
118
134
|
|
|
119
135
|
To run `RepoAuditor`, we can enter the following in the command-line:
|
|
136
|
+
|
|
120
137
|
```shell
|
|
121
|
-
|
|
138
|
+
uvx RepoAuditor --include GitHub \
|
|
139
|
+
--GitHub-url https://github.com/<username>/python-helloworld \
|
|
140
|
+
--GitHub-pat ~/PAT.txt
|
|
122
141
|
```
|
|
123
142
|
|
|
124
143
|
`RepoAuditor` will generate a series of messages describing all the issues in the repository, along with the rationale behind them and the steps for resolution.
|
|
125
144
|
|
|
126
|
-
|
|
127
|
-
Please visit [Contributing](https://github.com/gt-sse-center/RepoAuditor/blob/main/CONTRIBUTING.md) and [Development](https://github.com/gt-sse-center/RepoAuditor/blob/main/DEVELOPMENT.md) for information on contributing to this project.
|
|
128
|
-
|
|
129
|
-
### Verifying Signed Artifacts
|
|
130
|
-
Artifacts are signed and validated using [py-minisign](https://github.com/x13a/py-minisign) and the public key in the file `./minisign_key.pub`.
|
|
145
|
+
### Config File
|
|
131
146
|
|
|
132
|
-
|
|
147
|
+
`RepoAuditor` accepts both a set of flags as well as a configuratin YAML file.
|
|
133
148
|
|
|
149
|
+
The configuration (or config) file can make usage easier by recording preferences as well as facilitating sharing of enforced requirements within an organization.
|
|
150
|
+
We have provided a sample configuration file called [default_config.yaml](https://github.com/gt-sse-center/RepoAuditor/blob/main/default_config.yaml), which can be used as:
|
|
134
151
|
```shell
|
|
135
|
-
|
|
152
|
+
uvx run RepoAuditor --config default_config.yaml
|
|
136
153
|
```
|
|
137
154
|
|
|
155
|
+
## Development
|
|
156
|
+
|
|
157
|
+
Please visit [Contributing](https://github.com/gt-sse-center/RepoAuditor/blob/main/CONTRIBUTING.md) and [Development](https://github.com/gt-sse-center/RepoAuditor/blob/main/DEVELOPMENT.md) for information on contributing to this project.
|
|
158
|
+
|
|
138
159
|
## Additional Information
|
|
160
|
+
|
|
139
161
|
Additional information can be found at these locations.
|
|
140
162
|
|
|
141
163
|
| Title | Document | Description |
|
|
@@ -148,4 +170,5 @@ Additional information can be found at these locations.
|
|
|
148
170
|
| Security | [SECURITY.md](https://github.com/gt-sse-center/RepoAuditor/blob/main/SECURITY.md) | Information about how to privately report security issues associated with this project. |
|
|
149
171
|
|
|
150
172
|
## License
|
|
173
|
+
|
|
151
174
|
RepoAuditor is licensed under the <a href="https://choosealicense.com/licenses/MIT/" target="_blank">MIT</a> license.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# RepoAuditor - README
|
|
2
|
+
|
|
1
3
|
**Project:**
|
|
2
4
|
[](https://github.com/gt-sse-center/RepoAuditor/blob/master/LICENSE)
|
|
3
5
|
|
|
@@ -15,21 +17,28 @@
|
|
|
15
17
|
<!-- Content above this delimiter will be copied to the generated README.md file. DO NOT REMOVE THIS COMMENT, as it will cause regeneration to fail. -->
|
|
16
18
|
|
|
17
19
|
## Contents
|
|
20
|
+
|
|
18
21
|
- [Installation](#installation)
|
|
19
22
|
- [Overview](#overview)
|
|
20
23
|
- [How to use RepoAuditor](#how-to-use-repoauditor)
|
|
21
|
-
- [Personal Access Token](#personal-access-token)
|
|
24
|
+
- [Personal Access Token](#personal-access-token-pat)
|
|
22
25
|
- [Example Usage](#example-usage)
|
|
26
|
+
- [Config File](#config-file)
|
|
23
27
|
- [Development](#development)
|
|
24
|
-
- [Verifying Signed Artifacts](#verifying-signed-artifacts)
|
|
25
28
|
- [Additional Information](#additional-information)
|
|
26
29
|
- [License](#license)
|
|
27
30
|
|
|
28
31
|
## Installation
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
We recommend using [uv](https://docs.astral.sh/uv/#uv) since it can install `RepoAuditor` as a tool via `uvx` into a sandbox environment for quick use.
|
|
34
|
+
This lets you directly run `RepoAuditor`.
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
uvx RepoAuditor
|
|
38
|
+
```
|
|
31
39
|
|
|
32
|
-
|
|
40
|
+
Alternatively, yuou can install `RepoAuditor` via `uv` or `pip`.
|
|
41
|
+
`uv` is preferred to `pip` since it creates and manages a virtual environment.
|
|
33
42
|
|
|
34
43
|
| Installation Method | Command |
|
|
35
44
|
| --- | --- |
|
|
@@ -43,28 +52,27 @@ We recommend using [uv](https://docs.astral.sh/uv/#uv) since `RepoAuditor` uses
|
|
|
43
52
|
<!-- Content below this delimiter will be copied to the generated README.md file. DO NOT REMOVE THIS COMMENT, as it will cause regeneration to fail. -->
|
|
44
53
|
|
|
45
54
|
Once installed, you can invoke the following to verify if `RepoAuditor` is installed correctly:
|
|
55
|
+
|
|
46
56
|
```shell
|
|
47
|
-
|
|
57
|
+
uvx RepoAuditor --version
|
|
48
58
|
```
|
|
59
|
+
|
|
49
60
|
and you should see something like
|
|
61
|
+
|
|
50
62
|
```shell
|
|
51
63
|
RepoAuditor vX.X.X
|
|
52
64
|
```
|
|
53
65
|
|
|
54
66
|
To get a list of command line options, you can run
|
|
55
|
-
```shell
|
|
56
|
-
uv run repo_auditor --help
|
|
57
|
-
```
|
|
58
67
|
|
|
59
|
-
`RepoAuditor` accepts both a set of flags as well as a configuratin YAML file. We have provided a sample configuration file called `default_config.yaml`, which can be used as:
|
|
60
68
|
```shell
|
|
61
|
-
|
|
69
|
+
uvx RepoAuditor --help
|
|
62
70
|
```
|
|
63
71
|
|
|
64
72
|
### Personal Access Token (PAT)
|
|
65
73
|
|
|
66
74
|
The most common use case for `RepoAuditor` would be to audit a GitHub repository.
|
|
67
|
-
In order to allow `RepoAuditor` to read the repository, you first need to generate a Personal Access Token or PAT
|
|
75
|
+
In order to allow `RepoAuditor` to read the repository, you first need to generate a Personal Access Token or **PAT**.
|
|
68
76
|
|
|
69
77
|
Please refer to the [GitHub documentation on Personal Access Tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) for details about a `Fine-grained PAT` which we will be using.
|
|
70
78
|
|
|
@@ -76,39 +84,53 @@ To generate the Fine-grained PAT, we perform the following steps:
|
|
|
76
84
|
4. Set an appropriate expiration date.
|
|
77
85
|
5. Under `Repository Access`, select `All repositories`.
|
|
78
86
|
6. For permissions, we need to go to `Repository permissions`.
|
|
79
|
-
7. Enable
|
|
87
|
+
7. Enable the following permissions:
|
|
88
|
+
- Read-Write access to `Contents`.
|
|
89
|
+
- Read access to `Administration` and `Secret scanning alerts`.
|
|
80
90
|
8. Click on `Generate token`.
|
|
81
91
|
9. Copy the generated string. This is your PAT.
|
|
92
|
+
10. Save the PAT to a convenient location on your machine (such as your hime directory `~/`) in the file `PAT.txt`.
|
|
82
93
|
|
|
83
|
-
|
|
94
|
+
The path to the `PAT.txt` will be passed into `RepoAuditor`. E.g.
|
|
95
|
+
|
|
96
|
+
```shell
|
|
97
|
+
uvx RepoAuditor --GitHub-pat ~/PAT.txt
|
|
98
|
+
```
|
|
84
99
|
|
|
85
100
|
### Example Usage
|
|
86
101
|
|
|
87
102
|
With the above generated PAT file, you can now run `RepoAuditor` on your GitHub repository.
|
|
88
|
-
As an example, we will use the [python-helloworld](https://github.com/dbarnett/python-helloworld) repo.
|
|
89
103
|
|
|
90
|
-
|
|
104
|
+
As a general example, we will use the [python-helloworld](https://github.com/dbarnett/python-helloworld) repository.
|
|
105
|
+
|
|
106
|
+
> **NOTE** You need to fork the repository since your default PAT only has access to repos under your account.
|
|
91
107
|
|
|
92
108
|
To run `RepoAuditor`, we can enter the following in the command-line:
|
|
109
|
+
|
|
93
110
|
```shell
|
|
94
|
-
|
|
111
|
+
uvx RepoAuditor --include GitHub \
|
|
112
|
+
--GitHub-url https://github.com/<username>/python-helloworld \
|
|
113
|
+
--GitHub-pat ~/PAT.txt
|
|
95
114
|
```
|
|
96
115
|
|
|
97
116
|
`RepoAuditor` will generate a series of messages describing all the issues in the repository, along with the rationale behind them and the steps for resolution.
|
|
98
117
|
|
|
99
|
-
|
|
100
|
-
Please visit [Contributing](https://github.com/gt-sse-center/RepoAuditor/blob/main/CONTRIBUTING.md) and [Development](https://github.com/gt-sse-center/RepoAuditor/blob/main/DEVELOPMENT.md) for information on contributing to this project.
|
|
101
|
-
|
|
102
|
-
### Verifying Signed Artifacts
|
|
103
|
-
Artifacts are signed and validated using [py-minisign](https://github.com/x13a/py-minisign) and the public key in the file `./minisign_key.pub`.
|
|
118
|
+
### Config File
|
|
104
119
|
|
|
105
|
-
|
|
120
|
+
`RepoAuditor` accepts both a set of flags as well as a configuratin YAML file.
|
|
106
121
|
|
|
122
|
+
The configuration (or config) file can make usage easier by recording preferences as well as facilitating sharing of enforced requirements within an organization.
|
|
123
|
+
We have provided a sample configuration file called [default_config.yaml](https://github.com/gt-sse-center/RepoAuditor/blob/main/default_config.yaml), which can be used as:
|
|
107
124
|
```shell
|
|
108
|
-
|
|
125
|
+
uvx run RepoAuditor --config default_config.yaml
|
|
109
126
|
```
|
|
110
127
|
|
|
128
|
+
## Development
|
|
129
|
+
|
|
130
|
+
Please visit [Contributing](https://github.com/gt-sse-center/RepoAuditor/blob/main/CONTRIBUTING.md) and [Development](https://github.com/gt-sse-center/RepoAuditor/blob/main/DEVELOPMENT.md) for information on contributing to this project.
|
|
131
|
+
|
|
111
132
|
## Additional Information
|
|
133
|
+
|
|
112
134
|
Additional information can be found at these locations.
|
|
113
135
|
|
|
114
136
|
| Title | Document | Description |
|
|
@@ -121,4 +143,5 @@ Additional information can be found at these locations.
|
|
|
121
143
|
| Security | [SECURITY.md](https://github.com/gt-sse-center/RepoAuditor/blob/main/SECURITY.md) | Information about how to privately report security issues associated with this project. |
|
|
122
144
|
|
|
123
145
|
## License
|
|
146
|
+
|
|
124
147
|
RepoAuditor is licensed under the <a href="https://choosealicense.com/licenses/MIT/" target="_blank">MIT</a> license.
|
|
@@ -22,7 +22,7 @@ class AllowDeletions(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"AllowDeletions",
|
|
24
24
|
False,
|
|
25
|
-
"
|
|
25
|
+
"enabled",
|
|
26
26
|
"Rules applied to everyone including administrators",
|
|
27
27
|
"Allow deletions",
|
|
28
28
|
lambda data: data["branch_protection_data"]["allow_deletions"]["enabled"],
|
|
@@ -22,7 +22,7 @@ class AllowMainlineForcePushes(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"AllowMainlineForcePushes",
|
|
24
24
|
False,
|
|
25
|
-
"
|
|
25
|
+
"enabled",
|
|
26
26
|
"Rules applied to everyone including administrators",
|
|
27
27
|
"Allow force pushes",
|
|
28
28
|
lambda data: data["branch_protection_data"]["allow_force_pushes"]["enabled"],
|
|
@@ -23,7 +23,7 @@ class DismissStalePullRequestApprovals(ClassicEnableRequirementImpl):
|
|
|
23
23
|
super().__init__(
|
|
24
24
|
"DismissStalePullRequestApprovals",
|
|
25
25
|
True,
|
|
26
|
-
"
|
|
26
|
+
"disabled",
|
|
27
27
|
"Protect matching branches",
|
|
28
28
|
"Require a pull request before merging -> Dismiss stale pull request approvals when new commits are pushed",
|
|
29
29
|
_GetValue,
|
|
@@ -22,7 +22,7 @@ class DoNotAllowBypassSettings(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"DoNotAllowBypassSettings",
|
|
24
24
|
True,
|
|
25
|
-
"
|
|
25
|
+
"disabled",
|
|
26
26
|
"Protect matching branches",
|
|
27
27
|
"Do not allow bypassing the above settings",
|
|
28
28
|
lambda data: data["branch_protection_data"]["enforce_admins"]["enabled"],
|
|
@@ -57,7 +57,7 @@ class EnsureStatusChecks(Requirement):
|
|
|
57
57
|
def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
|
|
58
58
|
"""Get the definitions for the arguments to this requirement."""
|
|
59
59
|
return {
|
|
60
|
-
"
|
|
60
|
+
"disabled": (
|
|
61
61
|
bool,
|
|
62
62
|
typer.Option(
|
|
63
63
|
default=False,
|
|
@@ -73,7 +73,7 @@ class EnsureStatusChecks(Requirement):
|
|
|
73
73
|
query_data: dict[str, Any],
|
|
74
74
|
requirement_args: dict[str, Any],
|
|
75
75
|
) -> Requirement.EvaluateImplResult:
|
|
76
|
-
if requirement_args["
|
|
76
|
+
if requirement_args["disabled"]:
|
|
77
77
|
return Requirement.EvaluateImplResult(
|
|
78
78
|
EvaluateResult.DoesNotApply,
|
|
79
79
|
"The status check requirement has been explicitly disabled.",
|
|
@@ -23,7 +23,7 @@ class RequireApprovalMostRecentPush(ClassicEnableRequirementImpl):
|
|
|
23
23
|
super().__init__(
|
|
24
24
|
"RequireApprovalMostRecentPush",
|
|
25
25
|
True,
|
|
26
|
-
"
|
|
26
|
+
"disabled",
|
|
27
27
|
"Protect matching branches",
|
|
28
28
|
"Require a pull request before merging -> Require approval of the most recent reviewable push",
|
|
29
29
|
_GetValue,
|
|
@@ -23,7 +23,7 @@ class RequireCodeOwnerReview(ClassicEnableRequirementImpl):
|
|
|
23
23
|
super().__init__(
|
|
24
24
|
"RequireCodeOwnerReview",
|
|
25
25
|
False,
|
|
26
|
-
"
|
|
26
|
+
"enabled",
|
|
27
27
|
"Protect matching branches",
|
|
28
28
|
"Require a pull request before merging -> Require review from Code Owners",
|
|
29
29
|
_GetValue,
|
|
@@ -22,7 +22,7 @@ class RequireConversationResolution(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"RequireConversationResolution",
|
|
24
24
|
True,
|
|
25
|
-
"
|
|
25
|
+
"disabled",
|
|
26
26
|
"Protect matching branches",
|
|
27
27
|
"Require conversation resolution before merging",
|
|
28
28
|
lambda data: data["branch_protection_data"]["required_conversation_resolution"]["enabled"],
|
|
@@ -22,7 +22,7 @@ class RequireLinearHistory(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"RequireLinearHistory",
|
|
24
24
|
False,
|
|
25
|
-
"
|
|
25
|
+
"enabled",
|
|
26
26
|
"Protect matching branches",
|
|
27
27
|
"Require linear history",
|
|
28
28
|
lambda data: data["branch_protection_data"]["required_linear_history"]["enabled"],
|
|
@@ -22,7 +22,7 @@ class RequirePullRequests(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"RequirePullRequests",
|
|
24
24
|
True,
|
|
25
|
-
"
|
|
25
|
+
"disabled",
|
|
26
26
|
"Protect matching branches",
|
|
27
27
|
"Require a pull request before merging",
|
|
28
28
|
lambda data: "required_pull_request_reviews" in data["branch_protection_data"],
|
|
@@ -22,7 +22,7 @@ class RequireSignedCommits(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"RequireSignedCommits",
|
|
24
24
|
True,
|
|
25
|
-
"
|
|
25
|
+
"disabled",
|
|
26
26
|
"Protect matching branches",
|
|
27
27
|
"Require signed commits",
|
|
28
28
|
lambda data: data["branch_protection_data"]["required_signatures"]["enabled"],
|
|
@@ -22,7 +22,7 @@ class RequireStatusChecksToPass(ClassicEnableRequirementImpl):
|
|
|
22
22
|
super().__init__(
|
|
23
23
|
"RequireStatusChecksToPass",
|
|
24
24
|
True,
|
|
25
|
-
"
|
|
25
|
+
"disabled",
|
|
26
26
|
"Protect matching branches",
|
|
27
27
|
"Require status checks to pass before merging",
|
|
28
28
|
lambda data: "required_status_checks" in data["branch_protection_data"],
|
|
@@ -23,7 +23,7 @@ class RequireUpToDateBranches(ClassicEnableRequirementImpl):
|
|
|
23
23
|
super().__init__(
|
|
24
24
|
"RequireUpToDateBranches",
|
|
25
25
|
True,
|
|
26
|
-
"
|
|
26
|
+
"disabled",
|
|
27
27
|
"Protect matching branches",
|
|
28
28
|
"Require status checks to pass before merging -> Require branches to be up to date before merging",
|
|
29
29
|
_GetValue,
|
|
@@ -56,7 +56,7 @@ class Protected(Requirement):
|
|
|
56
56
|
def GetDynamicArgDefinitions(self) -> dict[str, TypeDefinitionItemType]:
|
|
57
57
|
"""Get the definitions for the arguments to this requirement."""
|
|
58
58
|
return {
|
|
59
|
-
"
|
|
59
|
+
"disabled": (
|
|
60
60
|
bool,
|
|
61
61
|
typer.Option(
|
|
62
62
|
default=False,
|
|
@@ -78,7 +78,7 @@ class Protected(Requirement):
|
|
|
78
78
|
if is_protected is None:
|
|
79
79
|
return CreateIncompleteDataResult()
|
|
80
80
|
|
|
81
|
-
if requirement_args["
|
|
81
|
+
if requirement_args["disabled"]:
|
|
82
82
|
expected_value = False
|
|
83
83
|
provide_rationale = False
|
|
84
84
|
else:
|