Skip to content

Generate the DMG keychain password in the signing step - #15168

Merged
rtibbles merged 1 commit into
learningequality:developfrom
rtibblesbot:issue-15165-11b49b
Aug 8, 2026
Merged

Generate the DMG keychain password in the signing step#15168
rtibbles merged 1 commit into
learningequality:developfrom
rtibblesbot:issue-15165-11b49b

Conversation

@rtibblesbot

@rtibblesbot rtibblesbot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Summary

The macOS DMG job intermittently died during template evaluation, before any step ran — the temporary keychain password was derived from a hash of the entire workspace, and that expression exceeded the 120s GitHub allows. PR builds paid the cost too: the signing step is skipped on them, but an env: expression is evaluated regardless of the step's if:. The password is now generated with openssl rand -base64 32 inside the signing step's run: block, leaving no expression on the job's critical path whose cost scales with workspace size.

References

Fixes #15165. First seen: run 31232428739 / job 93039356939.

Issue criteria, ticked here because this account cannot edit the issue body:

  • No hashFiles( in platform-macos-app-build_dmg.yml — grep exits 1.
  • Password generated in the signing step's run: block — see the diff.
  • PR-triggered DMG build clears template evaluation — Build DMG file / build_dmg SUCCESS on this PR, which resolves the reusable workflow at the PR head.

Reviewer guidance

  • .github/workflows/platform-macos-app-build_dmg.yml:99 — the password is now shell-local to one step and discarded when it ends; check no later step needs to unlock temp.keychain again.
  • The step is if: ${{ inputs.release }}, so PR CI never executes the block — it is first exercised on a release build. Check the security -p "$KEYCHAIN_PASSWORD" calls tolerate the + and / characters base64 can emit.

AI usage

Used Claude Code to move the keychain password out of the env: expression and into the signing step's run: block. Verified with actionlint via prek and a local check that openssl rand -base64 32 yields a single-line value.


@rtibblesbot's comments are generated by an LLM, and should be evaluated accordingly

How was this generated?
  • Ran pre-flight CI checks (lint, format, tests) and verified all pass
  • Rebased onto the target branch and resolved any conflicts
  • Reorganized commit history into clean, logical commits
  • Audited the diff to ensure only issue-relevant files are changed
  • Built PR body from the repository's PR template with evidence blocks
@rtibblesbot

🟡 Waiting for feedback

Last updated: 2026-08-08 08:13 UTC

hashFiles('*') hashed the whole workspace and intermittently exceeded the
120s expression budget, killing the job during template evaluation before
any step ran. The step's `if: ${{ inputs.release }}` did not help — an
`env:` expression is evaluated regardless, so PR builds paid the cost too.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added DEV: dev-ops Continuous integration & deployment SIZE: very small labels Aug 8, 2026
@rtibblesbot
rtibblesbot marked this pull request as ready for review August 8, 2026 08:07

@rtibbles rtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A quick web search suggests no issues with these characters in passwords so this should be fine.

@rtibbles
rtibbles merged commit d8ddade into learningequality:develop Aug 8, 2026
96 checks passed
@rtibblesbot
rtibblesbot deleted the issue-15165-11b49b branch August 8, 2026 16:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DEV: dev-ops Continuous integration & deployment SIZE: very small

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Build DMG intermittently fails: hashFiles('*') times out during template evaluation

2 participants