Compare commits

..

1 Commits

Author SHA1 Message Date
67108511c1 Get vack to distroless
All checks were successful
continuous-integration/drone/push Build is passing
2025-03-29 23:07:20 +03:00
8 changed files with 36 additions and 78 deletions

View File

@@ -1,5 +1,5 @@
[bumpversion] [bumpversion]
current_version = 0.1.2 current_version = 0.1.0
commit = True commit = True
tag = True tag = True
tag_name = {new_version} tag_name = {new_version}

View File

@@ -15,7 +15,7 @@ steps:
path: /var/run/docker.sock path: /var/run/docker.sock
settings: settings:
dockerfile: Dockerfile dockerfile: Dockerfile
tags: 0.1.2 tags: 0.1.0
force_tag: true force_tag: true
registry: registry.halfakop.ru registry: registry.halfakop.ru
repo: registry.halfakop.ru/golang/bumpversion repo: registry.halfakop.ru/golang/bumpversion

View File

@@ -1,28 +1,11 @@
NAMESPACE ?= golang EXEC=bumpversion.run
PACKAGE := bumpversion
SHELL := /bin/bash
REGISTRY := registry.halfakop.ru
REPOSITORY := $(NAMESPACE)/$(PACKAGE)
SOURCE_VERSION ?= $(shell cat VERSION) all: build
SOURCE_COMMIT ?= $(shell git rev-parse --short=8 HEAD)
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD | sed s,feature/,,g)
IMAGE_NAME_TAGGED = $(REPOSITORY):$(SOURCE_VERSION)
EXEC=$(PACKAGE).run
all: help
help:
@echo "app - build the application"
@echo "tests - run tests"
@echo "run - run application locally"
@echo "clean - clean build environment"
fix: fix:
@go fix ./... @go fix ./...
app: fix build: fix
@go build -o ./${EXEC} ./src @go build -o ./${EXEC} ./src
tests: build tests: build
@@ -34,24 +17,5 @@ run:
clean: clean:
@rm -rf ./${EXEC}% @rm -rf ./${EXEC}%
release: title clean build login push image:
docker build --compress -t rad/bumpversion:latest -f Dockerfile .
build:
docker build --compress \
-t $(IMAGE_NAME_TAGGED) \
-t $(REGISTRY)/$(IMAGE_NAME_TAGGED) \
--build-arg SOURCE_VERSION=$(SOURCE_VERSION) \
--build-arg SOURCE_COMMIT=$(SOURCE_COMMIT) \
${DOCKER_OPTS} \
-f Dockerfile .
login:
$(call check-var-defined,DOCKER_USERNAME)
$(call check-var-defined,DOCKER_PASSWORD)
@echo ${DOCKER_PASSWORD} | \
docker login -u ${DOCKER_USERNAME} --password-stdin $(REGISTRY)
push:
docker push $(REGISTRY)/$(IMAGE_NAME_TAGGED)
.PHONY: tests release build login push

View File

@@ -1,4 +1,4 @@
# BumpVersion v0.1.2 # BumpVersion v0.1.0
[![Build Status](https://drone.halfakop.ru/api/badges/rad/bumpversion/status.svg)](https://drone.halfakop.ru/rad/bumpversion) [![Build Status](https://drone.halfakop.ru/api/badges/rad/bumpversion/status.svg)](https://drone.halfakop.ru/rad/bumpversion)

View File

@@ -1 +1 @@
0.1.2 0.1.0

2
go.mod
View File

@@ -1,4 +1,4 @@
module bumpversion module src
go 1.24.0 go 1.24.0

View File

@@ -1,6 +1,7 @@
package main package main
import ( import (
"fmt"
"log" "log"
"os" "os"
"strings" "strings"
@@ -16,19 +17,19 @@ func gitCommit(bc *BumpConfig, newVersion string) {
// Открываем локальный репозиторий (предполагается, что он существует в папке ".") // Открываем локальный репозиторий (предполагается, что он существует в папке ".")
repo, err := git.PlainOpen(".") repo, err := git.PlainOpen(".")
if err != nil { if err != nil {
log.Fatalf("Repository open error: %v", err) log.Fatalf("Ошибка открытия репозитория: %v", err)
} }
// Получаем рабочее дерево // Получаем рабочее дерево
worktree, err := repo.Worktree() worktree, err := repo.Worktree()
if err != nil { if err != nil {
log.Fatalf("Work directory open error: %v", err) log.Fatalf("Ошибка получения рабочей директории: %v", err)
} }
// Добавляем все изменения в индекс (или конкретные файлы, если нужно) // Добавляем все изменения в индекс (или конкретные файлы, если нужно)
_, err = worktree.Add(".") _, err = worktree.Add(".")
if err != nil { if err != nil {
log.Fatalf("Changes append error: %v", err) log.Fatalf("Ошибка добавления изменений: %v", err)
} }
// Формируем сообщение коммита // Формируем сообщение коммита
@@ -42,15 +43,15 @@ func gitCommit(bc *BumpConfig, newVersion string) {
}, },
}) })
if err != nil { if err != nil {
log.Fatalf("Commit error: %v", err) log.Fatalf("Ошибка выполнения коммита: %v", err)
} }
// Получаем объект коммита (по его хэшу) // Получаем объект коммита (по его хэшу)
commitObj, err := repo.CommitObject(commit) commitObj, err := repo.CommitObject(commit)
if err != nil { if err != nil {
log.Fatalf("Commit object error: %v", err) log.Fatalf("Ошибка получения объекта коммита: %v", err)
} }
log.Printf("Committed as %s\n", commitObj.Hash) fmt.Printf("Коммит выполнен: %s\n", commitObj.Hash)
} }
// gitTag ставит тэг на текущий коммит // gitTag ставит тэг на текущий коммит
@@ -58,19 +59,17 @@ func gitTag(bc *BumpConfig, newVersion string) {
// Открываем локальный репозиторий (предполагается, что он существует в папке ".") // Открываем локальный репозиторий (предполагается, что он существует в папке ".")
repo, err := git.PlainOpen(".") repo, err := git.PlainOpen(".")
if err != nil { if err != nil {
log.Fatalf("Repository open error: %v", err) log.Fatalf("Ошибка открытия репозитория: %v", err)
} }
// Получаем текущий HEAD (он должен совпадать с только что созданным коммитом) // Получаем текущий HEAD (он должен совпадать с только что созданным коммитом)
headRef, err := repo.Head() headRef, err := repo.Head()
if err != nil { if err != nil {
log.Fatalf("HEAD open error: %v", err) log.Fatalf("Ошибка получения HEAD: %v", err)
} }
log.Printf("Current HEAD is %s\n", headRef.Hash()) fmt.Printf("Текущий HEAD: %s\n", headRef.Hash())
// Создаем тег на текущем коммите (HEAD) // Создаем тег на текущем коммите (HEAD)
commitMsg := strings.ReplaceAll(bc.Message, "{current_version}", bc.CurrentVersion)
commitMsg = strings.ReplaceAll(commitMsg, "{new_version}", newVersion)
tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion) tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion)
_, err = repo.CreateTag(tagName, headRef.Hash(), &git.CreateTagOptions{ _, err = repo.CreateTag(tagName, headRef.Hash(), &git.CreateTagOptions{
Tagger: &object.Signature{ Tagger: &object.Signature{
@@ -78,19 +77,19 @@ func gitTag(bc *BumpConfig, newVersion string) {
Email: os.Getenv("GIT_EMAIL"), Email: os.Getenv("GIT_EMAIL"),
When: time.Now(), When: time.Now(),
}, },
Message: commitMsg, Message: "Тег создан с помощью go-git",
}) })
if err != nil { if err != nil {
log.Fatalf("Tag creation error: %v", err) log.Fatalf("Ошибка создания тега: %v", err)
} }
log.Printf("Tag '%s' is created on commit %s\n", tagName, headRef.Hash()) fmt.Printf("Тег '%s' создан на коммите %s\n", tagName, headRef.Hash())
} }
func gitPush(bc *BumpConfig, newVersion string) { func gitPush(bc *BumpConfig, newVersion string) {
// Открываем локальный репозиторий (предполагается, что он существует в папке ".") // Открываем локальный репозиторий (предполагается, что он существует в папке ".")
repo, err := git.PlainOpen(".") repo, err := git.PlainOpen(".")
if err != nil { if err != nil {
log.Fatalf("Repository open error: %v", err) log.Fatalf("Ошибка открытия репозитория: %v", err)
} }
tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion) tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion)
@@ -105,7 +104,7 @@ func gitPush(bc *BumpConfig, newVersion string) {
}, },
}) })
if err != nil { if err != nil {
log.Fatalf("Push error: %v", err) log.Fatalf("Ошибка пуша: %v", err)
} }
log.Println("Changes pushed successfully") fmt.Println("Изменения успешно отправлены")
} }

View File

@@ -130,13 +130,9 @@ func updateFiles(filePaths []string, oldVersion, newVersion string) {
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 {
return fmt.Errorf("failed to load config: %w", err) return err
} }
sec, err := cfg.GetSection("bumpversion") cfg.Section("bumpversion").Key("current_version").SetValue(newVersion)
if err != nil {
return fmt.Errorf("section [bumpversion] not found: %w", err)
}
sec.Key("current_version").SetValue(newVersion)
return cfg.SaveTo(configPath) return cfg.SaveTo(configPath)
} }
@@ -162,7 +158,7 @@ func resolveFlag(positive, negative *bool, defaultValue bool) bool {
// Версия приложения // Версия приложения
const ( const (
AppName = "BumpVersion" AppName = "BumpVersion"
AppVersion = "0.1.2" AppVersion = "0.1.0"
) )
func main() { func main() {
@@ -182,6 +178,8 @@ func main() {
log.Fatalf("Error reading bumpversion configuration: %v", err) log.Fatalf("Error reading bumpversion configuration: %v", err)
} }
fmt.Printf("Current version: %s\n", bc.CurrentVersion)
// Парсинг аргументов командной строки // Парсинг аргументов командной строки
part := flag.String("part", "patch", "Part of the version to bump (major/minor/patch)") part := flag.String("part", "patch", "Part of the version to bump (major/minor/patch)")
commit := flag.Bool("commit", false, "Create a commit") commit := flag.Bool("commit", false, "Create a commit")
@@ -205,19 +203,11 @@ func main() {
if err != nil { if err != nil {
log.Fatalf("Error bumping version: %v", err) log.Fatalf("Error bumping version: %v", err)
} }
fmt.Printf("Current version: %s\n", bc.CurrentVersion)
fmt.Printf("New version: %s\n", newVersion) fmt.Printf("New version: %s\n", newVersion)
// Обновляем файлы, указанные в конфигурации // Обновляем файлы, указанные в конфигурации
updateFiles(bc.FilePaths, bc.CurrentVersion, newVersion) updateFiles(bc.FilePaths, bc.CurrentVersion, newVersion)
// Обновляем конфигурационный файл
if err := updateConfigFile(cfg_name, newVersion); err != nil {
log.Printf("Error updating config file: %v", err)
} else {
log.Printf("Config file %s updated to version %s", cfg_name, newVersion)
}
// Выполняем git commit и tag, если требуется // Выполняем git commit и tag, если требуется
if shouldCommit { if shouldCommit {
gitCommit(bc, newVersion) gitCommit(bc, newVersion)
@@ -231,4 +221,9 @@ func main() {
if *push { if *push {
gitPush(bc, newVersion) gitPush(bc, newVersion)
} }
// Обновляем конфигурационный файл
if err := updateConfigFile(cfg_name, newVersion); err != nil {
log.Printf("Error updating config file: %v", err)
}
} }