Skip to content

verify-assets reads codesign's output before searching it - #99

Merged
closer-claudio merged 1 commit into
mainfrom
claudio/20261110-verify-pipe
Nov 10, 2026
Merged

closer-claudio merged 1 commit into
mainfrom
claudio/20261110-verify-pipe

Conversation

@closer-claudio

Copy link
Copy Markdown
Contributor

🎯 Why

v10.6.1.5's release run (https://github.com/forkcloser/openssh/actions/runs/42769279380) signed every binary with the Developer ID identity, hardened runtime and timestamp, passed the smoke test and packaged; its publish job then refused scp as "not signed as org.forkcloser.scp" one line after apple-verify-signed had read its Developer ID signature. verify-assets piped codesign -d -v into grep -q, which closes the pipe at its match; codesign dies of SIGPIPE on its next write and pipefail makes the pipeline fail. Nothing was published: goreleaser stopped in its before hook.

🛠️ What

.justfile, verify-assets: codesign's output is captured first and searched after, the shape apple-verify-signed and the smoke test use; a failing codesign keeps its message.

🧪 How

V: on this machine the pipe form has codesign exit 141 in 100 runs of 100 on /bin/ls; the captured form cannot be killed by the reader. V: a fabricated archive of ad hoc org.forkcloser.* binaries with an SPDX document passes just verify-assets; just lint green. The next tag runs the lane again.

v10.6.1.5's publish job refused scp as "not signed as
org.forkcloser.scp" right after apple-verify-signed had read its
Developer ID signature: verify-assets piped `codesign -d -v` into
`grep -q`, which closes the pipe at its match, and codesign, still
writing the longer Developer ID output, died of SIGPIPE, which
pipefail reports as the pipeline's failure. The sign job had passed
the same check through a file (test-binary.sh) on the same binaries.
The output is captured first and searched after, as the shared verdict
does. On this machine the pipe form has codesign exit 141, SIGPIPE,
in a hundred runs of a hundred on /bin/ls; the captured form cannot.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: closer-claudio <claudio@farcloser.world>
@closer-claudio closer-claudio added the internal Changes nothing for a consumer: tooling, CI, maintainers' docs; left out of the notes label Nov 10, 2026
@closer-claudio

Copy link
Copy Markdown
Contributor Author

Reviewed at 5a479c7

@closer-claudio
closer-claudio merged commit b3aad11 into main Nov 10, 2026
8 checks passed
@closer-claudio
closer-claudio deleted the claudio/20261110-verify-pipe branch November 10, 2026 06:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal Changes nothing for a consumer: tooling, CI, maintainers' docs; left out of the notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants