Improve commit/tag flags logic
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
87
src/main.go
87
src/main.go
@@ -24,11 +24,13 @@ type BumpConfig struct {
|
|||||||
FilePaths []string
|
FilePaths []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfig(configPath string) (*ini.File, error) {
|
// getBumpConfig загружает конфигурацию из указанного файла
|
||||||
return ini.Load(configPath)
|
func getBumpConfig(cfg_name string) (*BumpConfig, error) {
|
||||||
|
cfg, err := ini.Load(cfg_name)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error loading config: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBumpConfig(cfg *ini.File) (*BumpConfig, error) {
|
|
||||||
sec, err := cfg.GetSection("bumpversion")
|
sec, err := cfg.GetSection("bumpversion")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("missing [bumpversion] section: %w", err)
|
return nil, fmt.Errorf("missing [bumpversion] section: %w", err)
|
||||||
@@ -108,6 +110,7 @@ func bumpVersion(bc *BumpConfig, part string) (string, error) {
|
|||||||
return newVersion, nil
|
return newVersion, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateFiles обновляет версию в файле
|
||||||
func updateFiles(filePaths []string, oldVersion, newVersion string) {
|
func updateFiles(filePaths []string, oldVersion, newVersion string) {
|
||||||
for _, path := range filePaths {
|
for _, path := range filePaths {
|
||||||
data, err := os.ReadFile(path)
|
data, err := os.ReadFile(path)
|
||||||
@@ -124,7 +127,8 @@ func updateFiles(filePaths []string, oldVersion, newVersion string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func gitCommitAndTag(currentVersion, newVersion string, bc *BumpConfig) error {
|
// gitCommit выполняет коммит с внесёнными изменениями
|
||||||
|
func gitCommit(currentVersion, newVersion string, bc *BumpConfig) error {
|
||||||
commitMsg := strings.ReplaceAll(bc.Message, "{current_version}", currentVersion)
|
commitMsg := strings.ReplaceAll(bc.Message, "{current_version}", currentVersion)
|
||||||
commitMsg = strings.ReplaceAll(commitMsg, "{new_version}", newVersion)
|
commitMsg = strings.ReplaceAll(commitMsg, "{new_version}", newVersion)
|
||||||
if bc.Commit {
|
if bc.Commit {
|
||||||
@@ -136,6 +140,11 @@ func gitCommitAndTag(currentVersion, newVersion string, bc *BumpConfig) error {
|
|||||||
}
|
}
|
||||||
log.Printf("Committed with message: %s", commitMsg)
|
log.Printf("Committed with message: %s", commitMsg)
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// gitTag ставит тэг на коммит
|
||||||
|
func gitTag(currentVersion, newVersion string, bc *BumpConfig) error {
|
||||||
if bc.Tag {
|
if bc.Tag {
|
||||||
tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion)
|
tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion)
|
||||||
if err := exec.Command("git", "tag", tagName).Run(); err != nil {
|
if err := exec.Command("git", "tag", tagName).Run(); err != nil {
|
||||||
@@ -146,6 +155,7 @@ func gitCommitAndTag(currentVersion, newVersion string, bc *BumpConfig) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateConfigFile обновляет исходный конфигурационный файл
|
||||||
func updateConfigFile(configPath string, newVersion string) error {
|
func updateConfigFile(configPath string, newVersion string) error {
|
||||||
cfg, err := ini.Load(configPath)
|
cfg, err := ini.Load(configPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -155,15 +165,35 @@ func updateConfigFile(configPath string, newVersion string) error {
|
|||||||
return cfg.SaveTo(configPath)
|
return cfg.SaveTo(configPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// resolveFlag проверяет два логических флага: positive и negative.
|
||||||
|
// Если оба заданы как true, вызывается ошибка; если задан negative, возвращается false;
|
||||||
|
// если задан positive, возвращается true; иначе возвращается defaultValue.
|
||||||
|
func resolveFlag(positive, negative *bool, defaultValue bool) bool {
|
||||||
|
if *positive && *negative {
|
||||||
|
// Если оба флага заданы, это противоречивое состояние.
|
||||||
|
// Здесь можно завершить программу с ошибкой или выбрать приоритет.
|
||||||
|
// Например, завершим выполнение:
|
||||||
|
panic("conflicting flags: both positive and negative are set")
|
||||||
|
}
|
||||||
|
if *negative {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if *positive {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return defaultValue
|
||||||
|
}
|
||||||
|
|
||||||
// Версия приложения
|
// Версия приложения
|
||||||
const (
|
const (
|
||||||
AppName = "BumpVersion"
|
AppName = "BumpVersion"
|
||||||
AppVersion = "0.1.0"
|
AppVersion = "0.1.4"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Проверяем аргументы командной строки
|
const cfg_name = ".bumpversion.cfg"
|
||||||
args := os.Args[1:]
|
args := os.Args[1:]
|
||||||
|
// Проверяем аргументы командной строки
|
||||||
if len(args) > 0 && strings.ToLower(args[0]) == "--version" {
|
if len(args) > 0 && strings.ToLower(args[0]) == "--version" {
|
||||||
fmt.Printf("%s version %s\n", AppName, AppVersion)
|
fmt.Printf("%s version %s\n", AppName, AppVersion)
|
||||||
return
|
return
|
||||||
@@ -172,21 +202,31 @@ func main() {
|
|||||||
// Печатаем название и версию при старте
|
// Печатаем название и версию при старте
|
||||||
fmt.Printf("Starting %s version %s\n", AppName, AppVersion)
|
fmt.Printf("Starting %s version %s\n", AppName, AppVersion)
|
||||||
|
|
||||||
part := flag.String("part", "patch", "Part to bump: major, minor, patch")
|
bc, err := getBumpConfig(cfg_name)
|
||||||
configPath := flag.String("config", ".bumpversion.cfg", "Path to config file")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
cfgFile, err := loadConfig(*configPath)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error loading config: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
bc, err := getBumpConfig(cfgFile)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error reading bumpversion configuration: %v", err)
|
log.Fatalf("Error reading bumpversion configuration: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Current version: %s\n", bc.CurrentVersion)
|
fmt.Printf("Current version: %s\n", bc.CurrentVersion)
|
||||||
|
|
||||||
|
// Парсинг аргументов командной строки
|
||||||
|
part := flag.String("part", "patch", "Part of the version to bump (major/minor/patch)")
|
||||||
|
commit := flag.Bool("commit", false, "Create a commit")
|
||||||
|
noCommit := flag.Bool("no-commit", false, "Do not create a commit")
|
||||||
|
tag := flag.Bool("tag", false, "Add a git tag")
|
||||||
|
noTag := flag.Bool("no-tag", false, "Do not add a git tag")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
// Обработка флагов
|
||||||
|
if *part != "major" && *part != "minor" && *part != "patch" {
|
||||||
|
fmt.Printf("Error: part must be one of 'major', 'minor', or 'patch'. Got '%s'\n", *part)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Разрешаем флаги:
|
||||||
|
shouldCommit := resolveFlag(commit, noCommit, bc.Commit)
|
||||||
|
shouldTag := resolveFlag(tag, noTag, bc.Tag)
|
||||||
|
|
||||||
newVersion, err := bumpVersion(bc, *part)
|
newVersion, err := bumpVersion(bc, *part)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error bumping version: %v", err)
|
log.Fatalf("Error bumping version: %v", err)
|
||||||
@@ -197,12 +237,21 @@ func main() {
|
|||||||
updateFiles(bc.FilePaths, bc.CurrentVersion, newVersion)
|
updateFiles(bc.FilePaths, bc.CurrentVersion, newVersion)
|
||||||
|
|
||||||
// Выполняем git commit и tag, если требуется
|
// Выполняем git commit и tag, если требуется
|
||||||
if err := gitCommitAndTag(bc.CurrentVersion, newVersion, bc); err != nil {
|
if shouldCommit {
|
||||||
log.Printf("Git commit/tag error: %v", err)
|
if err := gitCommit(bc.CurrentVersion, newVersion, bc); err != nil {
|
||||||
|
log.Printf("Git commit error: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Выполняем git commit и tag, если требуется
|
||||||
|
if shouldTag {
|
||||||
|
if err := gitTag(bc.CurrentVersion, newVersion, bc); err != nil {
|
||||||
|
log.Printf("Git tag error: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обновляем конфигурационный файл
|
// Обновляем конфигурационный файл
|
||||||
if err := updateConfigFile(*configPath, newVersion); err != nil {
|
if err := updateConfigFile(cfg_name, newVersion); err != nil {
|
||||||
log.Printf("Error updating config file: %v", err)
|
log.Printf("Error updating config file: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user