RoboPigeon

RoboPigeon is here to solve your CI problems. It's a set of tools that you can use to add complexity while simplfying your proccesses.

Some of the things it can do:

Send your team a slack notification when a job fails.

Sponsors

Granicus

Installation

This Gem is developed against ruby 2.5, but is tested in CI against the latest versions of 2.1, 2.3, and 2.5

Add this line to your application's Gemfile:

gem 'robopigeon'

And then execute:

$ bundle

Or install it yourself as:

$ gem install robopigeon

Usage

Best way to get started is by running robopigeon init and having it write the default robopigeon.rb file.

Then, you can reference the DSL below to make changes to your file.

DSL Reference

Coming soon, stay tuned. In the mean time you can look at our example file.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitLab at https://gitlab.com/pigeons/robopigeon.

Contributors

Alex Ives Erik Braegelmann Bill Bushey

History

RoboPigeon grew out of a tool at Granicus called gitlab_tools. As the company grew, the team that created it (the pigeon team) recognized the need for a more flexible tool, and thus robopigeon was born! We also realized that with more flexibility comes more usefulness to other people. Since we get so much from open source, we recognized this as an opportunity to give back.

Deployment

Update the .version file to the desired version and merge to master. The gem will be cut and deployed to rubygems, and a tag will be created automatically.

Future Development

Features for 1.0

GitLab

  • [x] Create, comment on, and merge merge requests
  • [x] Get data from the gitlab deployments api as a helper
  • [x] Add helpers to get a list of jira tickets since the provided deployment
  • [x] Create Tag
  • [x] Create Commits

Semver

  • [ ] Read a version from a file
  • [ ] Update version files

Slack

  • [x] Post notifications to channels or users
  • [x] Post notifications with url button actions
  • [ ] Post a notification and wait for a threaded response from an authorized user before continuing
  • [ ] Post a notification and wait for a reaction from an authorized user before continuing

Jira

  • [x] Create tickets in jira
  • [x] Transition a ticket between states
  • [x] Comment on tickets
  • [x] Add fix version to ticket

Git

  • [x] Add helpers to get information about changes since the last release

Jenkins

  • [x] Kick off and monitor a jenkins job until it is completed

Extensions

  • [x] Create basic example dsl extension gem template

Features for future version

Variables

  • [ ] Add a variable configuration block that will inject them into all of the job contexts

PagerDuty

  • [ ] Get current oncall user from pagerduty api

Risk Metrics Helpers

  • [ ] Globally configure deploy risk metrics
  • [ ] Output risk metrics as markdown via kramdown

Changelog

  • [ ] Aggregates changes into log
  • [ ] Helpers provide changes since last deployment
  • [ ] Changelog yaml front matter informs risk of change

GitLab

  • [ ] Wait for a merge request to be ready to merge
  • [ ] Kick off a pipeline
  • [ ] Find a pipeline
  • [ ] Wait on a pipeline until completion, failing if the pipeline fails
  • [ ] Push subtree
  • [ ] Create releases
  • [ ] Create Issue
  • [ ] Update issue tags
  • [ ] Assign Issue
  • [ ] Write file to wiki page
  • [ ] Write to snippet

GitHub

  • [ ] Create, comment on, and merge pull requests
  • [ ] Create Tag
  • [ ] Create Commits
  • [ ] Create Release
  • [ ] Push subtree
  • [ ] Create Issue
  • [ ] Update issue tags
  • [ ] Assign Issue
  • [ ] Write to Gist

Gitter

  • [ ] Post notifications to channels or users
  • [ ] Post notifications and wait for a response

Confluence

  • [ ] Write Content to Confluence Page

MediaWiki

  • [ ] Write Content to Wiki Page

Slack

  • [ ] Migrate to block syntax for messages

Extensions

  • [ ] Default jobs extension
  • [ ] Jira ticket configuration extension
  • [ ] Slack action template
  • [ ] Gitlab issue configuration extension
  • [ ] GitHub issue configuration extension

Technical Debt

  • [x] Document all the dsl methods with RoboPigeon::Documentarian
  • [x] Re-organize code into modules by subject (eg: git, slack, gitlab, jira, ect)
  • [ ] Generate human readable documentation from RoboPigeon::Documentarian