diff --git a/v3.16/Dockerfile b/20.10.20/Dockerfile similarity index 100% rename from v3.16/Dockerfile rename to 20.10.20/Dockerfile diff --git a/v3.21/Dockerfile b/27.3.1/Dockerfile similarity index 100% rename from v3.21/Dockerfile rename to 27.3.1/Dockerfile diff --git a/apk-build b/apk-build index fec457a..0cf6f40 100644 --- a/apk-build +++ b/apk-build @@ -10,7 +10,8 @@ usage() { echo " -r <приватный_ключ> Содержимое файла приватного ключа (опционально)" echo " -u <публичный_ключ> Содержимое файла публичного ключа (опционально)" echo " -d <путь_к_репозиторию> Путь к директории репозитория в ~/packages (опционально)" - echo "Пример: $0 -p /package -s 192.168.1.100 -n /nfs/share -r \"<содержимое_ключа.rsa>\" -u \"<содержимое_ключа.rsa.pub>\" -d /repo" + echo " -k <наименование_ключа> Наименование файла ключа (опционально)" + echo "Пример: $0 -p /package -s 192.168.1.100 -n /nfs/share -r \"<содержимое_ключа.rsa>\" -u \"<содержимое_ключа.rsa.pub>\" -d /repo -k \"mykey\"" echo "Флаги -s и -n включают монтирование NFS, должны использоваться вместе." echo "Флаги -r и -u содержат текст приватного и публичного ключей для abuild." echo "Флаг -d задаёт директорию для сохранения пакетов." @@ -71,6 +72,11 @@ if [ ! -f "$PACKAGE_DIR/APKBUILD" ]; then exit 1 fi +if [ -z "$NAME_KEY" ]; then + echo "🚫 Ошибка: Необходимо указать наименование ключа подписи" + exit 1 +fi + # Проверка и настройка ключей abuild if [ -n "$PRIVATE_KEY" ] || [ -n "$PUBLIC_KEY" ]; then echo "🔑 Настраиваю переданные ключи abuild..." diff --git a/build.sh b/build.sh old mode 100755 new mode 100644 index 645dd30..395a1b3 --- a/build.sh +++ b/build.sh @@ -1,10 +1,137 @@ #!/bin/sh -CUR_SCRIPT="$0" -CUR_DIR="$(dirname "$CUR_SCRIPT")" +usage() { + echo "✏️ Использование: $0 -n <имя> -v <версия> [-a <адрес>] [-p <порт>] [-r]" + echo "🔧 Опции:" + echo " -n, --name Имя образа (обязательно)" + echo " -v, --version Версия образа в формате X.Y.Z (обязательно)" + echo " -a, --address Адрес registry (требуется с -r)" + echo " -p, --port Порт registry (опционально)" + echo " -r, --push-to-registry Создать теги и отправить образы в registry" + echo "" + echo "📌 Примеры:" + echo " Только сборка: $0 -n myapp -v 2.5.7" + echo " Сборка и отправка: $0 -n myapp -v 2.5.7 -a registry.example.com -p 5000 -r" + exit 1 +} -APK_BUILD_SCRIPT="$CUR_DIR/apk-build" +validate_version() { + echo "$1" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' || { + echo "❌ Ошибка: Версия должна быть в формате X.Y.Z (например, 2.5.7)" + exit 1 + } +} -cp "$APK_BUILD_SCRIPT" "$CUR_DIR/v3.21" -cd "$CUR_DIR/v3.21" -docker build . -t apk-builder:3.21-r1 +validate_address() { + if [ -z "$1" ]; then + echo "❌ Ошибка: Адрес не может быть пустым" + exit 1 + fi +} + +validate_port() { + if [ -n "$1" ]; then + echo "$1" | grep -Eq '^[0-9]+$' || { + echo "❌ Ошибка: Порт должен быть числом" + exit 1 + } + fi +} + +push_to_registry=false +name="" +version="" +address="" +port="" + +while getopts ":n:v:a:p:r" opt; do + case $opt in + n) name="$OPTARG" ;; + v) version="$OPTARG" ;; + a) address="$OPTARG" ;; + p) port="$OPTARG" ;; + r) push_to_registry=true ;; + \?) echo "❌ Неверный аргумент -$OPTARG" >&2; usage ;; + :) echo "❌ Опция -$OPTARG требует аргумент" >&2; usage ;; + esac +done + +if [ -z "$name" ] || [ -z "$version" ]; then + echo "❌ Ошибка: Не указаны обязательные аргументы (-n и -v)" + usage +fi + +validate_version "$version" + +if [ "$push_to_registry" = true ]; then + if [ -z "$address" ]; then + echo "❌ Ошибка: Для отправки в registry необходимо указать адрес (-a)" + usage + fi + + validate_address "$address" + validate_port "$port" +fi + +echo "🐳 Сборка образа $name:$version..." +docker build . -t "${name}:${version}" || { + echo "❌ Ошибка при сборке образа" + exit 1 +} + +if [ "$push_to_registry" = true ]; then + if [ -z "$port" ]; then + registry="$address" + else + registry="$address:$port" + fi + + echo "🏷 Создание тегов для registry..." + + docker tag "${name}:${version}" "${registry}/${name}:latest" || { + echo "❌ Ошибка при создании тега latest" + exit 1 + } + + major=$(echo "$version" | cut -d. -f1) + minor=$(echo "$version" | cut -d. -f1-2) + full="$version" + + docker tag "${name}:${version}" "${registry}/${name}:$full" || { + echo "❌ Ошибка при создании тега $full" + exit 1 + } + docker tag "${name}:${version}" "${registry}/${name}:$minor" || { + echo "❌ Ошибка при создании тега $minor" + exit 1 + } + docker tag "${name}:${version}" "${registry}/${name}:$major" || { + echo "❌ Ошибка при создании тега $major" + exit 1 + } + + echo " ✅ Созданы теги: latest, $full, $minor, $major" + + echo "🚀 Отправка образов в registry..." + docker push "${registry}/${name}:latest" || { + echo "❌ Ошибка при отправке тега latest" + exit 1 + } + docker push "${registry}/${name}:$full" || { + echo "❌ Ошибка при отправке тега $full" + exit 1 + } + docker push "${registry}/${name}:$minor" || { + echo "❌ Ошибка при отправке тега $minor" + exit 1 + } + docker push "${registry}/${name}:$major" || { + echo "❌ Ошибка при отправке тега $major" + exit 1 + } +fi + +echo "🎉 Готово! Образ ${name}:${version} успешно:" +echo " ✅ Собран" +[ "$push_to_registry" = true ] && echo " ✅ Размечен" +[ "$push_to_registry" = true ] && echo " ✅ Отправлен в registry"