A CLI tool to make git changes across many repos, especially useful with Microservices.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
.github
clone
cmd
demo
docs
initialize
merge
plan
push
.gitignore
Gopkg.lock
Gopkg.toml
LICENSE
Makefile
README.md
VERSION
golang.mk
main.go

README.md

microplane

A CLI tool to make git changes across many repos, especially useful with Microservices. You can learn more about microplane in this introductory blogpost.

microplane

"the lemon is Github"

Setup

Download

You can download a pre-built version of Microplane from the Github releases.

Build Locally

Microplane is a Golang project. It uses dep for vendoring.

First, clone the repo into your GOPATH. Next, run make install_deps (this calls dep). To build, run make build. You should now have a working build of Microplane in ./bin/mp.

Usage

Note: The GITHUB_API_TOKEN environment variable must be set. This should be a Github Token with repo scope.

Microplane has an opinionated workflow for how you should manage git changes across many repos. To make a change, use the following series of commands.

  1. Init - target the repos you want to change using a Github "Advanced Search" Query
  2. Clone - clone the repos you just targeted
  3. Plan - run a script against each of the repos and preview the diff
  4. Push - commit, push, and open a Pull Request
  5. Merge - merge the PRs

For an in-depth example, check out the introductory blogpost.

Implementation

Microplane parallelizes various git commands and API calls.

At each step in the Microplane workflow, a repo only moves forward if the previous step for that repo was successful.

We persist the progress of a Microplane run in the following local file structure.

mp/
  init.json
  repo1/
    clone/
      clone.json
      <git-repo>
    plan/
      plan.json
      <git-repo-with-commit>
    push/
      push.json
    merge/
      merge.json
  repo2/
    ...