From 68b54ee4aa122ff4d01999abbaf03b8bf55c9ff6 Mon Sep 17 00:00:00 2001 From: Kolja Lampe Date: Fri, 13 May 2016 21:47:30 +0200 Subject: [PATCH] Implement installers via electron-builder --- README.md | 5 +++++ package.json | 12 +++++++++--- script/installer.js | 38 ++++++++++++++++++++++++++++++++++++++ src/main.js | 3 +++ 4 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 script/installer.js diff --git a/README.md b/README.md index baee5ff9..fd9b8bcc 100644 --- a/README.md +++ b/README.md @@ -86,5 +86,10 @@ $ npm run package:linux $ npm run package:all (Packages for all platform) ``` +Create a windows installer with the following command. It will appear in the `release\windows-installer` directory. +``` +$ npm run installer +``` + ## Contributing Please see [CONTRIBUTING.md](./CONTRIBUTING.md). diff --git a/package.json b/package.json index e453f340..75bb231d 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "package:osx": "gulp package:osx", "package:linux": "gulp build && build --platform linux --arch all -d deb", "package:all": "gulp package:all", - "prettify": "gulp prettify" + "prettify": "gulp prettify", + "installer": "node ./script/installer.js" }, "devDependencies": { "babel-core": "^6.7.5", @@ -33,10 +34,12 @@ "babel-preset-react": "^6.5.0", "chromedriver": "^2.20.0", "del": "^2.2.0", - "electron-builder": "^3.11.0", + "electron-builder": "3.20.0", "electron-connect": "^0.3.7", "electron-packager": "^7.0.1", "electron-prebuilt": "0.37.8", + "electron-squirrel-startup": "^1.0.0", + "electron-winstaller": "^2.2.0", "esformatter": "^0.9.3", "esformatter-jsx": "^5.0.0", "gulp": "^3.9.0", @@ -47,6 +50,7 @@ "json-loader": "^0.5.4", "mocha": "^2.3.4", "mocha-circleci-reporter": "0.0.1", + "rimraf": "^2.5.2", "should": "^8.0.1", "style-loader": "^0.13.0", "through2": "^2.0.1", @@ -56,11 +60,13 @@ "webpack-stream": "^3.1.0" }, "build": { + "app-bundle-id": "com.mattermost.desktop", + "app-category-type": "public.app-category.productivity", "linux": { "synopsis": "Mattermost Desktop" } }, - "directories":{ + "directories": { "buildResources": "resources", "app": "dist", "output": "release" diff --git a/script/installer.js b/script/installer.js new file mode 100644 index 00000000..f96ab5d1 --- /dev/null +++ b/script/installer.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node + +const createWindowsInstaller = require('electron-winstaller').createWindowsInstaller +const path = require('path') +const rimraf = require('rimraf') + +deleteOutputFolder() + .then(getInstallerConfig) + .then(createWindowsInstaller) + .catch((error) => { + console.error(error.message || error) + process.exit(1) + }) + +function getInstallerConfig() { + const rootPath = path.join(__dirname, '..') + const outPath = path.join(rootPath, 'release') + + return Promise.resolve({ + appDirectory: path.join(outPath, 'Mattermost-win32-x64'), + iconUrl: 'https://raw.githubusercontent.com/mattermost/desktop/master/resources/icon.ico', + //loadingGif: path.join(rootPath, 'assets', 'img', 'loading.gif'), + noMsi: true, + outputDirectory: path.join(outPath, 'windows-installer'), + setupExe: 'Mattermost.exe', + setupIcon: path.join(rootPath, 'resources', 'icon.ico'), + skipUpdateIcon: true, + exe: 'Mattermost.exe' + }) +} + +function deleteOutputFolder() { + return new Promise((resolve, reject) => { + rimraf(path.join(__dirname, '..', 'out', 'windows-installer'), (error) => { + error ? reject(error) : resolve() + }) + }) +} diff --git a/src/main.js b/src/main.js index bce357db..0bec6b97 100644 --- a/src/main.js +++ b/src/main.js @@ -2,6 +2,9 @@ const electron = require('electron'); const app = electron.app; // Module to control application life. + +if (require('electron-squirrel-startup')) app.quit(); + const BrowserWindow = electron.BrowserWindow; // Module to create native browser window. const Menu = electron.Menu; const Tray = electron.Tray;