Skip to content

ci(release): isolate signing secrets from publishing permissions #58

Description

@trsdn

Context

The release flow now correctly creates a draft, smoke-tests it, and publishes only after success. The remaining privilege boundary is broad: the build/sign/notarize job has contents: write, repository-level Apple secrets, and a checkout that persists the GitHub credential.

Proposed change

  • Create a GitHub release environment restricted to v* tags.
  • Move MACOS_CERTIFICATE, MACOS_CERTIFICATE_PWD, APPLE_ID, APPLE_TEAM_ID, and APPLE_APP_PASSWORD from repository secrets to that environment.
  • Give the build/sign/notarize job only contents: read and set persist-credentials: false on checkout.
  • Pass verified artifacts to a separate job that alone has contents: write and creates or updates the draft release.
  • Keep the smoke-test and publish jobs separate; do not expose Apple credentials to either.
  • Add explicit job timeouts and pin the release runner image deliberately rather than relying indefinitely on macos-latest.

Acceptance criteria

  • Signing and notarization still complete successfully for a test release tag.
  • Only the jobs that manipulate GitHub Releases receive contents: write.
  • Apple credentials are available only through the release environment.
  • Checkout credentials are not persisted in the signing job.
  • A failed smoke test leaves an unpublished draft.
  • The update DMG remains unattested and no AppUpdater attestation policy is introduced.

Maintainer setting required

Create and configure the release environment and migrate the five existing repository secrets.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestgithub_actionsPull requests that update GitHub Actions code

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions