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 NewClient(ctx context.Context) (*Client, error)
- func NewClientWithRealAuthAndTransport(ctx context.Context, rt http.RoundTripper) (*Client, error)
- func NewClientWithToken(ctx context.Context, token string) (*Client, error)
- func NewClientWithTransport(ctx context.Context, rt http.RoundTripper) (*Client, error)
- func (c *Client) AddCollaborator(owner, repo, username, permission string) error
- func (c *Client) CompareBranches(owner, repo, base, head string) (int, int, 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 any) 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 any) 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) GetCNAMEFile(owner, repo string) (string, 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) GetPagesInfo(owner, repo string) (*PagesInfo, 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) ListWorkflows(owner, repo string) ([]WorkflowFile, error)
- func (c *Client) Patch(path string, body, response any) error
- func (c *Client) Post(path string, body, response any) error
- func (c *Client) Put(path string, body, response any) error
- func (c *Client) RemoveCollaborator(owner, repo, username string) error
- func (c *Client) ScanRepoSecretRefs(owner, repo string) (map[string][]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 PagesInfo
- 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 WorkflowStats
Constants ¶
const ( ConclusionSuccess = "success" ConclusionFailure = "failure" ConclusionSkipped = "skipped" )
Terminal conclusion values reported by the GitHub Actions API.
const ( ErrorTypeUnknown = "unknown" ErrorTypeBuildError = "build-error" ErrorTypeTestFailure = "test-failure" ErrorTypePanic = "panic" ErrorTypeTimeout = "timeout" )
Error type classifications returned by classifyError.
const ( FlakyPatternSameCommitFlip = "same-commit-flip" FlakyPatternIntermittent = "intermittent" FlakyPatternConsistent = "consistent" )
Flaky patterns returned by classifyPattern.
const ( SecretScopeOrg = "org" SecretScopeRepo = "repo" )
Secret scopes.
const DefaultOpenPRCap = 20
DefaultOpenPRCap bounds how many of the newest open PRs are scanned for review threads.
Variables ¶
var ( ErrDefaultBranchDeletion = errors.New("cannot delete the default branch") ErrOpenPRBranchDeletion = errors.New("branch has an open pull request") ErrProtectedBranchDeletion = errors.New("cannot delete a protected branch") )
Sentinel errors returned by BranchStatus.DeleteBlocked.
var ErrBranchNotProtected = errors.New("branch not protected")
ErrBranchNotProtected means the branch has no protection rule configured yet.
var ErrJobLogFetchFailed = errors.New("unexpected status fetching job logs")
ErrJobLogFetchFailed indicates the GitHub API returned a non-200 status while fetching a job's logs.
var ErrPagesNotFound = errors.New("pages not configured for this repository")
ErrPagesNotFound means the repo has no GitHub Pages site configured.
var ErrUnexpectedFileEncoding = errors.New("unexpected file encoding")
ErrUnexpectedFileEncoding means a Contents API response came back in an encoding other than base64, which the API is not expected to send.
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
ComputeBranchStats aggregates run timing per branch, including each non-base branch's average-duration delta against baseBranch.
func ComputeJobStats ¶
ComputeJobStats aggregates job timing per workflow:job key.
func ComputeWorkflowStats ¶
func ComputeWorkflowStats(runs []RunTiming) map[string]*WorkflowStats
ComputeWorkflowStats aggregates run timing and success rate per workflow.
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 ¶
FormatDuration renders a duration as seconds, minutes, or hours depending on its magnitude.
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 ¶
SortRunsByDate sorts runs in place by creation time.
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 BranchStats struct {
Branch string
TotalRuns int
AvgDuration time.Duration
WorkflowStats map[string]*WorkflowStats
DeltaVsBase float64
DeltaVsBasePct float64
}
BranchStats aggregates run timing for one branch, including its delta against a base branch.
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 NewClientWithRealAuthAndTransport ¶ added in v0.7.0
NewClientWithRealAuthAndTransport creates a client that resolves real gh CLI auth (host and token) but routes requests through rt instead of the default transport. For cassette-recording tools only: it panics under `go test` so tests keep using the fake-token seam in NewClientWithTransport.
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 ¶
DeleteRepoSubscription removes the authenticated user's subscription to a repository, resetting it to the default (un-set) state.
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 ¶
FetchRunDetails fetches job and step timing for a single workflow run.
func (*Client) FetchWorkflowRuns ¶
func (c *Client) FetchWorkflowRuns( owner, repo string, opts FetchWorkflowRunsOptions, ) ([]RunTiming, error)
FetchWorkflowRuns fetches completed workflow runs matching opts.
func (*Client) FetchWorkflowRunsWithDetails ¶
func (c *Client) FetchWorkflowRunsWithDetails( owner, repo string, opts FetchWorkflowRunsOptions, ) ([]RunTiming, error)
FetchWorkflowRunsWithDetails fetches workflow runs and enriches each with job timing details.
func (*Client) GetAuthenticatedUser ¶
GetAuthenticatedUser returns the login of the user the client is authenticated as.
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) GetCNAMEFile ¶ added in v0.7.0
GetCNAMEFile reads a repo's root CNAME file, returning "" when the repo has none. A CNAME file can outlive Pages being disabled, which is the subdomain-takeover signal: DNS still points at GitHub while nothing serves the domain from this repo anymore.
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) GetPagesInfo ¶ added in v0.7.0
GetPagesInfo fetches a repo's GitHub Pages configuration. It returns ErrPagesNotFound when Pages isn't enabled for the repo (a 404 from the API).
func (*Client) GetPullRequestsForBranch ¶
func (c *Client) GetPullRequestsForBranch(owner, repo, branch string) ([]PullRequest, error)
GetPullRequestsForBranch lists all pull requests (any state) whose head is owner/branch.
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)
ListNamespaceRepositories lists repositories for a namespace that may be either an organization or a user, reporting which kind it resolved to.
func (*Client) ListOrgRepositories ¶
func (c *Client) ListOrgRepositories(org string) ([]Repository, error)
ListOrgRepositories lists all repositories belonging to an organization.
func (*Client) ListOrgSecrets ¶
ListOrgSecrets lists organization-level secrets.
func (*Client) ListPullRequests ¶
func (c *Client) ListPullRequests(owner, repo, state string) ([]PullRequest, error)
ListPullRequests lists pull requests in a repository matching state ("open", "closed", or "all").
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)
ListUserRepositories lists all repositories belonging to a user.
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) ListWorkflows ¶
func (c *Client) ListWorkflows(owner, repo string) ([]WorkflowFile, error)
ListWorkflows lists the workflow files defined in a repository.
func (*Client) RemoveCollaborator ¶
RemoveCollaborator removes a collaborator from a repository.
func (*Client) ScanRepoSecretRefs ¶ added in v0.7.0
ScanRepoSecretRefs fetches a repo's workflow files and returns which secret names each one references, keyed by secret name. Workflows that fail to fetch are skipped rather than failing the whole scan, since a partial reference map only risks a false "unused" positive, not a wrong action.
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)
SetRepoSubscription sets the authenticated user's watch/ignore subscription for a repository.
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 FetchWorkflowRunsOptions ¶
type FetchWorkflowRunsOptions struct {
WorkflowFile string
Branch string
Status string
Limit int
CreatedAfter time.Time
}
FetchWorkflowRunsOptions configures FetchWorkflowRuns.
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 // one of the FlakyPattern* constants
}
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 JobStats struct {
WorkflowJob string
TotalRuns int
AvgDuration time.Duration
MinDuration time.Duration
MaxDuration time.Duration
}
JobStats aggregates timing for one workflow job across runs.
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"`
}
JobTiming records the timing and outcome of a single workflow job.
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 PagesInfo ¶ added in v0.7.0
type PagesInfo struct {
Repository string
CNAME string
HTMLURL string
HTTPSEnforced bool
Status string
DomainVerified bool
}
PagesInfo is a repository's GitHub Pages configuration.
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
}
PullRequest describes a GitHub pull request.
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 RepoBasic ¶
RepoBasic holds the minimal repository identity fields used by the watch/subscription APIs.
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 Repository struct {
Name string `json:"name"`
FullName string `json:"full_name"`
Owner string `json:"owner"`
Private bool `json:"private"`
Archived bool `json:"archived"`
DefaultBranch string `json:"default_branch"`
}
Repository describes a GitHub 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"`
}
RunTiming records the timing and outcome of a single workflow run.
func FilterRunsByBranch ¶
FilterRunsByBranch returns the runs matching branch, or all runs when branch is empty.
func FilterRunsByTimeRange ¶
FilterRunsByTimeRange returns the runs created within [since, until], treating a zero bound as unbounded.
func FilterRunsByWorkflows ¶
FilterRunsByWorkflows returns the runs whose workflow is in workflows, or all runs when workflows is empty.
type Secret ¶
type Secret struct {
Name string
Scope string // SecretScopeOrg or SecretScopeRepo
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 any
Current any
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 StepTiming 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:"-"`
}
StepTiming records the timing and outcome of a single job step.
type Subscription ¶
type Subscription struct {
Repository string
Subscribed bool
Ignored bool
Reason string
CreatedAt time.Time
State WatchState
}
Subscription describes the authenticated user's notification subscription to a repository.
type TestRun ¶
type TestRun struct {
Name string
Status string // one of the Conclusion* constants
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 RunsToTestRuns ¶ added in v0.7.0
RunsToTestRuns 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
WatchState is a repository's notification subscription state for the authenticated user.
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 = "" )
Subscription states as reported by the GitHub API.
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 WorkflowFile struct {
ID int `json:"id"`
Name string `json:"name"`
Path string `json:"path"`
State string `json:"state"`
}
WorkflowFile identifies a workflow definition file in a repository.
type WorkflowStats ¶
type WorkflowStats struct {
Workflow string
TotalRuns int
AvgDuration time.Duration
MinDuration time.Duration
MaxDuration time.Duration
SuccessRate float64
FailureCount int
}
WorkflowStats aggregates run timing and outcomes for one workflow.
func AnalyzeRuns ¶ added in v0.7.0
func AnalyzeRuns(runs []RunTiming) WorkflowStats
AnalyzeRuns aggregates timing and success rate across all of the given runs, regardless of which workflow each belongs to.