Skip to content

feat: add code signing for Go binaries#3491

Draft
zackverham wants to merge 6 commits intomainfrom
feat/code-signing-3484
Draft

feat: add code signing for Go binaries#3491
zackverham wants to merge 6 commits intomainfrom
feat/code-signing-3484

Conversation

@zackverham
Copy link
Collaborator

Add signing workflow for Windows, macOS, and Linux binaries to address antivirus false positives (Norton quarantining Publisher).

Signing approach:

  • Windows: Authenticode via osslsigncode with timestamping
  • macOS: codesign with Developer ID and hardened runtime
  • Linux: GPG detached signatures (.sig files)

Updated workflows to include signing step:

  • main.yaml
  • nightly.yaml
  • publish.yaml
  • pull-request.yaml
  • release.yaml

Required secrets:

  • WINDOWS_SIGNING_CERT / WINDOWS_SIGNING_CERT_PASSWORD
  • MACOS_SIGNING_CERT / MACOS_SIGNING_CERT_PASSWORD
  • LINUX_SIGNING_KEY / LINUX_SIGNING_KEY_PASSPHRASE

Fixes #3484

Intent

Type of Change

    • Bug Fix
    • New Feature
    • Breaking Change
    • Documentation
    • Refactor
    • Tooling

Approach

User Impact

Automated Tests

Directions for Reviewers

Checklist

  • I have updated the root CHANGELOG.md to cover notable changes.

zackverham and others added 6 commits February 11, 2026 14:58
Add signing workflow for Windows, macOS, and Linux binaries to address
antivirus false positives (Norton quarantining Publisher).

Signing approach:
- Windows: Authenticode via osslsigncode with timestamping
- macOS: codesign with Developer ID and hardened runtime
- Linux: GPG detached signatures (.sig files)

Updated workflows to include signing step:
- main.yaml
- nightly.yaml
- publish.yaml
- pull-request.yaml
- release.yaml

Required secrets:
- WINDOWS_SIGNING_CERT / WINDOWS_SIGNING_CERT_PASSWORD
- MACOS_SIGNING_CERT / MACOS_SIGNING_CERT_PASSWORD
- LINUX_SIGNING_KEY / LINUX_SIGNING_KEY_PASSPHRASE

Fixes #3484

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds a verify-org-membership job that checks the triggering user is a
member of the posit-dev organization before allowing code signing to
proceed. All signing jobs now depend on this verification.

Requires a new ORG_READ_TOKEN secret with read:org scope.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add `set +x` to all steps handling secrets to prevent debug output
- Use `::add-mask::` for dynamically generated keychain password
- Use file-based password passing instead of command-line args:
  - osslsigncode: -readpass instead of -pass
  - gpg: --passphrase-file instead of --passphrase-fd 0
- Redirect stderr to /dev/null for commands that might leak sensitive info
- Filter osslsigncode output to exclude password-related strings
- Clean up sensitive temp files after use

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Signing should only occur on main branch builds (tagged releases and
nightly prereleases), not on pull requests. This prevents secrets from
being exposed to fork PRs and ensures signing is reserved for trusted
builds.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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.

Positron gets Quarantined by Norton Security

1 participant