Tanner Rollefson

Why I Built Shipit

Running a coordinated release across multiple repos, tagging in the right order and making sure nothing goes out before its dependency, is easy to get wrong when you are doing it manually every time.

I built Shipit around the same plan/apply idea as Terraform. Before anything is pushed you see exactly what will happen: which commits are included, what the tag name will be, what the PR description will say. You review it, then apply it.

A config file defines your projects and their pipelines. Each step is either a branch-to-branch merge (b2b) or a branch-to-tag release (b2t):

projects:
  - name: api-common
    pipeline:
      - type: b2b
        source: dev
        target: main
      - type: b2t
        source: main
  - name: api-service
    pipeline:
      - type: b2b
        source: dev
        target: main
      - type: b2t
        source: main
  - name: frontend
    pipeline:
      - type: b2b
        source: dev
        target: main
      - type: b2t
        source: main

My team uses this for our weekly releases. The plan files also serve as a historical record of every release, including what shipped, when, and what changed.

gitshipit.net

LinkedIn GitHub LeetCode