github

package
v0.4.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 27, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package github wraps the GitHub REST and GraphQL APIs used by gh-sweep.

Index

Constants

View Source
const DefaultOpenPRCap = 20

DefaultOpenPRCap bounds how many of the newest open PRs are scanned for review threads.

Variables

View Source
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")
)

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 ComputeJobStats(runs []RunTiming) map[string]*JobStats

func ComputeWorkflowStats

func ComputeWorkflowStats(runs []RunTiming) map[string]*WorkflowStats

func FilterByCommit

func FilterByCommit(commits ...string) func(TestRun) bool

FilterByCommit creates a filter for specific commits Higher-order function for functional composition.

func FilterByRepository

func FilterByRepository(repos ...string) func(TestRun) bool

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 FormatDuration(d time.Duration) string

func GroupSecretsByScope

func GroupSecretsByScope(secrets []Secret) map[string][]Secret

GroupSecretsByScope groups secrets by their scope (org/repo) Pure function: creates grouped map.

func ParseSinceDate

func ParseSinceDate(value string) (time.Time, error)

ParseSinceDate parses a YYYY-MM-DD date for --since filtering.

func ScanWorkflowForSecrets

func ScanWorkflowForSecrets(workflowContent string) []string

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

func SortRunsByDate(runs []RunTiming, ascending bool)

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
}

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

type BranchWithComparison struct {
	Branch
	ComparedTo string
}

BranchWithComparison extends Branch with comparison data.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client wraps the GitHub API client.

func NewClient

func NewClient(ctx context.Context) (*Client, error)

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

func NewClientWithToken(ctx context.Context, token string) (*Client, error)

NewClientWithToken creates a new GitHub API client with an explicit token.

func NewClientWithTransport

func NewClientWithTransport(ctx context.Context, rt http.RoundTripper) (*Client, error)

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

func (c *Client) AddCollaborator(owner, repo, username, permission string) error

AddCollaborator adds a collaborator to a repository.

func (*Client) CompareBranches

func (c *Client) CompareBranches(owner, repo, base, head string) (ahead, behind int, err error)

CompareBranches compares two branches and returns ahead/behind counts.

func (*Client) Context

func (c *Client) Context() context.Context

Context returns the client's context.

func (*Client) CreatePullRequest

func (c *Client) CreatePullRequest(owner, repo, title, body, head, base string) (int, error)

CreatePullRequest creates a new pull request.

func (*Client) Delete

func (c *Client) Delete(path string, response interface{}) error

Delete performs a DELETE request to the GitHub API.

func (*Client) DeleteBranch

func (c *Client) DeleteBranch(owner, repo, branch string) error

DeleteBranch deletes a branch.

func (*Client) DeleteRepoSubscription

func (c *Client) DeleteRepoSubscription(owner, repo string) error

func (*Client) FetchFailedJobLogs

func (c *Client) FetchFailedJobLogs(owner, repo string, runID int) ([]JobLog, error)

FetchFailedJobLogs downloads logs for each failed job of a workflow run. Jobs whose logs cannot be fetched are skipped.

func (*Client) FetchRunDetails

func (c *Client) FetchRunDetails(owner, repo string, runID int) (*RunTiming, error)

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) Get

func (c *Client) Get(path string, response interface{}) error

Get performs a GET request to the GitHub API.

func (*Client) GetAuthenticatedUser

func (c *Client) GetAuthenticatedUser() (string, error)

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

func (c *Client) GetDefaultBranch(owner, repo string) (string, error)

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) GetLatestRelease

func (c *Client) GetLatestRelease(owner, repo string) (*Release, error)

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

func (c *Client) ListBranches(owner, repo string) ([]Branch, error)

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

func (c *Client) ListOrgSecrets(org string) ([]Secret, error)

ListOrgSecrets lists organization-level secrets.

func (*Client) ListPullRequests

func (c *Client) ListPullRequests(owner, repo, state string) ([]PullRequest, error)

func (*Client) ListReleases

func (c *Client) ListReleases(owner, repo string) ([]Release, error)

ListReleases lists all releases for a repository.

func (*Client) ListRepoSecrets

func (c *Client) ListRepoSecrets(owner, repo string) ([]Secret, error)

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

func (c *Client) ListWebhooks(owner, repo string) ([]Webhook, error)

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) Patch

func (c *Client) Patch(path string, body, response interface{}) error

Patch performs a PATCH request to the GitHub API.

func (*Client) Post

func (c *Client) Post(path string, body, response interface{}) error

Post performs a POST request to the GitHub API.

func (*Client) Put

func (c *Client) Put(path string, body, response interface{}) error

Put performs a PUT request to the GitHub API.

func (*Client) RemoveCollaborator

func (c *Client) RemoveCollaborator(owner, repo, username string) error

RemoveCollaborator removes a collaborator from a repository.

func (*Client) SetRepoSubscription

func (c *Client) SetRepoSubscription(
	owner, repo string,
	subscribed, ignored bool,
) (*Subscription, error)

type Collaborator

type Collaborator struct {
	Login      string
	Permission string
	Repository string
}

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
}

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

func NewGQLClient() (*GQLClient, error)

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 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
}

func GetTopJobsByDuration

func GetTopJobsByDuration(stats map[string]*JobStats, limit int) []*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 PRRef

type PRRef struct {
	Ref  string
	SHA  string
	Repo string
}

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 RepoBasic

type RepoBasic struct {
	Name     string
	FullName string
	Owner    string
	Private  bool
}

type RepoSettings

type RepoSettings struct {
	Repository          string
	DefaultBranch       string
	AllowMergeCommit    bool
	AllowSquashMerge    bool
	AllowRebaseMerge    bool
	DeleteBranchOnMerge bool
	HasIssues           bool
	HasProjects         bool
	HasWiki             bool
}

RepoSettings represents repository settings.

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
	FullName      string
	Owner         string
	Private       bool
	Archived      bool
	DefaultBranch string
}

type ReviewComment

type ReviewComment struct {
	Author    string
	Body      string
	CreatedAt time.Time
	URL       string
}

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 FilterRunsByBranch(runs []RunTiming, branch string) []RunTiming

func FilterRunsByTimeRange

func FilterRunsByTimeRange(runs []RunTiming, since, until time.Time) []RunTiming

func FilterRunsByWorkflows

func FilterRunsByWorkflows(runs []RunTiming, workflows []string) []RunTiming

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 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 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:"-"`
}

type Subscription

type Subscription struct {
	Repository string
	Subscribed bool
	Ignored    bool
	Reason     string
	CreatedAt  time.Time
	State      WatchState
}

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

func ApplyFilters(runs []TestRun, filters ...func(TestRun) bool) []TestRun

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

type ThreadFilter struct {
	Author string
	Since  *time.Time
	Search string
}

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 Webhook

type Webhook struct {
	ID         int
	Repository string
	URL        string
	Events     []string
	Active     bool
}

Webhook represents a repository webhook.

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"`
}

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.

type WorkflowStats

type WorkflowStats struct {
	Workflow     string
	TotalRuns    int
	AvgDuration  time.Duration
	MinDuration  time.Duration
	MaxDuration  time.Duration
	SuccessRate  float64
	FailureCount int
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL