gitprovider

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Mar 11, 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

This section is empty.

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)

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 NewGitHubProvider

func NewGitHubProvider() (Provider, error)

func NewProvider

func NewProvider(info *RepoInfo) (Provider, error)

func NewProviderByName

func NewProviderByName(name string) (Provider, error)

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.

Jump to

Keyboard shortcuts

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