- Implement setuptools-scm for dynamic version management from git tags - Refactor CI/CD into separate build and deploy jobs with artifact sharing - Add versioned releases with timestamp-based deployment directories - Implement health checks and automatic rollback on deployment failure - Extract deployment logic into reusable shell scripts - Add Docker layer caching to speed up builds - Include version info in Django context and build args
23 lines
No EOL
532 B
Bash
23 lines
No EOL
532 B
Bash
#!/bin/bash
|
|
|
|
# Retry function with exponential backoff
|
|
# Usage: source retry.sh && retry <command>
|
|
|
|
retry() {
|
|
local max_attempts=3
|
|
local delay=5
|
|
local attempt=1
|
|
|
|
until "$@"; do
|
|
if [ "$attempt" -ge "$max_attempts" ]; then
|
|
echo "Command failed after $max_attempts attempts: $*"
|
|
return 1
|
|
fi
|
|
|
|
echo "Command failed (attempt $attempt/$max_attempts): $*"
|
|
echo "Retrying in $delay seconds..."
|
|
sleep "$delay"
|
|
attempt=$((attempt + 1))
|
|
delay=$((delay * 2)) # Exponential backoff
|
|
done
|
|
} |