Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

84 lines (69 sloc) 2.69 kb
# Description:
# Interact with Scalarium cloud hosting
#
# Dependencies:
# None
#
# Configuration:
# HUBOT_SCALARIUM_TOKEN: for authenticating the requests (see https://manage.scalarium.com/users/<user-id>/api)
#
# Commands:
# hubot scalarium list (apps|clouds) - Lists all applications/clouds on scalarium
# hubot scalarium deploy <app id> <message> - Triggers an deployment of *app id* with *message*
#
# Author:
# nesQuick
https = require 'https'
token = process.env.HUBOT_SCALARIUM_TOKEN
class ScalariumClient
constructor: (@https, @token) ->
getApplications: (cb) ->
@request '/applications', 'GET', {}, cb
getClouds: (cb) ->
@request '/clouds', 'GET', {}, cb
deploy: (appId, msg, cb, finishedCb) ->
that = this
@request "/applications/#{appId}/deploy", 'POST', {command: 'deploy', comment: "Hubot deploy - #{msg}"}, (result) ->
that.registerRunningDeploy(result, finishedCb)
cb result
registerRunningDeploy: (deploy, cb) ->
that = this
intervalId = setInterval () ->
that.request "/applications/#{deploy.application_id}/deployments/#{deploy.id}", 'GET', {}, (result) ->
if result.status isnt 'running'
cb result
clearInterval intervalId
, 10000
request: (path, method, body, cb) ->
options =
host: 'manage.scalarium.com'
method: method
path: "/api#{path}"
headers:
'X-Scalarium-Token': @token
Accept: 'application/vnd.scalarium-v1+json'
req = @https.request options, (res) ->
data = ''
res.on('data', (chunk) -> data = "#{data}#{chunk}")
res.on('end', () -> cb JSON.parse data)
req.write JSON.stringify body
req.end()
client = new ScalariumClient https, token
module.exports = (robot)->
robot.respond /scalarium list apps/i, (message)->
client.getApplications (apps) ->
for app in apps
message.send "#{app.name} - #{app.id}"
robot.respond /scalarium list clouds/i, (message)->
client.getClouds (clouds) ->
for cloud in clouds
message.send "#{cloud.name} - #{cloud.id}"
robot.respond /scalarium deploy ([0-9a-f]+) (.+)$/i, (message)->
client.deploy message.match[1], message.match[2], (deploy) ->
message.send "Yes Sir! Deployment triggered with id #{deploy.id}. Will drop a note when it's done."
, (finished) ->
success = finished.status == 'successful'
message.send """#{if success then 'Success' else 'FAIL! FAIL! FAIL!!'}! Your deployment "#{finished.comment}" with id #{finished.id} #{if success then 'is done' else 'failed'}."""
robot.scalarium =
getApplications: client.getApplications
getClouds: client.getClouds
Jump to Line
Something went wrong with that request. Please try again.