fix: use flock directly with file instead of file descriptor for zsh compatibility

This commit is contained in:
2026-01-25 20:36:07 +03:00
parent e360e5e215
commit 1bfe772a0d

View File

@@ -148,23 +148,17 @@ jobs:
local history_size="${DEPLOY_HISTORY_SIZE:-10}" local history_size="${DEPLOY_HISTORY_SIZE:-10}"
if command -v flock > /dev/null 2>&1; then if command -v flock > /dev/null 2>&1; then
# Используем flock с файлом напрямую (работает в zsh и bash) # Используем flock напрямую с файлом (работает в zsh и bash)
# Zsh поддерживает только дескрипторы 0-9, поэтому используем 9 flock -x "$lock_file" sh -c "
( # Записываем новую запись
if flock -x 9 "$lock_file"; then echo \"$entry\" >> \"$history_file\"
# Записываем новую запись
echo "$entry" >> "$history_file"
# Обрезаем файл атомарно # Обрезаем файл атомарно
tail -n "$history_size" "$history_file" > "${history_file}.tmp" tail -n $history_size \"$history_file\" > \"${history_file}.tmp\"
mv "${history_file}.tmp" "$history_file" mv \"${history_file}.tmp\" \"$history_file\"
echo "✅ History updated safely" echo \"✅ History updated safely\"
else "
echo "❌ Failed to acquire lock on $history_file"
exit 1
fi
) 9>"$lock_file"
else else
# Fallback: простая запись без блокировки # Fallback: простая запись без блокировки
echo "$entry" >> "$history_file" echo "$entry" >> "$history_file"
@@ -512,25 +506,23 @@ jobs:
local lock_file="${history_file}.lock" local lock_file="${history_file}.lock"
if command -v flock > /dev/null 2>&1; then if command -v flock > /dev/null 2>&1; then
# Используем flock с файлом напрямую (работает в zsh и bash) # Используем flock напрямую с файлом (работает в zsh и bash)
( flock -x "$lock_file" sh -c "
if flock -x 9 "$lock_file"; then if [ -f \"$history_file\" ]; then
if [ -f "$history_file" ]; then # Заменяем последнюю строку со статусом deploying на финальный статус
# Заменяем последнюю строку со статусом deploying на финальный статус sed -i '\$s/|deploying\$/|$new_status/' \"$history_file\"
sed -i '$s/|deploying$/|'"$new_status"'/' "$history_file" echo \"✅ Deploy history updated with status: $new_status (with flock)\"
echo "✅ Deploy history updated with status: $new_status (with flock)"
else
echo "⚠️ History file not found, skipping update"
fi
else else
echo "⚠️ Failed to acquire lock, using fallback method" echo \"⚠️ History file not found, skipping update\"
# Fallback: простая запись без блокировки
if [ -f "$history_file" ]; then
sed -i '$s/|deploying$/|'"$new_status"'/' "$history_file"
echo "✅ Deploy history updated (fallback method)"
fi
fi fi
) 9>"$lock_file" " || {
echo "⚠️ Failed to acquire lock, using fallback method"
# Fallback: простая запись без блокировки
if [ -f "$history_file" ]; then
sed -i '$s/|deploying$/|'"$new_status"'/' "$history_file"
echo "✅ Deploy history updated (fallback method)"
fi
}
else else
# Fallback: если flock недоступен # Fallback: если flock недоступен
echo "⚠️ flock not available, using simple update" echo "⚠️ flock not available, using simple update"
@@ -717,23 +709,22 @@ jobs:
local lock_file="${history_file}.lock" local lock_file="${history_file}.lock"
if command -v flock > /dev/null 2>&1; then if command -v flock > /dev/null 2>&1; then
( # Используем flock напрямую с файлом для чтения
if flock -s 9 "$lock_file"; then flock -s "$lock_file" sh -c "
if [ -f "$history_file" ]; then if [ -f \"$history_file\" ]; then
cat "$history_file" cat \"$history_file\"
else
echo ""
fi
else else
echo "⚠️ Failed to acquire lock, using fallback method" echo \"\"
# Fallback: простое чтение без блокировки
if [ -f "$history_file" ]; then
cat "$history_file"
else
echo ""
fi
fi fi
) 9>"$lock_file" " || {
echo "⚠️ Failed to acquire lock, using fallback method"
# Fallback: простое чтение без блокировки
if [ -f "$history_file" ]; then
cat "$history_file"
else
echo ""
fi
}
else else
# Fallback: если flock недоступен # Fallback: если flock недоступен
if [ -f "$history_file" ]; then if [ -f "$history_file" ]; then
@@ -752,23 +743,17 @@ jobs:
local history_size="${DEPLOY_HISTORY_SIZE:-10}" local history_size="${DEPLOY_HISTORY_SIZE:-10}"
if command -v flock > /dev/null 2>&1; then if command -v flock > /dev/null 2>&1; then
# Используем flock с файлом напрямую (работает в zsh и bash) # Используем flock напрямую с файлом (работает в zsh и bash)
# Zsh поддерживает только дескрипторы 0-9, поэтому используем 9 flock -x "$lock_file" sh -c "
( # Записываем новую запись
if flock -x 9 "$lock_file"; then echo \"$entry\" >> \"$history_file\"
# Записываем новую запись
echo "$entry" >> "$history_file"
# Обрезаем файл атомарно # Обрезаем файл атомарно
tail -n "$history_size" "$history_file" > "${history_file}.tmp" tail -n $history_size \"$history_file\" > \"${history_file}.tmp\"
mv "${history_file}.tmp" "$history_file" mv \"${history_file}.tmp\" \"$history_file\"
echo "✅ History updated safely" echo \"✅ History updated safely\"
else "
echo "❌ Failed to acquire lock on $history_file"
exit 1
fi
) 9>"$lock_file"
else else
# Fallback: простая запись без блокировки # Fallback: простая запись без блокировки
echo "$entry" >> "$history_file" echo "$entry" >> "$history_file"