mirror of
https://github.com/lukaszraczylo/semver-generator.git
synced 2026-06-05 22:49:25 +00:00
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// Wording represents the keywords to look for in commit messages
|
|
type Wording struct {
|
|
Patch []string
|
|
Minor []string
|
|
Major []string
|
|
Release []string
|
|
}
|
|
|
|
// Force represents forced versioning settings
|
|
type Force struct {
|
|
Commit string
|
|
Patch int
|
|
Minor int
|
|
Major int
|
|
Existing bool
|
|
Strict bool
|
|
}
|
|
|
|
// Config represents the application configuration
|
|
type Config struct {
|
|
Wording Wording
|
|
Force Force
|
|
Blacklist []string
|
|
TagPrefixes []string // Prefixes to strip from tags before parsing (e.g., "app-", "infra-", "v")
|
|
}
|
|
|
|
// ReadConfig reads the configuration from a file
|
|
func ReadConfig(file string) (*Config, error) {
|
|
config := &Config{}
|
|
|
|
viper.SetConfigFile(file)
|
|
err := viper.ReadInConfig()
|
|
if err != nil {
|
|
err = fmt.Errorf("fatal error config file: %s", err)
|
|
return config, err
|
|
}
|
|
|
|
if err := viper.UnmarshalKey("wording", &config.Wording); err != nil {
|
|
return config, fmt.Errorf("error parsing wording config: %w", err)
|
|
}
|
|
if err := viper.UnmarshalKey("force", &config.Force); err != nil {
|
|
return config, fmt.Errorf("error parsing force config: %w", err)
|
|
}
|
|
if err := viper.UnmarshalKey("blacklist", &config.Blacklist); err != nil {
|
|
return config, fmt.Errorf("error parsing blacklist config: %w", err)
|
|
}
|
|
if err := viper.UnmarshalKey("tag_prefixes", &config.TagPrefixes); err != nil {
|
|
return config, fmt.Errorf("error parsing tag_prefixes config: %w", err)
|
|
}
|
|
|
|
return config, nil
|
|
}
|
|
|
|
// ApplyForcedVersioning applies forced versioning settings to a semantic version
|
|
func ApplyForcedVersioning(force Force, semver *SemVer) {
|
|
if force.Major > 0 {
|
|
Debug("Forced versioning (MAJOR)", map[string]interface{}{"major": force.Major})
|
|
semver.Major = force.Major
|
|
}
|
|
|
|
if force.Minor > 0 {
|
|
Debug("Forced versioning (MINOR)", map[string]interface{}{"minor": force.Minor})
|
|
semver.Minor = force.Minor
|
|
}
|
|
|
|
if force.Patch > 0 {
|
|
Debug("Forced versioning (PATCH)", map[string]interface{}{"patch": force.Patch})
|
|
semver.Patch = force.Patch
|
|
}
|
|
}
|