diff --git a/builder-config.json b/builder-config.json deleted file mode 100644 index 8b8fa269..00000000 --- a/builder-config.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "osx" : { - "title": "Boost Installer", - // "background": "resources/background.png", - "icon": "resources/app.icns", - "icon-size": 80, - "contents": [ - { "x": 438, "y": 344, "type": "link", "path": "/Applications" }, - { "x": 192, "y": 344, "type": "file" } - ] - } -} diff --git a/gruntfile.js b/gruntfile.js index b37cd6b4..d6418038 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -3,6 +3,7 @@ const ChildProcess = require('child_process') const packager = require('electron-packager') const archiver = require('archiver') const fs = require('fs') +const appdmg = require('appdmg') module.exports = function (grunt) { var initConfig = { @@ -13,7 +14,7 @@ module.exports = function (grunt) { outputDirectory: path.join(__dirname, 'dist'), authors: 'MAISIN&CO., Inc.', exe: 'Boostnote.exe', - loadingGif: path.join(__dirname, 'resources/install.gif'), + loadingGif: path.join(__dirname, 'resources/boostnote-install.gif'), iconUrl: path.join(__dirname, 'resources/app.ico'), setupIcon: path.join(__dirname, 'resources/dmg.ico'), certificateFile: grunt.config.get('auth_code.win_cert_path'), @@ -53,24 +54,43 @@ module.exports = function (grunt) { grunt.registerTask('zip', function (platform) { var done = this.async() - var archive = archiver.create('zip', {}) switch (platform) { case 'win': + var archive = archiver.create('zip', {}) + var basename = 'Boostnote-installer-win32-x64' archive.file(path.join('dist/Setup.exe'), { - name: 'Boostnote-installer-win32-x64.exe' + name: basename + '.exe' }) + archive.finalize() + var writeStream = fs.createWriteStream(path.join('dist/' + basename + '.zip')) + archive.pipe(writeStream) + writeStream.on('close', function () { + grunt.log.writeln('Zipped!') + done() + }) + break + case 'osx': + + var execPath = 'zip -r -y -q dist/Boostnote.zip dist/Boostnote-darwin-x64/Boostnote.app' + grunt.log.writeln(execPath) + ChildProcess.exec(execPath, + function (err, stdout, stderr) { + grunt.log.writeln(stdout) + + if (err) { + grunt.log.writeln(err) + grunt.log.writeln(stderr) + done(false) + return + } + done() + } + ) break default: done() return } - archive.finalize() - var writeStream = fs.createWriteStream(path.join('dist/Boostnote-installer-win32-x64.zip')) - archive.pipe(writeStream) - writeStream.on('close', function () { - grunt.log.writeln('Zipped!') - done() - }) }) grunt.registerTask('pack', function (platform) { @@ -132,6 +152,53 @@ module.exports = function (grunt) { } }) + grunt.registerTask('codesign', function (platform) { + var done = this.async() + if (process.platform !== 'darwin') { + done(false) + return + } + + ChildProcess.exec('codesign --verbose --deep --force --sign \"\" dist/Boostnote-darwin-x64/Boostnote.app', function (err, stdout, stderr) { + grunt.log.writeln(stdout) + + if (err) { + grunt.log.writeln(err) + grunt.log.writeln(stderr) + done(false) + return + } + done() + }) + }) + + grunt.registerTask('create-osx-installer', function () { + var done = this.async() + + var stream = appdmg({ + target: 'dist/Boostnote-darwin-x64.dmg', + basepath: __dirname, + specification: { + 'title': 'Boostnote', + 'icon': 'resources/dmg.icns', + 'background': 'resources/boostnote-install.png', + 'icon-size': 80, + 'contents': [ + { 'x': 448, 'y': 344, 'type': 'link', 'path': '/Applications' }, + { 'x': 192, 'y': 344, 'type': 'file', 'path': 'dist/Boostnote-darwin-x64/Boostnote.app' } + ] + } + }) + stream.on('finish', function () { + done() + }) + + stream.on('error', function (err) { + grunt.log.writeln(err) + done(false) + }) + }) + grunt.registerTask('build', function (platform) { if (!platform) { platform = process.platform === 'darwin' ? 'osx' : process.platform === 'win32' ? 'win' : null @@ -139,6 +206,10 @@ module.exports = function (grunt) { switch (platform) { case 'win': grunt.task.run(['pack:win', 'create-windows-installer', 'zip:win']) + break + case 'osx': + grunt.task.run(['pack:osx', 'codesign', 'create-osx-installer', 'zip:osx']) + break } }) diff --git a/package.json b/package.json index 5f3681c7..d8eac111 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,6 @@ "start": "electron ./index.js", "hot": "electron ./index.js --hot", "webpack": "webpack-dev-server --hot --inline --config webpack.config.js", - "codesign": "codesign --verbose --deep --force --sign \"MAISIN solutions Inc.\" dist/Boost-darwin-x64/Boost.app", - "build:osx": "electron-builder \"dist/Boost-darwin-x64/Boost.app\" --platform=osx --out=\"dist\" --config=\"./builder-config.json\"", - "release": "electron-release --app=\"dist/Boost-darwin-x64/Boost.app\" --token=$(cat .env/.github-token) --repo=\"BoostIO/boost-releases\"" }, "config": { "electron-version": "0.35.4" @@ -36,6 +33,7 @@ "homepage": "https://github.com/Rokt33r/codexen-app#readme", "dependencies": { "@rokt33r/node-ipc": "^5.0.4", + "appdmg": "^0.3.5", "devicon": "^2.0.0", "electron-gh-releases": "^2.0.2", "font-awesome": "^4.3.0", diff --git a/resources/boostnote-install.gif b/resources/boostnote-install.gif new file mode 100755 index 00000000..5406c21d Binary files /dev/null and b/resources/boostnote-install.gif differ diff --git a/resources/boostnote-install.png b/resources/boostnote-install.png new file mode 100755 index 00000000..27567c43 Binary files /dev/null and b/resources/boostnote-install.png differ diff --git a/resources/boostnote-install@2x.png b/resources/boostnote-install@2x.png new file mode 100755 index 00000000..90fbb2e2 Binary files /dev/null and b/resources/boostnote-install@2x.png differ diff --git a/resources/install.gif b/resources/install.gif deleted file mode 100644 index 35f24a8f..00000000 Binary files a/resources/install.gif and /dev/null differ