gitprovider

package
v1.10.0 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package gitprovider offers a provider-agnostic interface for git hosting operations.

It defines the Provider interface covering PR lifecycle (create, edit, get, merge, comment) and CI status queries, with concrete implementations for Forgejo and GitHub. DetectProvider auto-selects the correct backend by inspecting the git remote URL of a working directory.

Plane: shared

Index

Constants

View Source
const (
	StatePending = "pending"
	StateSuccess = "success"
	StateFailure = "failure"
	StateError   = "error"
)

CI status state constants.

Variables

This section is empty.

Functions

func IsWoodpeckerContext added in v1.2.0

func IsWoodpeckerContext(ctx string) bool

IsWoodpeckerContext returns true if a commit status context was created by Woodpecker CI.

Types

type CombinedStatus

type CombinedStatus struct {
	State    string // Overall: "pending", "success", "error", "failure"
	Statuses []*CommitStatus
}

CombinedStatus represents the overall status of all checks on a commit.

type Comment

type Comment struct {
	ID        int64
	Body      string
	User      string
	CreatedAt time.Time
	HTMLURL   string
}

type CommitStatus

type CommitStatus struct {
	Context     string // Check name (e.g. "ci/woodpecker", "lint")
	State       string // "pending", "success", "error", "failure"
	Description string
	TargetURL   string
}

CommitStatus represents the status of a single CI check on a commit.

type ForgejoProvider

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

func (*ForgejoProvider) CreateComment

func (p *ForgejoProvider) CreateComment(owner, repo string, index int64, body string) (*Comment, error)

func (*ForgejoProvider) CreatePR

func (p *ForgejoProvider) CreatePR(owner, repo, head, base, title, body string) (*PullRequest, error)

func (*ForgejoProvider) EditPR

func (p *ForgejoProvider) EditPR(owner, repo string, index int64, title, body string) (*PullRequest, error)

func (*ForgejoProvider) GetCIFailureDetails

func (p *ForgejoProvider) GetCIFailureDetails(owner, repo, sha string) ([]*JobFailure, error)

GetCIFailureDetails fetches CI failure details via Woodpecker CI API. Forgejo's native Actions API does not provide useful error info, so we use Woodpecker's API directly for failure details and step logs.

Note: this method requires WOODPECKER_URL and WOODPECKER_TOKEN to be set independently of the Forgejo credentials — Woodpecker is a separate service.

func (*ForgejoProvider) GetCombinedStatus

func (p *ForgejoProvider) GetCombinedStatus(owner, repo, ref string) (*CombinedStatus, error)

func (*ForgejoProvider) GetPR

func (p *ForgejoProvider) GetPR(owner, repo string, index int64) (*PullRequest, error)

func (*ForgejoProvider) ListComments

func (p *ForgejoProvider) ListComments(owner, repo string, index int64) ([]*Comment, error)

func (*ForgejoProvider) MergePR

func (p *ForgejoProvider) MergePR(owner, repo string, index int64, deleteBranch bool) error

func (*ForgejoProvider) Name

func (p *ForgejoProvider) Name() string

type GitHubProvider

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

func (*GitHubProvider) CreateComment

func (p *GitHubProvider) CreateComment(owner, repo string, index int64, body string) (*Comment, error)

func (*GitHubProvider) CreatePR

func (p *GitHubProvider) CreatePR(owner, repo, head, base, title, body string) (*PullRequest, error)

func (*GitHubProvider) EditPR

func (p *GitHubProvider) EditPR(owner, repo string, index int64, title, body string) (*PullRequest, error)

func (*GitHubProvider) GetCIFailureDetails

func (p *GitHubProvider) GetCIFailureDetails(owner, repo, sha string) ([]*JobFailure, error)

func (*GitHubProvider) GetCombinedStatus

func (p *GitHubProvider) GetCombinedStatus(owner, repo, ref string) (*CombinedStatus, error)

GetCombinedStatus queries GitHub Check Runs API (not the legacy Commit Status API). This only sees checks created via the Checks API (GitHub Actions, Apps) — external CI tools that push commit statuses (Jenkins, CircleCI) are not captured.

func (*GitHubProvider) GetPR

func (p *GitHubProvider) GetPR(owner, repo string, index int64) (*PullRequest, error)

func (*GitHubProvider) ListComments

func (p *GitHubProvider) ListComments(owner, repo string, index int64) ([]*Comment, error)

func (*GitHubProvider) MergePR

func (p *GitHubProvider) MergePR(owner, repo string, index int64, deleteBranch bool) error

func (*GitHubProvider) Name

func (p *GitHubProvider) Name() string

type JobFailure

type JobFailure struct {
	WorkflowName string
	JobName      string
	LogTail      string // last ~50 lines of job log (best-effort)
	HTMLURL      string
}

JobFailure describes a single failed CI job with optional log tail.

type Provider

type Provider interface {
	Name() string
	CreatePR(owner, repo, head, base, title, body string) (*PullRequest, error)
	EditPR(owner, repo string, index int64, title, body string) (*PullRequest, error)
	GetPR(owner, repo string, index int64) (*PullRequest, error)
	MergePR(owner, repo string, index int64, deleteBranch bool) error
	CreateComment(owner, repo string, index int64, body string) (*Comment, error)
	ListComments(owner, repo string, index int64) ([]*Comment, error)
	GetCombinedStatus(owner, repo, ref string) (*CombinedStatus, error)
	GetCIFailureDetails(owner, repo, sha string) ([]*JobFailure, error)
}

func NewForgejoProvider

func NewForgejoProvider() (Provider, error)

func NewGitHubProviderWithToken added in v1.9.0

func NewGitHubProviderWithToken(token string) (Provider, error)

NewGitHubProviderWithToken creates a GitHub provider with an explicit token. If token is empty, falls back to the GITHUB_TOKEN environment variable.

func NewProviderByNameWithToken added in v1.9.0

func NewProviderByNameWithToken(name, githubToken string) (Provider, error)

NewProviderByNameWithToken creates a provider by name with an optional GitHub token override. Forgejo ignores the githubToken parameter.

func NewProviderWithToken added in v1.9.0

func NewProviderWithToken(info *RepoInfo, githubToken string) (Provider, error)

NewProviderWithToken creates a provider from RepoInfo with an optional GitHub token override. Forgejo ignores the githubToken parameter.

type ProviderType

type ProviderType string
const (
	ProviderForgejo ProviderType = "forgejo"
	ProviderGitHub  ProviderType = "github"
)

type PullRequest

type PullRequest struct {
	Index     int64
	Title     string
	Body      string
	State     string
	HTMLURL   string
	Head      string
	HeadSHA   string
	Base      string
	Mergeable bool
	Merged    bool
}

type RepoInfo

type RepoInfo struct {
	Owner         string
	Repo          string
	Provider      ProviderType
	Host          string
	DefaultBranch string
}

func DetectProvider

func DetectProvider(workDir string) (*RepoInfo, error)

func ParseRemoteURL

func ParseRemoteURL(remoteURL string) (*RepoInfo, error)

func (*RepoInfo) PRURL

func (r *RepoInfo) PRURL(prID string) string

PRURL constructs the full web URL for a pull request.

type WoodpeckerClient added in v1.2.0

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

WoodpeckerClient wraps the Woodpecker SDK for CI failure details.

func NewWoodpeckerClient added in v1.2.0

func NewWoodpeckerClient() (*WoodpeckerClient, error)

NewWoodpeckerClient creates a Woodpecker API client from env vars. Requires WOODPECKER_URL and WOODPECKER_TOKEN.

func (*WoodpeckerClient) GetFailureDetails added in v1.2.0

func (w *WoodpeckerClient) GetFailureDetails(owner, repo, sha string) ([]*JobFailure, error)

GetFailureDetails fetches failed pipeline steps and their logs for a commit SHA.

Jump to

Keyboard shortcuts

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