The publish key contains a set of options instructing electron-builder on how it should publish artifacts and build update info files for auto update.
String | Object | Array<Object | String>
where Object
it is Keygen, Generic Server, GitHub, S3, Spaces or Snap Store options. Order is important — first item will be used as a default auto-update server. Can be specified in the top-level configuration or any platform- (mac, linux, win) or target- (e.g. nsis) specific configuration.
Note that when using a generic server, you have to upload the built application and metadata files yourself.
Travis and AppVeyor support publishing artifacts. But it requires additional configuration for each CI and you need to configure what to publish.
electron-builder
makes publishing dead simple.
If GH_TOKEN
or GITHUB_TOKEN
is defined — defaults to [{provider: "github"}]
.
If KEYGEN_TOKEN
is defined and GH_TOKEN
or GITHUB_TOKEN
is not — defaults to [{provider: "keygen"}]
.
If GITHUB_RELEASE_TOKEN
is defined, it will be used instead of (GH_TOKEN
or GITHUB_TOKEN
) to publish your release.
- e.g. mac: export GITHUB_RELEASE_TOKEN=<my token>
- the GITHUB_TOKEN
will still be used when your app checks for updates, etc.
- you could make your GITHUB_TOKEN
“Read-only” when creating a fine-grained personal access token, and “Read and write” for the GITHUB_RELEASE_TOKEN
.
- “Contents” fine-grained permission was sufficient. (at time of writing - Apr 2024)
Snap store
snap
target by default publishes to snap store (the app store for Linux). To force publishing to another providers, explicitly specify publish configuration for snap
.
You can publish to multiple providers. For example, to publish Windows artifacts to both GitHub and Bitbucket (order is important — first item will be used as a default auto-update server, so, in this example app will use github as auto-update provider):
{
"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
You can also configure publishing using CLI arguments, for example, to force publishing snap not to Snap Store, but to GitHub: -c.snap.publish=github
Custom publish provider can be used if need.
Macros
In all publish options File Macros are supported.
How to Publish¶
Excerpt from CLI Usage of electron-builder
command:
Publishing:
--publish, -p [choices: "onTag", "onTagOrDraft", "always", "never"]
--publish
option values:
Value | Description |
---|---|
onTag |
on tag push only |
onTagOrDraft |
on tag push or if draft release exists |
always |
always publish |
never |
never publish |
But please consider using automatic rules instead of explicitly specifying publish
:
-
If CI server detected, —
onTagOrDraft
. -
If CI server reports that tag was pushed, —
onTag
.
Release will be drafted (if doesn’t already exist) and artifacts published only if tag was pushed.
- If npm script named
release
, —always
.
Add to scripts
in the development package.json
:
"release": "electron-builder"
and if you run yarn release
, a release will be drafted (if doesn’t already exist) and artifacts published.
Recommended GitHub Releases Workflow¶
-
Draft a new release. Set the “Tag version” to the value of
version
in your applicationpackage.json
, and prefix it withv
. “Release title” can be anything you want.For example, if your application
package.json
version is1.0
, your draft’s “Tag version” would bev1.0
. -
Push some commits. Every CI build will update the artifacts attached to this draft.
- Once you are done, publish the release. GitHub will tag the latest commit for you.
The benefit of this workflow is that it allows you to always have the latest artifacts, and the release can be published once it is ready.
Continuous Deployment Workflow on Amazon S3 and other non-GitHub¶
This example workflow is modelled on how releases are handled in maven (it is an example of one of many possible workflows, you are not forced to follow it).
- Setup your CI to publish on each commit. E.g.
"dist": "electron-builder --publish always"
in yourpackage.json
. - Set your version in your application
package.json
to1.9.0-snapshot
(or1.9.0-master
or whatever you want your development channel to be named). This will publish a file namedsnapshot.yml
and a build namedsomething-snapshot.exe
(and corresponding for mac) to S3. - When you are ready to deploy, simply change you package version to
1.9.0
and push. This will then produce alatest.yml
andsomething.exe
on s3. Usually you’ll git-tag this version as well (just to keep track of it). - Change the version back to a snapshot version right after, i.e.
1.10.0-snapshot
, and commit it.
GitHub Repository¶
Detected automatically using:
- repository in the application or development
package.json
, - if not set, env
TRAVIS_REPO_SLUG
- or
APPVEYOR_REPO_NAME
- or
CIRCLE_PROJECT_USERNAME
/CIRCLE_PROJECT_REPONAME
,
- if no env, from
.git/config
origin url.
Publishers¶
Bitbucket¶
Electron-Builder / builder-util-runtime / BitbucketOptions
Bitbucket options.
https://bitbucket.org/
Define BITBUCKET_TOKEN
environment variable.
For converting an app password to a usable token, you can utilize this
convertAppPassword(owner: string, appPassword: string) {
const base64encodedData = Buffer.from(`${owner}:${appPassword.trim()}`).toString("base64")
return `Basic ${base64encodedData}`
}
Extends¶
Properties¶
channel?¶
readonly
optional
channel:null
|string
The channel.
Default¶
latest
owner¶
readonly
owner:string
Repository owner
provider¶
readonly
provider:"bitbucket"
The provider. Must be bitbucket
.
Overrides¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
Whether to publish auto update info files.
Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
Default¶
true
Inherited from¶
PublishConfiguration
.publishAutoUpdate
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
Any custom request headers
Inherited from¶
PublishConfiguration
.requestHeaders
slug¶
readonly
slug:string
Repository slug/name
timeout?¶
readonly
optional
timeout:null
|number
Request timeout in milliseconds. (Default is 2 minutes; O is ignored)
Default¶
120000
Inherited from¶
token?¶
readonly
optional
token:null
|string
The app password to support auto-update from private bitbucket repositories.
username?¶
readonly
optional
username:null
|string
The user name to support auto-update from private bitbucket repositories.
Github¶
Electron-Builder / builder-util-runtime / GithubOptions
GitHub options.
GitHub personal access token is required. You can generate by going to https://github.com/settings/tokens/new. The access token should have the repo scope/permission.
Define GH_TOKEN
environment variable.
Extends¶
Properties¶
channel?¶
readonly
optional
channel:null
|string
The channel.
Default¶
latest
host?¶
readonly
optional
host:null
|string
The host (including the port if need).
Default¶
github.com
owner?¶
readonly
optional
owner:null
|string
The owner.
private?¶
readonly
optional
private:null
|boolean
Whether to use private github auto-update provider if GH_TOKEN
environment variable is defined. See Private GitHub Update Repo.
protocol?¶
readonly
optional
protocol:null
|"https"
|"http"
The protocol. GitHub Publisher supports only https
.
Default¶
https
provider¶
readonly
provider:"github"
The provider. Must be github
.
Overrides¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
Whether to publish auto update info files.
Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
Default¶
true
Inherited from¶
PublishConfiguration
.publishAutoUpdate
releaseType?¶
optional
releaseType:null
|"draft"
|"prerelease"
|"release"
The type of release. By default draft
release will be created.
Also you can set release type using environment variable. If EP_DRAFT
is set to true
— draft
, if EP_PRE_RELEASE
is set to true
— prerelease
.
Default¶
draft
repo?¶
readonly
optional
repo:null
|string
The repository name. Detected automatically.
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
Any custom request headers
Inherited from¶
PublishConfiguration
.requestHeaders
timeout?¶
readonly
optional
timeout:null
|number
Request timeout in milliseconds. (Default is 2 minutes; O is ignored)
Default¶
120000
Inherited from¶
token?¶
readonly
optional
token:null
|string
The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for setFeedURL.
vPrefixedTagName?¶
readonly
optional
vPrefixedTagName:boolean
Whether to use v
-prefixed tag name.
Default¶
true
Keygen¶
Electron-Builder / builder-util-runtime / KeygenOptions
Keygen options.
https://keygen.sh/
Define KEYGEN_TOKEN
environment variable.
Extends¶
Properties¶
account¶
readonly
account:string
Keygen account’s UUID
channel?¶
readonly
optional
channel:null
|"stable"
|"rc"
|"beta"
|"alpha"
|"dev"
The channel.
Default¶
stable
platform?¶
readonly
optional
platform:null
|string
The target Platform. Is set programmatically explicitly during publishing.
product¶
readonly
product:string
Keygen product’s UUID
provider¶
readonly
provider:"keygen"
The provider. Must be keygen
.
Overrides¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
Whether to publish auto update info files.
Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
Default¶
true
Inherited from¶
PublishConfiguration
.publishAutoUpdate
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
Any custom request headers
Inherited from¶
PublishConfiguration
.requestHeaders
timeout?¶
readonly
optional
timeout:null
|number
Request timeout in milliseconds. (Default is 2 minutes; O is ignored)
Default¶
120000
Inherited from¶
S3¶
Electron-Builder / builder-util-runtime / S3Options
Amazon S3 options.
AWS credentials are required, please see getting your credentials.
Define AWS_ACCESS_KEY_ID
and AWS_SECRET_ACCESS_KEY
environment variables.
Or in the ~/.aws/credentials.
Example configuration:
{
"build":
"publish": {
"provider": "s3",
"bucket": "bucket-name"
}
}
}
Extends¶
Properties¶
accelerate?¶
readonly
optional
accelerate:boolean
If set to true, this will enable the s3 accelerated endpoint These endpoints have a particular format of: ${bucketname}.s3-accelerate.amazonaws.com
acl?¶
readonly
optional
acl:null
|"private"
|"public-read"
The ACL. Set to null
to not add.
Please see required permissions for the S3 provider.
Default¶
public-read
Overrides¶
bucket¶
readonly
bucket:string
The bucket name.
channel?¶
optional
channel:null
|string
The update channel.
Default¶
latest
Inherited from¶
encryption?¶
readonly
optional
encryption:null
|"AES256"
|"aws:kms"
Server-side encryption algorithm to use for the object.
endpoint?¶
readonly
optional
endpoint:null
|string
The endpoint URI to send requests to. The default endpoint is built from the configured region.
The endpoint should be a string like https://{service}.{region}.amazonaws.com
.
path?¶
readonly
optional
path:null
|string
The directory path.
Default¶
/
Inherited from¶
provider¶
readonly
provider:"s3"
The provider. Must be s3
.
Overrides¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
Whether to publish auto update info files.
Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
Default¶
true
Inherited from¶
BaseS3Options
.publishAutoUpdate
region?¶
optional
region:null
|string
The region. Is determined and set automatically when publishing.
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
Any custom request headers
Inherited from¶
storageClass?¶
readonly
optional
storageClass:null
|"STANDARD"
|"REDUCED_REDUNDANCY"
|"STANDARD_IA"
The type of storage to use for the object.
Default¶
STANDARD
timeout?¶
readonly
optional
timeout:null
|number
Request timeout in milliseconds. (Default is 2 minutes; O is ignored)
Default¶
120000
Inherited from¶
Snap Store¶
Electron-Builder / builder-util-runtime / SnapStoreOptions
Snap Store options. To publish directly to Snapcraft, see Snapcraft authentication options for local or CI/CD authentication options.
Extends¶
Properties¶
channels?¶
readonly
optional
channels:null
|string
|string
[]
The list of channels the snap would be released.
Default¶
["edge"]
provider¶
readonly
provider:"snapStore"
The provider. Must be snapStore
.
Overrides¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
Whether to publish auto update info files.
Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
Default¶
true
Inherited from¶
PublishConfiguration
.publishAutoUpdate
repo?¶
readonly
optional
repo:string
snapcraft repo name
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
Any custom request headers
Inherited from¶
PublishConfiguration
.requestHeaders
timeout?¶
readonly
optional
timeout:null
|number
Request timeout in milliseconds. (Default is 2 minutes; O is ignored)
Default¶
120000
Inherited from¶
Spaces¶
Electron-Builder / builder-util-runtime / SpacesOptions
DigitalOcean Spaces options.
Access key is required, define DO_KEY_ID
and DO_SECRET_KEY
environment variables.
Extends¶
Properties¶
acl?¶
readonly
optional
acl:null
|"private"
|"public-read"
The ACL. Set to null
to not add.
Default¶
public-read
Inherited from¶
channel?¶
optional
channel:null
|string
The update channel.
Default¶
latest
Inherited from¶
name¶
readonly
name:string
The space name.
path?¶
readonly
optional
path:null
|string
The directory path.
Default¶
/
Inherited from¶
provider¶
readonly
provider:"spaces"
The provider. Must be spaces
.
Overrides¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
Whether to publish auto update info files.
Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
Default¶
true
Inherited from¶
BaseS3Options
.publishAutoUpdate
region¶
readonly
region:string
The region (e.g. nyc3
).
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
Any custom request headers
Inherited from¶
timeout?¶
readonly
optional
timeout:null
|number
Request timeout in milliseconds. (Default is 2 minutes; O is ignored)
Default¶
120000
Inherited from¶
BYO Generic (create-your-own)¶
(And maybe submit it upstream in a PR!) Electron-Builder / builder-util-runtime / GenericServerOptions
Generic (any HTTP(S) server) options. In all publish options File Macros are supported.
Extends¶
Properties¶
channel?¶
readonly
optional
channel:null
|string
The channel.
Default¶
latest
provider¶
readonly
provider:"generic"
The provider. Must be generic
.
Overrides¶
publishAutoUpdate?¶
readonly
optional
publishAutoUpdate:boolean
Whether to publish auto update info files.
Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
Default¶
true
Inherited from¶
PublishConfiguration
.publishAutoUpdate
requestHeaders?¶
readonly
optional
requestHeaders:OutgoingHttpHeaders
Any custom request headers
Inherited from¶
PublishConfiguration
.requestHeaders
timeout?¶
readonly
optional
timeout:null
|number
Request timeout in milliseconds. (Default is 2 minutes; O is ignored)
Default¶
120000
Inherited from¶
url¶
readonly
url:string
The base url. e.g. https://bucket_name.s3.amazonaws.com
.
useMultipleRangeRequest?¶
readonly
optional
useMultipleRangeRequest:boolean
Whether to use multiple range requests for differential update. Defaults to true
if url
doesn’t contain s3.amazonaws.com
.