Skip to content

Commit 11e1829

Browse files
Log progress
1 parent f87f653 commit 11e1829

1 file changed

Lines changed: 66 additions & 23 deletions

File tree

.github/workflows/cleanup-workflows.yml

Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ jobs:
8787
"${{ steps.next.outputs.workflows }}" \
8888
)
8989
EXISTING_FILES=$(echo "$EXISTING_FILES" | sort -u)
90-
echo $EXISTING_FILES
90+
printf "%s\n" $EXISTING_FILES
9191
9292
# Find deleted workflows as the items in `WORKFLOWS` but not in the union of main and next.
9393
# This assumes that _all_ items in main and next are present in `WORKFLOWS`.
@@ -113,48 +113,91 @@ jobs:
113113
set -euo pipefail
114114
115115
TOTAL_AFFECTED=0
116-
117-
echo ""
118-
echo "=== Workflow Cleanup Summary ==="
119-
echo ""
120-
121-
while IFS= read -r workflow; do
116+
SUMMARY=()
117+
118+
# Read workflows into an array for indexing
119+
mapfile -t WORKFLOWS_ARRAY <<< "$DELETED_WORKFLOWS"
120+
TOTAL_WORKFLOWS=${#WORKFLOWS_ARRAY[@]}
121+
122+
# Determine max workflow name length for alignment
123+
MAX_WF_LENGTH=0
124+
for wf in "${WORKFLOWS_ARRAY[@]}"; do
125+
len=${#wf}
126+
(( len > MAX_WF_LENGTH )) && MAX_WF_LENGTH=$len
127+
done
128+
(( MAX_WF_LENGTH < 40 )) && MAX_WF_LENGTH=40 # minimum width
129+
130+
# Index column width: enough for [100/100] → 9 chars including brackets
131+
INDEX_WIDTH=9
132+
133+
printf "\n"
134+
printf "=== Workflow Cleanup Progress ===\n"
135+
printf "%*s | %-*s | %-14s | %-12s\n" "$INDEX_WIDTH" "Index" "$MAX_WF_LENGTH" "Workflow" "Workflow Count" "Global Total"
136+
printf "%*s-+-%-*s-+-%-14s-+-%-12s\n" "$INDEX_WIDTH" "---------" "$MAX_WF_LENGTH" "$(printf '%.0s-' $(seq 1 $MAX_WF_LENGTH))" "--------------" "------------"
137+
138+
for i in "${!WORKFLOWS_ARRAY[@]}"; do
139+
workflow=${WORKFLOWS_ARRAY[$i]}
122140
[ -z "$workflow" ] && continue
123-
124-
WF_COUNT=0
141+
CURRENT_INDEX=$((i + 1))
142+
WORKFLOW_COUNT=0
125143
126144
while true; do
145+
# List workflow runs.
146+
#
147+
# Note that github will return 404 once all runs are deleted.
148+
# We use `|| true` to ignore this error since it is expected when all runs are deleted.
127149
RUN_IDS=$(gh run list \
128150
--workflow "$workflow" \
129151
--limit 100 \
130152
--json databaseId \
131-
--jq '.[].databaseId')
153+
--jq '.[].databaseId' 2>/dev/null || true)
132154
133-
if [ -z "$RUN_IDS" ]; then
134-
break
135-
fi
155+
[ -z "$RUN_IDS" ] && break # stop when no runs remain
136156
137157
BATCH_COUNT=$(echo "$RUN_IDS" | wc -l | tr -d ' ')
138-
WF_COUNT=$((WF_COUNT + BATCH_COUNT))
158+
WORKFLOW_COUNT=$((WORKFLOW_COUNT + BATCH_COUNT))
159+
TOTAL_AFFECTED=$((TOTAL_AFFECTED + BATCH_COUNT))
160+
161+
# Print aligned progress per batch
162+
printf "%*s | %-*s | %14s | %12s\n" \
163+
"$INDEX_WIDTH" "[$CURRENT_INDEX/$TOTAL_WORKFLOWS]" \
164+
"$MAX_WF_LENGTH" "$workflow" \
165+
"$WORKFLOW_COUNT" "$TOTAL_AFFECTED"
139166
140167
if [ "$MODE" = "execute" ]; then
141168
for RUN_ID in $RUN_IDS; do
142-
gh run delete "$RUN_ID" --yes >/dev/null
169+
gh run delete "$RUN_ID" >/dev/null
143170
done
144171
fi
172+
173+
# TEMPORARY BREAK for testing: stop if workflow count > 20
174+
if [ "$WORKFLOW_COUNT" -gt 20 ]; then
175+
echo "⚠️ Temporary break: workflow count exceeded 20, stopping early for safety."
176+
break
177+
fi
145178
done
146179
147-
echo "$workflow → $WF_COUNT runs"
148-
TOTAL_AFFECTED=$((TOTAL_AFFECTED + WF_COUNT))
180+
# Save summary
181+
SUMMARY+=("$workflow|$WORKFLOW_COUNT")
182+
done
183+
184+
# Print final aligned summary table
185+
printf "\n"
186+
printf "=== Workflow Cleanup Summary ===\n"
187+
printf "%-*s | %14s\n" "$MAX_WF_LENGTH" "Workflow" "Runs"
188+
printf "%-*s-+-%14s\n" "$MAX_WF_LENGTH" "$(printf '%.0s-' $(seq 1 $MAX_WF_LENGTH))" "--------------"
149189
150-
done <<< "$DELETED_WORKFLOWS"
190+
for entry in "${SUMMARY[@]}"; do
191+
wf="${entry%%|*}"
192+
count="${entry##*|}"
193+
printf "%-*s | %14s\n" "$MAX_WF_LENGTH" "$wf" "$count"
194+
done
151195
152-
echo ""
153-
echo "--------------------------------------"
154-
echo "Total runs affected: $TOTAL_AFFECTED"
196+
printf "%-*s-+-%14s\n" "$MAX_WF_LENGTH" "$(printf '%.0s-' $(seq 1 $MAX_WF_LENGTH))" "--------------"
197+
printf "%-*s | %14s\n" "$MAX_WF_LENGTH" "TOTAL" "$TOTAL_AFFECTED"
155198
156199
if [ "$MODE" = "dry run" ]; then
157-
echo "Dry run complete. No runs were deleted."
200+
printf "Dry run complete. No runs were deleted.\n"
158201
else
159-
echo "Cleanup complete."
202+
printf "Cleanup complete.\n"
160203
fi

0 commit comments

Comments
 (0)