Skip to content

Commit 5044258

Browse files
committed
Add tool to bury drafts for failed releases
1 parent a2661f8 commit 5044258

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
11
# servo-nightly-builds
22
Repository to host Servo nightly builds using Github Releases.
3+
4+
## How to bury drafts for failed releases
5+
```sh
6+
$ tools/bury-old-drafts.sh servo/servo-nightly-builds
7+
```

tools/bury-old-drafts.sh

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#!/usr/bin/env zsh
2+
# usage: tools/bury-old-drafts.sh
3+
# requires: zsh, gh, jq, rg
4+
set -euo pipefail
5+
missing() { >&2 echo "fatal: $1 not found"; exit 1; }
6+
> /dev/null command -v gh || missing gh
7+
> /dev/null command -v jq || missing jq
8+
> /dev/null command -v rg || missing rg
9+
10+
set --
11+
org_repo_slug=servo/servo-nightly-builds
12+
now=$(date +\%s)
13+
result=$(mktemp)
14+
page=1
15+
while :; do
16+
gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" \
17+
/repos/"$org_repo_slug"'/releases?per_page=100&page='$page > $result
18+
length=$(< $result jq length)
19+
if [ $length -eq 0 ]; then
20+
break
21+
fi
22+
for draft in $(< $result jq '.[] | select(.draft) | .id'); do
23+
created_at=$(< $result jq -r '.[] | select(.id == '"$draft"') | .created_at')
24+
created_at=$(date +\%s --date="$created_at")
25+
age=$((now - created_at))
26+
# Ignore young drafts, because their release builds may still be running
27+
if [ $age -lt 86400 ]; then
28+
>&2 echo "Warning: ignoring release $draft, which is only $age seconds old"
29+
else
30+
set -- "$@" "$draft"
31+
fi
32+
done
33+
>&2 echo "Page $page has $length releases; found $# drafts so far"
34+
page=$((page+1))
35+
done
36+
for draft; do
37+
# Mark as prerelease and unmark as draft
38+
set -- PATCH "/repos/$org_repo_slug/releases/$draft" -F prerelease=true -F draft=false
39+
echo "$@"
40+
if ! gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" \
41+
--method "$@" > $result; then
42+
< $result jq
43+
>&2 printf 'Delete release? [y/N] '
44+
read -r yn
45+
if [ "$yn" = y ]; then
46+
set -- DELETE "/repos/$org_repo_slug/releases/$draft"
47+
echo "$@"
48+
gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" \
49+
--method "$@"
50+
fi
51+
fi
52+
done

0 commit comments

Comments
 (0)