| a.WriteLine("set PATH=%PATH%;" + codepath ) | a.WriteLine("set PATH=%PATH%;" + codepath ) | ||||
| // a.WriteLine("set LAUNCHEDWITHENV=YES" ) | // a.WriteLine("set LAUNCHEDWITHENV=YES" ) | ||||
| var runningInExlr = function() { | |||||
| var __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||||
| var __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||||
| var currentIsExlr = function() { | |||||
| if(fs.FileExists('./' + __ALIAS__STAMP__)) return true | if(fs.FileExists('./' + __ALIAS__STAMP__)) return true | ||||
| } | } | ||||
| if(cfn === sfn && runningInExlr()) { | |||||
| a.WriteLine("cd .."); | |||||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cfn+" /all:true") // PB : TODO -- Retain all script args... | |||||
| var runningInExlr = currentIsExlr() | |||||
| if(cfn === sfn && runningInExlr) { | |||||
| a.WriteLine("cd .."); | |||||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cfn+" /all:true") // PB : TODO -- Retain all script args... | |||||
| } | } | ||||
| else { | else { | ||||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+sfn+" /all:true") | |||||
| var guesselxr = fs.FileExists(cd + './elxr/' + __ALIAS__STAMP__) | |||||
| if(guesselxr) { | |||||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cd + './elxr/' + 'i.win.js' +" /all:true") | |||||
| } | |||||
| else a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+sfn+" /all:true") | |||||
| } | } | ||||
| // a.WriteLine("powershell.exe ^") | // a.WriteLine("powershell.exe ^") | ||||
| WScript.Echo(all) | WScript.Echo(all) | ||||
| if(!all && preq.optional) return | if(!all && preq.optional) return | ||||
| var p = preq.exists().then(function(exists) { | var p = preq.exists().then(function(exists) { | ||||
| if (exists) console.log( preq.shellcmd + ' exists'); | |||||
| if (exists && !preq.forceinstall) console.log( preq.shellcmd + ' exists'); | |||||
| else { | else { | ||||
| console.log(exists) | console.log(exists) | ||||
| console.log(preq.shellcmd + ' is not installed'); | console.log(preq.shellcmd + ' is not installed'); | ||||
| }) | }) | ||||
| } | } | ||||
| function install() { | |||||
| var self = this; | |||||
| var ifns = [self.installcmd] | |||||
| if(!ifns.map) ifns.map = map; | |||||
| console.log('Installing') | |||||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||||
| if(e.code === 1602) { | |||||
| console.warn("Installation was probably cancelled.") | |||||
| } | |||||
| else throw e | |||||
| }).then(function(){ | |||||
| return self.postinstallsteps && self.postinstallsteps() | |||||
| }) | |||||
| } | |||||
| function unique(arr) { | function unique(arr) { | ||||
| var hash = {}, result = []; | var hash = {}, result = []; | ||||
| for ( var i = 0, l = arr.length; i < l; ++i ) { | for ( var i = 0, l = arr.length; i < l; ++i ) { | ||||
| , installcmd: ['MSIEXEC.exe', ['/i' | , installcmd: ['MSIEXEC.exe', ['/i' | ||||
| , path.normalize(downloadsdir + '/' + 'node-v14.17.3-x64.msi') | , path.normalize(downloadsdir + '/' + 'node-v14.17.3-x64.msi') | ||||
| , 'ACCEPT=YES', '/passive']] | , 'ACCEPT=YES', '/passive']] | ||||
| , install : function() { | |||||
| var self = this; | |||||
| var ifns = [self.installcmd] | |||||
| if(!ifns.map) ifns.map = map; | |||||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||||
| if(e.code === 1602) { | |||||
| console.warn("Installation was probably cancelled.") | |||||
| } | |||||
| else throw e | |||||
| }) | |||||
| } | |||||
| , install : install | |||||
| , exists : exists | , exists : exists | ||||
| , preinstallsteps: function() { | , preinstallsteps: function() { | ||||
| var self = this; | var self = this; | ||||
| return any(steps) | return any(steps) | ||||
| // return any([any(steps), any(prompts)]) | // return any([any(steps), any(prompts)]) | ||||
| } | } | ||||
| , install : function() { | |||||
| var self = this; | |||||
| var ifns = [self.installcmd] | |||||
| if(!ifns.map) ifns.map = map; | |||||
| console.log('Installing') | |||||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||||
| if(e.code === 1602) { | |||||
| console.warn("Installation was probably cancelled.") | |||||
| } | |||||
| else throw e | |||||
| }).then(function(){ | |||||
| return self.postinstallsteps() | |||||
| }) | |||||
| } | |||||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||||
| , exists : exists | |||||
| , install : install | |||||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||||
| , exists : exists | |||||
| } | } | ||||
| , { | , { | ||||
| shellcmd: 'code' | shellcmd: 'code' | ||||
| return any(steps) | return any(steps) | ||||
| // return any([any(steps), any(prompts)]) | // return any([any(steps), any(prompts)]) | ||||
| } | } | ||||
| , install : function() { | |||||
| var self = this; | |||||
| var ifns = [self.installcmd] | |||||
| if(!ifns.map) ifns.map = map; | |||||
| console.log('Installing') | |||||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||||
| if(e.code === 1602) { | |||||
| console.warn("Installation was probably cancelled.") | |||||
| } | |||||
| else throw e | |||||
| }).then(function(){ | |||||
| return self.postinstallsteps() | |||||
| }) | |||||
| } | |||||
| , install : install | |||||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | ||||
| , exists : exists | , exists : exists | ||||
| } | } | ||||
| , { | |||||
| shellcmd: 'Ssms.exe', | |||||
| url: 'https://go.microsoft.com/fwlink/?linkid=2043154&clcid=0x409' | |||||
| , installer: 'SSMS-Setup-ENU.exe' | |||||
| , installcmd: ['cmd', ['/c', 'start', | |||||
| '/WAIT', downloadsdir + '/' + 'SSMS-Setup-ENU.exe' | |||||
| , '/Quiet' | |||||
| //, 'SSMSInstallRoot=%systemdrive%\\Program Files (x86)\\Microsoft SQL Server\\140\\Tools\\Binn\\ManagementStudio' | |||||
| ]] | |||||
| , install : install | |||||
| , exists : exists | |||||
| , preinstallsteps: function() { | |||||
| var self = this; | |||||
| console.log('smss preinstall steps') | |||||
| var steps = []; | |||||
| steps.push( | |||||
| function(){ | |||||
| if (!existsSync(downloadsdir + '/' + self.installer)) { | |||||
| console.log(self.url) | |||||
| return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', ['"' + self.url + '"', downloadsdir + '/' + self.installer] | |||||
| , { waitmsg : 'downloading '+ self.shellcmd +' please wait' }) | |||||
| } | |||||
| else { | |||||
| console.log(self.installer + ' Already exits Download skipped.') | |||||
| return Promise.resolve(true) | |||||
| } | |||||
| } | |||||
| ) | |||||
| return any(steps) | |||||
| // return any([any(steps), any(prompts)]) | |||||
| } | |||||
| } | |||||
| , { | , { | ||||
| shellcmd: 'mysql', | shellcmd: 'mysql', | ||||
| url: 'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.30.0.msi' //'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.29.0.msi' | url: 'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.30.0.msi' //'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.29.0.msi' | ||||
| , installer: 'mysql-installer-community-8.0.30.0.msi' | , installer: 'mysql-installer-community-8.0.30.0.msi' | ||||
| , installcmd: ['MSIEXEC.exe', ['/i' | , installcmd: ['MSIEXEC.exe', ['/i' | ||||
| , path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') | |||||
| , path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') | |||||
| //, 'ACCEPT=YES', '/passive' | //, 'ACCEPT=YES', '/passive' | ||||
| ]] | |||||
| , install : function() { | |||||
| var self = this; | |||||
| var ifns = [self.installcmd] | |||||
| if(!ifns.map) ifns.map = map; | |||||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||||
| if(e.code === 1602) { | |||||
| console.warn("Installation was probably cancelled.") | |||||
| } | |||||
| else throw e | |||||
| }) | |||||
| } | |||||
| ]] | |||||
| , install : install | |||||
| , exists : exists | , exists : exists | ||||
| , preinstallsteps: function() { | , preinstallsteps: function() { | ||||
| var self = this; | var self = this; | ||||
| } | } | ||||
| , { | , { | ||||
| shellcmd: 'elxr' | shellcmd: 'elxr' | ||||
| , forceinstall : true | |||||
| , installcmd: [ isWin() ? 'npm.cmd' : 'npm' , ['link'], { cwd : selectedinstance.root + '\\elxr' /* cwd should be the cloned dir*/}] | , installcmd: [ isWin() ? 'npm.cmd' : 'npm' , ['link'], { cwd : selectedinstance.root + '\\elxr' /* cwd should be the cloned dir*/}] | ||||
| , preinstallsteps: function() { | , preinstallsteps: function() { | ||||
| var self = this; | var self = this; | ||||
| console.log('Elxr Installsteps called') | console.log('Elxr Installsteps called') | ||||
| var installIfNotExists = function(){ | var installIfNotExists = function(){ | ||||
| console.log('Elxr PreInstallsteps called') | console.log('Elxr PreInstallsteps called') | ||||
| var ifns = [ | |||||
| ['git', ['clone', 'http://git.bbh.org.in/chess/elxr'] ] | |||||
| ] | |||||
| if(existsSyncFolder( selectedinstance.root + '\\elxr')) { | |||||
| if(existsSyncFolder( selectedinstance.root + '\\elxr\\.git')) { | |||||
| // PB : TODO -- use a elxr guid signature to detect more reliably folders named the same that is not us. | |||||
| ifns = [ ['git', ['pull'], { cwd : selectedinstance.root + '\\elxr' } ] ] | |||||
| } | |||||
| else { | |||||
| throw 'elxr subfolder not recognized as a git repository. Please cleanup and continue.' | |||||
| var steps = []; | |||||
| var chessRepo = 'https://git.bbh.org.in' | |||||
| steps.push( | |||||
| function(){ | |||||
| // console.log('cli prompt steps') | |||||
| var choices = { 0 : 'http://git.bbh', 1 : 'https://git.bbh.org.in' } | |||||
| return cli.prompt(choices, 'git repository : ', chessRepo).then(function(choice){ chessRepo = choice } ) | |||||
| } | } | ||||
| } | |||||
| else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ') | |||||
| ifns.push(['npm', ['i'], { cwd : '.\\elxr' } ]) | |||||
| if(!ifns.map) ifns.map = map; | |||||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||||
| if(e.code === 1602) { | |||||
| console.warn("Installation was probably cancelled.") | |||||
| ) | |||||
| return any(steps).then(function(chessRepo){ | |||||
| var ifns = [ | |||||
| ['git', ['clone', chessRepo + '/chess/elxr'] ] | |||||
| ] | |||||
| if(existsSyncFolder( selectedinstance.root + '\\elxr')) { | |||||
| if(existsSyncFolder( selectedinstance.root + '\\elxr\\.git')) { | |||||
| // PB : TODO -- use a elxr guid signature to detect more reliably folders named the same that is not us. | |||||
| ifns = [ ['git', ['pull'], { cwd : selectedinstance.root + '\\elxr' } ] ] | |||||
| } | |||||
| else { | |||||
| throw 'elxr subfolder not recognized as a git repository. Please cleanup and continue.' | |||||
| } | |||||
| } | } | ||||
| else throw e | |||||
| else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ') | |||||
| ifns.push(['npm', ['i'], { cwd : '.\\elxr' } ]) | |||||
| if(!ifns.map) ifns.map = map; | |||||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||||
| if(e.code === 1602) { | |||||
| console.warn("Installation was probably cancelled.") | |||||
| } | |||||
| else throw e | |||||
| }) | |||||
| }) | }) | ||||
| } | } | ||||
| var ifns = [ self.installcmd ] | var ifns = [ self.installcmd ] | ||||
| , install: function () { | , install: function () { | ||||
| var self = this; | var self = this; | ||||
| console.log('Elxr Install called') | console.log('Elxr Install called') | ||||
| return any([ /*self.preinstallsteps,*/ function(){ return self.installsteps() } | |||||
| , nodeShellExec('node', [selectedinstance.root + '\\elxr\\index.js', 'init']) | |||||
| return any([ self.preinstallsteps, function(){ return self.installsteps() } | |||||
| , nodeShellExec('start', ['""', '"C:\\Program Files\\Git\\bin\\sh.exe"', '-c', '"node ' + (selectedinstance.root + '\\elxr\\index.js').replace(/\\/g, '/') + ' i elixir"']) | |||||
| // , nodeShellExec('node', [selectedinstance.root + 'elxr\\index.js']) | // , nodeShellExec('node', [selectedinstance.root + 'elxr\\index.js']) | ||||
| ]) | ]) | ||||
| } | } |