// will download and run sonarr (server) in a non-windows enviroment // you can use this if you don't care about the server code and just want to work // with the web code. var http = require('http'); var gulp = require('gulp'); var fs = require('fs'); var targz = require('tar.gz'); var del = require('del'); var print = require('gulp-print'); var spawn = require('child_process').spawn; function download(url, dest, cb) { console.log('Downloading ' + url + ' to ' + dest); var file = fs.createWriteStream(dest); var request = http.get(url, function (response) { response.pipe(file); file.on('finish', function () { console.log('Download completed'); file.close(cb); }); }); } function getLatest(cb) { var branch = 'develop'; process.argv.forEach(function (val) { var branchMatch = /branch=([\S]*)/.exec(val); if (branchMatch && branchMatch.length > 1) { branch = branchMatch[1]; } }); var url = 'http://services.sonarr.tv/v1/update/' + branch + '?os=osx'; console.log('Checking for latest version:', url); http.get(url, function (res) { var data = ''; res.on('data', function (chunk) { data += chunk; }); res.on('end', function () { var updatePackage = JSON.parse(data).updatePackage; console.log('Latest version available: ' + updatePackage.version + ' Release Date: ' + updatePackage.releaseDate); cb(updatePackage); }); }).on('error', function (e) { console.log('problem with request: ' + e.message); }); } function extract(source, dest, cb) { console.log('extracting download page to ' + dest); new targz().extract(source, dest, function (err) { if (err) { console.log(err); } console.log('Update package extracted.'); cb(); }); } gulp.task('getSonarr', function () { //gulp.src('/Users/kayone/git/Sonarr/_start/2.0.0.3288/NzbDrone/*.*') // .pipe(print()) // .pipe(gulp.dest('./_output //return; try { fs.mkdirSync('./_start/'); } catch (e) { if (e.code != 'EEXIST') { throw e; } } getLatest(function (package) { var packagePath = "./_start/" + package.filename; var dirName = "./_start/" + package.version; download(package.url, packagePath, function () { extract(packagePath, dirName, function () { // clean old binaries console.log('Cleaning old binaries'); del.sync(['./_output/*', '!./_output/UI/']); console.log('copying binaries to target'); gulp.src(dirName + '/NzbDrone/*.*') .pipe(gulp.dest('./_output/')); }); }); }); }); gulp.task('startSonarr', function () { var ls = spawn('mono', ['--debug', './_output/NzbDrone.exe']); ls.stdout.on('data', function (data) { process.stdout.write('' + data); }); ls.stderr.on('data', function (data) { process.stdout.write('' + data); }); ls.on('close', function (code) { console.log('child process exited with code ' + code); }); });