Repository navigation
Restore Sparkle notarization credentials from Fleet-OPS Infisical - #257
jaywedgeworth22 wants to merge 9 commits into
Conversation
This comment has been minimized.
This comment has been minimized.
🤔 Insufficient Task ContextI found a task linked to this PR, but it only contains minimal information (title only, no description or acceptance criteria). To perform a meaningful business rules validation, I need more details. 🔍 What I need to validate:
💡 How to improve the task context:
|
| printf '::add-mask::%s\n' "${TOKEN//'%'/'%25'}" | ||
|
|
||
| for name in ASC_KEY_ID ASC_ISSUER_ID; do | ||
| val="$( |
There was a problem hiding this comment.
Bypassing the mandatory scripts/infisical-secrets-safe.sh wrapper (Rule [37]) reverts agent-initiated Infisical reads to the unsafe direct-CLI path, so the bare infisical secrets get invocation in .github/workflows/mac-release.yml must be replaced with that wrapper—e.g. scripts/infisical-secrets-safe.sh has "$name" --project "$ASC_INFISICAL_PROJECT_ID" --env prod --path /asc—or, if no get subcommand is exposed, routed through the existing .github/actions/infisical-secrets composite action.
Also found in:
.github/workflows/mac-release.yml:188-188
Kody rule violation: Never mint provider API keys or expose secret values — secret hygiene is binding for every agent
Prompt for LLM
File .github/workflows/mac-release.yml:
Line 168:
Bypassing the mandatory `scripts/infisical-secrets-safe.sh` wrapper (Rule [37]) reverts agent-initiated Infisical reads to the unsafe direct-CLI path, so the bare `infisical secrets get` invocation in `.github/workflows/mac-release.yml` must be replaced with that wrapper—e.g. `scripts/infisical-secrets-safe.sh has "$name" --project "$ASC_INFISICAL_PROJECT_ID" --env prod --path /asc`—or, if no `get` subcommand is exposed, routed through the existing `.github/actions/infisical-secrets` composite action.
**Also found in:**
- `.github/workflows/mac-release.yml:188-188`
Talk to Kody by mentioning @kody
Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction.
|
|
||
| - name: Load ASC credentials (Fleet-OPS prod /asc) | ||
| if: github.event_name != 'pull_request' | ||
| env: |
There was a problem hiding this comment.
Hard-coding Infisical project UUIDs into the public .github/workflows/mac-release.yml violates Rule [60] (attack-map identifiers belong in the private jaywedgeworth22/fleet-ops repo), and the same UUID is interpolated into job logs on lines 174 and 194, leaking the value on every failed notarization. Source the ID from a private-ops-registered secret (e.g. ${{ secrets.FLEET_OPS_ASC_PROJECT_ID }}) and apply the same treatment to any per-env override.
Also found in:
.github/workflows/mac-release.yml:168-168.github/workflows/mac-release.yml:188-188
Kody rule violation: Never commit, print, or expose secrets — use safe secret tooling
ASC_INFISICAL_PROJECT_ID: ${{ secrets.FLEET_OPS_ASC_PROJECT_ID }}Prompt for LLM
File .github/workflows/mac-release.yml:
Line 121:
Hard-coding Infisical project UUIDs into the public `.github/workflows/mac-release.yml` violates Rule [60] (attack-map identifiers belong in the private `jaywedgeworth22/fleet-ops` repo), and the same UUID is interpolated into job logs on lines 174 and 194, leaking the value on every failed notarization. Source the ID from a private-ops-registered secret (e.g. `${{ secrets.FLEET_OPS_ASC_PROJECT_ID }}`) and apply the same treatment to any per-env override.
**Also found in:**
- `.github/workflows/mac-release.yml:168-168`
- `.github/workflows/mac-release.yml:188-188`
Suggested Code:
ASC_INFISICAL_PROJECT_ID: ${{ secrets.FLEET_OPS_ASC_PROJECT_ID }}
Talk to Kody by mentioning @kody
Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction.
Kody Review CompleteGreat news! 🎉 Keep up the excellent work! 🚀
|
| Options | Enabled |
|---|---|
| Bug | ✅ |
| Performance | ✅ |
| Security | ✅ |
| Business Logic | ✅ |
Summary
Restores Sparkle release notarization by sourcing the App Store Connect credentials from Fleet-OPS Infisical (
prod/asc) instead of the stale repositoryASC_*secrets, and adds a read-only notarization preflight plus credential-free contract tests.What changed
.github/workflows/mac-release.ymlASC_KEY_ID,ASC_ISSUER_ID, andASC_KEY_P8from the job environment, so the workflow no longer readssecrets.ASC_*.SPARKLE_ED_PRIVATE_KEYis now only supplied outside pull-request runs.INFISICAL_UNIVERSAL_AUTH_CLIENT_ID/_SECRET, falling back toINFISICAL_CLIENT_ID/_SECRET, and fails if neither is configured.ASC_KEY_IDandASC_ISSUER_ID, rejects empty or multiline values, masks them, and writes them toGITHUB_ENV.ASC_KEY_P8and pipes it toscripts/ios-stage-asc-key.sh, so only a mode-600 file path (ASC_KEY_PATH) crosses the step boundary.ASC_KEY_PATHand to reject a missing or empty staged key file.NOTARY_KEY_PATH,NOTARY_KEY_ID, andNOTARY_ISSUER_IDfrom the loadedenv.ASC_*values.$ASC_KEY_PATHinstead of a hardcoded temporary key.assets/AppIcon.icns,scripts/check-notary-access.sh,scripts/mac-release-workflow.test.mjs, andscripts/ios-stage-asc-key.sh.node --test scripts/mac-release-workflow.test.mjs) before the Swift CI wait.scripts/check-notary-access.sh(new)ASC_KEY_ID,ASC_ISSUER_ID, and a non-emptyASC_KEY_PATH.xcrun notarytool historyand reports only a fixed failure category (authentication rejected, service access rejected, connectivity failure, key format/issuer failure, or unclassified) without printing Apple's raw response or credential values.scripts/mac-release-workflow.test.mjs(new)secrets.ASC_*, uses the fleet loader, passes the staged key path through, cleans up the key, blocks PR notarization/publication, and orders the preflight before the release build.check-notary-access.shcovering success, sanitized failure categories, raw-error withholding, temporary-file cleanup, and failure when credentials are missing before Apple is invoked.docs/AUTO-UPDATE.mdprod/asc, the staging script, and the read-only notarization preflight.Open review findings
infisical secrets getcall was added to a public workflow; it should be routed throughscripts/infisical-secrets-safe.sh.Summary
Updates the failure diagnostics in the macOS release workflow so that missing Sparkle/notarization credential errors point to the Fleet-OPS prod
/ascpath rather than referencing the internal Infisical project ID variable.Changes
/asc: it now instructs that the CI identity must have read access to Fleet-OPS prod/asc, dropping the reference to${ASC_INFISICAL_PROJECT_ID}.Impact