Documentation
¶
Overview ¶
Package github wraps the GitHub REST and GraphQL APIs used by gh-sweep.
Index ¶
- Constants
- Variables
- func CompareProtectionRules(rules []*ProtectionRule) map[string][]string
- func ComputeBranchStats(runs []RunTiming, baseBranch string) map[string]*BranchStats
- func ComputeJobStats(runs []RunTiming) map[string]*JobStats
- func ComputeWorkflowStats(runs []RunTiming) map[string]*WorkflowStats
- func FilterByCommit(commits ...string) func(TestRun) bool
- func FilterByRepository(repos ...string) func(TestRun) bool
- func FormatAsJSON(contexts []*ErrorContext) (string, error)
- func FormatAsMarkdown(contexts []*ErrorContext) string
- func FormatDuration(d time.Duration) string
- func GroupSecretsByScope(secrets []Secret) map[string][]Secret
- func ParseSinceDate(value string) (time.Time, error)
- func ScanWorkflowForSecrets(workflowContent string) []string
- func SetTestTransport(rt http.RoundTripper) func()
- func SortRunsByDate(runs []RunTiming, ascending bool)
- type Branch
- type BranchStats
- type BranchStatus
- type BranchWithComparison
- type Client
- func (c *Client) AddCollaborator(owner, repo, username, permission string) error
- func (c *Client) CompareBranches(owner, repo, base, head string) (ahead, behind int, err error)
- func (c *Client) Context() context.Context
- func (c *Client) CreatePullRequest(owner, repo, title, body, head, base string) (int, error)
- func (c *Client) Delete(path string, response interface{}) error
- func (c *Client) DeleteBranch(owner, repo, branch string) error
- func (c *Client) DeleteRepoSubscription(owner, repo string) error
- func (c *Client) FetchFailedJobLogs(owner, repo string, runID int) ([]JobLog, error)
- func (c *Client) FetchRunDetails(owner, repo string, runID int) (*RunTiming, error)
- func (c *Client) FetchWorkflowRuns(owner, repo string, opts FetchWorkflowRunsOptions) ([]RunTiming, error)
- func (c *Client) FetchWorkflowRunsWithDetails(owner, repo string, opts FetchWorkflowRunsOptions) ([]RunTiming, error)
- func (c *Client) Get(path string, response interface{}) error
- func (c *Client) GetAuthenticatedUser() (string, error)
- func (c *Client) GetBranchProtection(owner, repo, branch string) (*ProtectionRule, error)
- func (c *Client) GetBranchesWithComparison(owner, repo, baseBranch string) ([]BranchWithComparison, error)
- func (c *Client) GetDefaultBranch(owner, repo string) (string, error)
- func (c *Client) GetDefaultBranchProtection(owner, repo string) (*ProtectionRule, error)
- func (c *Client) GetImmutableReleases(owner, repo string) (*ImmutableReleases, error)
- func (c *Client) GetLatestRelease(owner, repo string) (*Release, error)
- func (c *Client) GetPullRequestsForBranch(owner, repo, branch string) ([]PullRequest, error)
- func (c *Client) GetRepoSettings(owner, repo string) (*RepoSettings, error)
- func (c *Client) ListBranchStatuses(owner, repo, baseBranch string) ([]BranchStatus, error)
- func (c *Client) ListBranches(owner, repo string) ([]Branch, error)
- func (c *Client) ListCollaborators(owner, repo string) ([]Collaborator, error)
- func (c *Client) ListNamespaceRepositories(namespace string) ([]Repository, bool, error)
- func (c *Client) ListOrgRepositories(org string) ([]Repository, error)
- func (c *Client) ListOrgSecrets(org string) ([]Secret, error)
- func (c *Client) ListPullRequests(owner, repo, state string) ([]PullRequest, error)
- func (c *Client) ListReleases(owner, repo string) ([]Release, error)
- func (c *Client) ListRepoSecrets(owner, repo string) ([]Secret, error)
- func (c *Client) ListUserRepositories(username string) ([]Repository, error)
- func (c *Client) ListWebhookDeliveries(owner, repo string, hookID int) ([]WebhookDelivery, error)
- func (c *Client) ListWebhooks(owner, repo string) ([]Webhook, error)
- func (c *Client) ListWorkflowRuns(owner, repo string) ([]WorkflowRun, error)
- func (c *Client) ListWorkflows(owner, repo string) ([]WorkflowFile, error)
- func (c *Client) Patch(path string, body, response interface{}) error
- func (c *Client) Post(path string, body, response interface{}) error
- func (c *Client) Put(path string, body, response interface{}) error
- func (c *Client) RemoveCollaborator(owner, repo, username string) error
- func (c *Client) SetImmutableReleases(owner, repo string, enabled bool) error
- func (c *Client) SetRepoSubscription(owner, repo string, subscribed, ignored bool) (*Subscription, error)
- func (c *Client) UpdateBranchProtection(owner, repo, branch string, desired ProtectionRule) error
- func (c *Client) UpdateRepoSettings(owner, repo string, patch RepoSettingsPatch) error
- func (c *Client) UpdateSecurityAndAnalysis(owner, repo, feature, status string) error
- type Collaborator
- type CollaboratorGrant
- type DuplicateSecret
- type ErrorContext
- type FetchWorkflowRunsOptions
- type FlakyDetectionConfig
- type FlakyTest
- type GQLClient
- func (g *GQLClient) ListOpenPRReviewThreads(client *Client, owner, repo string, maxPRs int) ([]ReviewThread, error)
- func (g *GQLClient) ListPRReviewThreads(owner, repo string, prNumber int) ([]ReviewThread, error)
- func (g *GQLClient) ListRepoReviewThreads(client *Client, owner, repo string, prNumber, maxPRs int) ([]ReviewThread, error)
- func (g *GQLClient) ListViewerRepoWatchInfo() (string, []RepoWatchInfo, error)
- type ImmutableReleases
- type JobLog
- type JobStats
- type JobTiming
- type LogExtractionConfig
- type PRRef
- type ProtectionRule
- type PullRequest
- type Release
- type ReleaseComparison
- type RepoBasic
- type RepoSettings
- type RepoSettingsPatch
- type RepoWatchInfo
- type Repository
- type ReviewComment
- type ReviewThread
- type RunTiming
- type Secret
- type SecretUsage
- type SecurityAndAnalysis
- type SettingsDiff
- type StepTiming
- type Subscription
- type TestRun
- type ThreadFilter
- type WatchState
- type Webhook
- type WebhookDelivery
- type WebhookHealth
- type WorkflowFile
- type WorkflowRun
- type WorkflowRunStats
- type WorkflowStats
Constants ¶
const DefaultOpenPRCap = 20
DefaultOpenPRCap bounds how many of the newest open PRs are scanned for review threads.
Variables ¶
Functions ¶
func CompareProtectionRules ¶
func CompareProtectionRules(rules []*ProtectionRule) map[string][]string
CompareProtectionRules compares protection rules across repositories.
func ComputeBranchStats ¶
func ComputeBranchStats(runs []RunTiming, baseBranch string) map[string]*BranchStats
func ComputeJobStats ¶
func ComputeWorkflowStats ¶
func ComputeWorkflowStats(runs []RunTiming) map[string]*WorkflowStats
func FilterByCommit ¶
FilterByCommit creates a filter for specific commits Higher-order function for functional composition.
func FilterByRepository ¶
FilterByRepository creates a filter for specific repositories Higher-order function returning a filter predicate.
func FormatAsJSON ¶
func FormatAsJSON(contexts []*ErrorContext) (string, error)
FormatAsJSON formats error context as JSON for AI consumption Pure function: serializes to JSON.
func FormatAsMarkdown ¶
func FormatAsMarkdown(contexts []*ErrorContext) string
FormatAsMarkdown formats error context as Markdown for AI consumption Pure function: generates Markdown string.
func FormatDuration ¶
func GroupSecretsByScope ¶
GroupSecretsByScope groups secrets by their scope (org/repo) Pure function: creates grouped map.
func ParseSinceDate ¶
ParseSinceDate parses a YYYY-MM-DD date for --since filtering.
func ScanWorkflowForSecrets ¶
ScanWorkflowForSecrets extracts secret references from workflow YAML Pure function: parses YAML content for secrets.* references.
func SetTestTransport ¶
func SetTestTransport(rt http.RoundTripper) func()
SetTestTransport routes every client created afterward through rt so tests never reach the real GitHub API. It returns a restore function and panics when called outside `go test`.
func SortRunsByDate ¶
Types ¶
type Branch ¶
type Branch struct {
Name string
SHA string
Protected bool
Ahead int
Behind int
LastCommitDate time.Time
}
Branch represents a GitHub branch.
type BranchStats ¶
type BranchStatus ¶
type BranchStatus struct {
Branch
ComparedTo string
IsDefault bool
PR *PullRequest
}
BranchStatus extends Branch with default-branch and pull request context.
func (BranchStatus) DeleteBlocked ¶
func (b BranchStatus) DeleteBlocked() error
DeleteBlocked reports why the branch must not be deleted, or nil when deletion is safe.
type BranchWithComparison ¶
BranchWithComparison extends Branch with comparison data.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client wraps the GitHub API client.
func NewClient ¶
NewClient creates a new GitHub API client It will use gh CLI authentication if available, or fall back to GITHUB_TOKEN env var.
func NewClientWithToken ¶
NewClientWithToken creates a new GitHub API client with an explicit token.
func NewClientWithTransport ¶
NewClientWithTransport creates a client whose requests are served by rt, bypassing gh CLI auth resolution. Intended for tests using httptest or in-memory round-trip fakes; no network is reached.
func (*Client) AddCollaborator ¶
AddCollaborator adds a collaborator to a repository.
func (*Client) CompareBranches ¶
CompareBranches compares two branches and returns ahead/behind counts.
func (*Client) CreatePullRequest ¶
CreatePullRequest creates a new pull request.
func (*Client) DeleteBranch ¶
DeleteBranch deletes a branch.
func (*Client) DeleteRepoSubscription ¶
func (*Client) FetchFailedJobLogs ¶
FetchFailedJobLogs downloads logs for each failed job of a workflow run. Jobs whose logs cannot be fetched are skipped.
func (*Client) FetchRunDetails ¶
func (*Client) FetchWorkflowRuns ¶
func (c *Client) FetchWorkflowRuns( owner, repo string, opts FetchWorkflowRunsOptions, ) ([]RunTiming, error)
func (*Client) FetchWorkflowRunsWithDetails ¶
func (c *Client) FetchWorkflowRunsWithDetails( owner, repo string, opts FetchWorkflowRunsOptions, ) ([]RunTiming, error)
func (*Client) GetAuthenticatedUser ¶
func (*Client) GetBranchProtection ¶
func (c *Client) GetBranchProtection(owner, repo, branch string) (*ProtectionRule, error)
GetBranchProtection retrieves branch protection rules.
func (*Client) GetBranchesWithComparison ¶
func (c *Client) GetBranchesWithComparison( owner, repo, baseBranch string, ) ([]BranchWithComparison, error)
GetBranchesWithComparison fetches branches and compares them to a base branch.
func (*Client) GetDefaultBranch ¶
GetDefaultBranch fetches the default branch for a repository.
func (*Client) GetDefaultBranchProtection ¶
func (c *Client) GetDefaultBranchProtection(owner, repo string) (*ProtectionRule, error)
GetDefaultBranchProtection retrieves protection rules for the repo's default branch.
func (*Client) GetImmutableReleases ¶ added in v0.6.0
func (c *Client) GetImmutableReleases(owner, repo string) (*ImmutableReleases, error)
GetImmutableReleases retrieves whether release immutability is enabled for a repo.
func (*Client) GetLatestRelease ¶
GetLatestRelease returns the most recent release.
func (*Client) GetPullRequestsForBranch ¶
func (c *Client) GetPullRequestsForBranch(owner, repo, branch string) ([]PullRequest, error)
func (*Client) GetRepoSettings ¶
func (c *Client) GetRepoSettings(owner, repo string) (*RepoSettings, error)
GetRepoSettings retrieves repository settings.
func (*Client) ListBranchStatuses ¶
func (c *Client) ListBranchStatuses(owner, repo, baseBranch string) ([]BranchStatus, error)
ListBranchStatuses lists branches enriched with default-branch, comparison, and PR data. An empty baseBranch compares against the repository default branch.
func (*Client) ListBranches ¶
ListBranches lists all branches for a repository.
func (*Client) ListCollaborators ¶
func (c *Client) ListCollaborators(owner, repo string) ([]Collaborator, error)
ListCollaborators lists all collaborators for a repository.
func (*Client) ListNamespaceRepositories ¶
func (c *Client) ListNamespaceRepositories(namespace string) ([]Repository, bool, error)
func (*Client) ListOrgRepositories ¶
func (c *Client) ListOrgRepositories(org string) ([]Repository, error)
func (*Client) ListOrgSecrets ¶
ListOrgSecrets lists organization-level secrets.
func (*Client) ListPullRequests ¶
func (c *Client) ListPullRequests(owner, repo, state string) ([]PullRequest, error)
func (*Client) ListReleases ¶
ListReleases lists all releases for a repository.
func (*Client) ListRepoSecrets ¶
ListRepoSecrets lists repository-level secrets.
func (*Client) ListUserRepositories ¶
func (c *Client) ListUserRepositories(username string) ([]Repository, error)
func (*Client) ListWebhookDeliveries ¶
func (c *Client) ListWebhookDeliveries(owner, repo string, hookID int) ([]WebhookDelivery, error)
ListWebhookDeliveries lists recent deliveries for a webhook.
func (*Client) ListWebhooks ¶
ListWebhooks lists all webhooks for a repository.
func (*Client) ListWorkflowRuns ¶
func (c *Client) ListWorkflowRuns(owner, repo string) ([]WorkflowRun, error)
ListWorkflowRuns lists workflow runs for a repository.
func (*Client) ListWorkflows ¶
func (c *Client) ListWorkflows(owner, repo string) ([]WorkflowFile, error)
func (*Client) RemoveCollaborator ¶
RemoveCollaborator removes a collaborator from a repository.
func (*Client) SetImmutableReleases ¶ added in v0.6.0
SetImmutableReleases enables or disables release immutability for a repo.
func (*Client) SetRepoSubscription ¶
func (c *Client) SetRepoSubscription( owner, repo string, subscribed, ignored bool, ) (*Subscription, error)
func (*Client) UpdateBranchProtection ¶ added in v0.6.0
func (c *Client) UpdateBranchProtection(owner, repo, branch string, desired ProtectionRule) error
UpdateBranchProtection replaces branch protection rules via PUT, which GitHub requires as a full replacement rather than a partial patch. Fields left at their zero value (e.g. no status checks) are sent as such, not omitted.
func (*Client) UpdateRepoSettings ¶ added in v0.6.0
func (c *Client) UpdateRepoSettings(owner, repo string, patch RepoSettingsPatch) error
UpdateRepoSettings applies a partial settings patch via PATCH /repos/{owner}/{repo}.
func (*Client) UpdateSecurityAndAnalysis ¶ added in v0.6.0
UpdateSecurityAndAnalysis toggles a single security_and_analysis feature. GitHub requires the full nested object per request, so callers pass the one feature they want changed; the rest are omitted and left untouched server-side.
type Collaborator ¶
Collaborator represents a repository collaborator.
type CollaboratorGrant ¶
type CollaboratorGrant struct {
User string
Repository string
Permission string
GrantedBy string
GrantedAt time.Time
ExpiresAt time.Time
RevokedAt *time.Time
}
CollaboratorGrant represents a time-boxed access grant.
type DuplicateSecret ¶
type DuplicateSecret struct {
Name string
Count int
Scopes []string // List of scopes where it appears
Repos []string // List of repositories (for repo-scoped secrets)
}
DuplicateSecret represents a secret name that appears multiple times.
func FindDuplicateSecrets ¶
func FindDuplicateSecrets(secrets []Secret) []DuplicateSecret
FindDuplicateSecrets identifies secret names that appear in multiple scopes/repos Pure function: analyzes secret list for duplicates.
type ErrorContext ¶
type ErrorContext struct {
Repository string `json:"repository"`
WorkflowName string `json:"workflow_name"`
JobName string `json:"job_name"`
StepName string `json:"step_name,omitempty"`
Conclusion string `json:"conclusion"`
Timestamp time.Time `json:"timestamp"`
ErrorLines []string `json:"error_lines"`
Context []string `json:"context_lines,omitempty"`
ErrorType string `json:"error_type,omitempty"`
Summary string `json:"summary"`
}
ErrorContext represents extracted error information.
func BatchExtractErrors ¶
func BatchExtractErrors( logs []JobLog, workflow string, config LogExtractionConfig, ) []*ErrorContext
BatchExtractErrors extracts errors from multiple logs Pure function: maps over logs.
func ExtractErrorContext ¶
func ExtractErrorContext(log JobLog, workflow string, config LogExtractionConfig) *ErrorContext
ExtractErrorContext extracts actionable error information from job logs Pure function: deterministic, no side effects.
type FlakyDetectionConfig ¶
type FlakyDetectionConfig struct {
MinFlips int // Minimum flips to be considered flaky
MinFailureRate float64 // Minimum failure rate (0.0-1.0)
TimeWindow time.Duration
SameCommitOnly bool // Only detect same-commit flips
IncludeSkipped bool // Include skipped tests in analysis
}
FlakyDetectionConfig configures flaky test detection.
func DefaultFlakyConfig ¶
func DefaultFlakyConfig() FlakyDetectionConfig
DefaultFlakyConfig returns sensible defaults.
type FlakyTest ¶
type FlakyTest struct {
Name string
FailureRate float64
FirstFailure time.Time
LastFlip time.Time
FlipCount int
TotalRuns int
FailureCount int
Pattern string // "same-commit-flip", "intermittent", "consistent"
}
FlakyTest represents a test that exhibits flaky behavior.
func DetectFlakyTests ¶
func DetectFlakyTests(runs []TestRun, config FlakyDetectionConfig) []FlakyTest
DetectFlakyTests identifies flaky tests from test runs Pure function: no side effects, deterministic output.
type GQLClient ¶
type GQLClient struct {
// contains filtered or unexported fields
}
GQLClient wraps the GitHub GraphQL API for review thread queries.
func NewGQLClient ¶
NewGQLClient creates a GraphQL client using gh CLI auth or GITHUB_TOKEN.
func (*GQLClient) ListOpenPRReviewThreads ¶
func (g *GQLClient) ListOpenPRReviewThreads( client *Client, owner, repo string, maxPRs int, ) ([]ReviewThread, error)
ListOpenPRReviewThreads fetches review threads across the newest open PRs, capped at maxPRs.
func (*GQLClient) ListPRReviewThreads ¶
func (g *GQLClient) ListPRReviewThreads(owner, repo string, prNumber int) ([]ReviewThread, error)
ListPRReviewThreads fetches all review threads for a single pull request.
func (*GQLClient) ListRepoReviewThreads ¶
func (g *GQLClient) ListRepoReviewThreads( client *Client, owner, repo string, prNumber, maxPRs int, ) ([]ReviewThread, error)
ListRepoReviewThreads fetches threads for one PR when prNumber > 0, otherwise across open PRs.
func (*GQLClient) ListViewerRepoWatchInfo ¶
func (g *GQLClient) ListViewerRepoWatchInfo() (string, []RepoWatchInfo, error)
ListViewerRepoWatchInfo fetches watch state and enrichment metadata for every repository owned by the authenticated user, paginated via GraphQL. Unlike the REST subscription endpoint, the query is atomic per page: a page either returns full data for every repo in it or fails outright, so there's no partial-failure state to silently misreport as "not watching".
type ImmutableReleases ¶ added in v0.6.0
ImmutableReleases represents a repository's release-immutability status.
type JobLog ¶
type JobLog struct {
JobID int
JobName string
WorkflowID int
Repository string
Conclusion string
Lines []string
Timestamp time.Time
}
JobLog represents a GitHub Actions job log.
type JobStats ¶
type JobTiming ¶
type JobTiming struct {
Name string `json:"name"`
DurationSeconds float64 `json:"duration_seconds"`
Status string `json:"status"`
Conclusion string `json:"conclusion"`
StartedAt time.Time `json:"started_at"`
CompletedAt time.Time `json:"completed_at"`
Duration time.Duration `json:"-"`
Steps []StepTiming `json:"steps"`
}
type LogExtractionConfig ¶
type LogExtractionConfig struct {
TailLines int // Number of lines from end of log
ContextLines int // Additional context lines around errors
FilterNoise bool // Remove timestamps, ANSI codes
ExtractStackTrace bool // Include full stack traces
IncludeSuccess bool // Include successful runs
ErrorPatterns []string // Custom regex patterns for errors
}
LogExtractionConfig configures log extraction behavior.
func DefaultLogConfig ¶
func DefaultLogConfig() LogExtractionConfig
DefaultLogConfig returns sensible defaults for log extraction.
type ProtectionRule ¶
type ProtectionRule struct {
Repository string
Branch string
RequiredReviews int
RequireCodeOwnerReviews bool
RequireStatusChecks []string
EnforceAdmins bool
RequireLinearHistory bool
AllowForcePushes bool
AllowDeletions bool
}
ProtectionRule represents branch protection settings.
type PullRequest ¶
type PullRequest struct {
Number int
Title string
State string
Head PRRef
Base PRRef
MergedAt *time.Time
ClosedAt *time.Time
}
func MatchBranchPR ¶
func MatchBranchPR(prs []PullRequest, repoFullName, branch string) *PullRequest
MatchBranchPR returns the open PR whose head is the branch, or the most recent closed one.
type Release ¶
type Release struct {
ID int
Repository string
TagName string
Name string
Body string
Author string
CreatedAt time.Time
PublishedAt time.Time
Draft bool
Prerelease bool
}
Release represents a GitHub release.
type ReleaseComparison ¶
type ReleaseComparison struct {
Repositories []string
LatestReleases map[string]*Release
OutdatedRepos []string // Repos with no release in 90+ days
NonSemVerRepos []string // Repos not following semver
}
ReleaseComparison compares releases across repositories.
func CompareReleases ¶
func CompareReleases(releases map[string]*Release) ReleaseComparison
CompareReleases compares releases across multiple repositories.
type RepoSettings ¶
type RepoSettings struct {
Repository string
DefaultBranch string
AllowMergeCommit bool
AllowSquashMerge bool
AllowRebaseMerge bool
AllowAutoMerge bool
AllowUpdateBranch bool
DeleteBranchOnMerge bool
UseSquashPRTitle bool
SquashMergeMessage string
SquashMergeTitle string
MergeCommitMessage string
MergeCommitTitle string
HasIssues bool
HasProjects bool
HasWiki bool
HasDiscussions bool
IsTemplate bool
AllowForking bool
WebCommitSignoff bool
SecurityAndAnalysis SecurityAndAnalysis
}
RepoSettings represents repository settings.
type RepoSettingsPatch ¶ added in v0.6.0
type RepoSettingsPatch struct {
AllowMergeCommit *bool
AllowSquashMerge *bool
AllowRebaseMerge *bool
AllowAutoMerge *bool
AllowUpdateBranch *bool
DeleteBranchOnMerge *bool
UseSquashPRTitle *bool
HasIssues *bool
HasProjects *bool
HasWiki *bool
HasDiscussions *bool
AllowForking *bool
WebCommitSignoff *bool
}
RepoSettingsPatch carries only the fields to change; nil pointers are left alone. Mirrors the subset of GitHub's PATCH /repos/{owner}/{repo} body gh-sweep can set.
type RepoWatchInfo ¶
type RepoWatchInfo struct {
RepoBasic
IsArchived bool
IsFork bool
State WatchState
ViewerCanSubscribe bool
StargazerCount int
WatcherCount int
PushedAt time.Time
UpdatedAt time.Time
}
RepoWatchInfo is a repo's watch state plus metadata GitHub's REST subscription endpoint doesn't expose (activity, popularity, archival), fetched in a single paginated GraphQL query rather than one REST call per repo.
GitHub's "Custom" per-notification-type watch setting has no representation in either the REST or GraphQL API: a repo set to Custom on github.com reports the same viewerSubscription as one left at the default (see https://github.com/orgs/community/discussions/65099). State should be read as "the best this API can tell us," not as ground truth for Custom repos.
type Repository ¶
type ReviewComment ¶
ReviewComment is a single comment within a PR review thread.
type ReviewThread ¶
type ReviewThread struct {
Repository string
PRNumber int
PRTitle string
Path string
IsResolved bool
IsOutdated bool
Comments []ReviewComment
}
ReviewThread is a review conversation on a pull request.
func FilterUnresolvedThreads ¶
func FilterUnresolvedThreads(threads []ReviewThread) []ReviewThread
FilterUnresolvedThreads keeps only threads that are not resolved.
func (ReviewThread) FirstComment ¶
func (t ReviewThread) FirstComment() (ReviewComment, bool)
FirstComment returns the thread's opening comment, if any.
func (ReviewThread) LastActivity ¶
func (t ReviewThread) LastActivity() time.Time
LastActivity returns the creation time of the most recent comment.
type RunTiming ¶
type RunTiming struct {
RunID int `json:"run_id"`
Workflow string `json:"workflow"`
WorkflowID int `json:"workflow_id"`
Branch string `json:"branch"`
HeadSHA string `json:"head_sha"`
Conclusion string `json:"conclusion"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DurationSeconds float64 `json:"duration_seconds"`
Duration time.Duration `json:"-"`
Jobs []JobTiming `json:"jobs"`
}
func FilterRunsByBranch ¶
func FilterRunsByTimeRange ¶
func FilterRunsByWorkflows ¶
type Secret ¶
type Secret struct {
Name string
Scope string // "org" or "repo"
Repository string // Empty for org secrets
CreatedAt string
UpdatedAt string
}
Secret represents a GitHub Actions secret.
type SecretUsage ¶
type SecretUsage struct {
Name string
Scope string
Repository string
ReferencedIn []string // Workflow files that reference this secret
Unused bool
}
SecretUsage tracks secret usage in workflows.
func DetectUnusedSecrets ¶
func DetectUnusedSecrets(secrets []Secret, workflowRefs map[string][]string) []SecretUsage
DetectUnusedSecrets compares secrets against workflow references.
type SecurityAndAnalysis ¶ added in v0.6.0
type SecurityAndAnalysis struct {
SecretScanning string
SecretScanningPushProtection string
DependabotSecurityUpdates string
SecretScanningNonProvider string
SecretScanningValidityChecks string
}
SecurityAndAnalysis represents the repo's security_and_analysis feature toggles. Each field is "enabled" or "disabled"; an absent feature (e.g. secret scanning on a private repo without GHAS) surfaces as an empty string, not a diff target.
type SettingsDiff ¶
type SettingsDiff struct {
Field string
Baseline interface{}
Current interface{}
Severity string // critical, warning, info
}
SettingsDiff represents differences between repository settings.
func CompareSettings ¶
func CompareSettings(baseline, current *RepoSettings) []SettingsDiff
CompareSettings compares repository settings against a baseline.
type StepTiming ¶
type Subscription ¶
type TestRun ¶
type TestRun struct {
Name string
Status string // "success", "failure", "skipped"
CommitSHA string
Timestamp time.Time
Duration time.Duration
Repository string
WorkflowID int
}
TestRun represents a single test execution.
func ApplyFilters ¶
ApplyFilters applies a list of filters to test runs Functional composition helper.
func WorkflowRunsToTestRuns ¶
func WorkflowRunsToTestRuns(repo string, runs []WorkflowRun) []TestRun
WorkflowRunsToTestRuns adapts workflow runs for flaky detection, treating each workflow as a test keyed by its name. Runs without a terminal success/failure/skipped conclusion are dropped.
type ThreadFilter ¶
ThreadFilter narrows review threads by author, activity date, and text.
func (ThreadFilter) Apply ¶
func (f ThreadFilter) Apply(threads []ReviewThread) []ReviewThread
Apply returns the threads matching every set filter field.
type WatchState ¶
type WatchState string
const ( WatchStateSubscribed WatchState = "subscribed" WatchStateIgnored WatchState = "ignored" // WatchStateDefault is GitHub's un-set subscription state ("Participating // and @mentions"), not an absence of any relationship to the repo. WatchStateDefault WatchState = "" )
type WebhookDelivery ¶
type WebhookDelivery struct {
ID int
Event string
Status int
Duration int // milliseconds
Timestamp string
}
WebhookDelivery represents a webhook delivery.
type WebhookHealth ¶
type WebhookHealth struct {
WebhookID int
SuccessRate float64
TotalDeliveries int
Failures int
AvgDuration int
}
WebhookHealth represents webhook health metrics.
func AnalyzeWebhookHealth ¶
func AnalyzeWebhookHealth(deliveries []WebhookDelivery) WebhookHealth
AnalyzeWebhookHealth analyzes webhook delivery health.
type WorkflowFile ¶
type WorkflowRun ¶
type WorkflowRun struct {
ID int
Name string
Status string
Conclusion string
Branch string
HeadSHA string
CreatedAt time.Time
UpdatedAt time.Time
Duration time.Duration
}
WorkflowRun represents a GitHub Actions workflow run.
type WorkflowRunStats ¶
type WorkflowRunStats struct {
TotalRuns int
SuccessRate float64
FailureCount int
AvgDuration time.Duration
Runs []WorkflowRun
}
WorkflowRunStats represents statistics about workflow runs.
func AnalyzeWorkflowRuns ¶
func AnalyzeWorkflowRuns(runs []WorkflowRun) WorkflowRunStats
AnalyzeWorkflowRuns analyzes workflow runs and returns statistics.