circle-cli-util

1.2.0 • Public • Published

circle-cli-util

Circle CI npm version License Inline docs

Set of helpful CLI utilities

Installation

npm install circle-cli-util --save

Action

let cli      = require('circle-cli-util');
let promise  = circle.projects(project).info();
let projects = yield cli.action('getting project', promise);
console.log(`project name: ${project.name}`);
 
// getting project... done
// project name: project

Note: to use yield you need to wrap this in a co block.

Prompt

Callback style

let cli = require('circle-cli-util');
cli.prompt('email', {}, function (_, email) {
  console.log(`your email is: ${email}`);
});

Promise style

let cli = require('circle-cli-util');
cli.prompt('email', {}).then(function (email) {
  console.log(`your email is: ${email}`);
});

Generator style (must be wrapped in a co block)

let cli   = require('circle-cli-util');
let email = yield cli.prompt('email', {});
console.log(`your email is: ${email}`);

cli.prompt options

cli.prompt('email', {
  mask: true, // mask input field after submitting
  hide: true // mask characters while entering
});

Confirm App

Supports the same async styles as prompt(). Errors if not confirmed.

Basic

let cli = require('circle-cli-util');
yield cli.confirmApp('appname', context.flags.confirm);
 
// !     WARNING: Destructive Action
// !     This command will affect the app appname
// !     To proceed, type appname or re-run this command with --confirm appname
 
> appname

Custom message

let cli = require('circle-cli-util');
yield cli.confirmApp('appname', context.flags.confirm, 'foo');
 
// !     foo
// !     To proceed, type appname or re-run this command with --confirm appname
 
> appname

Errors

let cli = require('circle-cli-util');
cli.error("App not found");
// !    App not found

Warnings

let cli = require('circle-cli-util');
cli.warn("App not found");
// !    App not found

Dates

let cli = require('circle-cli-util');
let d   = new Date();
console.log(cli.formatDate(d));
// 2001-01-01T08:00:00.000Z

Hush

Use hush for verbose logging when CIRCLE_DEBUG=1.

let cli = require('circle-cli-util');
cli.hush('foo');
// only prints if CIRCLE_DEBUG is set

Debug

Pretty print an object.

let cli = require('circle-cli-util');
cli.debug({foo: [1,2,3]});
// { foo: [ 1, 2, 3 ] }

Stylized output

Pretty print a header and hash

let cli = require('circle-cli-util');
cli.styledHeader("MyApp");
cli.styledHash({name: "myapp", collaborators: ["user1@example.com", "user2@example.com"]});

Produces

=== MyApp
Collaborators: user1@example.com
               user1@example.com
Name:          myapp

Table

cli.table([
  {app: 'first-app',  language: 'ruby', dyno_count: 3},
  {app: 'second-app', language: 'node', dyno_count: 2},
], {
  columns: [
    {key: 'app'},
    {key: 'dyno_count', label: 'Dyno Count'},
    {key: 'language', format: language => cli.color.red(language)},
  ]
});

Produces:

app         Dyno Count  language
──────────  ──────────  ────────
first-app   3           ruby
second-app  2           node

Mocking

Mock stdout and stderr by using cli.log() and cli.error().

let cli = require('circle-cli-util');
cli.log('message 1'); // prints 'message 1'
cli.mockConsole();
cli.log('message 2'); // prints nothing
cli.stdout.should.eq('message 2\n');

Command

Used for initializing a plugin command.

It expects you to return a promise chain. This is usually done with co.

let cli     = require('circle-cli-util');
let co      = require('co');
let request = require('request');
module.exports.commands = [
  {
    topic: 'apps',
    command: 'info',
    needsAuth: true,
    needsApp: true,
    run: cli.command(function (context) {
      return co(function* () {
        let projects = yield request.get('https://circleci.com/api/v1/projects');
        console.dir(app);
      });
    })
  }
];

With options:

let cli = require('circle-cli-util');
let co  = require('co');
module.exports.commands = [
  {
    topic: 'apps',
    command: 'info',
    needsAuth: true,
    needsApp: true,
    run: cli.command(
      {preauth: true},
      function (context) {
        return co(function* () {
          let projects = yield request.get('https://circleci.com/api/v1/projects');
          console.dir(app);
        });
      }
    )
  }
];

Tests

npm install
npm test

License

ISC

/circle-cli-util/

    Package Sidebar

    Install

    npm i circle-cli-util

    Weekly Downloads

    1

    Version

    1.2.0

    License

    ISC

    Last publish

    Collaborators

    • markpundsack