mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-16 01:29:55 +00:00
release to github 2.0.14
This commit is contained in:
@@ -9,6 +9,8 @@ builds:
|
||||
goarch:
|
||||
- amd64
|
||||
- arm64
|
||||
- windows
|
||||
- darwin
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
ldflags:
|
||||
|
||||
126
deploy/release-goreleaser.sh
Normal file
126
deploy/release-goreleaser.sh
Normal file
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# release-goreleaser.sh
|
||||
# Копирует deploy/.goreleaser.yaml в корень, запускает релиз и удаляет файл.
|
||||
#
|
||||
# Использование:
|
||||
# deploy/release-goreleaser.sh # обычный релиз на GitHub (нужен GITHUB_TOKEN)
|
||||
# deploy/release-goreleaser.sh --snapshot # локальный снепшот без публикации
|
||||
|
||||
ROOT_DIR="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
||||
SRC_CFG="$ROOT_DIR/deploy/.goreleaser.yaml"
|
||||
DST_CFG="$ROOT_DIR/.goreleaser.yaml"
|
||||
|
||||
log() { echo -e "\033[36m[release]\033[0m $*"; }
|
||||
err() { echo -e "\033[31m[error]\033[0m $*" >&2; }
|
||||
|
||||
if ! command -v goreleaser >/dev/null 2>&1; then
|
||||
err "goreleaser не найден. Установите: https://goreleaser.com/install/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$SRC_CFG" ]]; then
|
||||
err "Не найден файл конфигурации: $SRC_CFG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MODE="release"
|
||||
if [[ "${1:-}" == "--snapshot" ]]; then
|
||||
MODE="snapshot"
|
||||
shift || true
|
||||
fi
|
||||
|
||||
if [[ -f "$DST_CFG" ]]; then
|
||||
err "В корне уже существует .goreleaser.yaml. Удалите/переименуйте перед запуском."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cleanup() {
|
||||
if [[ -f "$DST_CFG" ]]; then
|
||||
rm -f "$DST_CFG" || true
|
||||
log "Удалил временный $DST_CFG"
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
log "Копирую конфиг: $SRC_CFG -> $DST_CFG"
|
||||
cp "$SRC_CFG" "$DST_CFG"
|
||||
|
||||
pushd "$ROOT_DIR" >/dev/null
|
||||
|
||||
## Версию берём из deploy/VERSION.txt или VERSION.txt в корне
|
||||
VERSION_FILE="$ROOT_DIR/deploy/VERSION.txt"
|
||||
[[ -f "$VERSION_FILE" ]] || VERSION_FILE="$ROOT_DIR/VERSION.txt"
|
||||
if [[ -f "$VERSION_FILE" ]]; then
|
||||
VERSION_RAW="$(head -n1 "$VERSION_FILE" | tr -d ' \t\r\n')"
|
||||
if [[ -n "$VERSION_RAW" ]]; then
|
||||
TAG="$VERSION_RAW"
|
||||
[[ "$TAG" == v* ]] || TAG="v$TAG"
|
||||
export GORELEASER_CURRENT_TAG="$TAG"
|
||||
log "Версия релиза: $TAG (из $(realpath --relative-to="$ROOT_DIR" "$VERSION_FILE" 2>/dev/null || echo "$VERSION_FILE"))"
|
||||
fi
|
||||
fi
|
||||
|
||||
create_and_push_tag() {
|
||||
local tag="$1"
|
||||
if git rev-parse "$tag" >/dev/null 2>&1; then
|
||||
log "Git tag уже существует: $tag"
|
||||
else
|
||||
log "Создаю git tag: $tag"
|
||||
git tag -a "$tag" -m "Release $tag"
|
||||
if [[ "${NO_GIT_PUSH:-false}" != "true" ]]; then
|
||||
log "Пушу тег $tag на origin"
|
||||
git push origin "$tag"
|
||||
else
|
||||
log "Пропущен пуш тега (NO_GIT_PUSH=true)"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
fetch_token_from_k8s() {
|
||||
export KUBECONFIG=/home/su/.kube/config_hlab
|
||||
local ns="${K8S_NAMESPACE:-flux-system}"
|
||||
local name="${K8S_SECRET_NAME:-git-secrets}"
|
||||
# Предпочитаем jq (как в примере), при отсутствии используем jsonpath + base64 -d
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
kubectl get secret "$name" -n "$ns" -o json \
|
||||
| jq -r '.data.password | @base64d'
|
||||
else
|
||||
kubectl get secret "$name" -n "$ns" -o jsonpath='{.data.password}' \
|
||||
| base64 -d 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "$MODE" == "snapshot" ]]; then
|
||||
log "Запуск goreleaser (snapshot, без публикации)"
|
||||
goreleaser release --snapshot --clean --config "$DST_CFG"
|
||||
else
|
||||
# Если версия определена и тега нет — создадим (goreleaser ориентируется на теги)
|
||||
if [[ -n "${GORELEASER_CURRENT_TAG:-}" ]]; then
|
||||
create_and_push_tag "$GORELEASER_CURRENT_TAG"
|
||||
fi
|
||||
if [[ -z "${GITHUB_TOKEN:-}" ]]; then
|
||||
log "GITHUB_TOKEN не задан — пробую получить из k8s секрета (${K8S_NAMESPACE:-flux-system}/${K8S_SECRET_NAME:-git-secrets}, ключ: password)"
|
||||
if ! command -v kubectl >/dev/null 2>&1; then
|
||||
err "kubectl не найден, а GITHUB_TOKEN не задан. Установите kubectl или экспортируйте GITHUB_TOKEN."
|
||||
exit 1
|
||||
fi
|
||||
TOKEN_FROM_K8S="$(fetch_token_from_k8s || true)"
|
||||
if [[ -n "$TOKEN_FROM_K8S" && "$TOKEN_FROM_K8S" != "null" ]]; then
|
||||
export GITHUB_TOKEN="$TOKEN_FROM_K8S"
|
||||
log "GITHUB_TOKEN получен из секрета Kubernetes."
|
||||
else
|
||||
err "Не удалось получить GITHUB_TOKEN из секрета Kubernetes. Экспортируйте GITHUB_TOKEN и повторите."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
log "Запуск goreleaser (публикация на GitHub)"
|
||||
goreleaser release --clean --config "$DST_CFG"
|
||||
fi
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
log "Готово."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user