-
Notifications
You must be signed in to change notification settings - Fork 1
68 lines (57 loc) · 2.63 KB
/
Copy pathcloudflare-deployments.yaml
File metadata and controls
68 lines (57 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
name: Cleanup old Cloudflare Deployments
on:
schedule:
- cron: "30 0 * * *" # Runs every day at 00:30 UTC
workflow_dispatch: # Allows manual triggering
permissions:
contents: read
jobs:
cleanup-deployments:
runs-on: ubuntu-latest
env:
CF_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PROJECT_NAME: groveld
RETENTION_SECONDS: 172800 # 2 days in seconds
steps:
- name: Cleanup old deployments
run: |
set -euo pipefail
deployments=$(curl -s -X GET \
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/deployments" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json")
success=$(echo "$deployments" | jq -r '.success')
if [[ "$success" != "true" ]]; then
echo "Failed to fetch deployments:"
echo "$deployments"
exit 1
fi
cutoff_epoch=$(($(date +%s) - RETENTION_SECONDS))
echo "$deployments" | jq -c '.result[]' | while read -r deployment; do
deployment_id=$(echo "$deployment" | jq -r '.id')
created_on=$(echo "$deployment" | jq -r '.created_on')
deployment_epoch=$(date -d "$created_on" +%s)
deployment_status=$(echo "$deployment" | jq -r '.latest_stage.status')
is_live=$(echo "$deployment" | jq '.aliases | length > 0')
is_production=$(echo "$deployment" | jq '.production_environment != null')
if [[ "$deployment_epoch" -lt "$cutoff_epoch" && \
"$is_live" == "false" && \
"$is_production" == "false" && \
"$deployment_status" == "success" ]]; then
echo "Deleting deployment: $deployment_id (created_on: $created_on)"
delete_response=$(curl -s -X DELETE \
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/deployments/${deployment_id}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json")
delete_success=$(echo "$delete_response" | jq -r '.success')
if [[ "$delete_success" != "true" ]]; then
echo "Failed to delete deployment $deployment_id:"
echo "$delete_response"
else
echo "Successfully deleted deployment $deployment_id."
fi
else
echo "Keeping deployment: $deployment_id (created_on: $created_on)"
fi
done