unison/docs/release-steps.md
Chris Penner 0aa2de4cd4
Automate Releases (#3435)
* Add function to calculate previous tag.

* WIP

* WIP

* Update scripts

* Remove old setup job

* Fix bad prev tag

* Updates

* Don't run job on release tags anymore.

* Add status check to script

* Only use job inputs

* Add build re-tries on windows release

* Update docs

* Fix typo in tool path

* Add CI cache on releases

* Ensure we have a recent `gh` version

* Update release steps

* Use newer ubuntu to get latest gh version

* Tag commit before kicking off release job, ensuring the release is run on a named commit

* Try to improve release caching

* Ensure we check out the desired tag

* Fix version

* Remove prerelease flag

* Add example of using a target

* Use workflow from trunk
2022-09-26 16:37:56 -06:00

3.0 KiB

Release Steps

1. (Major milestones only) New Base Release

Cut a release of base. @runarorama does this usually.

.> pull git(git@github.com:unisonweb/base) basedev.release
.> cd .basedev.release
.basedev.release> delete.namespace releases._latest
.basedev.release> squash trunk releases._<ReleaseName>

Edit releases._<ReleaseName>.README to include Release: <ReleaseName>.

.basedev.release> fork releases._<ReleaseName> releases._latest
.basedev.release> push git(git@github.com:unisonweb/base)

2. Run Release script

  • Milestone Release: Look up the most recent release; bump the number and remove any trailing letters, e.g. ./scripts/make-release release/M5 trunk
  • Minor Release: Increment the trailing letter of the previous release, or add an a to the previous milestone release, e.g. ./scripts/make-release release/M5a trunk

Then, using the new release version, from the root of the unisonweb/unison project run:

./scripts/make_release.sh <VERSION> [TARGET (defaults to trunk)]

This will tag the appropriate versions in all the required projects, and kick off all of the necessary CI jobs to ship a release.

Including:

  • A release workflow in unisonweb/unison to build UCM on multiple platforms, create a release with appropriate release notes from the previous release, and upload the artifacts to that release.
  • A release workflow in unison-local-ui to build UCM on multiple platforms, create a release with appropriate release notes from the previous release, and upload the artifacts to that release.
  • A release workflow in homebrew-unison to wait for artifacts to be uploaded, then download those artifacts, get the checksums, and create an up-to-date homebrew formula.

After successfully executing the script you just have to sit tight and wait for all the jobs to complete.

3

Smoke test of the new release. Try brew upgrade unison-language, launch it, launch ui.

4

Announce on #general Slack channel. Template below.


Release announcement template (be sure to update the release urls) -

We've just released a new version of Unison, $RELEASE_NAME, release notes here (link to the issue). Install/upgrade instructions in the thread.

Mac upgrade is just brew upgrade unison-language.

A fresh install via:

brew tap unisonweb/unison
brew install unison-language

If you have previously done brew install unison-language --head to install a dev build, uninstall that first via brew uninstall unison-language.

Linux manual install:

mkdir unisonlanguage
curl -L https://github.com/unisonweb/unison/releases/download/release%2FM2h/ucm-linux.tar.gz --output unisonlanguage/ucm.tar.gz
tar -xzf unisonlanguage/ucm.tar.gz -C unisonlanguage
./unisonlanguage/ucm

Mac manual install:

mkdir unisonlanguage
curl -L https://github.com/unisonweb/unison/releases/download/release%2FM2h/ucm-macos.tar.gz --output unisonlanguage/ucm.tar.gz
tar -xzf unisonlanguage/ucm.tar.gz -C unisonlanguage
./unisonlanguage/ucm