PushBot is an IRC bot that manages the topic in an IRC channel that has a push train.
.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.
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
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/
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.
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.
/ignore -channels #push * TOPICS
/filter add hush_pushbot irc.host.#push irc_topic pushbot
If you have instructions for other clients, send them to me and I'll add them.
- The bot and its config lives in src/main/java/com/etsy/pushbot/PushBot.java
- The topic grammar lives in src/main/antlr3/com/etsy/pushbot/PushTrain.g
- The command grammar lives in src/main/antlr3/com/etsy/pushbot/Command.g
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"