| const BUILD_VERSION = '[VI]Version: {version} - built on {date}[/VI]'; | const BUILD_VERSION = '[VI]Version: {version} - built on {date}[/VI]'; | ||||
| const runtimestamp = (new Date()).getTime(); | |||||
| function getVersion() { return BUILD_VERSION; } | function getVersion() { return BUILD_VERSION; } | ||||
| console.log(getVersion()) | console.log(getVersion()) | ||||
| console.log('result : ' + JSON.stringify(r)) | console.log('result : ' + JSON.stringify(r)) | ||||
| Object.keys(processedArgs).forEach((v) => { v != '_' ? namedArgs.push('--' + v + '=' + processedArgs[v]) : null; }) | Object.keys(processedArgs).forEach((v) => { v != '_' ? namedArgs.push('--' + v + '=' + processedArgs[v]) : null; }) | ||||
| // PB : TODO -- Convert all the cli args back to string. | // PB : TODO -- Convert all the cli args back to string. | ||||
| var args = [__dirname + '/.run/windowselevate.hta'].concat(processedArgs._).concat(namedArgs.join(' ')); args.push('--runas=self'); | |||||
| var args = [`${selectedinstance.root}/.elxr/run-${runtimestamp}/windowselevate.hta`].concat(processedArgs._).concat(namedArgs.join(' ')); args.push('--runas=self'); | |||||
| args.push('--nodepath=' + r[r.length - 1]) | args.push('--nodepath=' + r[r.length - 1]) | ||||
| if (!processedArgs.node_env) args.push('--node_env=' + ENV.NODE_ENV) | if (!processedArgs.node_env) args.push('--node_env=' + ENV.NODE_ENV) | ||||
| if (processedArgs.debug) args.push('--debug=true') // Enable to debug elevated.. | if (processedArgs.debug) args.push('--debug=true') // Enable to debug elevated.. | ||||
| const { readdir } = require("fs").promises | const { readdir } = require("fs").promises | ||||
| const dirs = async (perform, path) => { | |||||
| for (const dir of await readdir(path || process.cwd(), { withFileTypes: true })) { | |||||
| if (dir.isDirectory()) perform(dir) | |||||
| } | |||||
| } | |||||
| dirs(perform_git_add) | dirs(perform_git_add) | ||||
| } | } | ||||
| , 'remove': (remotename) => { | , 'remove': (remotename) => { | ||||
| const { readdir } = require("fs").promises | const { readdir } = require("fs").promises | ||||
| const dirs = async (perform, path) => { | |||||
| for (const dir of await readdir(path || process.cwd(), { withFileTypes: true })) { | |||||
| if (dir.isDirectory()) perform(dir) | |||||
| } | |||||
| } | |||||
| dirs(perform_git_remove) | dirs(perform_git_remove) | ||||
| } | } | ||||
| , 'init-gitea': (user) => { | , 'init-gitea': (user) => { | ||||
| const { readdir } = require("fs").promises | const { readdir } = require("fs").promises | ||||
| const dirs = async (perform, path) => { | |||||
| for (const dir of await readdir(path || process.cwd(), { withFileTypes: true })) { | |||||
| if (dir.isDirectory()) perform(dir) | |||||
| } | |||||
| } | |||||
| dirs(perform_init_gitea) | dirs(perform_init_gitea) | ||||
| } | } | ||||
| , 'syncmaster': (label) => { | , 'syncmaster': (label) => { | ||||
| var steps = [ | var steps = [ | ||||
| () => { | () => { | ||||
| if (!existsSync(downloadsdir + '/' + this.installer)) { | if (!existsSync(downloadsdir + '/' + this.installer)) { | ||||
| return nodeShellExec('.run/download.bat', [this.url, downloadsdir + '/' + this.installer]) | |||||
| return nodeShellExec(`${selectedinstance.root}/.elxr/run-${runtimestamp}/download.bat`, [this.url, downloadsdir + '/' + this.installer]) | |||||
| } | } | ||||
| else return Promise.resolve(true) | else return Promise.resolve(true) | ||||
| } | } | ||||
| var mainTasks = []; | var mainTasks = []; | ||||
| function verifyAndInstallPrerequisites() { | function verifyAndInstallPrerequisites() { | ||||
| fs.writeFileSync(ensureDirectoryExistence(path.normalize(downloadsdir + '/readme.txt')), `${getVersion()} Your local downloads for this instance`) | |||||
| // PB : TODO -- Keep only the last n runs... | |||||
| ensureDirectoryExistence('.run/download.bat') | |||||
| fs.writeFileSync(ensureDirectoryExistence(path.normalize(`${selectedinstance.root}/${downloadsdir}/readme.txt`)), `${getVersion()} Your local downloads for this instance`) | |||||
| // PB : TODO include and build from files... using rollup.. | // PB : TODO include and build from files... using rollup.. | ||||
| var downloadbatch = | var downloadbatch = | ||||
| `::************************************************************************** | `::************************************************************************** | ||||
| (New-Object System.Net.WebClient).DownloadFile('%1','%2') | (New-Object System.Net.WebClient).DownloadFile('%1','%2') | ||||
| exit /b | exit /b | ||||
| ::**************************************************************************` | ::**************************************************************************` | ||||
| fs.writeFileSync('.run/download.bat', downloadbatch) | |||||
| fs.writeFileSync(`${selectedinstance.root}/.elxr/run-${runtimestamp}/download.bat`, downloadbatch) | |||||
| var windowselevate = | var windowselevate = | ||||
| </html> | </html> | ||||
| ` | ` | ||||
| fs.writeFileSync('.run/windowselevate.hta', windowselevate) | |||||
| fs.writeFileSync(`${selectedinstance.root}/.elxr/run-${runtimestamp}/windowselevate.hta`, windowselevate) | |||||
| var downloadtasks = []; | var downloadtasks = []; | ||||
| var installtasks = []; | var installtasks = []; | ||||
| prerequisites.forEach(preq => { | prerequisites.forEach(preq => { | ||||
| }) | }) | ||||
| } | } | ||||
| const retaincount = 2 | |||||
| var min = runtimestamp; | |||||
| var collect = [] | |||||
| return detectInstance().then((detectedInstance)=>{ | return detectInstance().then((detectedInstance)=>{ | ||||
| processedArgs._[1] ? clioverrides.instanceName = processedArgs._[1]: null; | processedArgs._[1] ? clioverrides.instanceName = processedArgs._[1]: null; | ||||
| } | } | ||||
| return todo | return todo | ||||
| }).then(()=>{ | |||||
| }) | |||||
| .then(()=>{ | |||||
| if(!__isElevated) { | |||||
| ensureDirectoryExistence(`${selectedinstance.root}/.elxr/readme.txt`) | |||||
| // collect garbage | |||||
| return dirs( (dir)=>{ | |||||
| var matches = /run-(.*)/gm.exec(dir.name) | |||||
| if(matches) { | |||||
| if(+(matches[1]) < min) { | |||||
| min = matches[1] | |||||
| collect.splice( 0, 0, matches[1] ) | |||||
| } | |||||
| else collect.push(matches[1]) | |||||
| } | |||||
| }, `${selectedinstance.root}/.elxr` ).then(()=>{ | |||||
| // delete garbage | |||||
| if(collect.length > retaincount) { | |||||
| var asyncs = []; | |||||
| while((collect.length - asyncs.length) > retaincount) asyncs.push(getShellTask('rm',['-rf', `run-${collect[0]}`], { cwd : `${selectedinstance.root}/.elxr` })()); | |||||
| return Promise.all(asyncs) | |||||
| } | |||||
| else return true | |||||
| }) | |||||
| } | |||||
| else return true; | |||||
| }) | |||||
| .then(()=>{ | |||||
| // PB : TODO -- Keep only the last n runs... | |||||
| ensureDirectoryExistence(`${selectedinstance.root}/.elxr/run-${runtimestamp}/download.bat`) | |||||
| if (!skipprerequisites && !__isElevated) mainTasks.push(verifyAndInstallPrerequisites); | if (!skipprerequisites && !__isElevated) mainTasks.push(verifyAndInstallPrerequisites); | ||||
| mainTasks.push(maintask) | mainTasks.push(maintask) | ||||
| return any(mainTasks); | return any(mainTasks); |