Giter Site home page Giter Site logo

electron-updater-example's Introduction

This repo contains the bare minimum code to have an auto-updating Electron app using electron-updater with releases stored on GitHub.

If you can't use GitHub, you can use other providers:

NOTE: If you want to run through this whole process, either fork this repo or start your own from a template. Then replace all instances of iffy with your GitHub username before doing the following steps.

  1. For macOS, you will need a code-signing certificate.

    Install Xcode (from the App Store), then follow these instructions to make sure you have a "Developer ID Application" certificate. If you'd like to export the certificate (for automated building, for instance) you can. You would then follow these instructions.

    This example application is set up to perform code-signing and notarization on Mac OS provided that a Developer ID Application certificate is installed in the default keychain. The following environment variables are important for the signing process:

    • CSC_IDENTITY_AUTO_DISCOVERY - controls whether electron-builder tries to sign the application; default is true, set to false to skip signing
    • APPLE_ID - the Apple ID to use for notarization (required for signing).
    • APPLE_ID_PASSWORD - the password to use with the specified Apple ID for notarization (required for signing). Apple recommends setting up an app-specific password to safeguard the Apple ID password (see Apple Support) for more information.

    To enable code-signing and notarization:

     export CSC_IDENTITY_AUTO_DISCOVERY="true"
     export APPLE_ID="<your Apple ID>"
     export APPLE_ID_PASSWORD="<your Apple Password>"
    
  2. Adjust package.json if needed.

    By default, electron-updater will try to detect the GitHub settings (such as the repo name and owner) from reading the .git/config or from reading other attributes within package.json. If the auto-detected settings are not what you want, configure the publish property as follows:

     {
         ...
         "build": {
             "publish": [{
                 "provider": "github",
                 "owner": "iffy",
                 "repo": "electron-updater-example"
             }],
             ...
         }
     }
    
  3. Install necessary dependencies with:

     yarn
    

    or

     npm install
    
  4. Generate a GitHub access token by going to https://github.com/settings/tokens/new. The access token should have the repo scope/permission. Once you have the token, assign it to an environment variable

    On macOS/linux:

     export GH_TOKEN="<YOUR_TOKEN_HERE>"
    

    On Windows, run in powershell:

     [Environment]::SetEnvironmentVariable("GH_TOKEN","<YOUR_TOKEN_HERE>","User")
    

    Make sure to restart your IDE/Terminal to inherit latest env variable.

  5. Publish for your platform with:

     electron-builder -p always
    

    or

     npm run publish
    

    If you want to publish for more platforms, edit the publish script in package.json. For instance, to build for Windows and macOS:

     ...
     "scripts": {
         "publish": "electron-builder --mac --win -p always"
     },
     ...
    

    NOTE: The Mac OS signing/notarization process must be run on Mac OS.

  6. Release the release on GitHub by going to https://github.com/YOUR_GIT_HUB_USERNAME/electron-updater-example/releases, editing the release and clicking "Publish release."

  7. Download and install the app from https://github.com/YOUR_GIT_HUB_USERNAME/electron-updater-example/releases.

  8. Update the version in package.json, commit and push to GitHub.

  9. Do steps 5 and 6 again.

  10. Open the installed version of the app and see that it updates itself.

electron-updater-example's People

Contributors

akashnimare avatar develar avatar g-ray avatar gorvgoyl avatar iffy avatar ironicbrew avatar robertpatrick avatar slauta avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

electron-updater-example's Issues

Example doesn't work with current versions of Electron

This example was very useful in demonstrating the process. Unfortunately, it uses ancient versions of the dependencies so the code does not work with current versions of Electron (e.g., when creating the BrowserWindow, you now have to enable nodeIntegration or the JavaScript in the HTML file fails to load).

It also leaves the MacOS signing/notarization as an exercise for the user. I have a working version of the example for MacOS at https://github.com/robertpatrick/electron-updater-example.

Do not specify explicit publish config

  1. Don't need at all.
  2. Ok β€” if you want to make it explicit β€” you can still do not specify repo and owner, because will be grabbed from git config automatically. Or from repository package field.

Auto Updates not working on Mac

After making the build, when I open the app, it just shows that update is available but doesn't attempt to update the app. What am I doing wrong?

screen shot 2017-05-02 at 4 43 56 am

How to config electron-updater for a private GitHub Repo

Hello, I can't understand from the given examples how to configure the updater. I have private company git repo on a company website and the example is all about GitHub. Where do I have to add the url to the repo? Do I have to add a credentials? If yes - where? What is the thing with the access token? I can't understand anything. Can you explain points 4, 5(what do you mean by "Publish with the publish.sh script"?) and 6 without involving GitHub?

Auto update doesn't work at all

Hi

I tryed this project tuto on my project but it didn't work:
The publish process works well, my files are uploaded to github like expected with new draft release.
But after releasing new version, when I launch previous release bin the update stuff does nothing. So I decided to try with this project directly and I have the same result, updater seems to do nothing.

In my project (not the copy of electron-updater-example) I added logs in all autoUpdater events ('checking-for-update', 'update-available' ...) and I got nothing like autoUpdater was not launched and of course I have no js errors ;)

I read and read again documentation trying to find some clues but I found nothing about my problem.
I'm running my app on linux using appimage file and you can find my test on my repo.
Latest electron builder is installed too (electron-builder --version => 19.35.0)
I read a lot of doc about app-update.yml file but I didn't find this file... maybe it's a track
Is it possible you take a look to try to help me ?

Thank you very much πŸ˜„

I could not find releases.atom in github

Hi,iffy ,you did a good job. I forked your electron-updater-example.git ,it's very useful ,and I followed your instructions step by step,every thing is ok,
image

but when I had installed dist/electron-updater-example Setup 0.7.1.exe and run electron-updater-example.exe ,it's just like this
image

undefined url: https://github.com/finephp/electron-updater-example/releases.atom
why? How could I generate this file? Was my GH_TOKEN not correct?But it had published successfly on github releases. Or is there something I missed?

electron-builder version=20.38.2
packaging       platform=win32 arch=x64 electron=3.0.10 appOutDir=dist\win-unpacked


oh,I am very sorry for my Engish,please forgive me for my grammatical mistakes, I hope you can help me solve this problem,thank you very much!

Fix 'download-progress' example

Hi,
I think there might be an error in the following lines of the example:
autoUpdater.on('download-progress', (ev, progressObj) => { sendStatusToWindow('Download progress...'); })

I tried these lines and could not get any info about the download progress...turns out that progressObj is the first argument of the callback function, in fact now I can log the download speed and the other info:

  • bytesPerSecond
  • percent
  • total
  • transferred

Should it be something like this, maybe?
autoUpdater.on('download-progress', (progressObj) => { sendStatusToWindow('Download progress...'); })

GitHub Personal Access Token is not set, neither programmatically, nor using env "GH_TOKEN"

Hi there,

Rapidly going insane here....

After following your steps - adding the token via powershell, restarting the vscode etc... I am still get this error when running the command:

"package": "electron-builder -p always",

Thoughts? Direction?

Everything works if I add the token to the publish section of the electron-builder.json file - but clearly I really don't want to do that.

I also keep seeing a million different posts, showing how to use setFeedURL and then others saying not to use that - the consistency is just awful of everything to do with electron and this process.

Your information is the clearest I have found - I really appreciate it.

I noticed that if I run electron-builder without the -p always, I get the latest.yml file generated, but otherwise, I don't see that at all.

I don't want to add the dist folder to my repo - so am I supposed to manually copy the latest.yml file into my source and publish to github that way? I am certainly confused into how this is intended to be used.

If only I can get past this.

Many thanks for any help.

Dependencies:
electron-updater ^5.3.0

devDependencies:
electron ^20.1.0
electron-builder ^23.6.0

ERROR using electron-updater with Provider Generic

Hola, no logro entender por que no funciona la actualizacion automatica con un proveedor Generico, donde uso mi propio servidor donde estan colgadas las releases.

El programa abre correctamente, pero no actualiza y en el log tengo lo siguiente..

[2023-01-21 16:28:48.611] [info]  Checking for update
[2023-01-21 16:28:48.629] [info]  Generated new staging user ID: 9f802b20-bcb9-5f37-b241-2dd8de4238b9
[2023-01-21 16:28:48.668] [error] Error: Error: net::ERR_SSL_PROTOCOL_ERROR
    at SimpleURLLoaderWrapper.<anonymous> (node:electron/js2c/browser_init:2:49386)
    at SimpleURLLoaderWrapper.emit (node:events:513:28)

Ahora bien, la manera en la que esta configurada el electron-builder es la siguiente:

  "win": {
    "icon": "resources/icon.ico",
    "publish": [{
      "provider": "generic",
      "url": "http://localhost:3002/version/"
    }],
    "target": [
      {
        "target": "nsis",
        "arch": [
          "x64"
        ]
      }
    ]
  },

En la URL http://localhost:3002/version/ se en cuentran los siguientes archivos:

latest.yml
foo-Setup-1.0.1.exe
foo-Setup-1.0.1.exe.blockmap
builder-effective-config.yml
builder-debug.yml

No se que estoy haciendo mal, o que deberia hacer para que mi aplicacion pueda tomar las actualizaciones de la URL que le paso, el error que me ahorra de protocolo SSL no se como saltarlo.

SHA512 Mismatch Error in auto-updater

Electron-Builder Version: 22.9.1
Node Version: 16.7
Electron Version: 18.2.0
Electron Type (current, beta, nightly): Current
Electron Builder Version: 4.3.9
Target: Windows
I am trying to add auto update support to my app, and it has gotten to the point where it starts to download the update but the download progress just decreases and increases infinitely afterwards. After checking the logs, it says there is a sha512 checksum mismatch, and that it got an incorrect SHA512 value. I tried to solve it by checking some previous issues and trying applying those but they didn't work. I read that it might be because of my code signing techniques(I use my EV Code signing cert to code sign my app after I make the executable using a sign tool command. Could this be the issue? I tried integrating it with electron builder using sign.js, but that did not work, since it would try to sign the .exe before it even existed. Additionally, I tried going into the latest.yml and manually changing the sha512 values of the update and the original software to match, but that didn't make a difference either. What can I do?
Thanks.

TypeError: Cannot read property 'name' of undefined

hi.I'm using electron-vue again and I'm trying to use electronic-updater. After installation, I will report an error when I import it. If I don't import it, I won't report an error
just like this:
import { autoUpdater } from "electron-updater"
error:
image
Can you give me some advice? Thank you very much
"electron-updater": "^4.3.9", "electron": "^2.0.4", "vue": "^2.5.16", windows os

Example for S3 provider instead of github

Hi,
I am looking for the example of s3 provider for auto-update.
I've already done s3 publishing. But can't check the update from s3.
Is there any example that I can follow for the window? Thanks.

Getting syntax error in publish.sh

Hello,

I forked the repository and am following along with the steps. When it comes time to run the publish script:

#!/bin/sh

if [ -z "$GH_TOKEN" ]; then
    echo "You must set the GH_TOKEN environment variable."
    echo "See README.md for more details."
    exit 1
fi

# This will build, package and upload the app to GitHub.
node_modules/.bin/build --win --mac -p always

I'm getting an error:

: not foundh: 2: ./publish.sh:
./publish.sh: 11: ./publish.sh: Syntax error: end of file unexpected (expecting "then")

Any tips? It doesn't seem to be picking up the then in the beginning..

Error: Cannot parse releases feed: Error: Unable to find latest version on GitHub

Updated the latest version [email protected]。

Looks like Github returned xml file information, but used JSON to parse?

{
  "name": "electron-updater-example",
  "version": "0.5.0",
  "main": "main.js",
  "description": "electron-updater example project",
  "author": "Matt Haggard",
  "scripts": {
    "publish": "build -p always"
  },
  "devDependencies": {
    "electron": "^1.7.9",
    "electron-builder": "^19.43.3"
  },
  "dependencies": {
    "electron-log": "^2.2.12",
    "electron-updater": "^2.17.4"
  },
  "build": {
    "publish": [
      {
        "provider": "github",
        "owner": "noyobo",
        "repo": "electron-updater-example"
      }
    ],
    "appId": "com.github.noyobo.electronupdaterexample",
    "mac": {
      "category": "noyobo.app.category.type",
      "target": [
        "zip",
        "dmg"
      ]
    }
  }
}

log.log

[2017-12-12 18:42:31.393] [info] App starting...
[2017-12-12 18:42:31.676] [info] Checking for update
[2017-12-12 18:42:31.676] [info] Checking for update...
[2017-12-12 18:42:33.565] [error] Error: Error: Cannot parse releases feed: Error: Unable to find latest version on GitHub (https://github.com/noyobo/electron-updater-example/releases/latest), please ensure a production release exists: SyntaxError: Unexpected end of JSON input
SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.response.on (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:146:58)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at endReadableNT (_stream_readable.js:975:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
From previous event:
    at CancellationToken.createPromise (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/CancellationToken.ts:51:5)
    at ElectronHttpExecutor.doApiRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:79:30)
    at ElectronHttpExecutor.request (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:71:17)
    at GitHubProvider.httpRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/Provider.ts:26:26)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:90:34
    at Generator.next (<anonymous>)
From previous event:
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
From previous event:
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
From previous event:
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7)
    at JSON.parse (<anonymous>)
    at IncomingMessage.response.on (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:146:58)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at endReadableNT (_stream_readable.js:975:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at CancellationToken.createPromise (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/CancellationToken.ts:51:5)
    at ElectronHttpExecutor.doApiRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:79:30)
    at ElectronHttpExecutor.request (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:71:17)
    at GitHubProvider.httpRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/Provider.ts:26:26)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:90:34
    at Generator.next (<anonymous>)
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:99:13
    at Generator.throw (<anonymous>)
From previous event:
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
From previous event:
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
From previous event:
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7),
XML:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xml:lang="en-US">
  <id>tag:github.com,2008:https://github.com/noyobo/electron-updater-example/releases</id>
  <link type="text/html" rel="alternate" href="https://github.com/noyobo/electron-updater-example/releases"/>
  <link type="application/atom+xml" rel="self" href="https://github.com/noyobo/electron-updater-example/releases.atom"/>
  <title>Release notes from electron-updater-example</title>
  <updated>2017-07-31T15:54:47Z</updated>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.5.0</id>
    <updated>2017-07-31T15:54:47Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.5.0"/>
    <title>v0.5.0: Merge pull request #27 from Slauta/patch-1</title>
    <content type="html">&lt;p&gt;Update README.md&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.4.1</id>
    <updated>2017-02-14T16:17:32Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.4.1"/>
    <title>v0.4.1</title>
    <content type="html">&lt;p&gt;Update README.md&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.4.0</id>
    <updated>2017-02-14T16:17:32Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.4.0"/>
    <title>v0.4.0</title>
    <content type="html">&lt;p&gt;Update README.md&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.3.2</id>
    <updated>2017-02-09T22:39:21Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.3.2"/>
    <title>v0.3.2</title>
    <content type="html">&lt;p&gt;Bump to 0.3.2&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.3.1</id>
    <updated>2017-02-07T22:28:07Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.3.1"/>
    <title>v0.3.1</title>
    <content type="html">&lt;p&gt;Merge remote-tracking branch &#39;origin/master&#39;&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.3.0</id>
    <updated>2017-02-07T22:28:07Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.3.0"/>
    <title>v0.3.0</title>
    <content type="html">&lt;p&gt;Merge remote-tracking branch &#39;origin/master&#39;&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.3</id>
    <updated>2017-02-03T18:32:01Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.3"/>
    <title>v0.2.3</title>
    <content type="html">&lt;p&gt;Bump to 0.2.3&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.2</id>
    <updated>2017-02-03T18:22:53Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.2"/>
    <title>v0.2.2</title>
    <content type="html">&lt;p&gt;Bump to 0.2.2&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.1</id>
    <updated>2017-02-03T18:18:02Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.1"/>
    <title>v0.2.1</title>
    <content type="html">&lt;p&gt;Improve logging&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.0</id>
    <updated>2017-02-03T18:07:54Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.0"/>
    <title>v0.2.0</title>
    <content type="html">&lt;p&gt;Bump to 0.2.0&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
</feed>

    at JSON.parse (<anonymous>)
    at IncomingMessage.response.on (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:146:58)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at endReadableNT (_stream_readable.js:975:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at CancellationToken.createPromise (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/CancellationToken.ts:51:5)
    at ElectronHttpExecutor.doApiRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:79:30)
    at ElectronHttpExecutor.request (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:71:17)
    at GitHubProvider.httpRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/Provider.ts:26:26)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:90:34
    at Generator.next (<anonymous>)
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7)
    at JSON.parse (<anonymous>)
    at IncomingMessage.response.on (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:146:58)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at endReadableNT (_stream_readable.js:975:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at CancellationToken.createPromise (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/CancellationToken.ts:51:5)
    at ElectronHttpExecutor.doApiRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:79:30)
    at ElectronHttpExecutor.request (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:71:17)
    at GitHubProvider.httpRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/Provider.ts:26:26)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:90:34
    at Generator.next (<anonymous>)
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:99:13
    at Generator.throw (<anonymous>)
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7),
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:50:13
    at Generator.throw (<anonymous>)
From previous event:
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
From previous event:
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7)
[2017-12-12 18:42:33.565] [info] Error in auto-updater. Error: Cannot parse releases feed: Error: Unable to find latest version on GitHub (https://github.com/noyobo/electron-updater-example/releases/latest), please ensure a production release exists: SyntaxError: Unexpected end of JSON input
SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.response.on (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:146:58)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at endReadableNT (_stream_readable.js:975:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
From previous event:
    at CancellationToken.createPromise (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/CancellationToken.ts:51:5)
    at ElectronHttpExecutor.doApiRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:79:30)
    at ElectronHttpExecutor.request (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:71:17)
    at GitHubProvider.httpRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/Provider.ts:26:26)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:90:34
    at Generator.next (<anonymous>)
From previous event:
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
From previous event:
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
From previous event:
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7)
    at JSON.parse (<anonymous>)
    at IncomingMessage.response.on (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:146:58)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at endReadableNT (_stream_readable.js:975:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at CancellationToken.createPromise (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/CancellationToken.ts:51:5)
    at ElectronHttpExecutor.doApiRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:79:30)
    at ElectronHttpExecutor.request (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/builder-util-runtime/src/httpExecutor.ts:71:17)
    at GitHubProvider.httpRequest (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/Provider.ts:26:26)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:90:34
    at Generator.next (<anonymous>)
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:99:13
    at Generator.throw (<anonymous>)
From previous event:
    at GitHubProvider.getLatestVersionString (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:126:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/GitHubProvider.ts:46:30
From previous event:
    at GitHubProvider.getLatestVersion (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/GitHubProvider.js:108:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:278:37
From previous event:
    at MacUpdater.doCheckForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:337:11)
    at /Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:255:25
    at Generator.next (<anonymous>)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)
From previous event:
    at MacUpdater._checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/out/AppUpdater.js:291:11)
    at MacUpdater.checkForUpdates (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:204:35)
    at MacUpdater.checkForUpdatesAndNotify (/Applications/electron-updater-example.app/Contents/Resources/app.asar/node_modules/electron-updater/src/AppUpdater.ts:224:17)
    at App.<anonymous> (/Applications/electron-updater-example.app/Contents/Resources/app.asar/main.js:113:15)
    at emitTwo (events.js:111:20)
    at App.emit (events.js:194:7),
XML:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xml:lang="en-US">
  <id>tag:github.com,2008:https://github.com/noyobo/electron-updater-example/releases</id>
  <link type="text/html" rel="alternate" href="https://github.com/noyobo/electron-updater-example/releases"/>
  <link type="application/atom+xml" rel="self" href="https://github.com/noyobo/electron-updater-example/releases.atom"/>
  <title>Release notes from electron-updater-example</title>
  <updated>2017-07-31T15:54:47Z</updated>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.5.0</id>
    <updated>2017-07-31T15:54:47Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.5.0"/>
    <title>v0.5.0: Merge pull request #27 from Slauta/patch-1</title>
    <content type="html">&lt;p&gt;Update README.md&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.4.1</id>
    <updated>2017-02-14T16:17:32Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.4.1"/>
    <title>v0.4.1</title>
    <content type="html">&lt;p&gt;Update README.md&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.4.0</id>
    <updated>2017-02-14T16:17:32Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.4.0"/>
    <title>v0.4.0</title>
    <content type="html">&lt;p&gt;Update README.md&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.3.2</id>
    <updated>2017-02-09T22:39:21Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.3.2"/>
    <title>v0.3.2</title>
    <content type="html">&lt;p&gt;Bump to 0.3.2&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.3.1</id>
    <updated>2017-02-07T22:28:07Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.3.1"/>
    <title>v0.3.1</title>
    <content type="html">&lt;p&gt;Merge remote-tracking branch &#39;origin/master&#39;&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.3.0</id>
    <updated>2017-02-07T22:28:07Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.3.0"/>
    <title>v0.3.0</title>
    <content type="html">&lt;p&gt;Merge remote-tracking branch &#39;origin/master&#39;&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.3</id>
    <updated>2017-02-03T18:32:01Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.3"/>
    <title>v0.2.3</title>
    <content type="html">&lt;p&gt;Bump to 0.2.3&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.2</id>
    <updated>2017-02-03T18:22:53Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.2"/>
    <title>v0.2.2</title>
    <content type="html">&lt;p&gt;Bump to 0.2.2&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.1</id>
    <updated>2017-02-03T18:18:02Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.1"/>
    <title>v0.2.1</title>
    <content type="html">&lt;p&gt;Improve logging&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
  <entry>
    <id>tag:github.com,2008:Repository/113975094/v0.2.0</id>
    <updated>2017-02-03T18:07:54Z</updated>
    <link rel="alternate" type="text/html" href="/noyobo/electron-updater-example/releases/tag/v0.2.0"/>
    <title>v0.2.0</title>
    <content type="html">&lt;p&gt;Bump to 0.2.0&lt;/p&gt;</content>
    <author>
      <name>iffy</name>
    </author>
    <media:thumbnail height="30" width="30" url="https://avatars0.githubusercontent.com/u/161727?s=60&amp;v=4"/>
  </entry>
</feed>

Not found latest.yml

I allready upload my installer and latest.yml but I did it manually not from command line.
When i open my Apps . THat git me some error
yaml2
yml

Auto Updating With Private Github Repo

Hello,

First of all, thank you for an excellent repo - this has been very helpful.

I need to have an electron app autoupdate with a private GH repo. (or other means, but has to be private). It looks like this is not so simple to do (example thread here).

Do you recommend pursuing the Github method, or using simple http-server (somehow making that private?)

Thank you for any help or suggestions!

I use electronic updater to package the generated zip package on the Mac. After decompression, it shows that you don't have permission to open the application.

I use electronic updater to package the generated zip package on the Mac. After decompression, it shows that you don't have permission to open the application. I display the contents of the package and view the execution file in the MacOS file in the format of manuscript. As a result, I can't start this compressed package after the update process is completed
ζˆͺ屏2022-02-14 δΈ‹εˆ4 58 27

Error during update download

Found version 2.0.0 (url: myapp-2.0.0-arm64-mac.zip, myapp-2.0.0-arm64.dmg)
(node:8559) UnhandledPromiseRejectionWarning: TypeError: Cannot set property 'enabled' of undefined
at /Users/gattino09/Dev/NodeJS/Electron/myapp/dist/mac-arm64/myapp.app/Contents/Resources/app.asar/main.js:130:23
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(Use myapp --trace-warnings ... to show where the warning was created)
(node:8559) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:8559) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Application is not updating automatically via private GitHub repo

I have followed all the steps in this doc

Version:

  • electron: 7.1.3
  • electron-updater: 4.2.0
  • electron-builder: 21.2.0
  • electron-notarize: 0.2.1
  • Working on: MacOS Catalina 10.15

Build Config

"build": {
      {
        "repo": <REPO_NAME>,
        "private": true,
        "owner": "muhzi4u",
        "provider": "github",
        "publishAutoUpdate": true,
        "GH_TOKEN": <GITHUB_TOKEN>
      }
    ]
  }

Electron Entry


const { autoUpdater } = require('electron-updater');
app.on('ready', async () => {
  autoUpdater.checkForUpdatesAndNotify();
  createWindow();
});

The app is uploading to GitHub releases.

Screenshot 2020-02-05 at 5 09 59 PM

But when I release the further versions. The app is not updating automatically. What is the issue here?

.zip windows target from electron-builder gets auto-updates

I've got some users wh o downloaded my app with the .zip provided, for portable use.

My app is distributed using either the nsis target or the zip one

As I understood it in the docs, it shouldn't try to auto-update from zips.

However, some users reported errors when they started my app and the auto-updater started finding something. But it error'd out because the code wasn't signed (??)

It works just fine when I download the NSIS version of my app, install it, and run it. The auto-update is triggered and works just fine.

Here's the kind of error my user got : https://cdn.discordapp.com/attachments/324208228680466434/707266864102768640/unknown.png

Here's my code :

export async function initAutoUpdate() {
	autoUpdater.logger = logger;
	autoUpdater.autoDownload = false;
	autoUpdater.on('error', (error) => {
		dialog.showErrorBox(`${i18next.t('ERROR')}: `, error === null ? 'unknown' : (error.stack || error).toString());
	});
	autoUpdater.on('update-available', async () => {
		const buttonIndex = await dialog.showMessageBox(win, {
			type: 'info',
			title: i18next.t('UPDATE_FOUND'),
			message: i18next.t('UPDATE_PROMPT'),
			buttons: [i18next.t('YES'), i18next.t('NO')]
		});
		if (buttonIndex.response === 0) {
			try {
				autoUpdater.downloadUpdate();
			} catch(err) {
				await dialog.showMessageBox(win, {
					type: 'info',
					title: i18next.t('UPDATE_FOUND'),
					message: i18next.t('UPDATE_ERROR') + err
				})
			}
		}
	});

	autoUpdater.on('update-not-available', () => {
		if (manualUpdate) dialog.showMessageBox({
			title: i18next.t('UPDATE_NOT_AVAILABLE'),
			message: i18next.t('CURRENT_VERSION_OK')
		});
	});

	autoUpdater.on('update-downloaded', async () => {
		await dialog.showMessageBox(win, {
			title: i18next.t('UPDATE_DOWNLOADED'),
			message: i18next.t('UPDATE_READY_TO_INSTALL_RESTARTING')
		});
		autoUpdater.quitAndInstall();
	});

	if (getConfig().Online.Updates.App && process.platform !== 'darwin') {
		try {
			autoUpdater.checkForUpdates();
		} catch(err) {
			//Non fatal, just report it
			logger.warn('[Updater] Unable to check for app updates: ' + err)
		}
	}
}

Another issue I don't quite understand about this code, but I'll post it in a separate issue.

there is any way that i can make manualy updates not auto

when the update is avalible is starting downloading from my git hub ucount and when the update is finish is close the app and install the updates i dont want that , i want the user to see on status if update is avalible and if is want the update in gona download the update and a popup window is gona say you want the update to install now ??

how i gona make this??

i dont want the app to close automaticle but only if the user want now or on restar or on the other sessison

Publish and auto update for windows with generic provider

I've followed your guide, and set up everything just like you have it. However, instead of serving the updates from a local server, I have a remote server setup with another url: http://someurl/myapplicationname.

I'm not quite sure what I need to put in the root folder of my server? Is it the entire dist folder? Does it need to be placed in a dist folder on the server, or do I just need to place the *.exe files directly in my root folder?

I've set up autoUpdater to send messages to my UI, like this:

function sendStatusToWindow (text) {
  mainWindow.webContents.send('message', text);
}

autoUpdater.on('checking-for-update', () => {
  sendStatusToWindow('Checking for updates...');
});

// Other events doing the same...

And in my index.html:

const {ipcRenderer} = require('electron');

ipcRenderer.on('message', function (event, text) {
  var container = document.getElementById('updateContainer');
  var message = document.createElement('div');
  message.innerHTML = text;
  container.appendChild(message);
});

The update-container is a basic bootstrap alert div with id="updateContainer". I would expect to see at least Checking for updates... in my alert container, but nothing shows. I suppose this problem is caused because of some faulty configuration. It doesn't seem like the event is ever being hit.

Perhaps you could help me a bit? If you need further information, pease let me know so I can give them to you :)

Electron-builder version: ^19.55.2
Electron-updater version: ^2.20.1

'update-downloaded' never gets triggered, even after 'download-progress' is complete

I have followed all the steps here and pretty much copied the exact same code as here.

Version:

  • electron: ^5.0.7
  • electron-updater: ^4.2.4
  • electron-builder: ^21.2.0
  • electron-notarize: ^0.3.0
  • electron-log: ^4.2.2

I use electron-log to log all the steps of the update process. Everything goes perfect, update is detected and downloaded to 100%, under download-progress step. However, update-downloaded never gets triggered, despite the fact that the progress reported under download-progress is 100%. This happens on both Windows 10 and MacOS Catalina 10.15.

image

I tried closing and re-opening the app, but the same thing happens over and over again. Any help would be appreciated.

Change token in a private repo

I am developping a new app using Electron for an enterprise and I am having problems to update the app.

When you are generating a new token for your app, Github recommends you set an expiration date.

image

But if I set it, how can hay change my token when the app is in producction? What is the correct way to doit?

Thank you very much.

I know this is old, but @marc-parillo thanks for this.

I know this is old, but @marc-parillo thanks for this.

This was the only way I could get electron-updater working in a build with a regular private GH setup, and an org would just add unneeded overhead. Of course hard-coded tokens were far from ideal, so I ended up accessing each value via an environment variable set by dotenv on startup from an ignored .env file.

autoUpdater.setFeedURL({ provider: 'github', owner: process.env.OWNER, repo: process.env.REPO, token: process.env.GH_TOKEN })

Yes, the variables are still in the built source itself, but I'm obfuscating this after webpack, so finding these are not that feasible.

Its great to see it working now. πŸ‘

By the way, what are the future plans of this feature now? I still see the docs state support for "Private GH Repos".

Originally posted by @MutableLoss in #14 (comment)

Github 401 Unauthorized

Hello, i can't get this example to work, after setting GH_TOKEN on env, when I send npm run publish after packing I get this message:

Error: Cannot cleanup:

Error #1 --------------------------------------------------------------------------------
HttpError: 401 Unauthorized
{
"message": "Bad credentials",
"documentation_url": "https://developer.github.com/v3"
}
Headers: {
"server": "GitHub.com",
"date": "Fri, 19 Jan 2018 18:56:04 GMT",
"content-type": "application/json; charset=utf-8",
"content-length": "83",
"connection": "close",
"status": "401 Unauthorized",
"x-github-media-type": "github.v3; format=json",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "58",
"x-ratelimit-reset": "1516390453",
"access-control-expose-headers": "ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval",
"access-control-allow-origin": "*",
"content-security-policy": "default-src 'none'",
"strict-transport-security": "max-age=31536000; includeSubdomains; preload",
"x-content-type-options": "nosniff",
"x-frame-options": "deny",
"x-xss-protection": "1; mode=block",
"x-runtime-rack": "0.014412",
"x-github-request-id": "EA2A:1C8C6:2141FC6:3AA9AC7:5A623F43"
}
at createHttpError (C:\Users\btiba\AppData\Roaming\npm\node_modules\electron-builder\node_modules\builder-util-runtime\src\httpExecutor.ts:31:10)
at IncomingMessage.response.on (C:\Users\btiba\AppDat...............

Error #2 --------------------------------------------------------------------------------
HttpError: 401 Unauthorized
{
"message": "Bad credentials",
"documentation_url": "https://developer.github.com/v3"
}
Headers: {
"server": "GitHub.com",
"date": "Fri, 19 Jan 2018 18:56:04 GMT",
"content-type": "application/json; charset=utf-8",
"content-length": "83",
"connection": "close",
"status": "401 Unauthorized",
"x-github-media-type": "github.v3; format=json",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "58",
"x-ratelimit-reset": "1516390453",
"access-control-expose-headers": "ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval",
"access-control-allow-origin": "*",
"content-security-policy": "default-src 'none'",
"strict-transport-security": "max-age=31536000; includeSubdomains; preload",
"x-content-type-options": "nosniff",
"x-frame-options": "deny",
"x-xss-protection": "1; mode=block",
"x-runtime-rack": "0.014412",
"x-github-request-id": "EA2A:1C8C6:2141FC6:3AA9AC7:5A623F43"
}
at createHttpError (C:\Users\btiba\AppData\Roaming\npm\node_modules\electron-builder\node_modules\builder-util-runtime\src\httpExecuto...............

I need my application to get autoupdates with nsis in windows, i've reading the electron-builder autoupdate documentation but still can't figure out how it really works or the configuration i need to do

Unhandled rejection Error: 404 Not Found

npm run build-release

> [email protected] build-release /Users/user/ElectronProjects/chat
> build --win --mac -p always

Skip app dependencies rebuild because dev and app dependencies are not separated
Packaging for platform darwin x64 using electron 1.4.15 to dist/mac

Signing app (identity: Developer ID Application: ...)

Building DMG
Building macOS zip
Skip app dependencies rebuild because dev and app dependencies are not separated
Packaging for platform win32 x64 using electron 1.4.15 to dist/win-unpacked

Creating Github Publisher β€” owner: electron, project: electron-quick-start, version: 1.0.2
Release with tag v1.0.2 doesn't exist, creating one
Unhandled rejection Error: 404 Not Found
"method: post url: https://api.github.com/repos/electron/electron-quick-start/releases\n\nPlease double check that your authentication token is correct. Due to security reasons actual status maybe not reported, but 404.\n"

owner: electron, project: electron-quick-start

How can I change "owner" and "project"? I can't find such parameters.
Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.