ShapeWorks Release Process
This document outlines the steps to release a new version of ShapeWorks.
- Create a new branch for the release. E.g.
git co -b release_v6.5
master always keeps the -dev version string. The release version number lives
only on the release branch, so there is no need to bump master back afterwards.
- Update the version number in
CMakeLists.txton the release branch
SET(SHAPEWORKS_MAJOR_VERSION 6 CACHE INTERNAL "Major version number" FORCE)
SET(SHAPEWORKS_MINOR_VERSION 5 CACHE INTERNAL "Minor version number" FORCE)
SET(SHAPEWORKS_PATCH_VERSION 0 CACHE INTERNAL "Patch version number" FORCE)
SET(SHAPEWORKS_VERSION_STRING "6.5.0-RC1")
SET(SHAPEWORKS_VERSION "${SHAPEWORKS_MAJOR_VERSION}.${SHAPEWORKS_MINOR_VERSION}.${SHAPEWORKS_PATCH_VERSION}")
- Confirm the API version is set correctly in the following files
TODO - This should be automated from a single place
Libs/Application/Job/PythonWorker.h
constexpr static const char* python_api_version = "6.5";
Python/shapeworks/shapeworks/utils.py
def get_api_version():
return "6.5"
install_shapeworks.sh
SW_MAJOR_VERSION=6.5
install_shapeworks.bat
python -c "import sys; print('\n'.join(sys.path))" > "%USERPROFILE%\.shapeworks\python_path_6.5.txt"
python -c "import sys; print(sys.prefix)" > "%USERPROFILE%\.shapeworks\python_home_6.5.txt"
echo %PATH% > "%USERPROFILE%\.shapeworks\path_6.5.txt"
devenv.sh
SW_MAJOR_VERSION=6.5
-
Update Release Notes
-
Update
docs/about/release-notes.mdwith the new release notes -
Create Walkthrough Video
-
Update Documentation
- Update release screenshot in
docs/index.md -
Add tour video to
docs/index.md -
When release candidate is final, set the version number in
CMakeLists.txtto the final version number -
Tag the release from the release branch
-
Merge the release branch back to
master. Fixes and doc updates made during the release cycle live on the release branch and come back in this one merge; takemaster'sSHAPEWORKS_VERSION_STRING(the next-devversion) over the release branch's when resolving -
Bump
CMakeLists.txtonmasterto the next-devversion before the next push tomaster
This is not cosmetic. The docs version comes from CMakeLists.txt, so as long as master still
carries the version that was just released, every master build republishes its own docs on top of
the released version's — which is how the 6.7 docs ended up serving 6.8 release notes and
bundled-Python install instructions. deploy_docs.sh now refuses to publish master over
whichever version holds latest, so getting this wrong fails the docs deploy instead of corrupting
a shipped version.
- Point the documentation's
latestversion at the new release
The docs site publishes one version per minor release, taken from CMakeLists.txt. Builds of
master are always published as <version> (dev) under the dev alias, so bumping
CMakeLists.txt to the next development version automatically starts a new dev version in the
version dropdown. The latest alias, which is what the site redirects to, has to be moved to the
released version by hand: run the Mac Arm64 Build workflow manually with the release tag
selected as the ref, deploy_docs checked, and docs_alias set to latest. That rebuilds the
release's docs from its tag, moves latest onto it, titles it <version> (latest) in the version
dropdown, and drops the (latest) suffix from the version that previously held the alias.
Everything published for a version — the release notes and guides, but also the API reference and
ShapeWorksCommands.md, which are generated by running the binaries that were just built — comes
from the ref the workflow runs on. Rebuild a version from its own tag or release branch, never
from master, or the version gets another release's API docs.
- Update
version.jsonon the web server
Studio checks for updates against https://www.sci.utah.edu/~shapeworks/version.json
(Studio/Interface/UpdateChecker.cpp). It reads the block for its own platform, compares
major/minor/patch against the version compiled into the running build, and if the file is
newer it shows a "New version available" dialog pointing at the GitHub releases page, followed by
message.
Until this file is updated no existing installation is told the release exists, so do it once
the binaries are actually downloadable. The file lives in the shapeworks-www checkout:
{
"windows" : { "major": 6, "minor": 8, "patch": 0, "message": "6.8.0 has been released" },
"linux" : { "major": 6, "minor": 8, "patch": 0, "message": "6.8.0 has been released" },
"macos" : { "major": 6, "minor": 8, "patch": 0, "message": "6.8.0 has been released" }
}
The three platform keys must be exactly windows, linux and macos — they are matched against
StudioUtils::get_platform_string(). A missing or misspelled key throws a JSON exception that is
swallowed unless the check was triggered manually, so a typo here fails silently. Platforms can
hold different versions if a build is late, which is the reason for the per-platform blocks.