Skip to content

juampi92/auto-updater

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Auto-Updater

Build StatusDependencies

Node.js auto-update plugin.

Compares local package.json with repository package.json and if versions don't match, it downloads the latest zip and extracts it.

Installation

With npm do:

$ npm install auto-updater

What does it do?

  • Compares local version with remote version.
  • If versions don't match, it downloads the repository.
  • It extracts the repository, overwriting the modified files.
  • Compares local dependencies with remote dependencies and tells if they don't match.

Events

  • git-clone The user has a git clone. Recommend use the "git pull" command
  • check.up-to-date ( v ) versions match
  • check.out-dated ( v_old , v) versions dont match
  • update.downloaded Update downloaded in the machine
  • update.not-installed Update was already in the dir, so it wasnt installed
  • update.extracted The update has been extracted correctly.
  • download.start ( name ) The download of "name of the update" has started
  • download.progress ( name , % ) The download has been updated. New percentage
  • download.end ( name ) The download has ended
  • download.error ( err ) Something happened to the download
  • end Called when all is over ( along with 'check-up-to-date' if there are no updates, or with 'extracted' if it was installed )

Public Methods:

  • use ( config )
  • on ( event, callback ) Sets the events (use like EventEmitter)
  • fire ( command ) Fires a command

Config

  • pathToJson: '' from repo main folder to package.json (only subfolders. Can't go backwards)
  • autoupdate: false if true, all stages run one after the other. Else, you need to force the stages with the force methods
  • checkgit: true Checks if the .git folder exists, so its a dev and doesnt download the project.
  • jsonhost: 'raw.githubusercontent.com' URL of raw remote package.json
  • contenthost: 'codeload.github.com' URL of full remote zip
  • progressDebounce: 0 Debounces the 'download.progress' event (0 = disabled)
  • devmode: false Developer Mode. Enhances error messages using console.log

Commands

  • check Compares the two versions. Triggers: 'git-clone', 'check.up-to-date', 'check.out-dated'
  • download-update Downloads the update. Triggers: 'update.downloaded', 'update.not-installed','download.*'
  • extract Extracts (or installs) the update reeplacing old files (it doesnt delete untracked files). Triggers: 'update.extracted'
  • diff-dependencies Returns an array of dependencies (only the names) that dont match. Returns an empty array if there's no difference. Requires the 'check' command first.

Warning: do not run this methods in other order.

Package.json configuration

"version":"0.0.1",
"auto-updater":{
	"repo":"/github-user/github-repo",
	"branch":"master"
}

That segment must be added to the project (local). It is critical that the package.json of the app you are using has a version field (so it can be compared with the remote package.json stored on github), and the auto-updater field, so it knows where to get the remote data.

Example

    var AutoUpdater = require('auto-updater');

    var autoupdater = new AutoUpdater({
     pathToJson: '',
     autoupdate: false,
     checkgit: true,
     jsonhost: 'raw.githubusercontent.com',
     contenthost: 'codeload.github.com',
     progressDebounce: 0,
     devmode: false
    });

    // State the events
    autoupdater.on('git-clone', function() {
      console.log("You have a clone of the repository. Use 'git pull' to be up-to-date");
    });
    autoupdater.on('check.up-to-date', function(v) {
      console.info("You have the latest version: " + v);
    });
    autoupdater.on('check.out-dated', function(v_old, v) {
      console.warn("Your version is outdated. " + v_old + " of " + v);
      autoupdater.fire('download-update'); // If autoupdate: false, you'll have to do this manually.
      // Maybe ask if the'd like to download the update.
    });
    autoupdater.on('update.downloaded', function() {
      console.log("Update downloaded and ready for install");
      autoupdater.fire('extract'); // If autoupdate: false, you'll have to do this manually.
    });
    autoupdater.on('update.not-installed', function() {
      console.log("The Update was already in your folder! It's read for install");
      autoupdater.fire('extract'); // If autoupdate: false, you'll have to do this manually.
    });
    autoupdater.on('update.extracted', function() {
      console.log("Update extracted successfully!");
      console.warn("RESTART THE APP!");
    });
    autoupdater.on('download.start', function(name) {
      console.log("Starting downloading: " + name);
    });
    autoupdater.on('download.progress', function(name, perc) {
      process.stdout.write("Downloading " + perc + "% \033[0G");
    });
    autoupdater.on('download.end', function(name) {
      console.log("Downloaded " + name);
    });
    autoupdater.on('download.error', function(err) {
      console.error("Error when downloading: " + err);
    });
    autoupdater.on('end', function() {
      console.log("The app is ready to function");
    });
    autoupdater.on('error', function(name, e) {
      console.error(name, e);
    });

    // Start checking
    autoupdater.fire('check');

Dependencies