Initial commit
This commit is contained in:
Executable
+169
@@ -0,0 +1,169 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для обновления ссылок на изображения в контенте
|
||||
# Заменяет все ссылки /images/ на S3 URLs
|
||||
|
||||
set -e # Остановка при ошибке
|
||||
|
||||
# Загрузка конфигурации
|
||||
source "$(dirname "$0")/config.sh"
|
||||
|
||||
log "Начало обновления ссылок в контенте..."
|
||||
|
||||
# Функция для обновления файла
|
||||
update_file() {
|
||||
local file_path="$1"
|
||||
local backup_path="$BACKUP_DIR/$(basename "$file_path").backup"
|
||||
|
||||
# Создание backup
|
||||
cp "$file_path" "$backup_path"
|
||||
|
||||
# Временный файл для изменений
|
||||
local temp_file="$TEMP_DIR/$(basename "$file_path").tmp"
|
||||
|
||||
# Замена ссылок в файле
|
||||
sed -E "s|['\"]/?images/([^'\"]*)['\"]|\"$S3_BASE_URL/images/\1\"|g" "$file_path" > "$temp_file"
|
||||
|
||||
# Проверка на изменения
|
||||
if ! diff -q "$file_path" "$temp_file" &> /dev/null; then
|
||||
mv "$temp_file" "$file_path"
|
||||
log "Обновлен файл: $file_path"
|
||||
return 0
|
||||
else
|
||||
rm "$temp_file"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Счетчики
|
||||
updated_files=0
|
||||
total_files=0
|
||||
|
||||
# Обновление всех markdown файлов в content/
|
||||
log "Обновление markdown файлов..."
|
||||
while IFS= read -r -d '' file; do
|
||||
total_files=$((total_files + 1))
|
||||
if update_file "$file"; then
|
||||
updated_files=$((updated_files + 1))
|
||||
fi
|
||||
done < <(find "$CONTENT_DIR" -name "*.md" -print0)
|
||||
|
||||
# Обновление конфигурационных файлов
|
||||
log "Обновление конфигурационных файлов..."
|
||||
|
||||
# config.toml
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
total_files=$((total_files + 1))
|
||||
if update_file "$CONFIG_FILE"; then
|
||||
updated_files=$((updated_files + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
# config-prod.toml
|
||||
if [ -f "$CONFIG_PROD_FILE" ]; then
|
||||
total_files=$((total_files + 1))
|
||||
if update_file "$CONFIG_PROD_FILE"; then
|
||||
updated_files=$((updated_files + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
# Обновление HTML файлов в layouts (если есть хардкод)
|
||||
log "Проверка HTML файлов в layouts..."
|
||||
while IFS= read -r -d '' file; do
|
||||
total_files=$((total_files + 1))
|
||||
if update_file "$file"; then
|
||||
updated_files=$((updated_files + 1))
|
||||
fi
|
||||
done < <(find "./layouts" -name "*.html" -print0 2>/dev/null || true)
|
||||
|
||||
# Обновление CSS файлов (фоновые изображения)
|
||||
log "Обновление CSS файлов..."
|
||||
while IFS= read -r -d '' file; do
|
||||
total_files=$((total_files + 1))
|
||||
# Специальная обработка для CSS - замена url() функций
|
||||
backup_path="$BACKUP_DIR/$(basename "$file").backup"
|
||||
cp "$file" "$backup_path"
|
||||
|
||||
temp_file="$TEMP_DIR/$(basename "$file").tmp"
|
||||
sed -E "s|url\(['\"]?/?images/([^'\"]*)['\"]?\)|url(\"$S3_BASE_URL/images/\1\")|g" "$file" > "$temp_file"
|
||||
|
||||
if ! diff -q "$file" "$temp_file" &> /dev/null; then
|
||||
mv "$temp_file" "$file"
|
||||
updated_files=$((updated_files + 1))
|
||||
log "Обновлен CSS файл: $file"
|
||||
else
|
||||
rm "$temp_file"
|
||||
fi
|
||||
done < <(find "./static/css" "./themes" -name "*.css" -print0 2>/dev/null || true)
|
||||
|
||||
# Создание файла с отчетом об изменениях
|
||||
report_file="$TEMP_DIR/content-changes-report.txt"
|
||||
log "Создание отчета об изменениях..."
|
||||
|
||||
{
|
||||
echo "Отчет об обновлении контента"
|
||||
echo "============================"
|
||||
echo "Дата: $(date)"
|
||||
echo "Обновлено файлов: $updated_files из $total_files"
|
||||
echo "S3 Base URL: $S3_BASE_URL"
|
||||
echo ""
|
||||
echo "Измененные файлы:"
|
||||
echo "-----------------"
|
||||
|
||||
# Список измененных файлов
|
||||
find "$BACKUP_DIR" -name "*.backup" | while read -r backup; do
|
||||
original="${backup%.backup}"
|
||||
if [ -f "$original" ]; then
|
||||
echo "- $original"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Примеры замен:"
|
||||
echo "-------------"
|
||||
echo "Было: 'images/photo.jpg'"
|
||||
echo "Стало: '$S3_BASE_URL/images/photo.jpg'"
|
||||
echo ""
|
||||
echo "Было: "
|
||||
echo "Стало: "
|
||||
|
||||
} > "$report_file"
|
||||
|
||||
log "Отчет создан: $report_file"
|
||||
|
||||
# Проверка синтаксиса Hugo (если доступно)
|
||||
if command -v hugo &> /dev/null; then
|
||||
log "Проверка синтаксиса Hugo..."
|
||||
if hugo --verbose --printPathWarnings 2>&1 | grep -i error; then
|
||||
error_log "Найдены ошибки в Hugo конфигурации"
|
||||
else
|
||||
log "Hugo синтаксис корректен"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Финальная статистика
|
||||
log "Обновление контента завершено!"
|
||||
log "Проверено файлов: $total_files"
|
||||
log "Обновлено файлов: $updated_files"
|
||||
log "Backup создан в: $BACKUP_DIR"
|
||||
|
||||
# Создание файла для отката изменений
|
||||
rollback_script="$TEMP_DIR/rollback-content.sh"
|
||||
{
|
||||
echo "#!/bin/bash"
|
||||
echo "# Скрипт для отката изменений контента"
|
||||
echo "set -e"
|
||||
echo ""
|
||||
find "$BACKUP_DIR" -name "*.backup" | while read -r backup; do
|
||||
original="${backup%.backup}"
|
||||
if [ -f "$original" ]; then
|
||||
echo "cp '$backup' '$original'"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
echo "echo 'Откат завершен'"
|
||||
} > "$rollback_script"
|
||||
chmod +x "$rollback_script"
|
||||
|
||||
log "Скрипт отката создан: $rollback_script"
|
||||
log "Скрипт 2 завершен. Теперь запустите: ./3-update-config.sh"
|
||||
Reference in New Issue
Block a user