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/config
origin 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}`
}
继承自
属性¶
渠道?¶
readonly
optional
channel:null
|string
渠道。
默认值¶
latest
所有者¶
readonly
owner:string
仓库所有者
提供者¶
readonly
provider:"bitbucket"
提供者。必须是 bitbucket
。
覆盖¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration
.publishAutoUpdate
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration
.requestHeaders
slug¶
readonly
slug:string
仓库 slug/名称
timeout?¶
readonly
optional
timeout:null
|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
token?¶
readonly
optional
token:null
|string
用于支持从私有 bitbucket 仓库自动更新的 应用密码。
username?¶
readonly
optional
username:null
|string
用于支持从私有 bitbucket 仓库自动更新的用户名。
Github¶
Electron-Builder / builder-util-runtime / GithubOptions
GitHub 选项。
需要 GitHub 个人访问令牌。您可以通过访问 https://github.com/settings/tokens/new 来生成。访问令牌应具有 repo 作用域/权限。定义 GH_TOKEN
环境变量。
继承自
属性¶
渠道?¶
readonly
optional
channel:null
|string
渠道。
默认值¶
latest
主机?¶
readonly
optional
host:null
|string
主机(包括需要的端口)。
默认值¶
github.com
所有者?¶
readonly
optional
owner:null
|string
所有者。
私有?¶
readonly
optional
private:null
|boolean
如果定义了 GH_TOKEN
环境变量,是否使用私有 github 自动更新提供商。请参阅 私有 GitHub 更新仓库。
协议?¶
readonly
optional
protocol:null
|"https"
|"http"
协议。GitHub 发布者仅支持 https
。
默认值¶
https
提供者¶
readonly
provider:"github"
提供者。必须是 github
。
覆盖¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration
.publishAutoUpdate
发布类型?¶
optional
releaseType:null
|"draft"
|"prerelease"
|"release"
发布类型。默认情况下,将创建 draft
版本。
您也可以使用环境变量设置发布类型。如果 EP_DRAFT
设置为 true
,则为 draft
;如果 EP_PRE_RELEASE
设置为 true
,则为 prerelease
。
默认值¶
draft
仓库?¶
readonly
optional
repo:null
|string
仓库名称。 自动检测。
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration
.requestHeaders
timeout?¶
readonly
optional
timeout:null
|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
令牌?¶
readonly
optional
token:null
|string
用于支持从私有 github 仓库自动更新的访问令牌。永远不要在配置文件中指定它。仅用于 setFeedURL。
vPrefixedTagName?¶
readonly
optional
vPrefixedTagName:boolean
是否使用以 v
为前缀的标签名称。
默认值¶
true
Keygen¶
Electron-Builder / builder-util-runtime / KeygenOptions
Keygen 选项。https://keygen.sh/ 定义 KEYGEN_TOKEN
环境变量。
继承自
属性¶
账户¶
readonly
account:string
Keygen 账户的 UUID
渠道?¶
readonly
optional
channel:null
|"stable"
|"rc"
|"beta"
|"alpha"
|"dev"
渠道。
默认值¶
stable
主机?¶
readonly
optional
host:string
用于自托管实例的 Keygen 主机
默认值¶
"api.keygen.sh"
平台?¶
readonly
optional
platform:null
|string
目标平台。在发布期间以编程方式显式设置。
产品¶
readonly
product:string
Keygen 产品的 UUID
提供者¶
readonly
provider:"keygen"
提供者。必须是 keygen
。
覆盖¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration
.publishAutoUpdate
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration
.requestHeaders
timeout?¶
readonly
optional
timeout: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"
}
}
}
继承自
属性¶
加速?
readonly
optional
accelerate:boolean
如果设置为 true,这将启用 s3 加速端点。这些端点具有以下特定格式:${bucketname}.s3-accelerate.amazonaws.com
ACL?
readonly
optional
acl:null
|"private"
|"public-read"
ACL。设置为 null
以不添加。
请参阅 S3 提供商所需的权限。
默认值¶
public-read
覆盖¶
存储桶¶
readonly
bucket:string
存储桶名称。
渠道?¶
optional
channel:null
|string
更新渠道。
默认值¶
latest
继承自¶
加密?
readonly
optional
encryption:null
|"AES256"
|"aws:kms"
用于对象的服务器端加密算法。
端点?
readonly
optional
endpoint:null
|string
用于发送请求的端点 URI。默认端点从配置的区域构建。端点应为类似 https://{service}.{region}.amazonaws.com
的字符串。
forcePathStyle?
readonly
optional
forcePathStyle:boolean
如果为 true,则强制使用路径样式端点,其中存储桶名称是路径的一部分。路径样式访问
路径?
readonly
optional
path:null
|string
目录路径。
默认值¶
/
继承自¶
提供者¶
readonly
provider:"s3"
提供者。必须是 s3
。
覆盖¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
BaseS3Options
.publishAutoUpdate
区域?¶
optional
region:null
|string
区域。在发布时自动确定和设置。
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
存储类别?¶
readonly
optional
storageClass:null
|"STANDARD"
|"REDUCED_REDUNDANCY"
|"STANDARD_IA"
用于对象的存储类型。
默认值¶
STANDARD
timeout?¶
readonly
optional
timeout:null
|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
Snap Store¶
Electron-Builder / builder-util-runtime / SnapStoreOptions
Snap Store 选项。要直接发布到 Snapcraft,请参阅 Snapcraft 身份验证选项,以获取本地或 CI/CD 身份验证选项。
继承自
属性¶
渠道?
readonly
optional
channels:null
|string
|string
[]
snap 将发布的渠道列表。
默认值¶
["edge"]
提供者¶
readonly
provider:"snapStore"
提供者。必须是 snapStore
。
覆盖¶
publishAutoUpdate?
readonly
optional
publishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration
.publishAutoUpdate
仓库?
readonly
optional
repo:string
snapcraft 仓库名称
requestHeaders?
readonly
optional
requestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration
.requestHeaders
timeout?
readonly
optional
timeout:null
|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
Spaces¶
Electron-Builder / builder-util-runtime / SpacesOptions
DigitalOcean Spaces 选项。需要访问密钥,定义 DO_KEY_ID
和 DO_SECRET_KEY
环境变量。
继承自
属性¶
ACL?
readonly
optional
acl:null
|"private"
|"public-read"
ACL。设置为 null
以不添加。
默认值¶
public-read
继承自¶
渠道?
optional
channel:null
|string
更新渠道。
默认值¶
latest
继承自¶
名称¶
readonly
name:string
空间名称。
路径?
readonly
optional
path:null
|string
目录路径。
默认值¶
/
继承自¶
提供者¶
readonly
provider:"spaces"
提供者。必须是 spaces
。
覆盖¶
publishAutoUpdate?
readonly
optional
publishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
BaseS3Options
.publishAutoUpdate
区域¶
readonly
region:string
区域(例如 nyc3
)。
requestHeaders?
readonly
optional
requestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
timeout?
readonly
optional
timeout:null
|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
BYO 通用 (自定义)¶
(也许在 PR 中将其提交到上游!)Electron-Builder / builder-util-runtime / GenericServerOptions
通用(任何 HTTP(S) 服务器)选项。在所有发布选项中,都支持文件宏。
继承自
属性¶
渠道?
readonly
optional
channel:null
|string
渠道。
默认值¶
latest
提供者¶
readonly
provider:"generic"
提供者。必须是 generic
。
覆盖¶
publishAutoUpdate?
readonly
optional
publishAutoUpdate:boolean
是否发布自动更新信息文件。
自动更新仅依赖列表中的第一个提供商(您可以指定多个发布者)。因此,可能不需要为其他配置的提供商上传元数据文件。但默认情况下会上传。
默认值¶
true
继承自¶
PublishConfiguration
.publishAutoUpdate
requestHeaders?
readonly
optional
requestHeaders:OutgoingHttpHeaders
任何自定义请求标头
继承自¶
PublishConfiguration
.requestHeaders
timeout?
readonly
optional
timeout:null
|number
请求超时时间,以毫秒为单位。(默认值为 2 分钟;O 将被忽略)
默认值¶
120000
继承自¶
URL¶
readonly
url:string
基本 URL。例如 https://bucket_name.s3.amazonaws.com
。
useMultipleRangeRequest?
readonly
optional
useMultipleRangeRequest:boolean
是否对差异更新使用多个范围请求。如果 url
不包含 s3.amazonaws.com
,则默认为 true
。