Retry the registry checks before giving up on them
Review pushed back on two things in the publish checks. The crates.io User-Agent spelled out getsigit/sigit twice, which goes stale the moment the repo moves. GITHUB_REPOSITORY is already in the environment and says the same thing. Failing the job on an unexpected status also turned a blip at the registry into a failed release. All three curl checks now retry three times with a short delay, so a timeout or a 5xx costs a few seconds. A status that survives the retries is a real answer and still stops the job.
paydii committed
Sep 4, 2026 at 16:08 UTC
ee28e6ade4c84f16d53260f9953b81d05053d480
3 files changed
+7
-2
.github/workflows/release-crates.yml
+4
-1
@@ -70,8 +70,11 @@ jobs:
70
# Branch on the status code rather than on curl's exit status, so an
71
# answer we do not understand stops the job instead of quietly
72
# degrading into that same failure.
73
+ # Retry first, so a timeout or a 5xx costs a few seconds instead of
74
+ # the whole release.
75
STATUS=$(curl -sS -o /dev/null -w '%{http_code}' \
74
- -H "User-Agent: getsigit/sigit release workflow (github.com/getsigit/sigit)" \
76
+ --retry 3 --retry-delay 2 --retry-all-errors \
77
+ -H "User-Agent: ${GITHUB_REPOSITORY} release workflow (https://github.com/${GITHUB_REPOSITORY})" \
78
"https://crates.io/api/v1/crates/sigit/${VERSION}")
79
80
case "$STATUS" in
.github/workflows/release-nuget.yml
+2
-1
@@ -304,7 +304,8 @@ jobs:
304
# means the package itself is not on NuGet, which is the first
305
# release and a real "not published".
306
index=$(mktemp)
307
- STATUS=$(curl -sS -o "${index}" -w '%{http_code}' "${package_index_url}")
307
+ STATUS=$(curl -sS -o "${index}" -w '%{http_code}' \
308
+ --retry 3 --retry-delay 2 --retry-all-errors "${package_index_url}")
309
310
case "$STATUS" in
311
200)
.github/workflows/release-pypi.yml
+1
@@ -186,6 +186,7 @@ jobs:
186
# blocked request would read as "not published yet" and send the
187
# publish below into a version that is already there.
188
STATUS=$(curl -sS -o /dev/null -w '%{http_code}' \
189
+ --retry 3 --retry-delay 2 --retry-all-errors \
190
"https://pypi.org/pypi/sigit-code/${RELEASE_VERSION}/json")
191
192
case "$STATUS" in