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
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