Compare commits
8 Commits
67108511c1
...
0.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
| 8b30e53a69 | |||
| c11139e078 | |||
| ce98e2f482 | |||
| 93917649e6 | |||
| 210ed25805 | |||
| e5be089935 | |||
| 93abb9158d | |||
| 052cd0edf3 |
@@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.1.0
|
current_version = 0.1.2
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
tag_name = {new_version}
|
tag_name = {new_version}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ steps:
|
|||||||
path: /var/run/docker.sock
|
path: /var/run/docker.sock
|
||||||
settings:
|
settings:
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
tags: 0.1.0
|
tags: 0.1.2
|
||||||
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
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ WORKDIR /app
|
|||||||
COPY go.mod go.sum ./
|
COPY go.mod go.sum ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bumpversion src/main.go
|
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bumpversion ./src
|
||||||
|
|
||||||
FROM alpine/git
|
FROM gcr.io/distroless/static
|
||||||
|
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY --from=builder /app/bumpversion .
|
COPY --from=builder /app/bumpversion .
|
||||||
|
|||||||
46
Makefile
46
Makefile
@@ -1,11 +1,28 @@
|
|||||||
EXEC=bumpversion.run
|
NAMESPACE ?= golang
|
||||||
|
PACKAGE := bumpversion
|
||||||
|
SHELL := /bin/bash
|
||||||
|
REGISTRY := registry.halfakop.ru
|
||||||
|
REPOSITORY := $(NAMESPACE)/$(PACKAGE)
|
||||||
|
|
||||||
all: build
|
SOURCE_VERSION ?= $(shell cat VERSION)
|
||||||
|
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 ./...
|
||||||
|
|
||||||
build: fix
|
app: fix
|
||||||
@go build -o ./${EXEC} ./src
|
@go build -o ./${EXEC} ./src
|
||||||
|
|
||||||
tests: build
|
tests: build
|
||||||
@@ -17,5 +34,24 @@ run:
|
|||||||
clean:
|
clean:
|
||||||
@rm -rf ./${EXEC}%
|
@rm -rf ./${EXEC}%
|
||||||
|
|
||||||
image:
|
release: title clean build login push
|
||||||
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
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# BumpVersion v0.1.0
|
# BumpVersion v0.1.2
|
||||||
|
|
||||||
[](https://drone.halfakop.ru/rad/bumpversion)
|
[](https://drone.halfakop.ru/rad/bumpversion)
|
||||||
|
|
||||||
|
|||||||
33
src/git.go
33
src/git.go
@@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -17,19 +16,19 @@ func gitCommit(bc *BumpConfig, newVersion string) {
|
|||||||
// Открываем локальный репозиторий (предполагается, что он существует в папке ".")
|
// Открываем локальный репозиторий (предполагается, что он существует в папке ".")
|
||||||
repo, err := git.PlainOpen(".")
|
repo, err := git.PlainOpen(".")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка открытия репозитория: %v", err)
|
log.Fatalf("Repository open error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Получаем рабочее дерево
|
// Получаем рабочее дерево
|
||||||
worktree, err := repo.Worktree()
|
worktree, err := repo.Worktree()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка получения рабочей директории: %v", err)
|
log.Fatalf("Work directory open error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Добавляем все изменения в индекс (или конкретные файлы, если нужно)
|
// Добавляем все изменения в индекс (или конкретные файлы, если нужно)
|
||||||
_, err = worktree.Add(".")
|
_, err = worktree.Add(".")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка добавления изменений: %v", err)
|
log.Fatalf("Changes append error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Формируем сообщение коммита
|
// Формируем сообщение коммита
|
||||||
@@ -43,15 +42,15 @@ func gitCommit(bc *BumpConfig, newVersion string) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка выполнения коммита: %v", err)
|
log.Fatalf("Commit error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Получаем объект коммита (по его хэшу)
|
// Получаем объект коммита (по его хэшу)
|
||||||
commitObj, err := repo.CommitObject(commit)
|
commitObj, err := repo.CommitObject(commit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка получения объекта коммита: %v", err)
|
log.Fatalf("Commit object error: %v", err)
|
||||||
}
|
}
|
||||||
fmt.Printf("Коммит выполнен: %s\n", commitObj.Hash)
|
log.Printf("Committed as %s\n", commitObj.Hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// gitTag ставит тэг на текущий коммит
|
// gitTag ставит тэг на текущий коммит
|
||||||
@@ -59,17 +58,19 @@ func gitTag(bc *BumpConfig, newVersion string) {
|
|||||||
// Открываем локальный репозиторий (предполагается, что он существует в папке ".")
|
// Открываем локальный репозиторий (предполагается, что он существует в папке ".")
|
||||||
repo, err := git.PlainOpen(".")
|
repo, err := git.PlainOpen(".")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка открытия репозитория: %v", err)
|
log.Fatalf("Repository open error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Получаем текущий HEAD (он должен совпадать с только что созданным коммитом)
|
// Получаем текущий HEAD (он должен совпадать с только что созданным коммитом)
|
||||||
headRef, err := repo.Head()
|
headRef, err := repo.Head()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка получения HEAD: %v", err)
|
log.Fatalf("HEAD open error: %v", err)
|
||||||
}
|
}
|
||||||
fmt.Printf("Текущий HEAD: %s\n", headRef.Hash())
|
log.Printf("Current HEAD is %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{
|
||||||
@@ -77,19 +78,19 @@ func gitTag(bc *BumpConfig, newVersion string) {
|
|||||||
Email: os.Getenv("GIT_EMAIL"),
|
Email: os.Getenv("GIT_EMAIL"),
|
||||||
When: time.Now(),
|
When: time.Now(),
|
||||||
},
|
},
|
||||||
Message: "Тег создан с помощью go-git",
|
Message: commitMsg,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка создания тега: %v", err)
|
log.Fatalf("Tag creation error: %v", err)
|
||||||
}
|
}
|
||||||
fmt.Printf("Тег '%s' создан на коммите %s\n", tagName, headRef.Hash())
|
log.Printf("Tag '%s' is created on commit %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("Ошибка открытия репозитория: %v", err)
|
log.Fatalf("Repository open error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion)
|
tagName := strings.ReplaceAll(bc.TagName, "{new_version}", newVersion)
|
||||||
@@ -104,7 +105,7 @@ func gitPush(bc *BumpConfig, newVersion string) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Ошибка пуша: %v", err)
|
log.Fatalf("Push error: %v", err)
|
||||||
}
|
}
|
||||||
fmt.Println("Изменения успешно отправлены")
|
log.Println("Changes pushed successfully")
|
||||||
}
|
}
|
||||||
|
|||||||
25
src/main.go
25
src/main.go
@@ -130,9 +130,13 @@ 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 err
|
return fmt.Errorf("failed to load config: %w", err)
|
||||||
}
|
}
|
||||||
cfg.Section("bumpversion").Key("current_version").SetValue(newVersion)
|
sec, err := cfg.GetSection("bumpversion")
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +162,7 @@ func resolveFlag(positive, negative *bool, defaultValue bool) bool {
|
|||||||
// Версия приложения
|
// Версия приложения
|
||||||
const (
|
const (
|
||||||
AppName = "BumpVersion"
|
AppName = "BumpVersion"
|
||||||
AppVersion = "0.1.0"
|
AppVersion = "0.1.2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -178,8 +182,6 @@ 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")
|
||||||
@@ -203,11 +205,19 @@ 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)
|
||||||
@@ -221,9 +231,4 @@ 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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user