使用 gon 的 goreleaser 签名 - 捆绑格式无法识别、无效或不合适

Posted

技术标签:

【中文标题】使用 gon 的 goreleaser 签名 - 捆绑格式无法识别、无效或不合适【英文标题】:goreleaser signing using gon - bundle format unrecognized, invalid, or unsuitable 【发布时间】:2021-09-24 14:13:00 【问题描述】:

我正在尝试使用 goreleaser 签署我的 golang - 并最终使用 Homebrew 分发。但这需要使用 Apple Developer ID 签名才能分发给 MacO。

您使用gon 看到以下错误并修复了吗?

来自here的yaml样本

# This is an example .goreleaser.yml file with some sane defaults.
# Make sure to check the documentation at http://goreleaser.com
before:
  hooks:
    # You may remove this if you don't use go modules.
    - go mod tidy
    # you may remove this if you don't need go generate
    - go generate ./...

builds:
- binary: foo
  id: foo
  goos:
  - linux
  goarch:
  - amd64
# notice that we need a separated build for the MacOS binary only:
- binary: foo
  id: appbrew-macos
  goos:
  - darwin
  goarch:
  - amd64
  hooks:
    post: gon gon.hcl

gon.hcl 文件

# The path follows a pattern
# ./dist/BUILD-ID_TARGET/BINARY-NAME

source = ["."]
bundle_id = "com.mydomain.mybrew"

apple_id 
    username = "<my_developer_id@application.com>"
    password = "@keychain:developer_id_application"


sign 
  application_identity = "Developer ID Application: my name (452534542)"

我可以使用以下方法验证密码是否已检索:

security find-generic-password -w -s 'developer_id_application' -a '<my_developer_id@application.com>'

错误:

   • archives         
      • creating                  archive=dist/appbrew_0.1.19_Darwin_x86_64.tar.gz
      • creating                  archive=dist/appbrew_0.1.19_Darwin_arm64.tar.gz
      • creating                  archive=dist/appbrew_0.1.19_Linux_i386.tar.gz
      • creating                  archive=dist/appbrew_0.1.19_Linux_x86_64.tar.gz
      • creating                  archive=dist/appbrew_0.1.19_Linux_arm64.tar.gz
   • creating source archive
   • linux packages   
   • snapcraft packages
   • calculating checksums
      • checksumming              file=appbrew_0.1.19_Linux_arm64.tar.gz
      • checksumming              file=appbrew_0.1.19_Darwin_arm64.tar.gz
      • checksumming              file=appbrew_0.1.19_Linux_x86_64.tar.gz
      • checksumming              file=appbrew_0.1.19_Darwin_x86_64.tar.gz
      • checksumming              file=appbrew_0.1.19_Linux_i386.tar.gz
   • signing artifacts
      • signing                   cmd=[gon gon.hcl]
      • ==> ✏️  Signing files...
 cmd=gon
      • ❗️ Error signing files:

error signing:

.: bundle format unrecognized, invalid, or unsuitable

 cmd=gon
   ⨯ release failed after 3.49s error=sign: gon failed

【问题讨论】:

【参考方案1】:

你的配置应该是这样的:

builds:
- binary: foo
  id: foo
  goos:
  - linux
  - windows
  goarch:
  - amd64
# separated build for macos only
- binary: foo
  id: foo-macos
  goos:
  - darwin
  goarch:
  - amd64
signs:
  - signature: "$artifact.dmg"
    ids:
    - foo-macos
    cmd: gon
    args:
    - gon.hcl
    artifacts: all

请注意,签名是在 signs 步骤中完成的,而不是像在您的配置中那样在 builds 中完成。

Gon's repository 中的更多信息。

【讨论】:

以上是关于使用 gon 的 goreleaser 签名 - 捆绑格式无法识别、无效或不合适的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 模型中使用 Gon

访问引用表单参数的 gon 变量

如何在 Jbuilder 中使用带有 Gon gem 的 Rails 助手?

使用 gon-wpf 的 ListBox 拖放 - 使选择保持活动状态

看不工作的Rails 4

如何在 OpenGL 中加载和渲染可能包含三角形、四边形或 N-Gons 的 OBJ 文件?