publish 键包含一组选项,用于指示 electron-builder 如何发布工件并为 自动更新 构建更新信息文件。
String | Object | Array<Object | String>,其中 Object 是 Keygen、通用服务器、GitHub、S3、Spaces 或 Snap Store 选项。顺序很重要 - 第一个项目将用作默认的自动更新服务器。可以在顶级配置或任何平台特定配置(mac、linux、win)或目标特定配置(例如 nsis)中指定。
请注意,当使用通用服务器时,您必须自己上传构建的应用程序和元数据文件。
Travis 和 AppVeyor 支持发布工件。但这需要为每个 CI 进行额外的配置,并且您需要配置要发布的内容。electron-builder 使发布变得非常简单。
如果定义了 GH_TOKEN 或 GITHUB_TOKEN,则默认为 [{provider: "github"}]。
如果定义了 KEYGEN_TOKEN 并且未定义 GH_TOKEN 或 GITHUB_TOKEN,则默认为 [{provider: "keygen"}]。
如果定义了 GITHUB_RELEASE_TOKEN,它将用于代替 (GH_TOKEN 或 GITHUB_TOKEN) 来发布您的版本。- 例如 mac: export GITHUB_RELEASE_TOKEN=<my token> - 当您的应用检查更新等时,仍将使用 GITHUB_TOKEN。- 您可以在创建细粒度的个人访问令牌时将您的 GITHUB_TOKEN 设置为“只读”,并将 GITHUB_RELEASE_TOKEN 设置为“读写”。- “Contents” 细粒度权限就足够了。(在撰写本文时 - 2024 年 4 月)
Snap store
默认情况下,snap 目标发布到 snap store(Linux 的应用商店)。要强制发布到其他提供商,请为 snap 显式指定发布配置。
您可以发布到多个提供商。例如,将 Windows 工件发布到 GitHub 和 Bitbucket(顺序很重要 - 第一个项目将用作默认的自动更新服务器,因此,在本示例中,应用将使用 github 作为自动更新提供商)
{
"build": {
"win": {
"publish": ["github", "bitbucket"]
}
}
}
win:
publish:
# an object provider for github with additional options
- provider: github
protocol: https
# a string provider for bitbucket that will use default options
- bitbucket
您还可以使用 CLI 参数配置发布,例如,强制将 snap 发布到 GitHub 而不是 Snap Store:-c.snap.publish=github
如果需要,可以使用自定义发布提供商。
宏
在所有发布选项中,都支持文件宏。
如何发布¶
摘自 electron-builder 命令的 CLI 用法
Publishing:
--publish, -p [choices: "onTag", "onTagOrDraft", "always", "never"]
--publish 选项值
| 值 | 描述 |
|---|---|
onTag |
仅在标签推送时 |
onTagOrDraft |
在标签推送时或草稿版本存在时 |
always |
始终发布 |
never |
从不发布 |
但是请考虑使用自动规则,而不是显式指定 publish
-
如果检测到 CI 服务器,则为 —
onTagOrDraft。 -
如果 CI 服务器报告标签已推送,则为 —
onTag。
仅当标签被推送时,才会起草发布(如果尚不存在)并发布工件。
- 如果名为
release的 npm 脚本,则为 —always。
添加到开发 package.json 中的 scripts
"release": "electron-builder"
并且如果您运行 yarn release,将起草发布(如果尚不存在)并发布工件。
推荐的 GitHub 发布工作流¶
-
起草新版本。将“标签版本”设置为您的应用程序
package.json中version的值,并以v为前缀。“发布标题”可以是您想要的任何内容。例如,如果您的应用程序
package.json版本为1.0,则您的草稿的“标签版本”将为v1.0。 -
推送一些提交。每个 CI 构建都将更新附加到此草稿的工件。
- 完成后,发布版本。GitHub 将为您标记最新的提交。
此工作流的好处是,它允许您始终拥有最新的工件,并且一旦准备就绪即可发布版本。
在 Amazon S3 和其他非 GitHub 上的持续部署工作流¶
此示例工作流是模仿 maven 中如何处理版本的(这是许多可能的工作流之一的示例,您不必遵循它)。
- 设置您的 CI 以在每次提交时发布。例如,在您的
package.json中使用"dist": "electron-builder --publish always"。 - 将您的应用程序
package.json中的版本设置为1.9.0-snapshot(或1.9.0-master或您希望您的开发渠道命名的任何名称)。这会将名为snapshot.yml的文件和名为something-snapshot.exe的构建(以及 mac 的对应项)发布到 S3。 - 当您准备好部署时,只需将您的软件包版本更改为
1.9.0并推送。这将在 s3 上生成latest.yml和something.exe。通常,您也会对这个版本进行 git 标记(只是为了跟踪它)。 - 之后立即将版本改回快照版本,即
1.10.0-snapshot,并提交它。
GitHub 仓库¶
使用以下方式自动检测
- 应用程序或开发
package.json中的 repository, - 如果未设置,则使用环境变量
TRAVIS_REPO_SLUG- 或
APPVEYOR_REPO_NAME - 或
CIRCLE_PROJECT_USERNAME/CIRCLE_PROJECT_REPONAME,
- 如果没有环境变量,则从
.git/configorigin url 获取。
发布者¶
Bitbucket¶
Electron-Builder / builder-util-runtime / BitbucketOptions
Bitbucket 选项。https://bitbucket.org/ 定义 BITBUCKET_TOKEN 环境变量。
为了将应用密码转换为可用的令牌,您可以利用这个
convertAppPassword(owner: string, appPassword: string) {
const base64encodedData = Buffer.from(`${owner}:${appPassword.trim()}`).toString("base64")
return `Basic ${base64encodedData}`
}
继承自
属性¶
渠道?¶
readonlyoptionalchannel:null|string
渠道。
默认值¶
latest
所有者¶
readonlyowner:string
仓库所有者
提供者¶
readonlyprovider:"bitbucket"
提供者。必须是 bitbucket。
覆盖¶
publishAutoUpdate?¶
readonlyoptionalpublishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration.publishAutoUpdate
requestHeaders?¶
readonlyoptionalrequestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration.requestHeaders
slug¶
readonlyslug:string
仓库 slug/名称
timeout?¶
readonlyoptionaltimeout:null|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
token?¶
readonlyoptionaltoken:null|string
用于支持从私有 bitbucket 仓库自动更新的 应用密码。
username?¶
readonlyoptionalusername:null|string
用于支持从私有 bitbucket 仓库自动更新的用户名。
Github¶
Electron-Builder / builder-util-runtime / GithubOptions
GitHub 选项。
需要 GitHub 个人访问令牌。您可以通过访问 https://github.com/settings/tokens/new 来生成。访问令牌应具有 repo 作用域/权限。定义 GH_TOKEN 环境变量。
继承自
属性¶
渠道?¶
readonlyoptionalchannel:null|string
渠道。
默认值¶
latest
主机?¶
readonlyoptionalhost:null|string
主机(包括需要的端口)。
默认值¶
github.com
所有者?¶
readonlyoptionalowner:null|string
所有者。
私有?¶
readonlyoptionalprivate:null|boolean
如果定义了 GH_TOKEN 环境变量,是否使用私有 github 自动更新提供商。请参阅 私有 GitHub 更新仓库。
协议?¶
readonlyoptionalprotocol:null|"https"|"http"
协议。GitHub 发布者仅支持 https。
默认值¶
https
提供者¶
readonlyprovider:"github"
提供者。必须是 github。
覆盖¶
publishAutoUpdate?¶
readonlyoptionalpublishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration.publishAutoUpdate
发布类型?¶
optionalreleaseType:null|"draft"|"prerelease"|"release"
发布类型。默认情况下,将创建 draft 版本。
您也可以使用环境变量设置发布类型。如果 EP_DRAFT 设置为 true,则为 draft;如果 EP_PRE_RELEASE 设置为 true,则为 prerelease。
默认值¶
draft
仓库?¶
readonlyoptionalrepo:null|string
仓库名称。 自动检测。
requestHeaders?¶
readonlyoptionalrequestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration.requestHeaders
timeout?¶
readonlyoptionaltimeout:null|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
令牌?¶
readonlyoptionaltoken:null|string
用于支持从私有 github 仓库自动更新的访问令牌。永远不要在配置文件中指定它。仅用于 setFeedURL。
vPrefixedTagName?¶
readonlyoptionalvPrefixedTagName:boolean
是否使用以 v 为前缀的标签名称。
默认值¶
true
Keygen¶
Electron-Builder / builder-util-runtime / KeygenOptions
Keygen 选项。https://keygen.sh/ 定义 KEYGEN_TOKEN 环境变量。
继承自
属性¶
账户¶
readonlyaccount:string
Keygen 账户的 UUID
渠道?¶
readonlyoptionalchannel:null|"stable"|"rc"|"beta"|"alpha"|"dev"
渠道。
默认值¶
stable
主机?¶
readonlyoptionalhost:string
用于自托管实例的 Keygen 主机
默认值¶
"api.keygen.sh"
平台?¶
readonlyoptionalplatform:null|string
目标平台。在发布期间以编程方式显式设置。
产品¶
readonlyproduct:string
Keygen 产品的 UUID
提供者¶
readonlyprovider:"keygen"
提供者。必须是 keygen。
覆盖¶
publishAutoUpdate?¶
readonlyoptionalpublishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration.publishAutoUpdate
requestHeaders?¶
readonlyoptionalrequestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration.requestHeaders
timeout?¶
readonlyoptionaltimeout:null|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
S3¶
Electron-Builder / builder-util-runtime / S3Options
Amazon S3 选项。需要 AWS 凭证,请参阅 获取您的凭证。定义 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量。或在 ~/.aws/credentials 中。
示例配置
{
"build":
"publish": {
"provider": "s3",
"bucket": "bucket-name"
}
}
}
继承自
属性¶
加速?
readonlyoptionalaccelerate:boolean
如果设置为 true,这将启用 s3 加速端点。这些端点具有以下特定格式:${bucketname}.s3-accelerate.amazonaws.com
ACL?
readonlyoptionalacl:null|"private"|"public-read"
ACL。设置为 null 以不添加。
请参阅 S3 提供商所需的权限。
默认值¶
public-read
覆盖¶
存储桶¶
readonlybucket:string
存储桶名称。
渠道?¶
optionalchannel:null|string
更新渠道。
默认值¶
latest
继承自¶
加密?
readonlyoptionalencryption:null|"AES256"|"aws:kms"
用于对象的服务器端加密算法。
端点?
readonlyoptionalendpoint:null|string
用于发送请求的端点 URI。默认端点从配置的区域构建。端点应为类似 https://{service}.{region}.amazonaws.com 的字符串。
forcePathStyle?
readonlyoptionalforcePathStyle:boolean
如果为 true,则强制使用路径样式端点,其中存储桶名称是路径的一部分。路径样式访问
路径?
readonlyoptionalpath:null|string
目录路径。
默认值¶
/
继承自¶
提供者¶
readonlyprovider:"s3"
提供者。必须是 s3。
覆盖¶
publishAutoUpdate?¶
readonlyoptionalpublishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
BaseS3Options.publishAutoUpdate
区域?¶
optionalregion:null|string
区域。在发布时自动确定和设置。
requestHeaders?¶
readonlyoptionalrequestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
存储类别?¶
readonlyoptionalstorageClass:null|"STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"
用于对象的存储类型。
默认值¶
STANDARD
timeout?¶
readonlyoptionaltimeout:null|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
Snap Store¶
Electron-Builder / builder-util-runtime / SnapStoreOptions
Snap Store 选项。要直接发布到 Snapcraft,请参阅 Snapcraft 身份验证选项,以获取本地或 CI/CD 身份验证选项。
继承自
属性¶
渠道?
readonlyoptionalchannels:null|string|string[]
snap 将发布的渠道列表。
默认值¶
["edge"]
提供者¶
readonlyprovider:"snapStore"
提供者。必须是 snapStore。
覆盖¶
publishAutoUpdate?
readonlyoptionalpublishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration.publishAutoUpdate
仓库?
readonlyoptionalrepo:string
snapcraft 仓库名称
requestHeaders?
readonlyoptionalrequestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration.requestHeaders
timeout?
readonlyoptionaltimeout:null|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
Spaces¶
Electron-Builder / builder-util-runtime / SpacesOptions
DigitalOcean Spaces 选项。需要访问密钥,定义 DO_KEY_ID 和 DO_SECRET_KEY 环境变量。
继承自
属性¶
ACL?
readonlyoptionalacl:null|"private"|"public-read"
ACL。设置为 null 以不添加。
默认值¶
public-read
继承自¶
渠道?
optionalchannel:null|string
更新渠道。
默认值¶
latest
继承自¶
名称¶
readonlyname:string
空间名称。
路径?
readonlyoptionalpath:null|string
目录路径。
默认值¶
/
继承自¶
提供者¶
readonlyprovider:"spaces"
提供者。必须是 spaces。
覆盖¶
publishAutoUpdate?
readonlyoptionalpublishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
BaseS3Options.publishAutoUpdate
区域¶
readonlyregion:string
区域(例如 nyc3)。
requestHeaders?
readonlyoptionalrequestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
timeout?
readonlyoptionaltimeout:null|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
BYO 通用 (自定义)¶
(也许在 PR 中将其提交到上游!)Electron-Builder / builder-util-runtime / GenericServerOptions
通用(任何 HTTP(S) 服务器)选项。在所有发布选项中,都支持文件宏。
继承自
属性¶
渠道?
readonlyoptionalchannel:null|string
渠道。
默认值¶
latest
提供者¶
readonlyprovider:"generic"
提供者。必须是 generic。
覆盖¶
publishAutoUpdate?
readonlyoptionalpublishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration.publishAutoUpdate
requestHeaders?
readonlyoptionalrequestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration.requestHeaders
timeout?
readonlyoptionaltimeout:null|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
URL¶
readonlyurl:string
基本 URL。例如 https://bucket_name.s3.amazonaws.com。
useMultipleRangeRequest?
readonlyoptionaluseMultipleRangeRequest:boolean
是否对差异更新使用多个范围请求。如果 url 不包含 s3.amazonaws.com,则默认为 true。