tusk-release
GitHub用于执行 Tusk macOS 应用的全流程发布,包括版本管理、Xcode 项目重建、构建打包 DMG、Git 标签推送及 GitHub Release 创建。
Trigger Scenarios
Install
npx skills add Shape-Machine/tusk-macos --skill tusk-release -g -y
SKILL.md
Frontmatter
{
"name": "tusk-release",
"description": "Use when preparing a full Tusk macOS release: bump the app version, regenerate the Xcode project, build and package the DMG, publish the GitHub release, and update README links."
}
Tusk Release
Perform a full release of Tusk. Work directly on main; do not create a feature branch for releases.
Version
Use the version provided by the user. If no version is provided, derive one with the YYYY.MM.DD-NN scheme:
- Get today's date with
date +%Y.%m.%d. - List existing tags for today with
git tag | grep "^v$(date +%Y.%m.%d)-". - If there are no tags for today, use
YYYY.MM.DD-00. - If tags exist, increment the zero-padded counter.
- Confirm the derived version with the user before proceeding.
Workflow
1. Verify Starting State
- Run
git pull. - Confirm the current branch is
main. - Confirm the working tree is clean.
- If the branch is not
mainor the working tree is dirty, stop and report what the user needs to resolve.
2. Bump Version
Read the current values first, then update:
Tusk/Resources/Info.plist: setCFBundleShortVersionStringto the release version and incrementCFBundleVersionby 1.project.yml: update the same two keys underinfo:.README.md: update both the displayed DMG filename and URL path, includingv<version>/Tusk-<version>.dmg.
3. Regenerate Xcode Project
xcodegen generate
4. Build Release
xcodebuild -project Tusk.xcodeproj -scheme Tusk -configuration Release -destination "platform=macOS" build
Confirm ** BUILD SUCCEEDED ** before continuing.
5. Package DMG
Get the built app path:
xcodebuild -project Tusk.xcodeproj -scheme Tusk -configuration Release -showBuildSettings | awk '$1 == "BUILT_PRODUCTS_DIR" {print $3}'
Replace the staged app with a fresh copy:
rm -rf dist/dmg-staging/Tusk.app
cp -R "$BUILT_PRODUCTS_DIR/Tusk.app" dist/dmg-staging/
Verify the staged app version:
defaults read "$(pwd)/dist/dmg-staging/Tusk.app/Contents/Info.plist" CFBundleShortVersionString
Check whether the DMG already exists:
ls dist/Tusk-<version>.dmg 2>/dev/null && echo "DMG already exists - stop" || echo "OK"
If it exists, stop and ask the user before overwriting. Otherwise create it:
hdiutil create -volname "Tusk" -srcfolder dist/dmg-staging -ov -format UDZO dist/Tusk-<version>.dmg
6. Commit, Tag, And Push
git add Tusk/Resources/Info.plist project.yml Tusk.xcodeproj README.md
git commit -m "chore: bump version to <version>"
git tag v<version>
git push
git push origin v<version>
7. Create GitHub Release
Summarize commits since the previous tag into release notes:
feat:commits under Featuresfix:commits under Fixes- design changes under Design
- everything else under Other
Always append this footer:
---
> Not notarized. On first launch right-click -> **Open**, or run:
> ```
> xattr -d com.apple.quarantine /Applications/Tusk.app
> ```
Create the release:
gh release create v<version> dist/Tusk-<version>.dmg \
--title "Tusk <version>" \
--notes "<release notes>"
8. Confirm
Report the GitHub release URL and confirm all release steps completed successfully.
Version History
- c3e7592 Current 2026-08-16 15:43


