From 904f0fe5227bd987d55319e89a38b4b8f046998c Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 18 Oct 2026 00:00:06 -0400 Subject: [PATCH] Release 0.13.1: retry stapler validate on Apple network errors 0.13.0's macOS release job failed twice at `stapler validate` right after a successful notarization and staple: the CloudKit ticket lookup lost its connection (NSURLErrorDomain -1005, Error 68). Retry the validate up to four times with a growing pause; a missing or bad ticket still fails. Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 56 +++++++++++++++++++------------------- Cargo.toml | 2 +- packaging/macos/package.sh | 19 +++++++++++-- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d33e0ad7..a41f608e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4512,7 +4512,7 @@ dependencies = [ [[package]] name = "vectorcraft" -version = "0.13.0" +version = "0.13.1" dependencies = [ "arboard", "block2 0.6.2", @@ -4547,7 +4547,7 @@ dependencies = [ [[package]] name = "vectorcraft-affinity" -version = "0.13.0" +version = "0.13.1" dependencies = [ "crc32fast", "flate2", @@ -4558,7 +4558,7 @@ dependencies = [ [[package]] name = "vectorcraft-brush" -version = "0.13.0" +version = "0.13.1" dependencies = [ "kurbo 0.13.1", "serde", @@ -4570,7 +4570,7 @@ dependencies = [ [[package]] name = "vectorcraft-cad" -version = "0.13.0" +version = "0.13.1" dependencies = [ "image", "kurbo 0.13.1", @@ -4586,7 +4586,7 @@ dependencies = [ [[package]] name = "vectorcraft-cli" -version = "0.13.0" +version = "0.13.1" dependencies = [ "log", "objc2-core-foundation", @@ -4608,7 +4608,7 @@ dependencies = [ [[package]] name = "vectorcraft-color" -version = "0.13.0" +version = "0.13.1" dependencies = [ "kurbo 0.13.1", "moxcms", @@ -4620,7 +4620,7 @@ dependencies = [ [[package]] name = "vectorcraft-doc" -version = "0.13.0" +version = "0.13.1" dependencies = [ "hayro-ccitt", "image", @@ -4638,7 +4638,7 @@ dependencies = [ [[package]] name = "vectorcraft-effects" -version = "0.13.0" +version = "0.13.1" dependencies = [ "image", "kurbo 0.13.1", @@ -4654,7 +4654,7 @@ dependencies = [ [[package]] name = "vectorcraft-engine" -version = "0.13.0" +version = "0.13.1" dependencies = [ "craft-docpath", "crc32fast", @@ -4692,7 +4692,7 @@ dependencies = [ [[package]] name = "vectorcraft-eps" -version = "0.13.0" +version = "0.13.1" dependencies = [ "fax", "flate2", @@ -4715,7 +4715,7 @@ dependencies = [ [[package]] name = "vectorcraft-format" -version = "0.13.0" +version = "0.13.1" dependencies = [ "flate2", "proptest", @@ -4730,7 +4730,7 @@ dependencies = [ [[package]] name = "vectorcraft-geom" -version = "0.13.0" +version = "0.13.1" dependencies = [ "kurbo 0.13.1", "proptest", @@ -4742,7 +4742,7 @@ dependencies = [ [[package]] name = "vectorcraft-mcp" -version = "0.13.0" +version = "0.13.1" dependencies = [ "image", "log", @@ -4761,7 +4761,7 @@ dependencies = [ [[package]] name = "vectorcraft-metafile" -version = "0.13.0" +version = "0.13.1" dependencies = [ "image", "kurbo 0.13.1", @@ -4775,7 +4775,7 @@ dependencies = [ [[package]] name = "vectorcraft-pathops" -version = "0.13.0" +version = "0.13.1" dependencies = [ "kurbo 0.13.1", "linesweeper", @@ -4787,7 +4787,7 @@ dependencies = [ [[package]] name = "vectorcraft-pdf" -version = "0.13.0" +version = "0.13.1" dependencies = [ "aes", "craft-pdf", @@ -4817,7 +4817,7 @@ dependencies = [ [[package]] name = "vectorcraft-plugins" -version = "0.13.0" +version = "0.13.1" dependencies = [ "serde", "serde_json", @@ -4831,7 +4831,7 @@ dependencies = [ [[package]] name = "vectorcraft-render" -version = "0.13.0" +version = "0.13.1" dependencies = [ "flate2", "gif", @@ -4858,14 +4858,14 @@ dependencies = [ [[package]] name = "vectorcraft-scriptcheck" -version = "0.13.0" +version = "0.13.1" dependencies = [ "proptest", ] [[package]] name = "vectorcraft-svg" -version = "0.13.0" +version = "0.13.1" dependencies = [ "craft-docpath", "flate2", @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "vectorcraft-testkit" -version = "0.13.0" +version = "0.13.1" dependencies = [ "fax", "image", @@ -4908,7 +4908,7 @@ dependencies = [ [[package]] name = "vectorcraft-text" -version = "0.13.0" +version = "0.13.1" dependencies = [ "harfrust 0.13.3", "icu_segmenter", @@ -4928,7 +4928,7 @@ dependencies = [ [[package]] name = "vectorcraft-three-d" -version = "0.13.0" +version = "0.13.1" dependencies = [ "vectorcraft-geom", "vectorcraft-pathops", @@ -4936,7 +4936,7 @@ dependencies = [ [[package]] name = "vectorcraft-tools" -version = "0.13.0" +version = "0.13.1" dependencies = [ "image", "kurbo 0.13.1", @@ -4952,7 +4952,7 @@ dependencies = [ [[package]] name = "vectorcraft-trace" -version = "0.13.0" +version = "0.13.1" dependencies = [ "image", "kurbo 0.13.1", @@ -4964,7 +4964,7 @@ dependencies = [ [[package]] name = "vectorcraft-ui-egui" -version = "0.13.0" +version = "0.13.1" dependencies = [ "craft-ui", "egui", @@ -4998,7 +4998,7 @@ dependencies = [ [[package]] name = "vectorcraft-web" -version = "0.13.0" +version = "0.13.1" dependencies = [ "eframe", "egui", @@ -6108,7 +6108,7 @@ checksum = "9440ea3e5aeabb0ac63af70daf835274065238cdd0cec83418f417eae38bacee" [[package]] name = "xtask" -version = "0.13.0" +version = "0.13.1" dependencies = [ "serde_json", ] diff --git a/Cargo.toml b/Cargo.toml index 47f55c45c..9e407ece6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ members = ["crates/*", "apps/*", "xtask"] default-members = ["crates/*", "apps/vectorcraft", "apps/vectorcraft-cli", "xtask"] [workspace.package] -version = "0.13.0" +version = "0.13.1" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.95" diff --git a/packaging/macos/package.sh b/packaging/macos/package.sh index a86071275..4d806b08e 100755 --- a/packaging/macos/package.sh +++ b/packaging/macos/package.sh @@ -97,6 +97,21 @@ notarize() { fi } +# `stapler validate` looks the ticket up in Apple's CloudKit, and a dropped connection there +# (NSURLErrorDomain -1005, "Error 68") fails it although the staple worked. Retry with a pause; a +# missing or bad ticket still fails every try. +validate_stapled() { + local try + for try in 1 2 3 4; do + xcrun stapler validate "$1" && return 0 + [ "$try" = 4 ] && break + echo "stapler validate failed (try $try of 4); retrying in $((try * 20)) s" >&2 + sleep $((try * 20)) + done + echo "error: stapler validate $(basename "$1") failed 4 times" >&2 + exit 1 +} + # ---- VectorCraft.app ---------------------------------------------------------------------------- echo "==> assembling $APP" mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" @@ -121,7 +136,7 @@ if [ "$NOTARIZE" = 1 ]; then ditto -c -k --keepParent "$APP" "$WORK/VectorCraft-notarize.zip" notarize "$WORK/VectorCraft-notarize.zip" xcrun stapler staple "$APP" - xcrun stapler validate "$APP" + validate_stapled "$APP" spctl --assess --type execute -vvv "$APP" fi @@ -171,7 +186,7 @@ hdiutil_retry detach detach "$MOUNT" >/dev/null if [ "$NOTARIZE" = 1 ]; then notarize "$DMG" xcrun stapler staple "$DMG" - xcrun stapler validate "$DMG" + validate_stapled "$DMG" spctl --assess --type open --context context:primary-signature -vvv "$DMG" fi