Skip to content

Register local signed DMG manifest workflow - #399

Merged
100yenadmin merged 3 commits into
mainfrom
codex/register-local-signed-manifest-workflow
Jun 24, 2026
Merged

Register local signed DMG manifest workflow#399
100yenadmin merged 3 commits into
mainfrom
codex/register-local-signed-manifest-workflow

Conversation

@100yenadmin

@100yenadmin 100yenadmin commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Summary

  • register evaos-beta-local-signed-dmg-manifest.yml on the default branch
  • keeps the local-signed DMG trust gate dispatchable while the release run itself targets evaos/beta-rc-20260612

Why

GitHub only exposes workflow_dispatch workflows that exist on the default branch. The macOS arm64 release promotion needs this workflow to register the trusted manifest for the locally finalized signed/notarized/stapled DMG.

Validation

  • git diff --check
  • actionlint .github/workflows/evaos-beta-local-signed-dmg-manifest.yml

Fixes #395 release-gate dispatch for evaos-beta-v2.1.22-evaos-beta.0.

Summary by CodeRabbit

  • New Features
    • Added a manually triggered release workflow to generate and register a trusted local-signed DMG fallback manifest for beta prereleases.
    • The workflow validates inputs, verifies and signs the manifest, and publishes it as an artifact attached to the prerelease.
  • Bug Fixes
    • Improved beta release asset and metadata verification to properly support the macos-arm64 release target, with updated identity matching and validation rules.
  • Improvements
    • Refreshed platform-specific asset selection and Web-CLI verification behavior for macos-arm64.

@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4eaa546d-eb63-4216-ae8f-f39d6af784c9

📥 Commits

Reviewing files that changed from the base of the PR and between 345585d and 7d5c772.

📒 Files selected for processing (1)
  • scripts/verify-release-assets.sh
📜 Recent review details
⏰ Context from checks skipped due to timeout. (8)
  • GitHub Check: Build Test (windows-arm64)
  • GitHub Check: Build Test (linux)
  • GitHub Check: Build Test (macos-arm64)
  • GitHub Check: Build Test (macos-x64)
  • GitHub Check: Unit Tests (macos-14)
  • GitHub Check: Coverage Test
  • GitHub Check: Build Test (windows-x64)
  • GitHub Check: Unit Tests (windows-2022)
🔇 Additional comments (1)
scripts/verify-release-assets.sh (1)

28-34: LGTM!

Also applies to: 44-48


📝 Walkthrough

Walkthrough

Adds a manual GitHub Actions workflow to generate, verify, upload, and attach a local-signed beta DMG manifest, and updates release-asset validation to handle the macos-arm64 target.

Changes

Beta Manifest Registration and Arm64 Asset Checks

Layer / File(s) Summary
Workflow inputs and dispatch guards
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml
Defines the manual dispatch inputs, concurrency, permissions, platform env mapping, and input validation for acknowledgement, tag format, and proof reference.
Asset download and verification
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml
Checks out the repo, downloads finalized assets for the requested beta tag with platform filters, removes any existing manifest, and runs the asset verification script.
Manifest generation and publication
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml
Runs manifest write/verify steps, uploads the manifest artifact, attaches it to the prerelease, and writes the workflow summary.
Arm64 release-asset validation
scripts/verify-release-assets.sh
Adds macos-arm64 support across platform validation, metadata selection, DMG checks, deferred file handling, and web-CLI asset verification.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • 100yenadmin/evaOS-GUI#269: Updates the same release-asset validation script for macos-arm64 metadata and asset selection logic.
  • 100yenadmin/evaOS-GUI#396: Changes workflow defaults and release-target handling around macos-arm64, which aligns with this PR’s arm64 release flow.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately describes the new workflow registration.
Description check ✅ Passed It covers the summary, motivation, validation, and linked issue, but omits the template's Type of Change and Screenshots sections.
Linked Issues check ✅ Passed The changes register the local-signed DMG manifest workflow and arm64 asset checks needed for the macOS beta release gate.
Out of Scope Changes check ✅ Passed The workflow and script updates all support the release-gate/arm64 manifest flow and do not introduce unrelated changes.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/register-local-signed-manifest-workflow

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/evaos-beta-local-signed-dmg-manifest.yml:
- Around line 64-66: The workflow-level permissions are too broad because
`contents: write` is granting extra access to every job and step. Reduce the
top-level permissions in this workflow to the minimum needed, then set
`contents: write` only on the `register-manifest` job that contains the “Attach
manifest to GitHub prerelease” step; keep `actions: read` at the workflow level
and add a brief comment explaining why the job needs elevated access.
- Around line 54-62: The `release_target_platforms` choice in the workflow
exposes `macos-arm64`, but `scripts/verify-release-assets.sh` only accepts `all`
or `macos`, so the downstream verification step will fail. Update the workflow
dispatch/input mapping around `EVAOS_RELEASE_TARGET_PLATFORMS` and the “Verify
finalized release assets” step to either remove the `macos-arm64` option or
normalize it to `macos` before calling the script, and ensure the verified DMG
set matches the selected platform profile.
- Around line 181-187: The Verify local-signed fallback manifest step is
interpolating github.event.inputs.tag directly into the shell command, which
leaves the run block in the workflow vulnerable to injection; move the tag into
an env variable alongside GH_TOKEN and GITHUB_REPOSITORY, then have the node
invocation read it from the environment instead of using direct ${...}
substitution. Use the existing Verify local-signed fallback manifest step as the
place to update, keeping the same pattern already used for the other inputs in
this workflow.
- Around line 100-103: The Checkout release refs step currently persists Git
credentials unnecessarily even though gh is already authenticated via GH_TOKEN.
Update the actions/checkout@v6 configuration in that job to disable credential
persistence by adding persist-credentials: false alongside fetch-depth: 0, so
the checkout step does not write the token into local git config for later
steps.
- Line 3: Add a workflow-level concurrency group in the manifest registration
workflow so only one run per tag can execute at a time; update the workflow near
the existing on/disptach configuration to use a tag-based key, and make sure it
serializes runs that invoke the release upload and shared release-assets
handling in the manifest registration job.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4c59f9b5-daef-479b-a3ff-5b184fd5b7ee

📥 Commits

Reviewing files that changed from the base of the PR and between 8df55a1 and c5880b0.

📒 Files selected for processing (1)
  • .github/workflows/evaos-beta-local-signed-dmg-manifest.yml
📜 Review details
⏰ Context from checks skipped due to timeout. (9)
  • GitHub Check: Build Test (windows-arm64)
  • GitHub Check: Build Test (macos-arm64)
  • GitHub Check: Build Test (windows-x64)
  • GitHub Check: Build Test (macos-x64)
  • GitHub Check: Build Test (linux)
  • GitHub Check: Unit Tests (macos-14)
  • GitHub Check: Unit Tests (ubuntu-latest)
  • GitHub Check: Unit Tests (windows-2022)
  • GitHub Check: Coverage Test
🧰 Additional context used
🪛 zizmor (1.26.1)
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml

[warning] 100-103: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 65-65: overly broad permissions (excessive-permissions): contents: write is overly broad at the workflow level

(excessive-permissions)


[warning] 144-144: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[error] 187-187: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 204-204: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 216-216: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[error] 101-101: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 190-190: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[warning] 65-65: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[warning] 3-62: insufficient job-level concurrency limits (concurrency-limits): workflow is missing concurrency setting

(concurrency-limits)

🔇 Additional comments (1)
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml (1)

101-101: 🩺 Stability & Availability

Pin GitHub Actions to commit SHAs

  • actions/checkout@v6 and actions/upload-artifact@v4 are floating major tags. Replace them with full commit SHAs if this workflow needs to meet the repo’s action-pinning policy.

Comment thread .github/workflows/evaos-beta-local-signed-dmg-manifest.yml
Comment thread .github/workflows/evaos-beta-local-signed-dmg-manifest.yml
Comment thread .github/workflows/evaos-beta-local-signed-dmg-manifest.yml
Comment thread .github/workflows/evaos-beta-local-signed-dmg-manifest.yml
Comment thread .github/workflows/evaos-beta-local-signed-dmg-manifest.yml Outdated
@100yenadmin

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml (1)

175-202: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Anchor manifest provenance to the source run, not dispatch inputs.

write-manifest trusts dispatch-supplied source metadata, then verify-manifest compares releaseCommit to the same source_ci_head_sha input. That makes the trust gate self-attesting: a mistyped or wrong source_ci_run_id/SHA/branch/conclusion can still produce and upload a “verified” manifest.

Before writing the manifest, fetch the source run by source_ci_run_id and require:

  • workflow is Build and Release
  • conclusion is success
  • head branch is evaos/beta-rc-20260612
  • head SHA matches the provided source SHA

Then use the fetched values as the manifest/verification source of truth.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/evaos-beta-local-signed-dmg-manifest.yml around lines 175
- 202, Anchor the manifest provenance in the actual source workflow run instead
of the dispatch inputs. Update the logic behind write-manifest and
verify-manifest in evaosBetaReleaseGate.js to look up the source run using
EVAOS_BETA_LOCAL_DMG_SOURCE_RUN_ID, then validate its workflow name, conclusion,
head branch, and head SHA before writing the manifest. Use the fetched run data
as the source of truth for the manifest fields and verification checks, rather
than relying on source_ci_* inputs directly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/verify-release-assets.sh`:
- Line 38: The beta asset identity gate in assert_evaos_beta_asset_identity is
too permissive because it matches non-beta evaOS Workbench names as well.
Tighten the case pattern in verify-release-assets.sh so it only accepts
beta-specific markers (including the Beta suffix/variants) and removes the plain
evaOS Workbench forms, preserving the strict beta trust check.

---

Outside diff comments:
In @.github/workflows/evaos-beta-local-signed-dmg-manifest.yml:
- Around line 175-202: Anchor the manifest provenance in the actual source
workflow run instead of the dispatch inputs. Update the logic behind
write-manifest and verify-manifest in evaosBetaReleaseGate.js to look up the
source run using EVAOS_BETA_LOCAL_DMG_SOURCE_RUN_ID, then validate its workflow
name, conclusion, head branch, and head SHA before writing the manifest. Use the
fetched run data as the source of truth for the manifest fields and verification
checks, rather than relying on source_ci_* inputs directly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 917dbce7-848c-4b42-8186-410c9ebf7e1a

📥 Commits

Reviewing files that changed from the base of the PR and between c5880b0 and 345585d.

📒 Files selected for processing (2)
  • .github/workflows/evaos-beta-local-signed-dmg-manifest.yml
  • scripts/verify-release-assets.sh
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: Build Test (windows-arm64)
  • GitHub Check: Unit Tests (windows-2022)
  • GitHub Check: Build Test (linux)
  • GitHub Check: Build Test (windows-x64)
🧰 Additional context used
🪛 zizmor (1.26.1)
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml

[warning] 69-69: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[warning] 80-80: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)

🔇 Additional comments (2)
.github/workflows/evaos-beta-local-signed-dmg-manifest.yml (1)

39-73: LGTM!

Also applies to: 99-102, 112-173, 201-234

scripts/verify-release-assets.sh (1)

15-19: LGTM!

Also applies to: 50-51, 100-102, 151-152, 173-173, 182-184, 201-202

Comment thread scripts/verify-release-assets.sh Outdated
@100yenadmin
100yenadmin merged commit 74fd552 into main Jun 24, 2026
19 of 27 checks passed
@100yenadmin
100yenadmin deleted the codex/register-local-signed-manifest-workflow branch June 24, 2026 14:41
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.

Promote signed macOS arm64 release after proof

1 participant