#!/usr/bin/env bash set -euo pipefail # Переменные окружения должны быть установлены пайплайном: # NEXSPENCE_URL, NEXSPENCE_TOKEN, NEXSPENCE_REPOSITORY if [[ -z "${NEXSPENCE_URL:-}" || -z "${NEXSPENCE_TOKEN:-}" || -z "${NEXSPENCE_REPOSITORY:-}" ]]; then echo "❌ Ошибка: Не все переменные окружения (NEXSPENCE_URL, NEXSPENCE_TOKEN, NEXSPENCE_REPOSITORY) установлены!" exit 1 fi # Имя базы данных репозитория (используем стандартное .db.tar.gz для repo-add) DB_NAME="${NEXSPENCE_REPOSITORY}.db.tar.gz" FILES_NAME="${NEXSPENCE_REPOSITORY}.files.tar.gz" echo "====== Подготовка рабочего пространства ======" PKG_FILE=$(find . -maxdepth 2 -name "*.pkg.tar.zst" | head -n 1) if [[ -z "$PKG_FILE" ]]; then echo "❌ Ошибка: Скомпилированный пакет .pkg.tar.zst не найден!" exit 1 fi echo "Найден новый пакет: $PKG_FILE" BUILD_DIR=$(mktemp -d) trap 'rm -rf "$BUILD_DIR"' EXIT cp "$PKG_FILE" "$BUILD_DIR/" cd "$BUILD_DIR" echo "====== Загрузка существующей базы данных ======" # Скачиваем с флагом --fail, чтобы curl не сохранял HTML-страницы ошибок при 404/500 if curl --fail --silent --show-error --location \ -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \ "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${DB_NAME}" -o "$DB_NAME" 2>/dev/null; then # Проверяем, является ли скачанный файл настоящим архивом if bsdtar -tf "$DB_NAME" &>/dev/null; then echo "Успешно загружена существующая база данных. Прошлые версии будут сохранены в индексе." # Скачиваем сопутствующий .files файл curl --fail --silent --location \ -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \ "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${FILES_NAME}" -o "$FILES_NAME" 2>/dev/null || true else echo "⚠️ Скачанный файл базы данных поврежден или содержит текст ошибки. Создаем новую базу." rm -f "$DB_NAME" fi else echo "База данных не найдена на сервере (404) или недоступна. Будет создана новая." rm -f "$DB_NAME" fi echo "====== Обновление базы данных через repo-add ======" # Добавляем новый пакет в базу данных. # Флаг -n (new-only) гарантирует, что старые версии НЕ будут вычищаться из индексов базы данных. repo-add -n "$DB_NAME" *.pkg.tar.zst echo "====== Публикация файлов на Nexspence ======" NEW_PKG_NAME=$(basename *.pkg.tar.zst) echo "Загрузка пакета: $NEW_PKG_NAME..." curl --fail --silent --show-error -X PUT \ -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \ --data-binary @"$NEW_PKG_NAME" \ "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/$NEW_PKG_NAME" echo "Загрузка обновленной базы данных: $DB_NAME..." curl --fail --silent --show-error -X PUT \ -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \ --data-binary @$DB_NAME \ "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/$DB_NAME" if [[ -f "$FILES_NAME" ]]; then echo "Загрузка обновленного файла структуры: $FILES_NAME..." curl --fail --silent --show-error -X PUT \ -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \ --data-binary @$FILES_NAME \ "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/$FILES_NAME" fi # Создаем символические ссылки .db и .files для pacman без расширения архива ln -sf "$DB_NAME" "${NEXSPENCE_REPOSITORY}.db" ln -sf "$FILES_NAME" "${NEXSPENCE_REPOSITORY}.files" echo "Загрузка прямых алиасов базы данных для pacman..." curl --fail --silent --show-error -X PUT -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" --data-binary @"${NEXSPENCE_REPOSITORY}.db" "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${NEXSPENCE_REPOSITORY}.db" curl --fail --silent --show-error -X PUT -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" --data-binary @"${NEXSPENCE_REPOSITORY}.files" "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${NEXSPENCE_REPOSITORY}.files" echo "✅ Публикация успешно завершена! История версий сохранена."