@@ -82,6 +82,13 @@ const (
8282# - "YYYY.0M.MICRO" -> 2026.01.0
8383# - "YY.0M0D.MICRO" -> 26.0123.0
8484#
85+ # tagpr.fixedMajorVersion (Optional)
86+ # Fix the major version for releases. When set, tagpr only considers tags
87+ # with this major version. Useful for maintaining multiple major versions
88+ # on different branches (e.g., v1 branch for v1.x.x, main for v2.x.x).
89+ # Accepts both numeric ("1") and v-prefixed ("v1") formats.
90+ # Cannot be used with calendarVersioning.
91+ #
8592[tagpr]
8693`
8794 defaultMajorLabels = "major"
@@ -107,6 +114,7 @@ const (
107114 envChangelogFile = "TAGPR_CHANGELOG_FILE"
108115 envCalendarVersioning = "TAGPR_CALENDAR_VERSIONING"
109116 envReleaseYAMLPath = "TAGPR_RELEASE_YAML_PATH"
117+ envFixedMajorVersion = "TAGPR_FIXED_MAJOR_VERSION"
110118 configReleaseBranch = "tagpr.releaseBranch"
111119 configVersionFile = "tagpr.versionFile"
112120 configVPrefix = "tagpr.vPrefix"
@@ -123,6 +131,7 @@ const (
123131 configChangelogFile = "tagpr.changelogFile"
124132 configCalendarVersioning = "tagpr.calendarVersioning"
125133 configReleaseYAMLPath = "tagpr.releaseYAMLPath"
134+ configFixedMajorVersion = "tagpr.fixedMajorVersion"
126135)
127136
128137type config struct {
@@ -142,6 +151,7 @@ type config struct {
142151 changelogFile * string
143152 calendarVersioning * string
144153 releaseYamlPath * string
154+ fixedMajorVersion * string
145155
146156 conf string
147157 gitconfig * gitconfig.Config
@@ -201,6 +211,12 @@ func (cfg *config) Reload() error {
201211 return err
202212 }
203213
214+ cfg .reloadField (& cfg .fixedMajorVersion , configFixedMajorVersion , envFixedMajorVersion , "" )
215+
216+ if _ , err := cfg .FixedMajorVersion (); err != nil {
217+ return err
218+ }
219+
204220 return nil
205221}
206222
@@ -430,3 +446,16 @@ func validateCalendarVersioningFormat(format string) error {
430446func (cfg * config ) ReleaseYAMLPath () string {
431447 return stringify (cfg .releaseYamlPath )
432448}
449+
450+ func (cfg * config ) FixedMajorVersion () (* uint64 , error ) {
451+ s := stringify (cfg .fixedMajorVersion )
452+ if s == "" {
453+ return nil , nil
454+ }
455+ s = strings .TrimPrefix (s , "v" )
456+ v , err := strconv .ParseUint (s , 10 , 64 )
457+ if err != nil {
458+ return nil , fmt .Errorf ("invalid fixedMajorVersion %q: %w" , stringify (cfg .fixedMajorVersion ), err )
459+ }
460+ return & v , nil
461+ }
0 commit comments