An IRC Bot for organizing code pushes
Java GAP CSS JavaScript HTML
Latest commit 17e1b30 Jul 1, 2016 @morria morria Parsing utf-8

README.md

PushBot is an IRC bot that manages the topic in an IRC channel that has a push train.

This is an archived project

Pushbot is no longer actively maintained and is no longer in sync with the version used internally at Etsy.

USAGE

.join                      -- Join the queue for a normal push wherever its convenient
.join config               -- Join the queue for a config push
.join HOLD                 -- A HOLD that is queued and named
.join HOLD "message"       -- You can set a message when you join
.join askme                -- Join the queue and suggest that people ask you before joining along
.join before USER          -- Join before the given user
.join with USER            -- Join the queue at the first position with [username]
.join config with USER     -- You can string join commands together
.join last                 -- Join at the end of the queue
.at {commit,dev,...}       -- Set the state of your push to being at the given value
.in                        -- Mark yourself as having your code checked in
.good                      -- Mark yourself as all-good in the current push state
.uhoh                      -- Mark yourself as not-all-good in the current push state
.done                      -- Mark the head of the push queue as done
.nevermind                 -- Hop out of the queue
.pop                       -- Remove your last entry in the queue
.hold "message"            -- Set a hold with a message. Don't forget the quotes.
.unhold                    -- Release the hold
.message "message"         -- Set a message. Don't forget the quotes.
.message -                 -- Remove the message
.kick username             -- Punt someone from the queue
.drive                     -- Make yourself the leader of the first push group you're in
.config                    -- Get a link to the PushBot settings page
.help                      -- Show Help Information

Join #pushbot to play around with pushbot and see how it works.

An Example

Let's say you're in an IRC channel named #push and it has the initial topic "clear". PushBot can help organize a push queue.

                                       TOPIC: clear
  alice> .join                         TOPIC: alice
    bob> .join with alice              TOPIC: alice + bob
pushbot> alice, bob: You're up         TOPIC: alice + bob
    bob> .good                         TOPIC: alice + bob*
  alice> .good                         TOPIC: alice* + bob*
pushbot> alice, bob: Everyone is ready TOPIC: alice* + bob*
  carol> .join                         TOPIC: alice* + bob* | carol
  alice> .at preprod                   TOPIC: <preprod> alice + bob | carol
  alice> .good                         TOPIC: <preprod> alice* + bob | carol
    bob> .good                         TOPIC: <preprod> alice* + bob* | carol
pushbot> alice, bob: Everyone is ready TOPIC: <preprod> alice* + bob* | carol
  alice> .at prod                      TOPIC: <prod> alice + bob | carol
  alice> .good                         TOPIC: <prod> alice* + bob | carol
   dave> .join                         TOPIC: <prod> alice* + bob | carol + dave
    bob> .good                         TOPIC: <prod> alice* + bob* | carol + dave
pushbot> alice, bob: Everyone is ready TOPIC: <prod> alice* + bob* | carol + dave
  alice> .done                         TOPIC: carol + dave
pushbot> carol, dave: You're up        TOPIC: carol + dave

Configuring PushBot For Your Handle

You can modify a few settings within PushBot with respect to your IRC handle.

  • You can tell PushBot to try to be quiet when you're driving
  • You can have PushBot send you Notifo notifications when you're at the head of the queue

To configure PushBot, head to http://[pushbot-hostname]:8080/

Tricks For Suppressing Pushbot Topic Change Spam

Colloquy

Edit the CSS for your chosen style. If you're using "DecafBland - Inverted", for instance, you should open the file

/Applications/Colloquy.app/Contents/Resources/Styles/DecafBland.colloquyStyle/Contents/Resources/Variants/Inverted.css

and add the line

.event { display: none; }

That'll get rid of all event messages (joins, parts, topic changes), and could be too much, so you might want to make a variant of your style just for #push.

Limechat

Edit the CSS for your chosen style, for instance

/Applications/LimeChat.app/Contents/Themes/Limelight.css

and add the lines

html[channelname="#push"] div[type=topic] {
    position: fixed;
    top: 0;
    left: 0;
    padding-left: 0 !important;
    background: #000;
    width: 100%;
}

That'll move all topics in the #push channel to a line on the top of the channel, with new topics covering up old topics.

IRSSI

/ignore -channels #push * TOPICS

WeeChat

/filter add hush_pushbot irc.host.#push irc_topic pushbot

Other Clients

If you have instructions for other clients, send them to me and I'll add them.

Hacking

To build and run PushBot, run

> cd PushBot
> mvn test
> mvn package
> java -jar target/PushBot.jar --name pushbot --channels "#push,#pushbot" --irc-host "irc.network.net" --irc-port 6667 --irc-pass "password"