heroku/heroku-apps

View on GitHub
src/commands/releases/info.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict'

const cli = require('heroku-cli-util')
const co = require('co')
let releases = require('../../releases')

function * run (context, heroku) {
  const shellescape = require('shell-escape')
  const statusHelper = require('../../status_helper')
  const {forEach} = require('lodash')

  let release = yield releases.FindByLatestOrId(heroku, context.app, context.args.release)

  let config = yield heroku.get(`/apps/${context.app}/releases/${release.version}/config-vars`)

  if (context.flags.json) {
    cli.styledJSON(release)
  } else {
    let releaseChange = release.description
    let status = statusHelper.description(release)
    let statusColor = statusHelper.color(release.status)
    if (status !== undefined) {
      releaseChange += ' (' + cli.color[statusColor](status) + ')'
    }

    cli.styledHeader(`Release ${cli.color.cyan('v' + release.version)}`)
    cli.styledObject({
      'Add-ons': release.addon_plan_names,
      Change: releaseChange,
      By: release.user.email,
      When: release.created_at
    })

    cli.log()
    cli.styledHeader(`${cli.color.cyan('v' + release.version)} Config vars`)
    if (context.flags.shell) {
      forEach(config, (v, k) => cli.log(`${k}=${shellescape([v])}`))
    } else {
      cli.styledObject(config)
    }
  }
}

module.exports = {
  topic: 'releases',
  command: 'info',
  description: 'view detailed information for a release',
  needsApp: true,
  needsAuth: true,
  args: [{name: 'release', optional: true}],
  flags: [
    {name: 'json', description: 'output in json format'},
    {name: 'shell', char: 's', description: 'output in shell format'}
  ],
  run: cli.command(co.wrap(run))
}