From 18aab98ccf4fa17a2b5d6ee65eafa34caee73e72 Mon Sep 17 00:00:00 2001 From: nokotan Date: Tue, 27 Oct 2026 00:12:30 +0300 Subject: [PATCH] FIX PUSH REPO 2 --- scripts/publish.sh | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/scripts/publish.sh b/scripts/publish.sh index c342080..bb41b6a 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -9,12 +9,11 @@ if [[ -z "${NEXSPENCE_URL:-}" || -z "${NEXSPENCE_TOKEN:-}" || -z "${NEXSPENCE_RE exit 1 fi -# Имя базы данных репозитория (исправляем расширение на стандартное .db.tar.gz для repo-add) +# Имя базы данных репозитория (используем стандартное .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 не найден!" @@ -22,7 +21,6 @@ if [[ -z "$PKG_FILE" ]]; then fi echo "Найден новый пакет: $PKG_FILE" -# Создаем изолированную директорию для синхронизации базы данных BUILD_DIR=$(mktemp -d) trap 'rm -rf "$BUILD_DIR"' EXIT @@ -30,27 +28,34 @@ cp "$PKG_FILE" "$BUILD_DIR/" cd "$BUILD_DIR" echo "====== Загрузка существующей базы данных ======" -# Пытаемся скачать текущую базу данных с Nexspence, чтобы сохранить историю прошлых версий -# Если репозиторий пустой (первый запуск), curl может вернуть 404, это нормально -curl --fail --silent --show-error --location \ +# Скачиваем с флагом --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" || echo "База данных не найдена на сервере, будет создана новая." + "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${DB_NAME}" -o "$DB_NAME" 2>/dev/null; then -if [[ -f "$DB_NAME" ]]; then - echo "Успешно загружена существующая база данных. Прошлые версии будут сохранены в индексе." - # Скачиваем также сопутствующий .files файл для консистентности индексов - curl --fail --silent --location \ - -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \ - "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${FILES_NAME}" -o "$FILES_NAME" || true + # Проверяем, является ли скачанный файл настоящим архивом + 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) гарантирует, что старые версии этого же пакета НЕ будут вычищаться из индексов базы данных. +# Флаг -n (new-only) гарантирует, что старые версии НЕ будут вычищаться из индексов базы данных. repo-add -n "$DB_NAME" *.pkg.tar.zst echo "====== Публикация файлов на Nexspence ======" -# Отправляем новый пакет (файлы старых версий лежат на Nexspence под своими уникальными версиями, они не затрутся) NEW_PKG_NAME=$(basename *.pkg.tar.zst) echo "Загрузка пакета: $NEW_PKG_NAME..." curl --fail --silent --show-error -X PUT \ @@ -58,7 +63,6 @@ curl --fail --silent --show-error -X PUT \ --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}" \ @@ -73,7 +77,7 @@ if [[ -f "$FILES_NAME" ]]; then "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/$FILES_NAME" fi -# Создаем символические ссылки .db и .files без расширения архива, которые pacman запрашивает по умолчанию +# Создаем символические ссылки .db и .files для pacman без расширения архива ln -sf "$DB_NAME" "${NEXSPENCE_REPOSITORY}.db" ln -sf "$FILES_NAME" "${NEXSPENCE_REPOSITORY}.files"