From f505f009df1d54a6d735170f870e9651cf1ceb08 Mon Sep 17 00:00:00 2001 From: Guoguo <16666742+imguoguo@users.noreply.github.com> Date: Mon, 9 Mar 2026 18:50:11 +0800 Subject: [PATCH] feat(release): add macOS binary notarization via goreleaser (#1274) Add notarize.macos section to .goreleaser.yaml using anchore/quill for cross-platform code signing and Apple notarization of darwin binaries. Covers all three build targets (picoclaw, picoclaw-launcher, picoclaw-launcher-tui). Notarization is gated on MACOS_SIGN_P12 being set, so releases without the secrets configured will skip this step gracefully. Required GitHub secrets: - MACOS_SIGN_P12: base64-encoded .p12 certificate - MACOS_SIGN_PASSWORD: certificate password - MACOS_NOTARY_ISSUER_ID: App Store Connect issuer UUID - MACOS_NOTARY_KEY_ID: App Store Connect API key ID - MACOS_NOTARY_KEY: base64-encoded .p8 API key Co-authored-by: Claude Opus 4.6 --- .github/workflows/release.yml | 5 +++++ .goreleaser.yaml | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0edd29f22..56e28b578 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -96,6 +96,11 @@ jobs: GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }} DOCKERHUB_IMAGE_NAME: ${{ vars.DOCKERHUB_REPOSITORY }} GOVERSION: ${{ steps.setup-go.outputs.go-version }} + MACOS_SIGN_P12: ${{ secrets.MACOS_SIGN_P12 }} + MACOS_SIGN_PASSWORD: ${{ secrets.MACOS_SIGN_PASSWORD }} + MACOS_NOTARY_ISSUER_ID: ${{ secrets.MACOS_NOTARY_ISSUER_ID }} + MACOS_NOTARY_KEY_ID: ${{ secrets.MACOS_NOTARY_KEY_ID }} + MACOS_NOTARY_KEY: ${{ secrets.MACOS_NOTARY_KEY }} - name: Apply release flags shell: bash diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 7bc59bd2d..fe208ebd4 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -124,6 +124,23 @@ dockers_v2: - linux/arm64 - linux/riscv64 +notarize: + macos: + - enabled: '{{ isEnvSet "MACOS_SIGN_P12" }}' + ids: + - picoclaw + - picoclaw-launcher + - picoclaw-launcher-tui + sign: + certificate: "{{.Env.MACOS_SIGN_P12}}" + password: "{{.Env.MACOS_SIGN_PASSWORD}}" + notarize: + issuer_id: "{{.Env.MACOS_NOTARY_ISSUER_ID}}" + key_id: "{{.Env.MACOS_NOTARY_KEY_ID}}" + key: "{{.Env.MACOS_NOTARY_KEY}}" + wait: true + timeout: 20m + archives: - formats: [tar.gz] # this name template makes the OS and Arch compatible with the results of `uname`.