Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
bf643393ad | |||
c4a3ea4d98 | |||
dd3de165f7 | |||
7c3d490685 | |||
aff61e32fc | |||
1a0207017a | |||
638dc104f8 | |||
8b420c500f | |||
078c32b929 | |||
e4a2fccef4 | |||
bde6e734b3 | |||
e018e30975 | |||
bf25c33b3f |
@@ -1,59 +0,0 @@
|
|||||||
name: Release Build
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- v*
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: golang:1.21
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
run: |
|
|
||||||
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
|
||||||
cd hello_gitea
|
|
||||||
git checkout ${{ github.ref }}
|
|
||||||
|
|
||||||
- name: Setup Go
|
|
||||||
run: |
|
|
||||||
# Install jq for JSON parsing
|
|
||||||
apt-get update && apt-get install -y jq
|
|
||||||
git --version
|
|
||||||
go version
|
|
||||||
jq --version
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cd hello_gitea
|
|
||||||
mkdir -p bin
|
|
||||||
go build -o bin/hello-api-${{ github.ref_name }} main.go
|
|
||||||
ls -la bin/
|
|
||||||
|
|
||||||
- name: Create Release
|
|
||||||
run: |
|
|
||||||
cd hello_gitea
|
|
||||||
# Create release using Gitea API
|
|
||||||
curl -X POST \
|
|
||||||
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{
|
|
||||||
"tag_name": "${{ github.ref_name }}",
|
|
||||||
"name": "Release ${{ github.ref_name }}",
|
|
||||||
"body": "Automated release",
|
|
||||||
"draft": false,
|
|
||||||
"prerelease": false
|
|
||||||
}' \
|
|
||||||
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases"
|
|
||||||
|
|
||||||
# Upload asset
|
|
||||||
RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
|
||||||
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/tags/${{ github.ref_name }}" | \
|
|
||||||
jq -r '.id')
|
|
||||||
|
|
||||||
curl -X POST \
|
|
||||||
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
|
||||||
-H "Content-Type: application/octet-stream" \
|
|
||||||
--data-binary @bin/hello-api-${{ github.ref_name }} \
|
|
||||||
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=hello-api-${{ github.ref_name }}"
|
|
55
.gitea/workflows/build-builder.yaml
Normal file
55
.gitea/workflows/build-builder.yaml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
name: Build Builder Docker Image
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- builder-*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-builder-docker-image:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: docker:28.3.2-dind
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
run: |
|
||||||
|
# Install git
|
||||||
|
apk add --no-cache git
|
||||||
|
|
||||||
|
echo "=== GitHub Variables ==="
|
||||||
|
echo "github.ref = ${{ github.ref }}"
|
||||||
|
echo "github.ref_name = ${{ github.ref_name }}"
|
||||||
|
echo "github.sha = ${{ github.sha }}"
|
||||||
|
echo "github.repository = ${{ github.repository }}"
|
||||||
|
echo "========================"
|
||||||
|
echo "Cloning..."
|
||||||
|
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||||
|
cd hello_gitea
|
||||||
|
echo "Checkout to ${{ github.ref }} ..."
|
||||||
|
git checkout ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Setup Docker Buildx
|
||||||
|
run: |
|
||||||
|
# Docker is already installed in docker:dind image
|
||||||
|
echo "look at docker version"
|
||||||
|
docker --version
|
||||||
|
# Setup Docker Buildx for multi-platform builds
|
||||||
|
echo "setup buildx"
|
||||||
|
docker buildx create --use
|
||||||
|
docker buildx inspect --bootstrap
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
run: |
|
||||||
|
echo "login to docker hub ..."
|
||||||
|
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
|
||||||
|
|
||||||
|
- name: Build multi-platform Docker images
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
|
echo "Build multi-platform images using buildx ..."
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/amd64,linux/arm64 \
|
||||||
|
--tag ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:${{ github.ref_name }} \
|
||||||
|
--tag ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest \
|
||||||
|
--push \
|
||||||
|
-f Dockerfile.builder \
|
||||||
|
.
|
@@ -5,53 +5,12 @@ on:
|
|||||||
- v*
|
- v*
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
create-docker-image:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: golang:1.21
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
run: |
|
|
||||||
echo "=== GitHub Variables ==="
|
|
||||||
echo "github.ref = ${{ github.ref }}"
|
|
||||||
echo "github.ref_name = ${{ github.ref_name }}"
|
|
||||||
echo "github.sha = ${{ github.sha }}"
|
|
||||||
echo "github.repository = ${{ github.repository }}"
|
|
||||||
echo "========================"
|
|
||||||
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
|
||||||
cd hello_gitea
|
|
||||||
git checkout ${{ github.ref }}
|
|
||||||
|
|
||||||
- name: Setup Docker Buildx
|
|
||||||
run: |
|
|
||||||
# Install Docker CLI
|
|
||||||
apt-get update && apt-get install -y docker.io
|
|
||||||
docker --version
|
|
||||||
|
|
||||||
# Setup Docker Buildx for multi-platform builds
|
|
||||||
docker buildx create --use
|
|
||||||
docker buildx inspect --bootstrap
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
run: |
|
|
||||||
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
|
|
||||||
|
|
||||||
- name: Build multi-platform Docker images
|
|
||||||
run: |
|
|
||||||
cd hello_gitea
|
|
||||||
# Build multi-platform images using buildx
|
|
||||||
docker buildx build \
|
|
||||||
--platform linux/amd64,linux/arm64 \
|
|
||||||
--tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:${{ github.ref_name }} \
|
|
||||||
--tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:latest \
|
|
||||||
--push \
|
|
||||||
.
|
|
||||||
|
|
||||||
create-release:
|
create-release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: golang:1.21
|
# image: golang:1.21
|
||||||
needs: create-docker-image
|
image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest
|
||||||
|
needs: create-release-branch
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
run: |
|
run: |
|
||||||
@@ -62,7 +21,7 @@ jobs:
|
|||||||
- name: Setup Go
|
- name: Setup Go
|
||||||
run: |
|
run: |
|
||||||
# Install jq for JSON parsing
|
# Install jq for JSON parsing
|
||||||
apt-get update && apt-get install -y jq
|
# apt-get update && apt-get install -y jq
|
||||||
git --version
|
git --version
|
||||||
go version
|
go version
|
||||||
jq --version
|
jq --version
|
||||||
@@ -119,3 +78,98 @@ jobs:
|
|||||||
--data-binary @$file \
|
--data-binary @$file \
|
||||||
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=$(basename $file)"
|
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=$(basename $file)"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
create-docker-image:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: docker:28.3.2-dind
|
||||||
|
needs: create-release
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
run: |
|
||||||
|
# Install git
|
||||||
|
apk add --no-cache git
|
||||||
|
|
||||||
|
echo "=== GitHub Variables ==="
|
||||||
|
echo "github.ref = ${{ github.ref }}"
|
||||||
|
echo "github.ref_name = ${{ github.ref_name }}"
|
||||||
|
echo "github.sha = ${{ github.sha }}"
|
||||||
|
echo "github.repository = ${{ github.repository }}"
|
||||||
|
echo "========================"
|
||||||
|
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||||
|
cd hello_gitea
|
||||||
|
git checkout ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Setup Docker Buildx
|
||||||
|
run: |
|
||||||
|
# Docker is already installed in docker:dind image
|
||||||
|
docker --version
|
||||||
|
|
||||||
|
# Setup Docker Buildx for multi-platform builds
|
||||||
|
docker buildx create --name go-buildx --use
|
||||||
|
docker buildx inspect --bootstrap
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
run: |
|
||||||
|
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
|
||||||
|
|
||||||
|
- name: Build multi-platform Docker images
|
||||||
|
run: |
|
||||||
|
cd hello_gitea
|
||||||
|
# Build multi-platform images using buildx
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/amd64,linux/arm64 \
|
||||||
|
--tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:${{ github.ref_name }} \
|
||||||
|
--tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:latest \
|
||||||
|
--push \
|
||||||
|
.
|
||||||
|
- name: Remove buildx
|
||||||
|
run: |
|
||||||
|
docker buildx rm go-buildx
|
||||||
|
|
||||||
|
update-to-release-branch:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: docker:28.3.2-dind
|
||||||
|
needs: create-docker-image
|
||||||
|
steps:
|
||||||
|
- name: Create Release Branch
|
||||||
|
run: |
|
||||||
|
echo "=== GitHub Variables ==="
|
||||||
|
echo "github.ref = ${{ github.ref }}"
|
||||||
|
echo "github.ref_name = ${{ github.ref_name }}"
|
||||||
|
echo "github.sha = ${{ github.sha }}"
|
||||||
|
echo "github.repository = ${{ github.repository }}"
|
||||||
|
echo "DOCKERHUB_USERNAME = ${{ secrets.DOCKERHUB_USERNAME }}"
|
||||||
|
echo "DOCKERHUB_TOKEN = ${{ secrets.DOCKERHUB_TOKEN }}"
|
||||||
|
echo "GITEATOKEN = ${{ secrets.GITEATOKEN }}"
|
||||||
|
echo "========================"
|
||||||
|
# Clone repository
|
||||||
|
echo "Cloning repository..."
|
||||||
|
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||||
|
cd hello_gitea
|
||||||
|
|
||||||
|
# Configure git
|
||||||
|
echo "Configuring git..."
|
||||||
|
git config user.email "info@direct-dev.ru"
|
||||||
|
git config user.name "Direct-Dev-Robot"
|
||||||
|
|
||||||
|
# Check if release branch exists
|
||||||
|
echo "Checking if release branch exists..."
|
||||||
|
if git ls-remote --heads origin release | grep -q release; then
|
||||||
|
echo "Release branch exists, checking out..."
|
||||||
|
git checkout release
|
||||||
|
echo "release branch exists - pulling release branch..."
|
||||||
|
git pull origin release
|
||||||
|
else
|
||||||
|
echo "release branch does not exist - creating new release branch..."
|
||||||
|
git checkout -b release
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Reset to the tag commit
|
||||||
|
echo "Resetting to the tag commit ${{ github.ref_name }} ..."
|
||||||
|
git reset --hard ${{ github.ref_name }}
|
||||||
|
|
||||||
|
# Push changes to release branch
|
||||||
|
echo "Pushing changes to release branch..."
|
||||||
|
git push origin release --force
|
13
Dockerfile.builder
Normal file
13
Dockerfile.builder
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Используем образ Go с поддержкой мультиплатформенности
|
||||||
|
FROM golang:1.24
|
||||||
|
|
||||||
|
# Устанавливаем пакеты (одинаково работают на amd64/arm64)
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
git \
|
||||||
|
ca-certificates \
|
||||||
|
jq && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# (Опционально) Можно добавить команду по умолчанию
|
||||||
|
CMD ["bash"]
|
20
README.md
20
README.md
@@ -57,7 +57,7 @@ export PORT=3000
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### GET /health
|
### GET /healthz
|
||||||
Health check endpoint
|
Health check endpoint
|
||||||
|
|
||||||
**Ответ:**
|
**Ответ:**
|
||||||
@@ -133,7 +133,7 @@ go run main.go
|
|||||||
|
|
||||||
# Тестирование API
|
# Тестирование API
|
||||||
curl http://localhost:8080/
|
curl http://localhost:8080/
|
||||||
curl http://localhost:8080/health
|
curl http://localhost:8080/healthz
|
||||||
curl http://localhost:8080/api/v1/info
|
curl http://localhost:8080/api/v1/info
|
||||||
curl -X POST http://localhost:8080/api/v1/echo \
|
curl -X POST http://localhost:8080/api/v1/echo \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
@@ -142,13 +142,27 @@ curl -X POST http://localhost:8080/api/v1/echo \
|
|||||||
|
|
||||||
## 🚀 CI/CD
|
## 🚀 CI/CD
|
||||||
|
|
||||||
При создании тега (например, `v1.1.0`) автоматически:
|
При создании тега (например, `v1.1.20`) автоматически:
|
||||||
|
|
||||||
1. Собираются бинарники для всех платформ
|
1. Собираются бинарники для всех платформ
|
||||||
2. Создается Docker образ для Linux AMD64/ARM64
|
2. Создается Docker образ для Linux AMD64/ARM64
|
||||||
3. Образ публикуется в Docker Hub
|
3. Образ публикуется в Docker Hub
|
||||||
4. Создается релиз в Gitea с бинарниками
|
4. Создается релиз в Gitea с бинарниками
|
||||||
|
|
||||||
|
Дополнительно `.gitea/workflows/build_build.yaml` предназначен для автоматизации процесса сборки и публикации Docker-образов билдера - то есть образа который будет использоваться в основном процессе сборки и релиза. Этот workflow запускается (триггерится) автоматически при пуше тега, начинающегося с `builder-` (например, `builder-v1.2.3`), в репозиторий на сервере Gitea.
|
||||||
|
|
||||||
|
Когда такой тег появляется, workflow выполняет следующие задачи:
|
||||||
|
|
||||||
|
- Клонирует репозиторий и переключается на соответствующую версию кода.
|
||||||
|
- Настраивает окружение для сборки Docker-образов с поддержкой мультиплатформенности (amd64 и arm64).
|
||||||
|
- Выполняет аутентификацию в Docker Hub.
|
||||||
|
- Собирает и публикует Docker-образы для разных архитектур (tag DOCKERHUB_USERNAME/my-build-golang-runnerr:builder-v1.2.3 и tag DOCKERHUB_USERNAME/my-build-golang-runner:latest.
|
||||||
|
- Для сборки используется специальный Dockerfile (`Dockerfile.builder`) для создания образа билдера.
|
||||||
|
|
||||||
|
Таким образом, данный файл обеспечивает автоматическую сборку и публикацию артефактов проекта при выпуске новых версий, что упрощает процесс релиза и гарантирует наличие актуальных образов и бинарников для пользователей.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 📄 Лицензия
|
## 📄 Лицензия
|
||||||
|
|
||||||
MIT License
|
MIT License
|
Binary file not shown.
8
build-builder.sh
Normal file
8
build-builder.sh
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/amd64,linux/arm64 \
|
||||||
|
--tag "${DOCKERHUB_USERNAME:-kuznetcovay}"/my-build-golang-runner:latest \
|
||||||
|
--push \
|
||||||
|
-f Dockerfile_for_runner_image \
|
||||||
|
.
|
1836
docs/gitea-actions-guide.md
Normal file
1836
docs/gitea-actions-guide.md
Normal file
File diff suppressed because it is too large
Load Diff
4
main.go
4
main.go
@@ -7,7 +7,7 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
const version = "1.0.0"
|
const version = "1.0.30"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Set Gin mode
|
// Set Gin mode
|
||||||
@@ -31,7 +31,7 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Health check endpoint
|
// Health check endpoint
|
||||||
r.GET("/health", func(c *gin.Context) {
|
r.GET("/healthz", func(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"status": "ok",
|
"status": "ok",
|
||||||
"version": version,
|
"version": version,
|
||||||
|
17
makefile
17
makefile
@@ -1,8 +1,8 @@
|
|||||||
.PHONY: build clean test
|
.PHONY: build clean test release
|
||||||
|
|
||||||
BIN_DIR=bin
|
BIN_DIR=bin
|
||||||
APP_NAME=hello-api
|
APP_NAME=hello-api
|
||||||
VERSION=1.0.0
|
VERSION=1.0.30
|
||||||
|
|
||||||
build:
|
build:
|
||||||
mkdir -p $(BIN_DIR)
|
mkdir -p $(BIN_DIR)
|
||||||
@@ -13,3 +13,16 @@ clean:
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
go test -v ./...
|
go test -v ./...
|
||||||
|
|
||||||
|
# Задача для создания релиза
|
||||||
|
# Использование: make release VERSION=1.0.25
|
||||||
|
release:
|
||||||
|
@if [ -z "$(VERSION)" ]; then \
|
||||||
|
echo "Ошибка: Необходимо указать версию в формате v1.0.25"; \
|
||||||
|
echo "Использование: make release VERSION=1.0.25"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@./scripts/release-interactive.sh $(VERSION)
|
||||||
|
|
||||||
|
release-interactive:
|
||||||
|
@./scripts/release-interactive.sh
|
133
scripts/release-interactive.sh
Executable file
133
scripts/release-interactive.sh
Executable file
@@ -0,0 +1,133 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Интерактивный скрипт для автоматизации релиза
|
||||||
|
# Использование: ./scripts/release-interactive.sh [version]
|
||||||
|
# Если версия не указана, скрипт запросит её интерактивно
|
||||||
|
|
||||||
|
set -e # Остановить выполнение при ошибке
|
||||||
|
|
||||||
|
# Функция для получения версии интерактивно
|
||||||
|
get_version_interactive() {
|
||||||
|
echo "🚀 Создание нового релиза"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Показываем текущую версию
|
||||||
|
CURRENT_VERSION=$(grep 'const version = "' main.go | sed 's/const version = "\([^"]*\)"/\1/')
|
||||||
|
echo "📋 Текущая версия: $CURRENT_VERSION"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Запрашиваем новую версию
|
||||||
|
read -r -p "Введите новую версию (формат X.Y.Z): " VERSION
|
||||||
|
|
||||||
|
# Проверяем, что версия не пустая
|
||||||
|
if [ -z "$VERSION" ]; then
|
||||||
|
echo "❌ Версия не может быть пустой"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Проверяем формат версии
|
||||||
|
if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
echo "❌ Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Подтверждение
|
||||||
|
echo ""
|
||||||
|
echo "📝 Подтверждение:"
|
||||||
|
echo " Текущая версия: $CURRENT_VERSION"
|
||||||
|
echo " Новая версия: $VERSION"
|
||||||
|
echo ""
|
||||||
|
read -r -p "Продолжить? (y/N): " CONFIRM
|
||||||
|
|
||||||
|
if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
|
||||||
|
echo "❌ Релиз отменен"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверяем, передана ли версия как аргумент
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
# Версия не указана, запрашиваем интерактивно
|
||||||
|
get_version_interactive
|
||||||
|
else
|
||||||
|
# Версия указана как аргумент
|
||||||
|
VERSION=$1
|
||||||
|
|
||||||
|
# Проверка формата версии
|
||||||
|
if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
echo "Ошибка: Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🚀 Начинаем релиз версии v$VERSION..."
|
||||||
|
|
||||||
|
# Проверяем, что мы в git репозитории
|
||||||
|
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
||||||
|
echo "Ошибка: Не найден git репозиторий"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Проверяем, что нет незакоммиченных изменений
|
||||||
|
# if ! git diff-index --quiet HEAD --; then
|
||||||
|
# echo "Ошибка: Есть незакоммиченные изменения. Сначала закоммитьте их."
|
||||||
|
# exit 1
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# Обновляем версию в main.go
|
||||||
|
echo "📝 Обновляем версию в main.go..."
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
# macOS
|
||||||
|
sed -i '' "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go
|
||||||
|
else
|
||||||
|
# Linux
|
||||||
|
sed -i "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Проверяем, что изменение применилось
|
||||||
|
if ! grep -q "const version = \"$VERSION\"" main.go; then
|
||||||
|
echo "Ошибка: Не удалось обновить версию в main.go"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Версия обновлена в main.go"
|
||||||
|
|
||||||
|
# Обновляем версию в makefile
|
||||||
|
echo "📝 Обновляем версию в makefile..."
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
# macOS
|
||||||
|
sed -i '' "s/^VERSION=.*/VERSION=$VERSION/" makefile
|
||||||
|
else
|
||||||
|
# Linux
|
||||||
|
sed -i "s/^VERSION=.*/VERSION=$VERSION/" makefile
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Проверяем, что изменение применилось
|
||||||
|
if ! grep -q "^VERSION=$VERSION" makefile; then
|
||||||
|
echo "Ошибка: Не удалось обновить версию в makefile"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Версия обновлена в makefile"
|
||||||
|
|
||||||
|
# Выполняем git команды
|
||||||
|
echo "📦 Добавляем изменения в git..."
|
||||||
|
git add .
|
||||||
|
|
||||||
|
echo "💾 Создаем коммит..."
|
||||||
|
git commit -m "Release v$VERSION"
|
||||||
|
|
||||||
|
echo "🏷️ Создаем тег..."
|
||||||
|
git tag -a "v$VERSION" -m "Release v$VERSION"
|
||||||
|
|
||||||
|
echo "🚀 Отправляем изменения и теги..."
|
||||||
|
git push
|
||||||
|
git push --tags
|
||||||
|
|
||||||
|
echo "🎉 Релиз v$VERSION успешно завершен!"
|
||||||
|
echo "📋 Выполненные действия:"
|
||||||
|
echo " - Обновлена версия в main.go"
|
||||||
|
echo " - Обновлена версия в makefile"
|
||||||
|
echo " - Создан коммит с сообщением 'Release v$VERSION'"
|
||||||
|
echo " - Создан тег v$VERSION"
|
||||||
|
echo " - Изменения отправлены в удаленный репозиторий"
|
Reference in New Issue
Block a user