Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create release channels with electron/electron-builder?

I have an Electron app where I want to introduce parallel release channels: stable, next (for early adopters) and dev (for testing the latest build).

These will have a branch each, with new features appearing first in dev, progressing to next for beta testing and finally moving into stable.

I'm using electron-builder to make these release packages, and I want each to have its own auto-updates - so when I publish a new next release all the users with it get the update.

I want the applications to be independent - a user can have two channels installed and run both at the same time. They'll have different names and different icons.

I can manually set these up in the branches, but really I want to automate this as much as possible - a publish from the next branch should use the right name, icons, IDs and updater without risk of it going to the wrong channel.

Is there a way to do this with electron or electron-builder?

like image 478
Keith Avatar asked Nov 24 '16 10:11

Keith


People also ask

What is appId electron?

In simple terms, appId is a name that the client's computer is using to identify. This is particularly useful and you must've noticed it when you are trying to launch an app thar's already open, your OS would open the minimised version, rather than opening a new instance of the same app.

Can I build electron app for Mac from Windows?

Compatible with Mac, Windows, and Linux, Electron apps build and run on three platforms.


2 Answers

It's possible with electron-builder. I would have several build configurations and tell electron-builder which to use when building.

For example, create file config/beta.json with the following setup:

{
  "appId": "com.company.beta",
  "productName": "App Beta",
  "directories": {
    "buildResources": "build/beta" // directory containing your build-specific assets (e.g., beta icons - icon.icns, icon.ico & background.png)
  },
  "mac": {
    "category": "public.app-category.finance"
  },
  "win": {
    "target": [
      "nsis"
    ]
  },
  "nsis": {
    "perMachine": false
  },
  "publish": [
    {
      "provider": "s3",
      "bucket": "com-app-beta" // dedicated S3 bucket for each build
    }
  ],
}

And duplicate config/beta.json for next.json and current.json (make sure to edit settings accordingly).

In package.json, add the following build scripts (note --em.name=app-beta to overwrite package.json's "name" value):

{
    "scripts": {
        "build": "build -owl --x64 --config ./config/current.json -p always --em.name=app",
        "build-beta": "build -owl --x64 --config ./config/beta.json -p always --em.name=app-beta",
        "build-next": "build -owl --x64 --config ./config/next.json -p always --em.name=app-next"
    }
}

Run build script when ready to deploy:

npm run build-beta
like image 112
Jon Saw Avatar answered Sep 28 '22 19:09

Jon Saw


Using electron-builder version 20.15.1 and MacOS, @Jon Saw's solution needs a minor change because em option is not valid:

"build-beta": "build -owl --x64 --config ./config/beta.json -p always -c.extraMetadata.name=app-beta"
like image 40
caperonce Avatar answered Sep 28 '22 19:09

caperonce