From 9ded7ae76ef3ba7fcd204601cd2478e02ca9fdd1 Mon Sep 17 00:00:00 2001 From: Inga Lovinde <52715130+inga-lovinde@users.noreply.github.com> Date: Fri, 6 Dec 2013 14:15:26 +0400 Subject: [PATCH] Implemented GitHub commit status API client --- BuildServer/.gitignore | 3 ++- BuildServer/lib/builder.js | 55 +++++++++++++++++++++++++++++++++++++- BuildServer/package.json | 3 ++- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/BuildServer/.gitignore b/BuildServer/.gitignore index 4fafb13..a0f0d44 100644 --- a/BuildServer/.gitignore +++ b/BuildServer/.gitignore @@ -15,4 +15,5 @@ npm-debug.log node_modules data -*.crt \ No newline at end of file +*.crt +settings.js diff --git a/BuildServer/lib/builder.js b/BuildServer/lib/builder.js index e255c51..8be31c0 100644 --- a/BuildServer/lib/builder.js +++ b/BuildServer/lib/builder.js @@ -2,8 +2,34 @@ var fs = require('fs'); var fse = require('fs-extra'); +var async = require('async'); +var request = require('request'); var gitLoader = require('./git-loader'); var processor = require('./task-processor'); +var settings = require('../settings'); + +var notifyStatus = function (options, callback) { + var url = "https://github.pos/api/v3/repos/" + options.owner + "/" + options.reponame + "/statuses/" + options.hash; + request.post(url, { + auth: settings.getGithubAuth(options.owner), + json: { + state: options.state, + target_url: "https://mbs.pos/status/" + options.owner + "/" + options.reponame + "/" + options.hash, + description: options.description + } + }, function (err, response, body) { + if (err) { + console.log("Error: " + err); + return callback(err); + } + console.log("Status code: " + response.statusCode); + console.log(body); + if (response.statusCode !== 200) { + return callback(body); + } + return callback(); + }); +}; var build = function (options, callback) { var url = options.url, @@ -14,7 +40,20 @@ var build = function (options, callback) { local = options.app.get('gitpath') + "/" + owner + "/" + reponame + ".git", tmp = options.app.get('tmpcodepath') + "/" + rev, exported = tmp + "/code", - release = options.app.get('releasepath') + "/" + owner + "/" + reponame + "/" + branch + "/" + rev; + release = options.app.get('releasepath') + "/" + owner + "/" + reponame + "/" + branch + "/" + rev, + statusQueue = async.queue(function (task, callback) { + task(callback); + }, 1); + + statusQueue.push(function (callback) { + notifyStatus({ + state: "pending", + description: "Preparing to build...", + owner: owner, + reponame: reponame, + hash: rev + }, callback); + }); fse.mkdirsSync(release); @@ -23,7 +62,21 @@ var build = function (options, callback) { fs.writeFileSync(options.app.get('releasepath') + "/" + owner + "/" + reponame + "/$revs/" + rev + ".branch", branch); var done = function (err, result) { + var errorMessage = ((result.errors.$allMessages || [])[0] || {}).message, + warnMessage = ((result.warns.$allMessages || [])[0] || {}).message, + infoMessage = ((result.infos.$allMessages || [])[0] || {}).message; + fs.writeFile(release + "/report.json", JSON.stringify({err: err, result: result}), function (writeErr) { + statusQueue.push(function (callback) { + notifyStatus({ + state: err ? "error" : "success", + description: errorMessage || warnMessage || infoMessage || "Success", + owner: owner, + reponame: reponame, + hash: rev + }, callback); + }); + if (writeErr) { return callback(writeErr); } diff --git a/BuildServer/package.json b/BuildServer/package.json index 1a077a9..7a65155 100644 --- a/BuildServer/package.json +++ b/BuildServer/package.json @@ -10,6 +10,7 @@ "jade": "*", "async": "~0.2.9", "fs-extra": "~0.8.1", - "git-node": "~0.1.1" + "git-node": "~0.1.1", + "request": "~2.27.0" } }