Badonde

2.0.1.1

Automated PR creation, tailored to your project
davdroman/Badonde

What's New

2.0.1.1

2019-07-04T13:08:31Z

Badonde header

Swift version 5 Travis status Latest stable release

Named after emblematic bart critic Brian Badonde.

Badonde is a command line tool that combines Git, GitHub, and JIRA, offering as a solution for GitHub projects to define an automatic PR creation workflow.

Badonde usage GIF

Installation

Homebrew

brew install davdroman/tap/badonde

Make

git clone https://github.com/davdroman/Badonde.git
cd Badonde
make install

Usage

Setup

First, in a terminal window, you want to navigate to your repo root and run:

$ badonde init

This will create all the required files for Badonde to work and prompt for GitHub and JIRA credentials.

Observe the .badonde folder is created to host Badonde's local user configuration (e.g. credentials). Such folder is also added to .gitignore because per-user configuration must not be commited.

Badondefile

Additionally, a Badondefile.swift file is created with a basic template.

Badondefile defines the rules by which Badonde derives data and outputs PR information, all through declarative Swift syntax.

In order to edit Badondefile with full autocompletion support, run:

$ badonde edit

This will open an Xcode project where you can make any modifications to this file. When you're done, go back to the terminal and press the return key to save the file.


Consider a scenario where you want to generate a PR from a local branch named fix/IOS-1234-fix-all-the-things where IOS-1234 is a JIRA ticket id belonging to your organization myamazingiosapp.atlassian.net. Here's an example of a Badondefile that would generate a PR automatically adding things like a standarised PR title and a Bug label for bugfix branches:

import BadondeKit

// Reads the current Git context and derives a JIRA ticket number from the
// current branch's name.
let badonde = Badonde(ticketType: .jira(organization: "myamazingiosapp", derivationStrategy: .regex))

// If a ticket was successfully derived and fetched, its info is available
// through the `badonde.jira` property.
if let ticket = badonde.jira?.ticket {
    // Sets the PR title to something like:
    // [IOS-1234] Fix all the things
    title("[\(ticket.key)] \(ticket.fields.summary)")
}

// If the current branch has the prefix 'fix/' it means we're dealing with a
// bugfix PR, so we attach the Bug label.
if badonde.git.currentBranch.name.hasPrefix("fix/") {
    // Sets the "Bug" label defined in your GitHub repo.
    label(named: "Bug")
}

Here's a more advanced (but just as easily expressed) case of an automation where we match the JIRA ticket's epic to a label in your GitHub repo:

if let epicName = ticket.fields.epicSummary {
    label(roughlyNamed: epicName)
} else {
    label(named: "BAU")
}

By default, Badonde generates draft PRs. To disable this, simply add this to your Badondefile:

draft(false)

Here's a list of supported PR properties:

  • base branch
  • title
  • body
  • reviewers
  • assignees
  • labels
  • milestone
  • draft

Generating a PR

Finally, when you're ready to generate a PR, run:

$ badonde pr

Or perform a dry run first to see what the output would be:

$ badonde pr --dry-run

Configuration

As said above, Badonde stores its local user configuration in .badonde/config.json.

Badonde offers an interface similar to git config to modify this options. For instance:

$ badonde config git.remote origin

Global options are also available (and stored in ~/.config/badonde/config.json):

$ badonde config --global git.autopush true

To list all available options, run:

$ badonde config --help

Analytics

It's possible to report useful team-wide performance analytics to your own privately owned Firebase DB after each Badonde execution.

In order to do this, each team member should configure the required credentials as such:

$ badonde config firebase.projectId <YOUR_FIREBASE_DB_PROJECT_ID>
$ badonde config firebase.secretToken <YOUR_FIREBASE_DB_SECRET_TOKEN>

You can add custom information to the report through your Badondefile:

analytics([
    "author": badonde.github.me.login,
    "labelCount": badonde.pullRequest.labels.count,
    "hasMilestone": badonde.pullRequest.milestone != nil
])

Special thanks

Badonde's architecture is heavily inspired by the concepts of the brilliant Danger Swift. Long live Swift scripting! 🎉

Description

  • Swift Tools 5.0.0
View More Packages from this Author

Dependencies

Last updated: Tue Aug 13 2024 11:33:31 GMT-0900 (Hawaii-Aleutian Daylight Time)