Skip to content

Instantly share code, notes, and snippets.

@MichaelDrogalis
Last active September 3, 2015 13:38
Show Gist options
  • Save MichaelDrogalis/56bf837e309f4ed00e43 to your computer and use it in GitHub Desktop.
Save MichaelDrogalis/56bf837e309f4ed00e43 to your computer and use it in GitHub Desktop.
lein-unison workflow

Unison release process:

  • Core project A, dependent projects B, C, and D tracking A through Voom
  • [n] refers to a push

Day-to-day development:

  • Push [1] to master on A
  • CI triggers on push and builds [1]
  • On success, lein-unison runs update-projects. Unison clones B, C, and D, checks out the freshen branch. If :merge is set, master is merged into the freshen branch. lein-unison then updates all of their versions of A to the latest version in [1]. lein-unison commits to projects B, C, and D.
  • B [2], C [3], and D [4] are pushed
  • CI triggers on push and builds [2]
  • CI triggers on push and builds [3]
  • CI triggers on push and builds [4]

Public release:

  • Developer runs a release script for A locally
  • This script checks out master, updates the version to a non-Voom version
  • Script automatically commits and pushes [1]
  • Script updates the version one point forward, and setting it back to snapshot
  • Script automatically commits and pushes [2]
  • CI triggers on push and builds [1]
  • On success, lein-unison runs update-projects. Unison clones B, C, and D, checks out the freshen branch. If :merge is set, master is merged into the freshen branch. lein-unison then updates all of their versions of A to the latest version in [1]. lein-unison commits to projects B, C, and D. B, C, and D now track A via its release versions.
  • B [3], C [4], and D [5] are pushed
  • On further success of [1], lein-unison runs release-projects. Unison clones B, C, and D and checks out :release-branch. Unison executes :release-script in each repository in B, C, and D. Typically, this script will cut a new release of each. B, C, and D are pushed with release commits. [7], [8], [9]
  • CI triggers on push and builds [7]. Project B builds successfully and deploys its release version.
  • CI triggers on push and builds [8]. Project C builds successfully and deploys its release version.
  • CI triggers on push and builds [9]. Project D builds successfully and deploys its release version.
  • CI triggers on push and builds [2]. This causes the usual process of building a SNAPSHOT from core to be built, as in the development scenario.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment