7
votes

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?

2

2 Answers

9
votes

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
3
votes

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"