From 8bd9ee63f444721a9aea01eaf93f117a4ae1ef73 Mon Sep 17 00:00:00 2001 From: Alexei Yuzhakov Date: Tue, 24 May 2016 22:13:31 +0600 Subject: [PATCH 01/10] Fix ability to click on link on port mapping page (fix #1700). Signed-off-by: Alexei Yuzhakov --- src/components/ContainerSettingsPorts.react.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ContainerSettingsPorts.react.js b/src/components/ContainerSettingsPorts.react.js index 2e5a0864..4a9359b4 100644 --- a/src/components/ContainerSettingsPorts.react.js +++ b/src/components/ContainerSettingsPorts.react.js @@ -32,7 +32,7 @@ var ContainerSettingsPorts = React.createClass({ metrics.track('Opened In Browser', { from: 'settings' }); - shell.openExternal(url); + shell.openExternal('http://' + url); }, createEmptyPort: function (ports) { ports[''] = { From 7df13112d216b4d32c92ba288603a0cbcccd9cb7 Mon Sep 17 00:00:00 2001 From: Albert Domenech Date: Sun, 15 May 2016 13:21:29 +0200 Subject: [PATCH 02/10] Initial debian/ubuntu installer: - Used grunt-packager and grunt-electron-installer-debian - Added debian/ubuntu ai32 arch support - Added Redhat/Centos/Fedora rpm support - Added electron-packager to MacOSX custom task - Fixed OSX Linux build and better conditional legibility Signed-off-by: Albert Domenech --- Gruntfile.js | 135 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 3 + util/kitematic.png | Bin 0 -> 7987 bytes 3 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 util/kitematic.png diff --git a/Gruntfile.js b/Gruntfile.js index 7cd1864b..b80fd884 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,3 +1,4 @@ +var fs = require('fs'); var path = require('path'); var execFile = require('child_process').execFile; var packagejson = require('./package.json'); @@ -26,7 +27,16 @@ module.exports = function (grunt) { var OSX_OUT = './dist'; var OSX_OUT_X64 = OSX_OUT + '/' + OSX_APPNAME + '-darwin-x64'; var OSX_FILENAME = OSX_OUT_X64 + '/' + OSX_APPNAME + '.app'; + var IS_WINDOWS = process.platform === 'win32'; + var IS_LINUX = process.platform == 'linux'; + + var IS_I386 = process.arch == 'ia32'; + var IS_X64 = process.arch == 'x64'; + + var IS_DEB = fs.existsSync('/etc/lsb-release') || fs.existsSync('/etc/debian_version'); + var IS_RPM = fs.existsSync('/etc/redhat-release'); + grunt.initConfig({ IDENTITY: 'Developer ID Application: Docker Inc', OSX_FILENAME: OSX_FILENAME, @@ -209,6 +219,9 @@ module.exports = function (grunt) { }, zip: { command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + BASENAME + '-Mac.zip', + }, + linux_npm: { + command: 'cd build && npm install --production' } }, @@ -219,7 +232,7 @@ module.exports = function (grunt) { compress: { windows: { options: { - archive: './release/' + BASENAME + '-Windows.zip', + archive: './release/' + BASENAME + '-Windows.zip', mode: 'zip' }, files: [{ @@ -228,7 +241,7 @@ module.exports = function (grunt) { cwd: './dist/Kitematic-win32-x64', src: '**/*' }] - }, + }, }, // livereload @@ -252,12 +265,126 @@ module.exports = function (grunt) { files: ['images/*', 'index.html', 'fonts/*'], tasks: ['newer:copy:dev'] } + }, + 'electron-packager': { + build: { + options: { + platform: process.platform, + arch: process.arch, + dir: './build', + out: './dist/', + name: 'Kitematic', + ignore: 'bower.json', + version: packagejson['electron-version'], // set version of electron + overwrite: true + } + }, + osxlnx: { + options: { + platform: 'linux', + arch: 'x64', + dir: './build', + out: './dist/', + name: 'Kitematic', + ignore: 'bower.json', + version: packagejson['electron-version'], // set version of electron + overwrite: true + } + } + }, + 'electron-installer-debian': { + options: { + productName: LINUX_APPNAME, + productDescription: 'Run containers through a simple, yet powerful graphical user interface.', + section: 'devel', + priority: 'optional', + icon: './util/kitematic.png', + lintianOverrides: [ + 'changelog-file-missing-in-native-package', + 'executable-not-elf-or-script', + 'extra-license-file' + ], + categories: [ + 'Utility' + ], + rename: function (dest, src) { + return dest + '<%= name %>_'+ packagejson.version +'-<%= revision %>_<%= arch %>.deb'; + } + }, + linux64: { + options: { + arch: 'amd64' + }, + src: './dist/Kitematic-linux-x64/', + dest: './dist/', + }, + linux32: { + options: { + arch: 'i386' + }, + src: './dist/Kitematic-linux-ia32/', + dest: './dist/', + } + }, + 'electron-installer-redhat': { + options: { + productName: LINUX_APPNAME, + productDescription: 'Run containers through a simple, yet powerful graphical user interface.', + priority: 'optional', + icon: './util/kitematic.png', + categories: [ + 'Utilities' + ], + rename: function (dest, src) { + return dest + '<%= name %>_'+ packagejson.version +'-<%= revision %>_<%= arch %>.rpm'; + } + }, + linux64: { + options: { + arch: 'x86_64' + }, + src: './dist/Kitematic-linux-x64/', + dest: './dist/' + }, + linux32: { + options: { + arch: 'x86' + }, + src: './dist/Kitematic-linux-ia32/', + dest: './dist/' + } } }); + // Load the plugins for linux packaging + grunt.loadNpmTasks('grunt-electron-packager'); + grunt.loadNpmTasks('grunt-electron-installer-debian'); + grunt.loadNpmTasks('grunt-electron-installer-redhat'); + grunt.registerTask('default', ['newer:babel', 'less', 'newer:copy:dev', 'shell:electron', 'watchChokidar']); - if (!IS_WINDOWS) { - grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress']); + + if (!IS_WINDOWS && !IS_LINUX) { + grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress', 'shell:linux_npm', 'electron-packager:osxlnx', 'electron-installer-debian:linux64']); + }else if(IS_LINUX){ + + var linuxpackage = null; + // linux package detection + if(IS_DEB && IS_X64){ + linuxpackage = 'electron-installer-debian:linux64'; + }else if(IS_DEB && IS_I386){ + linuxpackage = 'electron-installer-debian:linux32'; + }else if(IS_RPM && IS_X64){ + linuxpackage = 'electron-installer-redhat:linux64'; + }else if(IS_RPM && IS_I386){ + linuxpackage = 'electron-installer-redhat:linux32'; + } + + if(linuxpackage){ + grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'shell:linux_npm', 'electron-packager:build', linuxpackage]); + }else{ + grunt.log.errorlns('Your Linux distribution is not yet supported - arch:'+ process.arch + ' platform:' + process.platform); + } + }else { grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron:windows', 'copy:windows', 'rcedit:exes', 'compress']); } diff --git a/package.json b/package.json index f5420459..bb98122a 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,9 @@ "grunt-download-electron": "^2.1.1", "grunt-electron": "^2.0.0", "grunt-electron-installer": "^1.0.4", + "grunt-electron-installer-debian": "^0.3.0", + "grunt-electron-installer-redhat": "^0.3.0", + "grunt-electron-packager": "0.0.7", "grunt-if-missing": "^1.0.0", "grunt-newer": "^1.1.1", "grunt-plistbuddy": "^0.1.1", diff --git a/util/kitematic.png b/util/kitematic.png new file mode 100644 index 0000000000000000000000000000000000000000..75ae25e8802b479c485d6e36e675dcab0aa6ab5c GIT binary patch literal 7987 zcmY*;bzIZm_y23efJsZ|C_y9zCLqW_QW2041%%NmNGgmTCEW^03y8FIsK^jTmnb0} z0@4kmw%_*t{PX=i_Soa~y61K8x#vDlKJJM!(9@!Ua6kY6pwZD*Hv|9>;S~f>f(Z`` zk75VHgUnI&fhqu0CtSI(CMS%+HutsE0X*@S*YYWaK%sKee&PuLSFRHOARr@)jXIx$vv6!%MGA4F@8v{VFG%im#V3* zVG!ANrCO#r60YvIs5|Ci;gnoIQoGs1F~0uZZseDa?30&_U$-W*pM8@7<=b6X z9GTuBcT*M4U;K7Dil09%KRQJ5wSr@A%gM8O35zGZ!k(PDhxd)Gxnmg zyTY|r1$*KB(!W1?%isNU)2PJRl7q)%&ohEksNZ5+zQ(|M^@>}#S^t|n)!3e>4Ui4M zdG{stG%bP)E-nlCFvgN6F9eQYnh=osjHz}p`dsJQSCRJWA)pyj zI=x$FWE!p6$o5XZWL>Q|`}u{%>D&|>N7piRl{H7#?G4lhI*5`2s#HPrp6coiPkyeN zOw(kl{HnUbe-9*2cdJsxqgi#u6Vme3nDySZjl1>bb<|$Tu!n9fHQ^%6q|AS=C4LgS zr|)W}=*dftKz$tI+4XzaXpCvrLa4mF`Nu3yU_!(Wof6GJw&Y9S6)w)~$GkG0zc=(E z$*L9C&=*q5gxbheezJP+keu|up3Sp@jRGbHI@~VI$Dq;3_rYfG0x&;tf`%un=B}9; zpCO?1lUi=MluWa2mh|)3wD$$>)N%K?*b2|;&;xKT!rCp92`yj6_|GrCu4a6XW=3V^ zzOedG^Me#-As}X)Cwr-BJCuKgR=Ox_{i@om z)*p_?#glUGOqYLBnPrZP%z!(szV)8v4n3``U6*f~W{o+SKvh**-KT0J*eB1Ja(+() zeyVqEPY84$f9k$YhWIHHacA*%3XgP7qgs2F#UV6|T3jlQbWdqQ%7U}w@}%XP|8Zss z11fWj=Lug9KD}vHjFSlqqhc=+-}M|8@z-jfpJg@ex46CDsxlekvGirhiggI@7%7FN zYS!*8gV?7caVm37+t_if^8)1;DhCg(BlgW?*iMHve;bn7crOq=3%k#gu3-YXdoN5DJ_0|6-TTsfBxl*qw_~8 z%(=wxtP%EO_q%Vf8L_mQs%Yl#@pC;?{Avcs0&nbBySi{arN>ggRli%_fh3T&!FZbE zO;f^u-U0JT!(0mHG zJobLkAidxqJxJ}cBqSKjKksY6$y-16)%u|3&D{bAkc*G%(}K2w&I9&~FhQm`HMXH# zYgy!BD(i16?!(sB~a35wx9WUq0^GPYXjbeb{lES7UIFA1=^%$e8@b z7ez|`#ekBf6}eh|DKG>WYsjqdE!neOgcV{S6KtJ*vM)N7$V}MX!EQ@3T`G>>`cpW< zf28X`5V?#lJn&zFmq#r5fKlQy|*{nX*d##0j4O45nU>GNX;Uppn}aWnvbJDR7k z%|1%#l*Csy?ToRxnQ2#7x2>O`ICIz2#VTj6Rh~c8J7-9?5t#QK7Mc8<^rUI+xG0Cu z9$1`^WK-!Qptq$7g;-x~YGJCa*pkT~pOv4XX8TH2_?Y=gVBoxyRNHeBlElWXTsg}X zj*ln8g*VBdVr|IxPWug)wX6+5h~y9HO*u7Ds;;-T=cEfbp44(>|M!aTO_>eb&3&m# zpdIkM0LC?FR{3^nxGax1d?UYvjz3*Wn9 zkUJT}lhf1DvTQm^^v}%!&yMc;RHL9UV?h{%PqR`vqs3>CLL3#NBKtmzZn?%vO;m>5 zAYFGbB1Yu`1w{5b{=1|qxiCW&`>zC$xb`uM&!=01?6J64Rz_a;ZP^_vpx)Px@dv6X5S z14{W>Oi`IZlqIyz)YVNSrTmTM3UWgGAx{?-Wn_ye=?&K+m*551V$L(ujF71*vY(nP z096U&6@)l+^4ZMnwQ*^^GB)A+AZVc(6P&NJM|1d*?eCW?K0HO6i09_6hP+lcVS%0ACmhobm%euT~mrJP5okzqYu$ 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 literal 0 HcmV?d00001 From a6ecf84fe48a1e7333794bff297632fe4d119a3d Mon Sep 17 00:00:00 2001 From: French Ben Date: Thu, 26 May 2016 14:08:51 -0700 Subject: [PATCH 03/10] Added error output when error is unknown Signed-off-by: French Ben --- src/components/ContainerHome.react.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/ContainerHome.react.js b/src/components/ContainerHome.react.js index 4da81d2d..a9204813 100644 --- a/src/components/ContainerHome.react.js +++ b/src/components/ContainerHome.react.js @@ -52,12 +52,15 @@ var ContainerHome = React.createClass({ let body; if (this.props.container.Error) { let error = this.props.container.Error.message; - console.log('Err: %o - %o', typeof error, error); - if (error.indexOf('ETIMEDOUT') !== -1) { - error = 'Timeout error - Try and restart your VM by running: \n"docker-machine restart default" in a terminal'; - } - if (error.indexOf('ECONNREFUSED') !== -1) { - error = 'Is your VM up and running? Check that "docker ps" works in a terminal.'; + if (!error) { + error = this.props.container.Error; + } else { + if (error.indexOf('ETIMEDOUT') !== -1) { + error = 'Timeout error - Try and restart your VM by running: \n"docker-machine restart default" in a terminal'; + } + if (error.indexOf('ECONNREFUSED') !== -1) { + error = 'Is your VM up and running? Check that "docker ps" works in a terminal.'; + } } body = (
From 7bca08d2bbd036991d118ef62f802bc93ac0517a Mon Sep 17 00:00:00 2001 From: French Ben Date: Thu, 26 May 2016 15:24:16 -0700 Subject: [PATCH 04/10] Kitematic 0.10.4 Signed-off-by: French Ben --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f5420459..a51da6c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Kitematic", - "version": "0.10.2", + "version": "0.10.4", "author": "Kitematic", "description": "Simple Docker Container management for Mac OS X.", "homepage": "https://kitematic.com/", From 739e9ef43b6723ec53e43cca72f8417fcb02ca18 Mon Sep 17 00:00:00 2001 From: French Ben Date: Thu, 26 May 2016 17:06:20 -0700 Subject: [PATCH 05/10] Added Circle Changes Signed-off-by: French Ben --- Gruntfile.js | 96 ++++++++++++++++++++++++++++------------------------ circle.yml | 1 + package.json | 1 + 3 files changed, 53 insertions(+), 45 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index b80fd884..5905f45f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,20 +27,37 @@ module.exports = function (grunt) { var OSX_OUT = './dist'; var OSX_OUT_X64 = OSX_OUT + '/' + OSX_APPNAME + '-darwin-x64'; var OSX_FILENAME = OSX_OUT_X64 + '/' + OSX_APPNAME + '.app'; + var LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_amd64.deb'; var IS_WINDOWS = process.platform === 'win32'; - var IS_LINUX = process.platform == 'linux'; + var IS_LINUX = process.platform === 'linux'; - var IS_I386 = process.arch == 'ia32'; - var IS_X64 = process.arch == 'x64'; + var IS_I386 = process.arch === 'ia32'; + var IS_X64 = process.arch === 'x64'; var IS_DEB = fs.existsSync('/etc/lsb-release') || fs.existsSync('/etc/debian_version'); var IS_RPM = fs.existsSync('/etc/redhat-release'); + var linuxpackage = null; + // linux package detection + if (IS_DEB && IS_X64) { + linuxpackage = 'electron-installer-debian:linux64'; + } else if (IS_DEB && IS_I386) { + linuxpackage = 'electron-installer-debian:linux32'; + LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_i386.deb'; + } else if (IS_RPM && IS_X64) { + linuxpackage = 'electron-installer-redhat:linux64'; + LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_x86_64.rpm'; + } else if (IS_RPM && IS_I386) { + linuxpackage = 'electron-installer-redhat:linux32'; + LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_x86.rpm'; + } + grunt.initConfig({ IDENTITY: 'Developer ID Application: Docker Inc', OSX_FILENAME: OSX_FILENAME, - OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g,'\\(').replace(/\)/g,'\\)'), + OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g, '\\(').replace(/\)/g, '\\)'), + LINUX_FILENAME: LINUX_FILENAME, // electron electron: { @@ -191,7 +208,7 @@ module.exports = function (grunt) { expand: true, cwd: 'src/', src: ['**/*.js'], - dest: 'build/', + dest: 'build/' }] } }, @@ -208,31 +225,34 @@ module.exports = function (grunt) { }, sign: { options: { - failOnError: false, + failOnError: false }, command: [ 'codesign --deep -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>/Contents/Frameworks/*', 'codesign -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>', 'codesign -vvv --display <%= OSX_FILENAME_ESCAPED %>', 'codesign -v --verify <%= OSX_FILENAME_ESCAPED %>' - ].join(' && '), + ].join(' && ') }, zip: { - command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + BASENAME + '-Mac.zip', + command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + BASENAME + '-Mac.zip' }, linux_npm: { command: 'cd build && npm install --production' + }, + linux_zip: { + command: 'ditto -c -k --sequesterRsrc --keepParent <%= LINUX_FILENAME %> release/' + BASENAME + '-Ubuntu.deb' } }, clean: { - release: ['build/', 'dist/'], + release: ['build/', 'dist/'] }, compress: { windows: { options: { - archive: './release/' + BASENAME + '-Windows.zip', + archive: './release/' + BASENAME + '-Windows.zip', mode: 'zip' }, files: [{ @@ -241,7 +261,7 @@ module.exports = function (grunt) { cwd: './dist/Kitematic-win32-x64', src: '**/*' }] - }, + } }, // livereload @@ -280,15 +300,15 @@ module.exports = function (grunt) { } }, osxlnx: { - options: { - platform: 'linux', - arch: 'x64', - dir: './build', - out: './dist/', - name: 'Kitematic', - ignore: 'bower.json', - version: packagejson['electron-version'], // set version of electron - overwrite: true + options: { + platform: 'linux', + arch: 'x64', + dir: './build', + out: './dist/', + name: 'Kitematic', + ignore: 'bower.json', + version: packagejson['electron-version'], // set version of electron + overwrite: true } } }, @@ -308,7 +328,7 @@ module.exports = function (grunt) { 'Utility' ], rename: function (dest, src) { - return dest + '<%= name %>_'+ packagejson.version +'-<%= revision %>_<%= arch %>.deb'; + return LINUX_FILENAME; } }, linux64: { @@ -316,27 +336,27 @@ module.exports = function (grunt) { arch: 'amd64' }, src: './dist/Kitematic-linux-x64/', - dest: './dist/', + dest: './dist/' }, linux32: { options: { arch: 'i386' }, src: './dist/Kitematic-linux-ia32/', - dest: './dist/', - } + dest: './dist/' + } }, 'electron-installer-redhat': { options: { productName: LINUX_APPNAME, productDescription: 'Run containers through a simple, yet powerful graphical user interface.', priority: 'optional', - icon: './util/kitematic.png', + icon: './util/kitematic.png', categories: [ 'Utilities' ], rename: function (dest, src) { - return dest + '<%= name %>_'+ packagejson.version +'-<%= revision %>_<%= arch %>.rpm'; + return LINUX_FILENAME; } }, linux64: { @@ -364,27 +384,13 @@ module.exports = function (grunt) { grunt.registerTask('default', ['newer:babel', 'less', 'newer:copy:dev', 'shell:electron', 'watchChokidar']); if (!IS_WINDOWS && !IS_LINUX) { - grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress', 'shell:linux_npm', 'electron-packager:osxlnx', 'electron-installer-debian:linux64']); - }else if(IS_LINUX){ - - var linuxpackage = null; - // linux package detection - if(IS_DEB && IS_X64){ - linuxpackage = 'electron-installer-debian:linux64'; - }else if(IS_DEB && IS_I386){ - linuxpackage = 'electron-installer-debian:linux32'; - }else if(IS_RPM && IS_X64){ - linuxpackage = 'electron-installer-redhat:linux64'; - }else if(IS_RPM && IS_I386){ - linuxpackage = 'electron-installer-redhat:linux32'; - } - - if(linuxpackage){ + grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'shell:linux_npm', 'electron-packager:osxlnx', 'electron-installer-debian:linux64', 'shell:linux_zip']); + }else if (IS_LINUX) { + if (linuxpackage) { grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'shell:linux_npm', 'electron-packager:build', linuxpackage]); - }else{ - grunt.log.errorlns('Your Linux distribution is not yet supported - arch:'+ process.arch + ' platform:' + process.platform); + }else { + grunt.log.errorlns('Your Linux distribution is not yet supported - arch:' + process.arch + ' platform:' + process.platform); } - }else { grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron:windows', 'copy:windows', 'rcedit:exes', 'compress']); } diff --git a/circle.yml b/circle.yml index 59f1a786..145ce019 100644 --- a/circle.yml +++ b/circle.yml @@ -13,3 +13,4 @@ deployment: commands: - github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Mac.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Mac.zip - github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Windows.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Windows.zip + - github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Ubuntu.deb --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Ubuntu.deb diff --git a/package.json b/package.json index bb98122a..2328e933 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "test": "jest -c jest-unit.json", "integration": "jest -c jest-integration.json", "release": "grunt release", + "release-verbose": "grunt --verbose release", "lint": "jsxhint src" }, "license": "Apache-2.0", From de88688cabcb654cc9d0c3292a81ed951ff2d0b4 Mon Sep 17 00:00:00 2001 From: French Ben Date: Thu, 26 May 2016 21:34:58 -0700 Subject: [PATCH 06/10] Fixed container exec Signed-off-by: French Ben --- src/utils/DockerMachineUtil.js | 42 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/utils/DockerMachineUtil.js b/src/utils/DockerMachineUtil.js index 634c8059..049f8b9b 100644 --- a/src/utils/DockerMachineUtil.js +++ b/src/utils/DockerMachineUtil.js @@ -147,29 +147,33 @@ var DockerMachine = { }); }, dockerTerminal: function (cmd, machineName = this.name()) { + cmd = cmd || process.env.SHELL || ''; if (util.isWindows()) { - cmd = cmd || ''; - this.url(machineName).then(machineUrl => { - util.exec('start powershell.exe ' + cmd, - {env: { - 'DOCKER_HOST': machineUrl, - 'DOCKER_CERT_PATH': path.join(util.home(), '.docker', 'machine', 'machines', machineName), - 'DOCKER_TLS_VERIFY': 1 - } + if (util.isNative()) { + util.exec('start powershell.exe ' + cmd); + } else { + this.url(machineName).then(machineUrl => { + util.exec('start powershell.exe ' + cmd, + {env: { + 'DOCKER_HOST': machineUrl, + 'DOCKER_CERT_PATH': path.join(util.home(), '.docker', 'machine', 'machines', machineName), + 'DOCKER_TLS_VERIFY': 1 + } + }); }); - }); - } else if (util.isNative()) { - cmd = cmd || process.env.SHELL; - var terminal = util.isLinux() ? util.linuxTerminal() : [path.join(process.env.RESOURCES_PATH, 'terminal')]; - terminal.push(cmd); - if (terminal) { - util.execFile(terminal).then(() => {}); } } else { - cmd = cmd || process.env.SHELL; - this.url(machineName).then(machineUrl => { - util.execFile([path.join(process.env.RESOURCES_PATH, 'terminal'), `DOCKER_HOST=${machineUrl} DOCKER_CERT_PATH=${path.join(util.home(), '.docker/machine/machines/' + machineName)} DOCKER_TLS_VERIFY=1 ${cmd}`]).then(() => {}); - }); + var terminal = util.isLinux() ? util.linuxTerminal() : [path.join(process.env.RESOURCES_PATH, 'terminal')]; + if (util.isNative()) { + terminal.push(cmd); + util.execFile(terminal).then(() => {}); + } else { + this.url(machineName).then(machineUrl => { + terminal.push(`DOCKER_HOST=${machineUrl} DOCKER_CERT_PATH=${path.join(util.home(), '.docker/machine/machines/' + machineName)} DOCKER_TLS_VERIFY=1`); + terminal.push(cmd); + util.execFile(terminal).then(() => {}); + }); + } } }, virtualBoxLogs: function (machineName = this.name()) { From f9c6e1d42b21340528fee03f17cf1f843bba3742 Mon Sep 17 00:00:00 2001 From: Albert Domenech Date: Sun, 15 May 2016 13:21:29 +0200 Subject: [PATCH 07/10] Initial debian/ubuntu installer: - Used grunt-packager and grunt-electron-installer-debian - Added debian/ubuntu ai32 arch support - Added Redhat/Centos/Fedora rpm support - Added electron-packager to MacOSX custom task - Fixed OSX Linux build and better conditional legibility - Fixed ESLint indications Signed-off-by: Albert Domenech --- Gruntfile.js | 151 +++++++++++++++++++++++++++++++++++++++++---- package.json | 3 + util/kitematic.png | Bin 0 -> 7987 bytes 3 files changed, 143 insertions(+), 11 deletions(-) create mode 100644 util/kitematic.png diff --git a/Gruntfile.js b/Gruntfile.js index 7cd1864b..505fd4a1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,3 +1,4 @@ +var fs = require('fs'); var path = require('path'); var execFile = require('child_process').execFile; var packagejson = require('./package.json'); @@ -26,11 +27,20 @@ module.exports = function (grunt) { var OSX_OUT = './dist'; var OSX_OUT_X64 = OSX_OUT + '/' + OSX_APPNAME + '-darwin-x64'; var OSX_FILENAME = OSX_OUT_X64 + '/' + OSX_APPNAME + '.app'; + var IS_WINDOWS = process.platform === 'win32'; + var IS_LINUX = process.platform === 'linux'; + + var IS_I386 = process.arch === 'ia32'; + var IS_X64 = process.arch === 'x64'; + + var IS_DEB = fs.existsSync('/etc/lsb-release') || fs.existsSync('/etc/debian_version'); + var IS_RPM = fs.existsSync('/etc/redhat-release'); + grunt.initConfig({ IDENTITY: 'Developer ID Application: Docker Inc', OSX_FILENAME: OSX_FILENAME, - OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g,'\\(').replace(/\)/g,'\\)'), + OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g, '\\(').replace(/\)/g, '\\)'), // electron electron: { @@ -117,7 +127,9 @@ module.exports = function (grunt) { dest: 'build/' }, { cwd: 'node_modules/', - src: Object.keys(packagejson.dependencies).map(function (dep) { return dep + '/**/*';}), + src: Object.keys(packagejson.dependencies).map(function (dep) { + return dep + '/**/*'; + }), dest: 'build/node_modules/', expand: true }] @@ -181,7 +193,7 @@ module.exports = function (grunt) { expand: true, cwd: 'src/', src: ['**/*.js'], - dest: 'build/', + dest: 'build/' }] } }, @@ -198,28 +210,31 @@ module.exports = function (grunt) { }, sign: { options: { - failOnError: false, + failOnError: false }, command: [ 'codesign --deep -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>/Contents/Frameworks/*', 'codesign -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>', 'codesign -vvv --display <%= OSX_FILENAME_ESCAPED %>', 'codesign -v --verify <%= OSX_FILENAME_ESCAPED %>' - ].join(' && '), + ].join(' && ') }, zip: { - command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + BASENAME + '-Mac.zip', + command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + BASENAME + '-Mac.zip' + }, + linux_npm: { + command: 'cd build && npm install --production' } }, clean: { - release: ['build/', 'dist/'], + release: ['build/', 'dist/'] }, compress: { windows: { options: { - archive: './release/' + BASENAME + '-Windows.zip', + archive: './release/' + BASENAME + '-Windows.zip', mode: 'zip' }, files: [{ @@ -228,7 +243,7 @@ module.exports = function (grunt) { cwd: './dist/Kitematic-win32-x64', src: '**/*' }] - }, + } }, // livereload @@ -252,12 +267,126 @@ module.exports = function (grunt) { files: ['images/*', 'index.html', 'fonts/*'], tasks: ['newer:copy:dev'] } + }, + 'electron-packager': { + build: { + options: { + platform: process.platform, + arch: process.arch, + dir: './build', + out: './dist/', + name: 'Kitematic', + ignore: 'bower.json', + version: packagejson['electron-version'], // set version of electron + overwrite: true + } + }, + osxlnx: { + options: { + platform: 'linux', + arch: 'x64', + dir: './build', + out: './dist/', + name: 'Kitematic', + ignore: 'bower.json', + version: packagejson['electron-version'], // set version of electron + overwrite: true + } + } + }, + 'electron-installer-debian': { + options: { + productName: LINUX_APPNAME, + productDescription: 'Run containers through a simple, yet powerful graphical user interface.', + section: 'devel', + priority: 'optional', + icon: './util/kitematic.png', + lintianOverrides: [ + 'changelog-file-missing-in-native-package', + 'executable-not-elf-or-script', + 'extra-license-file' + ], + categories: [ + 'Utility' + ], + rename: function (dest, src) { + return dest + '<%= name %>_' + packagejson.version + '-<%= revision %>_<%= arch %>.deb'; + } + }, + linux64: { + options: { + arch: 'amd64' + }, + src: './dist/Kitematic-linux-x64/', + dest: './dist/' + }, + linux32: { + options: { + arch: 'i386' + }, + src: './dist/Kitematic-linux-ia32/', + dest: './dist/' + } + }, + 'electron-installer-redhat': { + options: { + productName: LINUX_APPNAME, + productDescription: 'Run containers through a simple, yet powerful graphical user interface.', + priority: 'optional', + icon: './util/kitematic.png', + categories: [ + 'Utilities' + ], + rename: function (dest, src) { + return dest + '<%= name %>_' + packagejson.version + '-<%= revision %>_<%= arch %>.rpm'; + } + }, + linux64: { + options: { + arch: 'x86_64' + }, + src: './dist/Kitematic-linux-x64/', + dest: './dist/' + }, + linux32: { + options: { + arch: 'x86' + }, + src: './dist/Kitematic-linux-ia32/', + dest: './dist/' + } } }); + // Load the plugins for linux packaging + grunt.loadNpmTasks('grunt-electron-packager'); + grunt.loadNpmTasks('grunt-electron-installer-debian'); + grunt.loadNpmTasks('grunt-electron-installer-redhat'); + grunt.registerTask('default', ['newer:babel', 'less', 'newer:copy:dev', 'shell:electron', 'watchChokidar']); - if (!IS_WINDOWS) { - grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress']); + + if (!IS_WINDOWS && !IS_LINUX) { + grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress', 'shell:linux_npm', 'electron-packager:osxlnx', 'electron-installer-debian:linux64']); + }else if (IS_LINUX) { + + var linuxpackage = null; + // linux package detection + if (IS_DEB && IS_X64) { + linuxpackage = 'electron-installer-debian:linux64'; + } else if (IS_DEB && IS_I386) { + linuxpackage = 'electron-installer-debian:linux32'; + } else if (IS_RPM && IS_X64) { + linuxpackage = 'electron-installer-redhat:linux64'; + }else if (IS_RPM && IS_I386) { + linuxpackage = 'electron-installer-redhat:linux32'; + } + + if (linuxpackage) { + grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'shell:linux_npm', 'electron-packager:build', linuxpackage]); + }else { + grunt.log.errorlns('Your Linux distribution is not yet supported - arch:' + process.arch + ' platform:' + process.platform); + } + }else { grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron:windows', 'copy:windows', 'rcedit:exes', 'compress']); } diff --git a/package.json b/package.json index f5420459..bb98122a 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,9 @@ "grunt-download-electron": "^2.1.1", "grunt-electron": "^2.0.0", "grunt-electron-installer": "^1.0.4", + "grunt-electron-installer-debian": "^0.3.0", + "grunt-electron-installer-redhat": "^0.3.0", + "grunt-electron-packager": "0.0.7", "grunt-if-missing": "^1.0.0", "grunt-newer": "^1.1.1", "grunt-plistbuddy": "^0.1.1", diff --git a/util/kitematic.png b/util/kitematic.png new file mode 100644 index 0000000000000000000000000000000000000000..75ae25e8802b479c485d6e36e675dcab0aa6ab5c GIT binary patch literal 7987 zcmY*;bzIZm_y23efJsZ|C_y9zCLqW_QW2041%%NmNGgmTCEW^03y8FIsK^jTmnb0} z0@4kmw%_*t{PX=i_Soa~y61K8x#vDlKJJM!(9@!Ua6kY6pwZD*Hv|9>;S~f>f(Z`` zk75VHgUnI&fhqu0CtSI(CMS%+HutsE0X*@S*YYWaK%sKee&PuLSFRHOARr@)jXIx$vv6!%MGA4F@8v{VFG%im#V3* zVG!ANrCO#r60YvIs5|Ci;gnoIQoGs1F~0uZZseDa?30&_U$-W*pM8@7<=b6X z9GTuBcT*M4U;K7Dil09%KRQJ5wSr@A%gM8O35zGZ!k(PDhxd)Gxnmg zyTY|r1$*KB(!W1?%isNU)2PJRl7q)%&ohEksNZ5+zQ(|M^@>}#S^t|n)!3e>4Ui4M zdG{stG%bP)E-nlCFvgN6F9eQYnh=osjHz}p`dsJQSCRJWA)pyj zI=x$FWE!p6$o5XZWL>Q|`}u{%>D&|>N7piRl{H7#?G4lhI*5`2s#HPrp6coiPkyeN zOw(kl{HnUbe-9*2cdJsxqgi#u6Vme3nDySZjl1>bb<|$Tu!n9fHQ^%6q|AS=C4LgS zr|)W}=*dftKz$tI+4XzaXpCvrLa4mF`Nu3yU_!(Wof6GJw&Y9S6)w)~$GkG0zc=(E z$*L9C&=*q5gxbheezJP+keu|up3Sp@jRGbHI@~VI$Dq;3_rYfG0x&;tf`%un=B}9; zpCO?1lUi=MluWa2mh|)3wD$$>)N%K?*b2|;&;xKT!rCp92`yj6_|GrCu4a6XW=3V^ zzOedG^Me#-As}X)Cwr-BJCuKgR=Ox_{i@om z)*p_?#glUGOqYLBnPrZP%z!(szV)8v4n3``U6*f~W{o+SKvh**-KT0J*eB1Ja(+() zeyVqEPY84$f9k$YhWIHHacA*%3XgP7qgs2F#UV6|T3jlQbWdqQ%7U}w@}%XP|8Zss z11fWj=Lug9KD}vHjFSlqqhc=+-}M|8@z-jfpJg@ex46CDsxlekvGirhiggI@7%7FN zYS!*8gV?7caVm37+t_if^8)1;DhCg(BlgW?*iMHve;bn7crOq=3%k#gu3-YXdoN5DJ_0|6-TTsfBxl*qw_~8 z%(=wxtP%EO_q%Vf8L_mQs%Yl#@pC;?{Avcs0&nbBySi{arN>ggRli%_fh3T&!FZbE zO;f^u-U0JT!(0mHG zJobLkAidxqJxJ}cBqSKjKksY6$y-16)%u|3&D{bAkc*G%(}K2w&I9&~FhQm`HMXH# zYgy!BD(i16?!(sB~a35wx9WUq0^GPYXjbeb{lES7UIFA1=^%$e8@b z7ez|`#ekBf6}eh|DKG>WYsjqdE!neOgcV{S6KtJ*vM)N7$V}MX!EQ@3T`G>>`cpW< zf28X`5V?#lJn&zFmq#r5fKlQy|*{nX*d##0j4O45nU>GNX;Uppn}aWnvbJDR7k z%|1%#l*Csy?ToRxnQ2#7x2>O`ICIz2#VTj6Rh~c8J7-9?5t#QK7Mc8<^rUI+xG0Cu z9$1`^WK-!Qptq$7g;-x~YGJCa*pkT~pOv4XX8TH2_?Y=gVBoxyRNHeBlElWXTsg}X zj*ln8g*VBdVr|IxPWug)wX6+5h~y9HO*u7Ds;;-T=cEfbp44(>|M!aTO_>eb&3&m# zpdIkM0LC?FR{3^nxGax1d?UYvjz3*Wn9 zkUJT}lhf1DvTQm^^v}%!&yMc;RHL9UV?h{%PqR`vqs3>CLL3#NBKtmzZn?%vO;m>5 zAYFGbB1Yu`1w{5b{=1|qxiCW&`>zC$xb`uM&!=01?6J64Rz_a;ZP^_vpx)Px@dv6X5S z14{W>Oi`IZlqIyz)YVNSrTmTM3UWgGAx{?-Wn_ye=?&K+m*551V$L(ujF71*vY(nP z096U&6@)l+^4ZMnwQ*^^GB)A+AZVc(6P&NJM|1d*?eCW?K0HO6i09_6hP+lcVS%0ACmhobm%euT~mrJP5okzqYu$ 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 literal 0 HcmV?d00001 From c712f27171630397e67393dafb50fef3c42a4256 Mon Sep 17 00:00:00 2001 From: "ClemMakesApps@gmail.com" Date: Fri, 27 May 2016 14:03:43 -0500 Subject: [PATCH 08/10] Fix electron deprecated API Signed-off-by: Clement Ho --- src/browser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser.js b/src/browser.js index 2069c802..7b81f3d5 100644 --- a/src/browser.js +++ b/src/browser.js @@ -41,7 +41,7 @@ app.on('ready', function () { mainWindow.loadURL(path.normalize('file://' + path.join(__dirname, 'index.html'))); - app.on('activate-with-no-open-windows', function () { + app.on('activate', function () { if (mainWindow) { mainWindow.show(); } From b5147382835fa9097daefe157f21281b1fbaf47a Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Mon, 30 May 2016 14:11:09 -0500 Subject: [PATCH 09/10] Move deb rhel electron to optionalDependencies grunt-electron-installer modules for debian and redhat will not install on windows unless we move them to optional. Grunt file will error on those platforms if the modules fail to install for some other reason. --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 94ec6f1f..56e7ac43 100644 --- a/package.json +++ b/package.json @@ -71,8 +71,6 @@ "grunt-download-electron": "^2.1.1", "grunt-electron": "^2.0.0", "grunt-electron-installer": "^1.0.4", - "grunt-electron-installer-debian": "^0.3.0", - "grunt-electron-installer-redhat": "^0.3.0", "grunt-electron-packager": "0.0.7", "grunt-if-missing": "^1.0.0", "grunt-newer": "^1.1.1", @@ -89,5 +87,9 @@ "run-sequence": "^1.0.2", "shell-escape": "^0.2.0", "source-map-support": "^0.3.2" + }, + "optionalDependencies": { + "grunt-electron-installer-debian": "^0.3.0", + "grunt-electron-installer-redhat": "^0.3.0" } } From be2d011491765e08b6fa50a3950db8c0f210266a Mon Sep 17 00:00:00 2001 From: French Ben Date: Tue, 31 May 2016 17:53:52 -0700 Subject: [PATCH 10/10] Fixed release file for ubuntu as zip instead of deb Signed-off-by: French Ben --- Gruntfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index f3a81cd4..f0a2cdae 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -244,7 +244,7 @@ module.exports = function (grunt) { command: 'cd build && npm install --production' }, linux_zip: { - command: 'ditto -c -k --sequesterRsrc --keepParent <%= LINUX_FILENAME %> release/' + BASENAME + '-Ubuntu.deb' + command: 'ditto -c -k --sequesterRsrc --keepParent <%= LINUX_FILENAME %> release/' + BASENAME + '-Ubuntu.zip' } },