34f7393892
PR Ready Gate / clear-labels (pull_request) Successful in 1s
CI / test (pull_request) Successful in 26s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 50s
CI / review (gpt-5, security, ., rodin/security-patterns, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 1m44s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Successful in 2m21s
- Remove unused envOrDefaultBool function and its test (Sonnet #3266 NIT) - Replace Unicode em dashes with ASCII in slog messages (GPT #3267 NIT) - Add scheme validation for vcsURL before embedding in Markdown link (Security #3269 MINOR — defense-in-depth against unsafe schemes) - Extract ReviewerSelfRequester interface to remove concrete gitea.Adapter dependency from main's self-reviewer path (Sonnet #3266 NIT) - Add compile-time conformance assertion and test for Adapter.RequestReviewerSelf
52 lines
2.4 KiB
Go
52 lines
2.4 KiB
Go
// Package vcs defines the shared VCS client interface and supporting types.
|
|
// Platform adapters (gitea, github) implement these interfaces so the core
|
|
// review logic can work with any VCS platform without platform-specific code.
|
|
package vcs
|
|
|
|
import "context"
|
|
|
|
// PRReader can fetch pull request metadata, diffs, and changed files.
|
|
type PRReader interface {
|
|
GetPullRequest(ctx context.Context, owner, repo string, number int) (*PullRequest, error)
|
|
GetPullRequestDiff(ctx context.Context, owner, repo string, number int) (string, error)
|
|
GetPullRequestFiles(ctx context.Context, owner, repo string, number int) ([]ChangedFile, error)
|
|
GetFileContentAtRef(ctx context.Context, owner, repo, path, ref string) (string, error)
|
|
GetCommitStatuses(ctx context.Context, owner, repo, sha string) ([]CommitStatus, error)
|
|
}
|
|
|
|
// FileReader can fetch file contents and list directory entries.
|
|
type FileReader interface {
|
|
GetFileContent(ctx context.Context, owner, repo, path, ref string) (string, error)
|
|
ListContents(ctx context.Context, owner, repo, path string) ([]ContentEntry, error)
|
|
}
|
|
|
|
// Reviewer can post, list, and delete pull request reviews.
|
|
type Reviewer interface {
|
|
PostReview(ctx context.Context, owner, repo string, number int, req ReviewRequest) (*Review, error)
|
|
ListReviews(ctx context.Context, owner, repo string, number int) ([]Review, error)
|
|
DeleteReview(ctx context.Context, owner, repo string, number int, reviewID int64) error
|
|
DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, message string) error
|
|
}
|
|
|
|
// Identity can report who the authenticated user is.
|
|
type Identity interface {
|
|
GetAuthenticatedUser(ctx context.Context) (string, error)
|
|
}
|
|
|
|
// Client is the full VCS interface: PR reads, file reads, review management, and identity.
|
|
// Platform adapters (gitea, github) implement this interface.
|
|
type Client interface {
|
|
PRReader
|
|
FileReader
|
|
Reviewer
|
|
Identity
|
|
}
|
|
|
|
// ReviewerSelfRequester is an optional interface implemented by adapters that support
|
|
// requesting the authenticated user as a reviewer on a pull request. This is used for
|
|
// Gitea-specific behavior (ensuring the bot appears in required-reviewer checks).
|
|
// Consumers should use interface assertion: if sr, ok := client.(ReviewerSelfRequester); ok { ... }
|
|
type ReviewerSelfRequester interface {
|
|
RequestReviewerSelf(ctx context.Context, owner, repo string, number int, user string) error
|
|
}
|