Skip to content

Commit b00fbfe

Browse files
Update make-update-github-releases.yml
Signed-off-by: LUIZ HAMILTON ROBERTO DA SILVA <[email protected]>
1 parent 3f84e6e commit b00fbfe

1 file changed

Lines changed: 51 additions & 42 deletions

File tree

.github/workflows/make-update-github-releases.yml

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
name: Make and Update GitHub Releases (Cleanup + Rebuild)
1+
name: Make and Update GitHub Releases (Weekly Cleanup + Rebuild)
22

33
on:
44
workflow_dispatch: {}
55
schedule:
6-
- cron: "0 0 * * *" # daily 00:00 UTC
6+
# Weekly (Sunday 00:00 UTC)
7+
- cron: "0 0 * * 0"
78

8-
# Prevent overlapping runs (schedule + manual, or long matrices)
99
concurrency:
1010
group: releases-cleanup-rebuild
1111
cancel-in-progress: false
@@ -15,15 +15,14 @@ permissions:
1515

1616
jobs:
1717
cleanup-github-releases:
18-
name: 🧹 Cleanup ALL Old Managed Releases & Tags
18+
name: 🧹 Cleanup Old Managed Releases & Tags (2026*)
1919
runs-on: ubuntu-latest
2020
timeout-minutes: 25
2121

2222
env:
2323
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2424

25-
# These prefixes define what this workflow "owns".
26-
# Anything whose tag starts with one of these prefixes will be deleted.
25+
# Workflow "ownership" prefixes (only these will be touched)
2726
MANAGED_TAG_PREFIXES: >-
2827
AD-SSO-APIs-Integration
2928
All-Repository-Files
@@ -35,6 +34,13 @@ jobs:
3534
READMEs-Files-Package
3635
SysAdmin-Tools
3736
37+
# Matches your requested "2026xxyyzzwwkk" style (2026 + extra digits).
38+
# Also covers your current pattern: 2026MMDD (8 digits) + optional "-<sha>"
39+
# Examples matched:
40+
# SysAdmin-Tools-20260206-6b43527
41+
# SysAdmin-Tools-20260206010203-6b43527
42+
MANAGED_2026_VERSION_REGEX: '^2026[0-9]{4,10}(-[0-9a-f]{7})?$'
43+
3844
steps:
3945
- name: 🧰 Install Dependencies (gh)
4046
shell: bash
@@ -49,7 +55,7 @@ jobs:
4955
set -euo pipefail
5056
gh auth status
5157
52-
- name: 🗑️ Delete ALL matching Releases (all pages)
58+
- name: 🗑️ Delete ALL matching Releases (tag prefix + 2026 version)
5359
shell: bash
5460
run: |
5561
set -euo pipefail
@@ -62,45 +68,39 @@ jobs:
6268
for p in ${MANAGED_TAG_PREFIXES}; do
6369
echo " - $p"
6470
done
71+
echo "Version regex: ${MANAGED_2026_VERSION_REGEX}"
6572
66-
# List releases via API (paginate), extract tag_name, delete if prefix matches.
67-
# This deletes releases regardless of how many you have (no fixed limit).
68-
page=1
6973
deleted=0
7074
71-
while :; do
72-
# 100 per page (max)
73-
json="$(gh api --paginate "repos/${owner}/${repo}/releases?per_page=100&page=${page}" || true)"
74-
# If empty array or empty response -> stop
75-
if [[ -z "${json}" ]] || [[ "${json}" == "[]" ]]; then
76-
break
77-
fi
78-
79-
# Extract "tag_name" lines safely
80-
mapfile -t tags < <(printf '%s' "${json}" | gh api --silent --input - --jq '.[].tag_name' 2>/dev/null || true)
81-
82-
# If no tags returned, stop
83-
if [[ "${#tags[@]}" -eq 0 ]]; then
84-
break
85-
fi
75+
# Stream tag_name for ALL releases (paginated)
76+
mapfile -t release_tags < <(
77+
gh api --paginate "repos/${owner}/${repo}/releases?per_page=100" --jq '.[].tag_name'
78+
)
8679
87-
for tag in "${tags[@]}"; do
80+
if [[ "${#release_tags[@]}" -eq 0 ]]; then
81+
echo "No releases found."
82+
else
83+
for tag in "${release_tags[@]}"; do
8884
for prefix in ${MANAGED_TAG_PREFIXES}; do
89-
if [[ "$tag" == "${prefix}"* ]]; then
90-
echo "Deleting release: $tag"
91-
gh release delete "$tag" -y || true
92-
deleted=$((deleted + 1))
85+
# Expected tag formats:
86+
# <prefix>-<version>
87+
# where <version> begins with 2026...
88+
if [[ "$tag" == "${prefix}-"* ]]; then
89+
ver="${tag#${prefix}-}"
90+
if [[ "$ver" =~ ${MANAGED_2026_VERSION_REGEX} ]]; then
91+
echo "Deleting release: ${tag}"
92+
gh release delete "${tag}" -y || true
93+
deleted=$((deleted + 1))
94+
fi
9395
break
9496
fi
9597
done
9698
done
97-
98-
page=$((page + 1))
99-
done
99+
fi
100100
101101
echo "Deleted releases: ${deleted}"
102102
103-
- name: 🗑️ Delete ALL matching Tags (all pages)
103+
- name: 🗑️ Delete ALL matching Tags (tag prefix + 2026 version)
104104
shell: bash
105105
run: |
106106
set -euo pipefail
@@ -110,16 +110,23 @@ jobs:
110110
111111
deleted=0
112112
113-
# List all tags via API (paginate). Delete any tag that matches our prefixes.
114-
gh api --paginate "repos/${owner}/${repo}/tags?per_page=100" --jq '.[].name' | while read -r tag; do
115-
[[ -z "${tag}" ]] && continue
116-
for prefix in ${MANAGED_TAG_PREFIXES}; do
117-
if [[ "$tag" == "${prefix}"* ]]; then
118-
echo "Deleting tag ref: refs/tags/${tag}"
119-
# Delete tag reference
113+
# Use git/matching-refs for reliable pagination over tag refs
114+
for prefix in ${MANAGED_TAG_PREFIXES}; do
115+
echo "Scanning tags for prefix: ${prefix}-"
116+
117+
mapfile -t refs < <(
118+
gh api --paginate "repos/${owner}/${repo}/git/matching-refs/tags/${prefix}-" --jq '.[].ref'
119+
)
120+
121+
for ref in "${refs[@]}"; do
122+
# ref like: refs/tags/<tagname>
123+
tag="${ref#refs/tags/}"
124+
ver="${tag#${prefix}-}"
125+
126+
if [[ "$ver" =~ ${MANAGED_2026_VERSION_REGEX} ]]; then
127+
echo "Deleting tag ref: ${ref}"
120128
gh api -X DELETE "repos/${owner}/${repo}/git/refs/tags/${tag}" >/dev/null 2>&1 || true
121129
deleted=$((deleted + 1))
122-
break
123130
fi
124131
done
125132
done
@@ -183,6 +190,7 @@ jobs:
183190
[[ -f README.md ]] && cp README.md temp/ || true
184191
[[ -f LICENSE.txt ]] && cp LICENSE.txt temp/ || true
185192
[[ -f LICENSE ]] && cp LICENSE temp/ || true
193+
[[ -f CHANGELOG.md ]] && cp CHANGELOG.md temp/ || true
186194
}
187195
188196
case "$RELEASE_NAME" in
@@ -219,6 +227,7 @@ jobs:
219227
AD-SSO-APIs-Integration)
220228
[[ -d "SysAdmin-Tools/ActiveDirectory-SSO-Integrations" ]] || { echo "::error::Missing dir: SysAdmin-Tools/ActiveDirectory-SSO-Integrations"; exit 1; }
221229
cp -r SysAdmin-Tools/ActiveDirectory-SSO-Integrations/* temp/
230+
copy_root_meta
222231
;;
223232
224233
*)

0 commit comments

Comments
 (0)