Skip to content
This repository was archived by the owner on Jan 15, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"env": {
"node": true
},
"globals": {
"Mobile": true
"parserOptions": {
"ecmaVersion": 6
},
"rules": {
"no-cond-assign": 2,
Expand Down
37 changes: 24 additions & 13 deletions CI.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
var http = require('http');
var greq = require('./hook/git_request');
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root
// for full license information.
//

'use strict';

var db = require('./db_actions');
var git = require('./hook/git_actions');
require('./logger');
var greq = require('./hook/git_request');
var http = require('http');

var Logger = require('./logger');
var logger = new Logger();

// VM builder
require('./builder/virtual.js');
Expand All @@ -11,14 +20,14 @@ require('./builder/virtual.js');
require('./tasker/taskman');

function getPost(request, response, callback) {
var queryData = "";
var queryData = '';
if (typeof callback !== 'function') return null;

if (request.method == 'POST') {
request.on('data', function (data) {
queryData += data;
if (queryData.length > 1e6) {
queryData = "";
queryData = '';
response.writeHead(413, {'Content-Type': 'text/plain'}).end();
request.connection.destroy();
}
Expand All @@ -30,7 +39,7 @@ function getPost(request, response, callback) {
callback();
} catch (e) {
// TODO log bad request
response.writeHead(200, "OK", {'Content-Type': 'text/plain'});
response.writeHead(200, 'OK', {'Content-Type': 'text/plain'});
response.end();
}
});
Expand All @@ -43,7 +52,7 @@ function getPost(request, response, callback) {

db.getGithubUser(function (data) {
if (!data || !data.username) {
throw new Error("Github user data or data.username is undefined or null");
throw new Error('Github user data or data.username is undefined or null');
}

git.setLogin(data.username, data.password);
Expand All @@ -55,18 +64,20 @@ db.getGithubUser(function (data) {
greq.OnRequest(request, response);
} catch (e) {
// TODO log the things went bad
logme("Error On Request: ", e, "red");
logger.error('Error On Request: ', e);
}
response.writeHead(200, "OK", {'Content-Type': 'text/plain'});
response.writeHead(200, 'OK', {'Content-Type': 'text/plain'});
response.end();
});
} else {
// TODO locate webUI here

response.writeHead(200, "OK", {'Content-Type': 'text/plain'});
response.writeHead(200, 'OK', {'Content-Type': 'text/plain'});
response.end();
}

}).listen(8080);
logme("Github WebHook Server Started on 8080", "green");
});
})
.listen(8080);

logger.info('Github WebHook Server Started on 8080');
});
57 changes: 34 additions & 23 deletions builder/virtual.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root
// for full license information.
//

'use strict';

var git = require('./../hook/git_actions');
var db = require('./../db_actions');
var exec = require('child_process').exec;
var execSync = jxcore.utils.cmdSync;
var fs = require('fs');
var git = require('./../hook/git_actions');
var path = require('path');
var exec = require('child_process').exec;
var sync = jxcore.utils.cmdSync;
var tester = require('../internal/tester');

var Logger = require('../logger');
var logger = new Logger();

var eopts = {
encoding: 'utf8',
timeout: 1000 * 60 * 35, // single command timeout - 35 min.
Expand All @@ -27,17 +36,17 @@ var stopVM = function (cb) {
var vm = '/Applications/VMware\\ Fusion.app/Contents/Library/vmrun';
exec(vm + ' stop ~/Desktop/Virtual\\ Machines/OSXDEV.vmwarevm/OSXDEV.vmx', eopts, function (err, out, stderr) {
if (err)
logme('Error stopping VM', err, out, stderr, 'red');
logger.error('Error stopping VM', err, out, stderr);
cb(err, out, stderr);
});
};

var resetVM = function (cb) {
var vm = "/Applications/VMware\\ Fusion.app/Contents/Library/vmrun";
vmChild = exec(vm + " revertToSnapshot ~/Desktop/Virtual\\ Machines/OSXDEV.vmwarevm/OSXDEV.vmx snapshot1", eopts, function (err, stdout, stderr) {
var vm = '/Applications/VMware\\ Fusion.app/Contents/Library/vmrun';
vmChild = exec(vm + ' revertToSnapshot ~/Desktop/Virtual\\ Machines/OSXDEV.vmwarevm/OSXDEV.vmx snapshot1', eopts, function (err, stdout, stderr) {
vmChild = null;
if (err) {
logme("Error: Something went terribly bad.. ", err + "\n" + stdout + "\n" + stderr, "red");
logger.error('Error: Something went terribly bad.. ', err + '\n' + stdout + '\n' + stderr);
stopVM(function () {
setTimeout(function () {
resetVM(cb);
Expand All @@ -47,21 +56,22 @@ var resetVM = function (cb) {
return;
}

logme("VM: Revert snapshot", "green");
logger.info('VM: Revert snapshot');
// check queue if there is something start

vmChild = exec(vm + " start ~/Desktop/Virtual\\ Machines/OSXDEV.vmwarevm/OSXDEV.vmx", eopts, function (err, stdout, stderr) {
vmChild = null;
if (err) {
logme("Error: Something went terribly bad... ", err + "\n" + stdout + "\n" + stderr, "red");
logger.error("Error: Something went terribly bad... ", err + "\n" + stdout + "\n" + stderr);

stopVM(function () {
setTimeout(function () {
resetVM(cb);
}, 1000);
});
return;
}
logme("VM: Start OS", "green");
logger.info('VM: Start OS');

builderReset = false;
cb();
Expand Down Expand Up @@ -117,7 +127,7 @@ var updateScripts = function (job, cmd) {

var jobErrorReportAndRemove = function (job, err, stdout, stderr) {
var msg = err + "\n\n" + stdout + "\n\n" + stderr;
logme("Error: ", msg, "(JOB ID:" + job.uqID + ")", "red");
logger.error("Error: ", msg, "(JOB ID:" + job.uqID + ")");

if (msg.length > 12 * 1024) {
var left = msg.substr(0, 6 * 1024);
Expand Down Expand Up @@ -158,15 +168,15 @@ var runBuild = function (cmds, job, index, cb) {
if (!cmd.sync)
updateScripts(job, cmd);

currentBuildCommand = exec("cd " + __dirname + ";" + cmd.cmd, eopts, function (err, stdout, stderr) {
currentBuildCommand = exec('cd ' + __dirname + ';' + cmd.cmd, eopts, function (err, stdout, stderr) {
currentBuildCommand = null;
if (cancelJobId == job.prId)
return;

// cleanup the script file
if (!cmd.sync && cmd.to) {
for (var i = 0; i < cmd.to.length; i++) {
sync("rm " + __dirname + "/" + cmd.to[i])
execSync('rm ' + __dirname + '/' + cmd.to[i]);
}
}

Expand Down Expand Up @@ -296,32 +306,33 @@ var buildJob = function (job) {

tester.logIssue(job, 'Test ' + job.prId + ' (' + job.commitIndex + ') build started.', '');

logme("Running builds for job:", job.uqID);
logger.info('Running builds for job:', job.uqID);
runBuild(cmds, job, 0, function (err) {
if (err || cancelJobId == job.prId)
return;

logme("Build finished", "green");
logger.info('Build finished');
activeJobId = 0;
cancelJobId = 0;

// move builds
var prPath = "builds/" + job.uqID;
exec("cd " + __dirname + "; rm -rf " + prPath + "; mkdir -p " + prPath + "; mv build_ios/ " + prPath + "; mv build_android/ " + prPath, eopts, function (err, stdout, stderr) {
if (err) {
logme("something happened and couldn't move the builds?", err, stdout, stderr, "red");
logger.error("something happened and couldn't move the builds?", err, stdout, stderr);
jobErrorReportAndRemove(job, err, stdout, stderr);
} else {
// save job
job.compiled = true;
db.updateJob(job);
}

if (job.target != "all") {
if (job.target == 'ios')
sync("cd " + __dirname + "; rm -rf " + prPath + "/build_android");
else
sync("cd " + __dirname + "; rm -rf " + prPath + "/build_ios");
if (job.target != 'all') {
if (job.target == 'ios') {
execSync('cd ' + __dirname + '; rm -rf ' + prPath + '/build_android');
} else {
execSync('cd ' + __dirname + '; rm -rf ' + prPath + '/build_ios');
}
}

builderReset = true;
Expand All @@ -341,9 +352,9 @@ exports.IsActive = function (prId) {
};

exports.cancelIfActive = function (prId) {
logme("checking for cancel ", prId, activeJobId, "yellow");
logger.info("checking for cancel ", prId, activeJobId);
if (activeJobId == prId) {
logme("Cancelling job ", prId, "yellow");
logger.info("Cancelling job ", prId);
cancelJobId = prId;
var vm = "/Applications/VMware\\ Fusion.app/Contents/Library/vmrun";
builderReset = true;
Expand Down
Loading