Implement retry mechanism for attic push commands in build workflows to enhance reliability and prevent pipeline failures. Update cache push logic in build-on-push, build-schemes, and weekly-build-cache workflows.

This commit is contained in:
Danilo Reyes
2025-11-13 18:54:29 -06:00
parent 1d7031b338
commit c4dc5c316c
3 changed files with 122 additions and 12 deletions

View File

@@ -36,9 +36,36 @@ jobs:
attic login servidos http://127.0.0.1:2343 ${{ secrets.ATTIC_TOKEN }}
- name: Build and push all schemes
continue-on-error: true
run: |
echo "Building and pushing all schemes..."
# Retry function for attic push commands
retry_attic_push() {
local max_attempts=5
local attempt=1
local command="$@"
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt/$max_attempts: $command"
if eval "$command"; then
echo "✓ Successfully pushed to cache on attempt $attempt"
return 0
else
local exit_code=$?
echo "✗ Attempt $attempt failed with exit code $exit_code"
if [ $attempt -lt $max_attempts ]; then
echo "Waiting 2 seconds before retry..."
sleep 2
fi
attempt=$((attempt + 1))
fi
done
echo "⚠️ Failed to push to cache after $max_attempts attempts. Continuing anyway..."
return 0 # Don't fail the pipeline
}
# Store original scheme
ORIGINAL_SCHEME=$(grep -oP "scheme = schemesFile\.schemes\.\K\w+" config/stylix.nix)
echo "Original scheme: $ORIGINAL_SCHEME"
@@ -61,14 +88,17 @@ jobs:
--out-link ./result-$scheme \
--quiet
# Push to cache
# Push to cache with retry
echo "Pushing $scheme to cache..."
attic push servidos:nixos ./result-$scheme
retry_attic_push "attic push servidos:nixos ./result-$scheme"
# Also push using print-out-paths for better cache coverage
nix build .#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel \
build_path=$(nix build .#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel \
--print-out-paths \
--quiet | attic push servidos:nixos --stdin
--quiet 2>/dev/null || echo "")
if [ -n "$build_path" ]; then
retry_attic_push "echo \"$build_path\" | attic push servidos:nixos --stdin"
fi
echo "✓ Completed $scheme"
echo ""