strategy

package
v1.8.0 Latest Latest
Warning

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

Go to latest
Published: Feb 24, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Overview

Package strategy implements the 6 version strategies that discover candidate base versions from git history and configuration.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BaseVersion

type BaseVersion struct {
	// Source is a human-readable description of where this version came from.
	Source string

	// ShouldIncrement indicates whether this version should be bumped before
	// comparison with other candidates.
	ShouldIncrement bool

	// SemanticVersion is the version found by the strategy.
	SemanticVersion semver.SemanticVersion

	// BaseVersionSource is the git commit this version originated from.
	// Nil for external sources (e.g., config next-version).
	BaseVersionSource *git.Commit

	// BranchNameOverride overrides the branch name used for pre-release
	// tag generation. Used by VersionInBranchName strategy.
	BranchNameOverride string

	// Explanation records the reasoning chain for how this version was derived.
	// Nil when explain mode is disabled.
	Explanation *Explanation
}

BaseVersion represents a candidate version found by a strategy.

func (BaseVersion) String

func (bv BaseVersion) String() string

String returns a human-readable representation of the base version.

type ConfigNextVersionStrategy

type ConfigNextVersionStrategy struct{}

ConfigNextVersionStrategy returns a version from the next-version config field.

func NewConfigNextVersionStrategy

func NewConfigNextVersionStrategy() *ConfigNextVersionStrategy

NewConfigNextVersionStrategy creates a new ConfigNextVersionStrategy.

func (*ConfigNextVersionStrategy) GetBaseVersions

func (*ConfigNextVersionStrategy) Name

type Explanation

type Explanation struct {
	// Strategy is the name of the strategy that produced this version.
	Strategy string

	// Steps records the reasoning chain in order.
	Steps []string
}

Explanation records how a strategy derived a BaseVersion.

func NewExplanation

func NewExplanation(strategy string) *Explanation

NewExplanation creates a new Explanation for the given strategy name.

func (*Explanation) Add

func (e *Explanation) Add(step string)

Add appends a reasoning step. Nil-safe.

func (*Explanation) Addf

func (e *Explanation) Addf(format string, args ...any)

Addf appends a formatted reasoning step. Nil-safe.

type FallbackStrategy

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

FallbackStrategy returns the base version (default 1.0.0) from the root commit.

func NewFallbackStrategy

func NewFallbackStrategy(store *git.RepositoryStore) *FallbackStrategy

NewFallbackStrategy creates a new FallbackStrategy.

func (*FallbackStrategy) GetBaseVersions

func (s *FallbackStrategy) GetBaseVersions(
	ctx *context.GitVersionContext,
	ec config.EffectiveConfiguration,
	explain bool,
) ([]BaseVersion, error)

func (*FallbackStrategy) Name

func (s *FallbackStrategy) Name() string

type MergeMessageStrategy

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

MergeMessageStrategy returns versions from merge commit messages.

func NewMergeMessageStrategy

func NewMergeMessageStrategy(store *git.RepositoryStore) *MergeMessageStrategy

NewMergeMessageStrategy creates a new MergeMessageStrategy.

func (*MergeMessageStrategy) GetBaseVersions

func (s *MergeMessageStrategy) GetBaseVersions(
	ctx *context.GitVersionContext,
	ec config.EffectiveConfiguration,
	explain bool,
) ([]BaseVersion, error)

func (*MergeMessageStrategy) Name

func (s *MergeMessageStrategy) Name() string

type TaggedCommitStrategy

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

TaggedCommitStrategy returns versions from git tags on the current branch.

func NewTaggedCommitStrategy

func NewTaggedCommitStrategy(store *git.RepositoryStore) *TaggedCommitStrategy

NewTaggedCommitStrategy creates a new TaggedCommitStrategy.

func (*TaggedCommitStrategy) GetBaseVersions

func (s *TaggedCommitStrategy) GetBaseVersions(
	ctx *context.GitVersionContext,
	ec config.EffectiveConfiguration,
	explain bool,
) ([]BaseVersion, error)

func (*TaggedCommitStrategy) Name

func (s *TaggedCommitStrategy) Name() string

type TrackReleaseBranchesStrategy

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

TrackReleaseBranchesStrategy combines release branch versions and main branch tags for branches that track release branches (e.g., develop).

func NewTrackReleaseBranchesStrategy

func NewTrackReleaseBranchesStrategy(store *git.RepositoryStore) *TrackReleaseBranchesStrategy

NewTrackReleaseBranchesStrategy creates a new TrackReleaseBranchesStrategy.

func (*TrackReleaseBranchesStrategy) GetBaseVersions

func (*TrackReleaseBranchesStrategy) Name

type VersionInBranchNameStrategy

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

VersionInBranchNameStrategy returns a version from the branch name for release branches.

func NewVersionInBranchNameStrategy

func NewVersionInBranchNameStrategy(store *git.RepositoryStore) *VersionInBranchNameStrategy

NewVersionInBranchNameStrategy creates a new VersionInBranchNameStrategy.

func (*VersionInBranchNameStrategy) GetBaseVersions

func (*VersionInBranchNameStrategy) Name

type VersionStrategy

type VersionStrategy interface {
	// Name returns the human-readable name of this strategy.
	Name() string

	// GetBaseVersions computes zero or more candidate base versions.
	// When explain is true, strategies populate Explanation on each
	// returned BaseVersion.
	GetBaseVersions(
		ctx *context.GitVersionContext,
		ec config.EffectiveConfiguration,
		explain bool,
	) ([]BaseVersion, error)
}

VersionStrategy is the interface implemented by all version discovery strategies.

func AllStrategies

func AllStrategies(store *git.RepositoryStore) []VersionStrategy

AllStrategies returns all version strategies in priority order. Strategies are evaluated in this order during base version selection:

  1. ConfigNextVersion — explicit next-version override
  2. TaggedCommit — version tags on branch history
  3. MergeMessage — versions from merge/squash commit messages
  4. VersionInBranchName — version extracted from release branch names
  5. TrackReleaseBranches — release branch + main tag tracking (for develop)
  6. Fallback — default base version when no other strategy matches

Jump to

Keyboard shortcuts

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