#!/usr/bin/env bash set -euo pipefail # release-goreleaser-no-copy.sh # Использование: # deploy/release-goreleaser-no-copy.sh # релиз на GitHub с указанным тегом (нужен GITHUB_TOKEN) ROOT_DIR="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" SRC_CFG="$ROOT_DIR/deploy/.goreleaser.yaml" log() { echo -e "\033[36m[release]\033[0m $*"; } err() { echo -e "\033[31m[error]\033[0m $*" >&2; } # Проверка обязательного параметра - тега if [[ -z "${1:-}" ]]; then err "Не указан тег. Использование: $0 " exit 1 fi TAG="$1" # Проверка наличия тега в git if ! git rev-parse "$TAG" >/dev/null 2>&1; then err "Тег '$TAG' не найден в git репозитории" exit 1 fi log "Использую тег: $TAG" export GORELEASER_CURRENT_TAG="$TAG" 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 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 [[ -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 "$SRC_CFG" "${EXTRA_FLAGS[@]:-}" log "Готово."