bitbar-concourse

Presents the status of a Concourse pipeline in bitbar.

This started out as fork of Checkman's concourse.check, but has evolved since.

Usage

  • Install bitbar (brew install bitbar)
  • Install this gem
  • Add the following script as ~/.bitbar/concourse.1m.sh and make it executable:
  #!/bin/bash

  # Change this URL to point to your own Concourse instance
  # but the public one should be ok as a demo
  export CONCOURSE_URI=http://concourse.ci/

  # username and password are optional
  export CONCOURSE_USER=user
  export CONCOURSE_PASSWORD=password

  # invoke the plugin
  bitbar-concourse

I do not install bitbar-concourse as system gem, but I use chruby. For some reason bitbar does not seem to run a login shell, so I had to load chruby manually in ~/.bitbar/concourse.1m.sh (just before the last line):

  export PATH=/usr/local/bin:$PATH
  source "$(brew --prefix)/share/chruby/chruby.sh"
  chruby 2.5.1
  • Check the bitbar icon in the system tray for an updated status of your pipeline:

Example:

Flintstone CI

Installation

$ gem install bitbar-concourse

Development

  • Use fswatch to run specs whenever code or tests change. Install it with brew install fswatch if not available.
  $ fswatch --one-per-batch spec lib | xargs -n1 -I{} rspec
  • Since the bitbar protocol is text-based, the bitbar-concourse gem can be tested in the terminal. Just execute the script in ~/.bitbar/ in a terminal window.

Tests

Running the integration tests requires a real Concourse server. By default, ci.concourse-ci.org is used. If you want to test with your own, which is required for the authentication tests, supply the environment variables listed in .envrc.sample.

Misc

The propeller logo is in the public domain.

TODO

  • Use Excon in order to get easy tracing
  • Order latest builds in presenter first by status and then by last-run date so that the broken ones appear at the top
  • Use TerminalNotifier when a build is failing:

    TerminalNotifier.notify('Hello World', :open => 'http://twitter.com/alloy')
    
  • Keep state about each job and notify only on a change (red => green etc.)

  • Ignore certain tasks, e.g. release lock