github

package
v4.7.0 Latest Latest
Warning

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

Go to latest
Published: Apr 25, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CanPushToRepo

func CanPushToRepo(repoOwner, repoName, username string) bool

CanPushToRepo checks whether the given GitHub user has push (write) access to a specific repository. Returns true if the user has write, maintain, or admin permission. Returns false if the user has no push access or if the API call fails (e.g., 403 means no push access).

func CheckAuth

func CheckAuth() error

CheckAuth verifies that the gh CLI is authenticated and returns an error if not.

func GetCurrentUser

func GetCurrentUser() (string, error)

GetCurrentUser returns the GitHub username of the currently authenticated user.

Types

type CheckStatus

type CheckStatus struct {
	State   string // "success", "failure", "pending", "error"
	Summary string // e.g., "3/3 checks passed"
}

CheckStatus represents CI check status

type Client

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

Client wraps GitHub operations using gh CLI

func NewClient

func NewClient(remoteURL string) (*Client, error)

NewClient creates a new GitHub client by parsing the remote URL

func (*Client) CreatePR

func (c *Client) CreatePR(title, body, head, base string, draft bool) (*PR, error)

CreatePR creates a new pull request

func (*Client) GetPR

func (c *Client) GetPR(number int) (*PR, error)

GetPR gets a PR by number

func (*Client) GetPRByBranch

func (c *Client) GetPRByBranch(branch string) (*PR, error)

GetPRByBranch gets a PR by its head branch name

func (*Client) GetPRChecks

func (c *Client) GetPRChecks(number int) (*CheckStatus, error)

GetPRChecks gets the CI check status for a PR

func (*Client) GetPRForkInfo

func (c *Client) GetPRForkInfo(number int) (*PRForkInfo, error)

GetPRForkInfo fetches fork-related metadata for a PR. Returns info about whether the PR is from a fork and whether maintainers can push.

func (*Client) ListOpenPRs

func (c *Client) ListOpenPRs() ([]OpenPR, error)

ListOpenPRs returns all open PRs in the repository

func (*Client) MergePR

func (c *Client) MergePR(number int, method string, deleteRemoteBranch bool) error

MergePR merges a pull request using the specified method (merge, squash, rebase)

func (*Client) SetPRDraft

func (c *Client) SetPRDraft(number int) error

SetPRDraft marks a PR as draft

func (*Client) SetPRReady

func (c *Client) SetPRReady(number int) error

SetPRReady marks a draft PR as ready for review

func (*Client) UpdatePR

func (c *Client) UpdatePR(number int, body string) error

UpdatePR updates a PR's body

func (*Client) UpdatePRBase

func (c *Client) UpdatePRBase(number int, base string) error

UpdatePRBase updates a PR's base branch

func (*Client) UpdateStackDescription

func (c *Client) UpdateStackDescription(stack *config.Stack, currentBranch string) error

UpdateStackDescription updates PR descriptions with stack info.

func (*Client) UpdateStackDescriptionCached

func (c *Client) UpdateStackDescriptionCached(stack *config.Stack, currentBranch string, prMap map[int]*PR) error

UpdateStackDescriptionCached updates PR descriptions using pre-fetched PR data to avoid extra API calls.

type ClientInterface

type ClientInterface interface {
	// CreatePR creates a new pull request
	CreatePR(title, body, head, base string, draft bool) (*PR, error)

	// GetPR gets a PR by number
	GetPR(number int) (*PR, error)

	// GetPRByBranch gets a PR by its head branch name
	GetPRByBranch(branch string) (*PR, error)

	// GetPRChecks gets the CI check status for a PR
	GetPRChecks(number int) (*CheckStatus, error)

	// UpdatePR updates a PR's body
	UpdatePR(number int, body string) error

	// UpdatePRBase updates a PR's base branch
	UpdatePRBase(number int, base string) error

	// ListOpenPRs returns all open PRs in the repository
	ListOpenPRs() ([]OpenPR, error)

	// MergePR merges a pull request using the specified method
	MergePR(number int, method string, deleteRemoteBranch bool) error

	// SetPRDraft marks a PR as draft
	SetPRDraft(number int) error

	// SetPRReady marks a draft PR as ready for review
	SetPRReady(number int) error

	// UpdateStackDescription updates PR descriptions with stack info
	UpdateStackDescription(stack *config.Stack, currentBranch string) error
}

ClientInterface defines the interface for GitHub operations This allows for mocking in tests

type OpenPR

type OpenPR struct {
	Number int    `json:"number"`
	Title  string `json:"title"`
	Branch string `json:"headRefName"`
	Author string `json:"author"`
	URL    string `json:"url"`
}

OpenPR represents a minimal PR for listing

type PR

type PR struct {
	Number      int    `json:"number"`
	URL         string `json:"url"`
	Title       string `json:"title"`
	Body        string `json:"body"`
	State       string `json:"state"`
	Base        string `json:"baseRefName"`
	Head        string `json:"headRefName"`
	MergedAt    string `json:"mergedAt"` // non-empty if merged
	Merged      bool   // computed from MergedAt
	Mergeable   string `json:"mergeable"`
	IsDraft     bool   `json:"isDraft"`
	ReviewState string `json:"reviewDecision"`

	// Fork-related fields
	HeadRepoOwner       string `json:"headRepositoryOwner_login"` // set via custom parsing
	HeadRepoName        string `json:"headRepository_name"`       // set via custom parsing
	MaintainerCanModify bool   // whether the repo maintainer can push to the fork's PR branch
	IsFork              bool   // computed: true if head repo owner differs from base repo owner
}

PR represents a pull request

type PRForkInfo

type PRForkInfo struct {
	HeadRepoOwner       string // GitHub username/org that owns the head (source) repo
	HeadRepoName        string // Name of the head repo
	MaintainerCanModify bool   // Whether the repo maintainer can push to the fork branch
	IsFork              bool   // True if the PR is from a fork (head owner != base repo owner)
}

PRForkInfo contains fork-related information for a PR

Jump to

Keyboard shortcuts

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