the-real-deployinator
Version:
Deployinator for deployinate
71 lines (57 loc) • 2.33 kB
text/coffeescript
_ = require 'lodash'
colors = require 'colors'
request = require 'request'
commander = require 'commander'
debug = require('debug')('deployinator:schedule')
class DeployinatorSchedule
parseOptions: =>
commander
.usage '[options] <project-name> <tag>'
.option '-h, --host <https://deployinate.octoblu.com>',
'URI where deployinate-service is running (env: DEPLOYINATE_HOST)'
.option '-u, --user <octoblu>', 'Docker image user'
.parse process.argv
= commander.host ? process.env.DEPLOYINATE_HOST || 'https://deployinate.octoblu.com'
= commander.user ? 'octoblu'
= commander.notRelative
[, , ] = commander.args
unless ? && ? && ?
return "projectName, tag, deployAt is required: received '#{@projectName}', '#{@tag}', '#{@deployAt}'"
= process.env.DEPLOYINATOR_UUID
= process.env.DEPLOYINATOR_TOKEN
run: =>
()
return new Error('Missing DEPLOYINATOR_UUID in environment') unless ?
return new Error('Missing DEPLOYINATOR_TOKEN in environment') unless ?
return new Error('Missing DEPLOYINATOR_HOST in environment') unless ?
return commander.outputHelp() unless ? && ?
()
deploy: =>
etcdDir = "/#{@dockerUser}/#{@projectName}"
dockerUrl = "quay.io/#{@dockerUser}/#{@projectName}:#{@tag}"
console.log ""
console.log "=>", "#{etcdDir}:#{dockerUrl}"
console.log ""
options =
uri: "/schedules"
baseUrl:
auth: {, }
json:
etcdDir: etcdDir
dockerUrl: dockerUrl
deployAt:
debug 'request.post', options
request.post options, (error, response, body) =>
return error if error?
if response.statusCode >= 400
return new Error("[#{response.statusCode}] Schedule failed: #{JSON.stringify body}")
debug 'response', body
console.log 'Schedule Changed', colors.yellow
console.log ""
die: (error) =>
if 'Error' == typeof error
console.error colors.red error.message
else
console.error colors.red arguments...
process.exit 1
new DeployinatorSchedule().run()