pr

package
v0.17.15 Latest Latest
Warning

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

Go to latest
Published: May 11, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package pr provides PR title and body generation for GitHub pull requests.

Index

Constants

View Source
const (
	// SectionStart marks the beginning of the stackit-generated section in PR body.
	SectionStart = "<!-- STACKIT-SECTION-START -->"
	// SectionEnd marks the end of the stackit-generated section in PR body.
	SectionEnd = "<!-- STACKIT-SECTION-END -->"

	// LockSectionStart marks the beginning of the lock status section in PR body.
	LockSectionStart = "<!-- STACKIT-LOCK-START -->"
	// LockSectionEnd marks the end of the lock status section in PR body.
	LockSectionEnd = "<!-- STACKIT-LOCK-END -->"

	// CommentMarker is used to identify stackit-generated navigation comments.
	CommentMarker = "<!-- STACKIT-NAV-COMMENT -->"
)
View Source
const (
	TrailerStackSize = "Stackit-Stack-Size"
	TrailerPRs       = "Stackit-PRs"
	TrailerScope     = "Stackit-Scope"
)

Trailer key constants for stack metadata embedded in merge commits.

Variables

This section is empty.

Functions

func CreateLockSection

func CreateLockSection(branch string, eng engine.BranchReader) string

CreateLockSection creates an independent lock status section for the PR body. Returns empty string if the branch is not locked. This section is independent of navigation settings and appears at the TOP of the PR body.

func CreateNavigationComment

func CreateNavigationComment(branch string, eng engine.BranchReader, opts NavigationOptions) string

CreateNavigationComment creates the content for a navigation comment. This includes both the stack description and the navigation tree. Returns empty string if neither navigation nor description should be shown.

func CreatePRBodyFooter

func CreatePRBodyFooter(branch string, eng engine.BranchReader) string

CreatePRBodyFooter creates a PR body footer with dependency tree using default options.

func CreatePRBodyFooterWithOptions

func CreatePRBodyFooterWithOptions(branch string, eng engine.BranchReader, opts NavigationOptions) string

CreatePRBodyFooterWithOptions creates a PR body footer with dependency tree using custom options. Returns empty string if neither navigation nor description should be shown. The footer includes both the stack description and the navigation tree in a combined section.

func FormatMergeBody

func FormatMergeBody(params MergeBodyParams) string

FormatMergeBody formats the body for a merge PR. This unified format works for both consolidation and multi-stack merges.

func FormatMergeTitle

func FormatMergeTitle(scopes []string, totalCount int) string

FormatMergeTitle formats a unified title for merge PRs (both multi-stack and consolidation). scopes contains the scope values for each branch (may include empty strings for unscoped branches). totalCount is the total number of PRs/branches being merged.

Examples:

  • Merging PROJ-123, PROJ-124 (all scoped)
  • Merging PROJ-123 (+2) (1 scoped, 2 unscoped)
  • Merging 3 PRs (no scopes)

func FormatMergeTitleWithDescription

func FormatMergeTitleWithDescription(desc *git.StackDescription, scopes []string, totalCount int) string

FormatMergeTitleWithDescription formats a merge PR title, using the stack description if present. If the description has a title, it is used directly. Otherwise, falls back to FormatMergeTitle.

func FormatStackTrailers

func FormatStackTrailers(stackSize int, prNumbers []int, scope string) string

FormatStackTrailers is a compatibility wrapper around StackMetadata.ToTrailers.

func FormatStackTree

func FormatStackTree(params StackTreeParams) string

FormatStackTree creates an ASCII tree representation of the stack.

func GenerateBody

func GenerateBody(branch engine.Branch, existingBody string) string

GenerateBody creates a PR body from branch commits. If existingBody is provided and non-empty, it's returned as-is. Otherwise, the branch's default PR body is used.

func GenerateTitle

func GenerateTitle(branch engine.Branch, existingTitle string, scope engine.Scope) string

GenerateTitle creates a PR title from branch commits. If existingTitle is provided and non-empty, it's used as the base. Otherwise, the branch's default PR title is used. The scope is applied to the title.

func IsStackitComment

func IsStackitComment(body string) bool

IsStackitComment checks if a comment body is a stackit navigation comment.

func ResolveUnifiedScope

func ResolveUnifiedScope(scopes []string) string

ResolveUnifiedScope returns a scope only when all non-empty scopes match. This avoids mislabeling mixed-scope merge metadata.

func ShouldShowNavigation

func ShouldShowNavigation(opts NavigationOptions, branch string, eng engine.BranchReader) bool

ShouldShowNavigation determines if navigation should be displayed based on options.

func StripFooter

func StripFooter(body string) string

StripFooter removes the stackit-generated footer from a PR body. This also strips the <hr/> separator that precedes the footer.

func StripLockSection

func StripLockSection(body string) string

StripLockSection removes the lock status section from a PR body.

func UpdatePRBodyFooter

func UpdatePRBodyFooter(existingBody, footer string) string

UpdatePRBodyFooter updates an existing PR body with a new footer.

func UpdatePRBodyLockSection

func UpdatePRBodyLockSection(existingBody, lockSection string) string

UpdatePRBodyLockSection adds, updates, or removes the lock section at the TOP of a PR body. If lockSection is empty, any existing lock section is removed. The lock section always appears at the very top of the body.

Types

type Content

type Content struct {
	Title string
	Body  string
}

Content represents the title and body for a PR.

type ExcludedBranch

type ExcludedBranch struct {
	Name   string
	Reason string
}

ExcludedBranch represents a branch or stack excluded from the merge.

type MergeBodyParams

type MergeBodyParams struct {
	// Branches contains all branches being merged, with their PR info.
	Branches []MergeBranch

	// Excluded contains branches/stacks that were excluded from the merge.
	// Optional - only populated for multi-stack merges with conflicts.
	Excluded []ExcludedBranch

	// StackTree is the ASCII tree representation of the stack structure.
	// Optional - if empty, no tree section is rendered.
	StackTree string

	// StackDescription is the description of the stack being merged.
	// Optional - if present, it appears at the top of the body.
	StackDescription *git.StackDescription

	// Metadata is stack metadata for trailers.
	// Optional - if StackSize is zero, metadata is derived from Branches.
	Metadata StackMetadata
}

MergeBodyParams contains all parameters for generating a merge PR body. This unified structure handles both single-stack and multi-stack merges.

type MergeBranch

type MergeBranch struct {
	Name     string
	PRNumber int    // 0 if no PR exists
	PRTitle  string // Empty if no PR exists
}

MergeBranch represents a branch being merged.

type NavigationOptions struct {
	// When controls when navigation is displayed: "always", "never", or "multiple"
	When string
	// Marker is the symbol used to indicate the current branch (default: "👈")
	Marker string
	// Location is where navigation appears: "body" or "comment"
	Location string
	// ShowMerged controls whether to show merged branch history
	ShowMerged bool
}

NavigationOptions controls how the stack navigation is displayed in PRs.

func DefaultNavigationOptions

func DefaultNavigationOptions() NavigationOptions

DefaultNavigationOptions returns the default navigation options.

type StackMetadata

type StackMetadata struct {
	StackSize int
	PRNumbers []int
	Scope     string
}

StackMetadata contains stack metadata embedded in git trailers.

func BuildStackMetadata

func BuildStackMetadata(branches []MergeBranch, scope string) StackMetadata

BuildStackMetadata derives stack metadata from merge branches.

func NewStackMetadata

func NewStackMetadata(stackSize int, prNumbers []int, scope string) StackMetadata

NewStackMetadata constructs stack metadata from explicit fields.

func ParseStackMetadataTrailers

func ParseStackMetadataTrailers(body string) *StackMetadata

ParseStackMetadataTrailers extracts stack trailer values from a commit message body. Returns nil if no stack trailers are found.

func (StackMetadata) ToTrailers

func (m StackMetadata) ToTrailers() string

ToTrailers builds a git trailer block for this metadata. The trailers follow the standard git trailer format (key: value) and can be parsed by git log's %(trailers) format specifier.

type StackTrailerInfo

type StackTrailerInfo = StackMetadata

StackTrailerInfo is an alias kept for backwards compatibility.

func ParseStackTrailers

func ParseStackTrailers(body string) *StackTrailerInfo

ParseStackTrailers is a compatibility wrapper around ParseStackMetadataTrailers.

type StackTreeBranch

type StackTreeBranch struct {
	Name     string
	Depth    int // 0 for branches directly off trunk
	PRNumber int // 0 if no PR
}

StackTreeBranch represents a branch in the stack tree.

type StackTreeParams

type StackTreeParams struct {
	TrunkName string
	Branches  []StackTreeBranch
}

StackTreeParams contains parameters for generating a stack tree visualization.

Jump to

Keyboard shortcuts

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