diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 197b583..ac456ad 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -147,19 +147,31 @@ jobs: local lock_file="${history_file}.lock" local history_size="${DEPLOY_HISTORY_SIZE:-10}" - ( - # Блокируем файл на запись (exclusive lock) - flock -x 200 || { echo "❌ Failed to acquire lock on $history_file"; exit 1; } - - # Записываем новую запись + if command -v flock > /dev/null 2>&1; then + # Используем flock с exec для открытия файлового дескриптора (работает в zsh) + ( + exec 200>"$lock_file" + if flock -x 200; then + # Записываем новую запись + echo "$entry" >> "$history_file" + + # Обрезаем файл атомарно + tail -n "$history_size" "$history_file" > "${history_file}.tmp" + mv "${history_file}.tmp" "$history_file" + + echo "✅ History updated safely" + else + echo "❌ Failed to acquire lock on $history_file" + exit 1 + fi + ) + else + # Fallback: простая запись без блокировки echo "$entry" >> "$history_file" - - # Обрезаем файл атомарно tail -n "$history_size" "$history_file" > "${history_file}.tmp" mv "${history_file}.tmp" "$history_file" - - echo "✅ History updated safely" - ) 200>"$lock_file" + echo "✅ History updated (fallback method)" + fi } # Переходим в директорию проекта под пользователем deploy @@ -500,9 +512,10 @@ jobs: local lock_file="${history_file}.lock" if command -v flock > /dev/null 2>&1; then + # Используем flock с exec для открытия файлового дескриптора (работает в zsh) ( - # Блокируем файл на запись (exclusive lock) - if flock -x 200 2>/dev/null; then + exec 200>"$lock_file" + if flock -x 200; then if [ -f "$history_file" ]; then # Заменяем последнюю строку со статусом deploying на финальный статус sed -i '$s/|deploying$/|'"$new_status"'/' "$history_file" @@ -518,7 +531,7 @@ jobs: echo "✅ Deploy history updated (fallback method)" fi fi - ) 200>"$lock_file" + ) else # Fallback: если flock недоступен echo "⚠️ flock not available, using simple update" @@ -706,8 +719,8 @@ jobs: if command -v flock > /dev/null 2>&1; then ( - # Блокируем файл на чтение (shared lock) - if flock -s 200 2>/dev/null; then + exec 200>"$lock_file" + if flock -s 200; then if [ -f "$history_file" ]; then cat "$history_file" else @@ -722,7 +735,7 @@ jobs: echo "" fi fi - ) 200>"$lock_file" + ) else # Fallback: если flock недоступен if [ -f "$history_file" ]; then @@ -740,19 +753,31 @@ jobs: local lock_file="${history_file}.lock" local history_size="${DEPLOY_HISTORY_SIZE:-10}" - ( - # Блокируем файл на запись (exclusive lock) - flock -x 200 || { echo "❌ Failed to acquire lock on $history_file"; exit 1; } - - # Записываем новую запись + if command -v flock > /dev/null 2>&1; then + # Используем flock с exec для открытия файлового дескриптора (работает в zsh) + ( + exec 200>"$lock_file" + if flock -x 200; then + # Записываем новую запись + echo "$entry" >> "$history_file" + + # Обрезаем файл атомарно + tail -n "$history_size" "$history_file" > "${history_file}.tmp" + mv "${history_file}.tmp" "$history_file" + + echo "✅ History updated safely" + else + echo "❌ Failed to acquire lock on $history_file" + exit 1 + fi + ) + else + # Fallback: простая запись без блокировки echo "$entry" >> "$history_file" - - # Обрезаем файл атомарно tail -n "$history_size" "$history_file" > "${history_file}.tmp" mv "${history_file}.tmp" "$history_file" - - echo "✅ History updated safely" - ) 200>"$lock_file" + echo "✅ History updated (fallback method)" + fi } # Функция для безопасного изменения прав на bots директорию