| name | release |
| description | Create a new release of unityctl. Analyzes changes since last tag, determines version bump type (major/minor/patch), updates version, builds, commits, tags, and creates a draft GitHub release with changelog. |
unityctl Release Workflow
Create a new release of the unityctl project.
Process Overview
- Analyze changes since last version tag to determine release type
- Bump version in
Directory.Build.props
- Run
./dev-install.sh to build and update artifacts
- Commit version bump and build artifacts
- Push commit and version tag
- Create draft GitHub release with changelog
Step 1: Analyze Changes
Get the latest tag and diff to determine version type:
git describe --tags --abbrev=0 --match "v*"
git log $(git describe --tags --abbrev=0 --match "v*")..HEAD --oneline
git diff $(git describe --tags --abbrev=0 --match "v*")..HEAD --stat
Version Bump Guidelines
- Major (X.0.0): Breaking API changes, protocol incompatibilities, removed features
- Minor (0.X.0): New features, new commands, significant enhancements
- Patch (0.0.X): Bug fixes, documentation updates, minor improvements
Review the changes and propose a version bump type to the user.
Step 2: Update Version
Edit Directory.Build.props to update the <Version> element:
<Version>X.Y.Z</Version>
Step 3: Build and Install
Run the dev-install script to build the solution and update artifacts:
./dev-install.sh
This will update:
UnityCtl.UnityPackage/Plugins/UnityCtl.Protocol.dll
UnityCtl.UnityPackage/package.json (version synced automatically)
Step 4: Commit Changes
Stage and commit the version changes:
git add Directory.Build.props
git add UnityCtl.UnityPackage/Plugins/UnityCtl.Protocol.dll
git add UnityCtl.UnityPackage/package.json
git commit -m "bump X.Y.Z"
Step 5: Push and Tag
git push origin main
git tag vX.Y.Z
git push origin vX.Y.Z
Step 6: Create Draft GitHub Release
Generate a changelog from commits since the last tag and create a draft release:
git log $(git describe --tags --abbrev=0 --match "v*" HEAD^)..HEAD --pretty=format:"- %s" --no-merges
gh release create vX.Y.Z --draft --title "vX.Y.Z" --notes "CHANGELOG_CONTENT"
Changelog Format
Organize the changelog by category:
## What's Changed
### Features
- New feature description
### Improvements
- Enhancement description
### Bug Fixes
- Fix description
### Documentation
- Doc update description
**Full Changelog**: https://github.com/DirtybitGames/unityctl/compare/vPREVIOUS...vX.Y.Z
Interaction Guidelines
- Always show the diff analysis first and propose a version type (major/minor/patch)
- Wait for user approval of the version number before proceeding
- Show the proposed changelog before creating the GitHub release
- Confirm success by showing the release URL at the end
Files Modified
The release process modifies these tracked files:
Directory.Build.props - Version number
UnityCtl.UnityPackage/Plugins/UnityCtl.Protocol.dll - Built protocol assembly
UnityCtl.UnityPackage/package.json - Unity package version (auto-synced)