Skip to content

Instantly share code, notes, and snippets.

@unreturned
Last active September 17, 2025 09:07
Show Gist options
  • Select an option

  • Save unreturned/0f959d5f81e2d78e078cc36042cd538e to your computer and use it in GitHub Desktop.

Select an option

Save unreturned/0f959d5f81e2d78e078cc36042cd538e to your computer and use it in GitHub Desktop.
get_deckhouserelease_manifest.sh
#!/usr/bin/env bash
# set -euxo pipefail #DEBUG
set -euo pipefail #NORMAL
# Устанавливаем значение по умолчанию (пустую строку) для RELEASE_CHANNEL
RELEASE_CHANNEL_OR_VERSION=""
VALID_CHANNELS=("alpha" "beta" "early-access" "stable" "rock-solid")
# Функция, чтобы проверить, совпадает ли RELEASE_CHANNEL с форматом версии
is_version_format() {
[[ $1 =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]
}
usage() {
echo "Usage: $0 RELEASE_CHANNEL_OR_VERSION"
echo "RELEASE_CHANNEL_OR_VERSION should be one of: alpha|beta|early-access|stable|rock-solid or in the format vX.Y.Z."
}
# Проверьте, был ли передан параметр для RELEASE_CHANNEL
if [[ $# -lt 1 ]]; then
usage
exit 1
fi
RELEASE_CHANNEL_OR_VERSION=$1
# Проверяем, является ли RELEASE_CHANNEL допустимым каналом или версией
if [[ ! " ${VALID_CHANNELS[*]} " =~ " ${RELEASE_CHANNEL_OR_VERSION} " ]] && ! is_version_format "${RELEASE_CHANNEL_OR_VERSION}"; then
usage
exit 1
fi
# Логирование для наглядности
# echo "Using release channel: $RELEASE_CHANNEL_OR_VERSION"
# Получаем версию один раз и используем полученное значение
VERSION=$(crane export registry.deckhouse.ru/deckhouse/ee/release-channel:$RELEASE_CHANNEL_OR_VERSION | tar -xOf - version.json | jq -r '.version')
# Извлекаем нужные файлы version.json и changelog.yaml из архива
crane export registry.deckhouse.ru/deckhouse/ee/release-channel:$VERSION | tar -xf - version.json changelog.yaml
# Преобразуем и извлекаем данные из JSON сразу в YAML
yq -o yaml -e '. | {"requirements": .requirements}' version.json > requirements.yaml
# Создаем финальный YAML-исходные данные
cat <<EOF > deckhouserelease-${VERSION}.yaml
apiVersion: deckhouse.io/v1alpha1
approved: false
kind: DeckhouseRelease
metadata:
name: ${VERSION}
spec:
changelogLink: https://github.com/deckhouse/deckhouse/releases/tag/${VERSION}
version: ${VERSION}
EOF
# Добавляем содержимое changelog и requirements в финальный YAML
yq -o yaml '.spec.changelog *= load("changelog.yaml")' deckhouserelease-${VERSION}.yaml > temp.yaml
yq -o yaml '.spec.requirements *= load("requirements.yaml")' temp.yaml | yq -P - > deckhouserelease-${VERSION}.yaml
# Удаляем временные файлы
rm version.json changelog.yaml requirements.yaml temp.yaml
# Выводим финальный YAML
yq -P deckhouserelease-${VERSION}.yaml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment