DEV Community

Jackson
Jackson

Posted on

TIL: a green checkmark in CI doesn't mean what you think it means

I spent an afternoon convinced our signing setup was broken because TestFlight never showed a new build. CI was green. Archive step: success. Export step: success. Upload step: success. Three green checkmarks and nothing on the other end.

Turns out xcodebuild and altool/xcrun notarytool can report a successful upload while Apple's backend rejects the binary asynchronously, after your CI job has already exited. The failure happens in App Store Connect's own processing queue, which your pipeline never checks and never will unless you add a step that polls for it.

The fix is almost insultingly small: query App Store Connect's build status after upload instead of trusting the upload command's own exit code. But the real lesson generalizes past Apple's toolchain. A green checkmark only tells you the command you ran returned 0. It says nothing about whether the thing downstream that actually receives your output agreed to accept it. I've since started asking, for any pipeline step, "what's actually confirming success here, the tool I called or the system it called on my behalf?" Usually it's the former, and usually that's the gap.

Anyone else have a CI success that turned out to be lying to a downstream system rather than to you directly?

Top comments (0)