mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-16 01:29:55 +00:00
release v1.1.5
This commit is contained in:
@@ -1 +1 @@
|
|||||||
v1.1.0
|
v1.1.5
|
||||||
|
|||||||
@@ -1,92 +1,134 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# REPO=registry.direct-dev.ru/go-lcg
|
# Включаем строгий режим для лучшей отладки
|
||||||
REPO=kuznetcovay/go-lcg
|
set -euo pipefail
|
||||||
VERSION=$1
|
|
||||||
if [ -z "$VERSION" ]; then
|
|
||||||
VERSION=v1.1.0
|
|
||||||
fi
|
|
||||||
BRANCH=main
|
|
||||||
|
|
||||||
echo ${VERSION} > VERSION.txt
|
# Конфигурация
|
||||||
|
readonly REPO="kuznetcovay/go-lcg"
|
||||||
|
readonly BRANCH="main"
|
||||||
|
readonly BINARY_NAME="lcg"
|
||||||
|
|
||||||
export GOCACHE="${HOME}/.cache/go-build"
|
# Получаем версию из аргумента или используем значение по умолчанию
|
||||||
|
VERSION="${1:-v1.1.0}"
|
||||||
|
|
||||||
# Save the current branch
|
# Цвета для вывода
|
||||||
CURRENT_BRANCH=$(git branch --show-current)
|
readonly RED='\033[0;31m'
|
||||||
|
readonly GREEN='\033[0;32m'
|
||||||
|
readonly YELLOW='\033[1;33m'
|
||||||
|
readonly NC='\033[0m' # No Color
|
||||||
|
|
||||||
# Function to restore the original branch
|
# Функции для логирования
|
||||||
restore_branch() {
|
log_info() {
|
||||||
echo "Restoring original branch: ${CURRENT_BRANCH}"
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
git checkout "${CURRENT_BRANCH}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if the current branch is different from the target branch
|
log_warn() {
|
||||||
if [ "$CURRENT_BRANCH" != "$BRANCH" ]; then
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
# Set a trap to restore the branch on exit
|
}
|
||||||
trap restore_branch EXIT
|
|
||||||
echo "Switching to branch: ${BRANCH}"
|
|
||||||
git checkout ${BRANCH}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fetch all tags from the remote repository
|
log_error() {
|
||||||
git fetch --tags
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
# Check if the specified version tag exists
|
# Функция для обработки ошибок
|
||||||
if git rev-parse "refs/tags/${VERSION}" >/dev/null 2>&1; then
|
handle_error() {
|
||||||
echo "Tag ${VERSION} already exists. Halting script."
|
local exit_code=$?
|
||||||
|
log_error "Скрипт завершился с ошибкой (код: $exit_code)"
|
||||||
|
exit $exit_code
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для восстановления ветки
|
||||||
|
restore_branch() {
|
||||||
|
if [[ -n "${CURRENT_BRANCH:-}" ]]; then
|
||||||
|
log_info "Восстанавливаем исходную ветку: ${CURRENT_BRANCH}"
|
||||||
|
git checkout "${CURRENT_BRANCH}" || log_warn "Не удалось переключиться на ${CURRENT_BRANCH}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для сборки бинарного файла
|
||||||
|
build_binary() {
|
||||||
|
local platform=$1
|
||||||
|
local output_dir="bin-linux-${platform}"
|
||||||
|
local dockerfile="Dockerfiles/LocalCompile/Dockerfile"
|
||||||
|
|
||||||
|
log_info "Собираем для ${platform}..."
|
||||||
|
|
||||||
|
if docker build -f "$dockerfile" --target bin-linux --output "$output_dir/" --platform "linux/${platform}" .; then
|
||||||
|
cp "$output_dir/$BINARY_NAME" "binaries-for-upload/$BINARY_NAME.${platform}.${VERSION}"
|
||||||
|
log_info "Сборка для ${platform} завершена успешно"
|
||||||
|
else
|
||||||
|
log_error "Сборка для ${platform} не удалась"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для git операций
|
||||||
|
git_operations() {
|
||||||
|
log_info "Выполняем git операции..."
|
||||||
|
|
||||||
|
git add -A . || { log_error "git add не удался"; return 1; }
|
||||||
|
git commit -m "release $VERSION" || { log_error "git commit не удался"; return 1; }
|
||||||
|
git tag -a "$VERSION" -m "release $VERSION" || { log_error "git tag не удался"; return 1; }
|
||||||
|
git push -u origin main --tags || { log_error "git push не удался"; return 1; }
|
||||||
|
|
||||||
|
log_info "Git операции завершены успешно"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Основная функция
|
||||||
|
main() {
|
||||||
|
log_info "Начинаем сборку версии: $VERSION"
|
||||||
|
|
||||||
|
# Записываем версию в файл
|
||||||
|
echo "$VERSION" > VERSION.txt
|
||||||
|
|
||||||
|
# Настраиваем кэш Go
|
||||||
|
export GOCACHE="${HOME}/.cache/go-build"
|
||||||
|
|
||||||
|
# Сохраняем текущую ветку
|
||||||
|
CURRENT_BRANCH=$(git branch --show-current)
|
||||||
|
|
||||||
|
# Настраиваем обработчик ошибок
|
||||||
|
trap handle_error ERR
|
||||||
|
trap restore_branch EXIT
|
||||||
|
|
||||||
|
# Переключаемся на нужную ветку если необходимо
|
||||||
|
if [[ "$CURRENT_BRANCH" != "$BRANCH" ]]; then
|
||||||
|
log_info "Переключаемся на ветку: $BRANCH"
|
||||||
|
git checkout "$BRANCH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Получаем теги
|
||||||
|
log_info "Получаем теги из удаленного репозитория..."
|
||||||
|
git fetch --tags
|
||||||
|
|
||||||
|
# Проверяем существование тега
|
||||||
|
if git rev-parse "refs/tags/${VERSION}" >/dev/null 2>&1; then
|
||||||
|
log_error "Тег ${VERSION} уже существует. Прерываем выполнение."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run go tests
|
# Создаем директорию для бинарных файлов
|
||||||
# if ! go test -v -run=^Test; then
|
mkdir -p binaries-for-upload
|
||||||
# echo "Tests failed. Exiting..."
|
|
||||||
# exit 1
|
|
||||||
# fi
|
|
||||||
mkdir binaries-for-upload
|
|
||||||
# Build for linux/amd64
|
|
||||||
docker build -f Dockerfiles/LocalCompile/Dockerfile --target bin-linux --output bin-linux-amd64/ --platform linux/amd64 . ||
|
|
||||||
{
|
|
||||||
echo "docker build for amd64 failed. Exiting with code 1."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
cp bin-linux-amd64/lcg "binaries-for-upload/lcg.amd64.${VERSION}"
|
# Собираем бинарные файлы для обеих платформ
|
||||||
|
build_binary "amd64"
|
||||||
|
build_binary "arm64"
|
||||||
|
|
||||||
# Build for linux/arm64
|
# Собираем и пушим Docker образы
|
||||||
docker build -f Dockerfiles/LocalCompile/Dockerfile --target bin-linux --output bin-linux-arm64/ --platform linux/arm64 . ||
|
log_info "Собираем и пушим multi-platform Docker образы..."
|
||||||
{
|
if docker buildx build -f Dockerfiles/ImageBuild/Dockerfile --push --platform linux/amd64,linux/arm64 -t "${REPO}:${VERSION}" .; then
|
||||||
echo "docker build for arm64 failed. Exiting with code 1."
|
log_info "Docker образы успешно собраны и запушены"
|
||||||
exit 1
|
else
|
||||||
}
|
log_error "Сборка Docker образов не удалась"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
cp bin-linux-arm64/lcg "binaries-for-upload/lcg.arm64.${VERSION}"
|
# Выполняем git операции
|
||||||
|
git_operations
|
||||||
|
|
||||||
# Push multi-platform images
|
log_info "Сборка версии $VERSION завершена успешно!"
|
||||||
docker buildx build -f Dockerfiles/ImageBuild/Dockerfile --push --platform linux/amd64,linux/arm64 -t ${REPO}:"${VERSION}" . ||
|
}
|
||||||
{
|
|
||||||
echo "docker buildx build --push failed. Exiting with code 1."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
git add -A . ||
|
# Запускаем основную функцию
|
||||||
{
|
main "$@"
|
||||||
echo "git add failed. Exiting with code 1."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
git commit -m "release $VERSION" ||
|
|
||||||
{
|
|
||||||
echo "git commit failed. Exiting with code 1."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
git tag -a "$VERSION" -m "release $VERSION" ||
|
|
||||||
{
|
|
||||||
echo "git tag failed. Exiting with code 1."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
git push -u origin main --tags ||
|
|
||||||
{
|
|
||||||
echo "git push failed. Exiting with code 1."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user