ci: align Apple signing secrets with the org-provided names, and stop signing the weekly build - #263
Merged
Merged
Conversation
The organization-level secrets were provisioned under different names than the ones the workflows assumed, so every signing step would have silently no-opped: each treats an empty secret as "not configured", skips, and returns success. Only the `secrets.*` right-hand sides change; the env var names the release scripts read (APPLE_SIGNING_IDENTITY, APPLE_API_*) stay as they are. SS_APPLE_CERTIFICATE -> APPLE_DEV_ID_APP_CERT SS_APPLE_CERTIFICATE_PASSWORD -> APPLE_DEV_ID_APP_CERT_PASS SS_APPLE_SIGNING_IDENTITY -> APPLE_DEV_ID_APP_NAME SS_APPLE_API_ISSUER -> ASC_API_ISSUER_ID SS_APPLE_API_KEY -> ASC_API_KEY_ID SS_APPLE_API_KEY_BASE64 -> ASC_API_KEY_PASS ASC_API_KEY_PASS holds the base64 of the .p8 private key despite its name, so it maps to the key file the notarization step decodes -- not to a passphrase. weekly.yml carries the same keychain and signing steps as release.yml and is renamed alongside it, so the weekly macOS/iOS builds keep being signed. TMP_KC_PASS is deliberately left unused: the temporary keychain password is still generated per run with `openssl rand`, which is strictly better than sharing one value across runs. Matches the same change in SpriteStudio-SDK and SSConverterGUI.
The weekly build is continuous verification of our own tree, not something we distribute, so it has no business handling the Developer ID certificate. Signing belongs to release.yml alone, and keeping the certificate out of a scheduled job that runs unattended every week is the smaller attack surface. Drops the "Set up signing keychain" step, the APPLE_SIGNING_IDENTITY hand-off to the macOS/iOS build steps, and the now-unused KEYCHAIN_PATH workflow env. The release scripts already no-op on signing when APPLE_SIGNING_IDENTITY is absent, so the builds themselves are unchanged -- their artifacts are simply unsigned, which is what the step's `continue-on-error: true` was tolerating anyway.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two related changes to how this repo handles the Apple Developer ID certificate.
1.
release.yml— rename the secrets. They were provisioned at the organization level under different names than the workflow assumed. This mattered more than a rename usually does: every signing step treats an empty secret as "not configured", skips its work, and returns success. With the names mismatched, a fully green release run would still have produced unsigned macOS/iOS GDExtension frameworks.SS_APPLE_CERTIFICATEAPPLE_DEV_ID_APP_CERTSS_APPLE_CERTIFICATE_PASSWORDAPPLE_DEV_ID_APP_CERT_PASSSS_APPLE_SIGNING_IDENTITYAPPLE_DEV_ID_APP_NAMESS_APPLE_API_ISSUERASC_API_ISSUER_IDSS_APPLE_API_KEYASC_API_KEY_IDSS_APPLE_API_KEY_BASE64ASC_API_KEY_PASSOnly the
secrets.*right-hand sides change. The env var names the release scripts read (APPLE_SIGNING_IDENTITY,APPLE_API_ISSUER,APPLE_API_KEY,APPLE_API_KEY_PATH) are untouched, sorelease-gdextension-macos.shandrelease-gdextension-ios.shkeep working unchanged locally. The script comments that named the old secrets are updated to match.2.
weekly.yml— stop signing entirely. The weekly build is continuous verification of our own tree, not something we distribute, so it has no business handling the Developer ID certificate. Signing belongs torelease.ymlalone, and keeping the certificate out of a scheduled job that runs unattended every week is the smaller attack surface. This drops the "Set up signing keychain" step, theAPPLE_SIGNING_IDENTITYhand-off to the macOS/iOS build steps, and the now-unusedKEYCHAIN_PATHworkflow env.The builds themselves are unchanged — the scripts already no-op on signing when
APPLE_SIGNING_IDENTITYis absent, so the artifacts are simply unsigned. That was already the tolerated outcome: the keychain step carriedcontinue-on-error: truewith the comment 「Weeklyでは署名できなくても通す」.Notes on the mapping
ASC_API_KEY_PASSholds the base64 of the.p8private key, despite what its name suggests, so it maps to the key file the notarization step decodes — not to a passphrase. Worth confirming on the first signed run.TMP_KC_PASSis deliberately unused.release.ymlstill generates the temporary keychain password per run withopenssl rand, which is strictly better than sharing one value across runs. A comment records why.Verification
Both workflows parse as valid YAML. No
SS_APPLE_*references remain in the tree, and after the second commitweekly.ymlhas nosecrets.,KEYCHAINorcodesignreferences left at all.The signing itself cannot be verified from this branch — release only runs on
workflow_dispatch, and org secrets are not exposed to a non-permitted repository. Two things to check after merge:SSPlayerForGodotis on the repository access list of the org secrets. This repo lives under theSpriteStudioorg, so thecri-middlewareorg secrets must be shared with it explicitly — the most likely thing to still be missing.