fix: use exec for flock file descriptors to work with zsh
This commit is contained in:
77
.github/workflows/deploy.yml
vendored
77
.github/workflows/deploy.yml
vendored
@@ -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 директорию
|
||||
|
||||
Reference in New Issue
Block a user