Skip to content

Fix the signing-identity fallback, and check builds on CI - #6

Merged
Jarvis322 merged 3 commits into
Jarvis322:mainfrom
peechycreation:pr/build-and-ci
Sep 6, 2026
Merged

Jarvis322 merged 3 commits into
Jarvis322:mainfrom
peechycreation:pr/build-and-ci

Conversation

@peechycreation

Copy link
Copy Markdown
Contributor

The bug. build-app.sh runs under set -euo pipefail. When grep finds no "Developer ID Application" line, it exits 1, the assignment takes that status, and the script dies — before the Apple Development fallback the loop was written for. On a machine that has only a development certificate, the script exits 1 right after Build complete with no message, leaving an unsigned, half-assembled bundle in build/. That is what I hit on the first run from a clean clone.

|| true on the substitution lets the loop try the next kind.

The CI. The project had no automated checks, so a release could ship a tree that does not build from a clean checkout. The workflow runs on macos-15: swift build, the test suite, scripts/build-app.sh, and a check that the assembled bundle has its binary, its Info.plist, the SwiftPM resource bundle Bundle.module needs, and a valid signature. The last step reruns compile-strings.sh and fails on a diff, so a catalog edit committed without regenerating the .strings files shows up there rather than as a half-translated menu at runtime.

A runner has no certificate at all, so the bundle step exercises exactly the path the first commit fixes — without it, CI cannot get past Assemble the app bundle.

The machine-wide scan is left off in CI: a runner ships Xcode with its simulator runtimes, so the walk is no quicker there. I tried it — 23 minutes without finishing. The job has a 20-minute ceiling for the same reason.

Green run on my fork, 56 seconds: https://github.com/peechycreation/macos-sysdata/actions/runs/34053096320

`set -e` aborts the script when `grep` finds no "Developer ID
Application" line, so the "Apple Development" fallback the loop was
written for is never reached. On a machine that only has a development
certificate, build-app.sh exits 1 right after "Build complete" with no
message, leaving an unsigned, half-assembled bundle in build/.

Let the substitution fail quietly so the loop can try the next kind.
The project had no automated checks, so a release could ship a build
that does not compile from a clean checkout. This runs on macos-15:
swift build, the test suite with the machine-wide scan enabled (a runner
starts empty, so the walk that is slow locally is quick here),
scripts/build-app.sh, and a check that the assembled bundle has its
binary, its Info.plist, the SwiftPM resource bundle Bundle.module needs
and a valid signature.

The last step reruns compile-strings.sh and fails on a diff, so a catalog
edit committed without regenerating the .strings files is caught here
rather than as a half-translated menu at runtime.

Note: the bundle step needs the signing-identity fix, otherwise
build-app.sh aborts on a runner, which has no certificate at all.
Enabling it was wrong: a GitHub runner ships Xcode with its simulator
runtimes and device support, so the walk is no quicker there than on a
developer Mac. A trial run passed 23 minutes without finishing.

Also gives the job a 20-minute ceiling so a hang costs one job rather
than the six hours a runner will otherwise sit there.
@Jarvis322
Jarvis322 merged commit 48c21bf into Jarvis322:main Sep 6, 2026
Jarvis322 added a commit that referenced this pull request Sep 6, 2026
The workflow from #6 is right, and the signing fix that came with it stays.
But this account's Actions are billing-locked — every run ends with 'the job
was not started because your account is locked due to a billing issue' — so
merging it only put a red cross on main, which is why CI was removed once
already.

It comes back verbatim from #6 the day a run can start.
Jarvis322 added a commit that referenced this pull request Sep 6, 2026
Actions are billing-locked on this account, so the workflow from #6 cannot
start and merging it only put a red cross on main. The checks are worth
having regardless, so they run here instead: build, tests, shellcheck, the
bundle's completeness and signature, that it is universal, and that the
compiled strings match the catalogue.

The release script now calls it rather than repeating a subset of it.
@Jarvis322

Copy link
Copy Markdown
Owner

Merged, and the signing fix is the valuable half — thank you for reporting what it actually looks like from a clean clone, because a script that dies silently right after Build complete and leaves an unsigned bundle behind is worse than one that fails loudly.

The workflow I had to take back out, and it is not a judgement on it.

This account's Actions are billing-locked. Every run ends the same way:

The job was not started because your account is locked due to a billing issue.

That is why the repo had no CI when you found it. Merging the workflow put a red cross on main within a minute, so I removed the file again in 6c80718. It comes back verbatim from this PR the day a run can start.

Your checks were not wasted. They now run locally as scripts/ci.sh — build, tests, shellcheck, the bundle's contents and signature, and the strings-are-current diff, all of them yours — with two additions: it fails if the binary is not universal, and scripts/release.sh calls it, so nothing ships without passing.

Six pull requests, six real problems, one of them a bug the app could not have come back from. That is a better first contribution than this project deserved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants