Commit 1b5fc1479a8 for nodejs
commit 1b5fc1479a85aa6174c67e239fad81da92a25b0a
Author: Ryan Aslett <ryanaslett@users.noreply.github.com>
Date: Tue Oct 20 06:48:24 2026 -0700
tools: retry Gatekeeper check and stapling after notarization
Apple's ticket service can lag behind notarytool reporting
"Accepted", which makes the spctl assessment fail with
"source=Unnotarized Developer ID" even though the package was
notarized. Retry spctl and stapler with exponential backoff
(up to ~7.5 minutes) before failing, and fail the script if
stapling does not succeed instead of ignoring its exit status.
Refs: https://github.com/nodejs/build/issues/4527
Signed-off-by: Ryan Aslett <raslett@linuxfoundation.org>
PR-URL: https://github.com/nodejs/node/pull/66855
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
diff --git a/tools/osx-notarize.sh b/tools/osx-notarize.sh
index d860074bf7d..06ba801c9e8 100755
--- a/tools/osx-notarize.sh
+++ b/tools/osx-notarize.sh
@@ -48,12 +48,31 @@ else
exit 1
fi
-if ! xcrun spctl --assess --type install --context context:primary-signature --ignore-cache --verbose=2 "node-$pkgid.pkg"; then
+# The notarization ticket can take a while to become available from Apple's
+# servers after notarytool reports "Accepted", so retry with backoff.
+retry() {
+ delay=15
+ attempt=1
+ while ! "$@"; do
+ if [ "$attempt" -ge 6 ]; then
+ return 1
+ fi
+ echo "Attempt $attempt failed, retrying in ${delay}s..."
+ sleep "$delay"
+ attempt=$((attempt + 1))
+ delay=$((delay * 2))
+ done
+}
+
+if ! retry xcrun spctl --assess --type install --context context:primary-signature --ignore-cache --verbose=2 "node-$pkgid.pkg"; then
echo "error: Signature will not be accepted by Gatekeeper!" 1>&2
exit 1
else
echo "Verification was successful."
fi
-xcrun stapler staple "node-$pkgid.pkg"
+if ! retry xcrun stapler staple "node-$pkgid.pkg"; then
+ echo "error: Stapling node-$pkgid.pkg failed." 1>&2
+ exit 1
+fi
echo "Stapler was successful."
\ No newline at end of file