--- name: auto-release-manager description: Automate version updates and releases for any project type (Node.js, Python, Rust, Unity, Unreal, etc.). Detect project type, update version files, generate CHANGELOG, and handle git operations with cross-platform support. allowed-tools: Bash, Read, Write --- # Auto Release Manager Automate the entire release workflow for any project type with intelligent project detection and cross-platform support. ## Purpose This skill streamlines version management across different project types by: - Automatically detecting project type (Node.js, Python, Rust, Unity, Unreal, etc.) - Updating version files in appropriate formats (JSON, TOML, YAML, Unity assets) - Generating CHANGELOG from git commit history - Handling git operations (commit, tag, push) with OS compatibility - Supporting game engine specific workflows (Unity version.json ← → ProjectSettings.asset sync) ## When to Use Use this skill when: - Releasing a new version of any project - User requests "update version", "create release", "bump version" - Need to handle versions across multiple files (e.g., Unity's dual-file approach) - Want automated CHANGELOG generation from commits - Working with game engine projects (Unity, Unreal) Example user requests: - "Bump patch version and create release" - "Update to v2.1.0" - "Create Unity release with version 1.5.0" - "Generate CHANGELOG and commit" ## Workflow ### Step 1: Detect Project Type Start by running the project detection script to identify the project type and version files: ```bash python -X utf8 scripts/detect_project.py . ``` The script returns JSON with: ```json { "project_type": "unity", "version_files": [ "version.json", "ProjectSettings/ProjectSettings.asset" ], "detected_version": "1.2.3" } ``` Supported project types: - `nodejs` - Node.js (package.json) - `python` - Python (pyproject.toml, setup.py) - `rust` - Rust (Cargo.toml) - `go` - Go (VERSION file) - `unity` - Unity (version.json + ProjectSettings.asset) - `unreal` - Unreal Engine (.uproject) - `claude-plugin` - Claude Code Plugin (plugin.json) - `generic` - Generic project (VERSION file) ### Step 2: Determine New Version Calculate the new version based on update type: **Semantic Versioning (MAJOR.MINOR.PATCH):** - **PATCH** (x.x.X): Bug fixes - **MINOR** (x.X.0): New features (backward compatible) - **MAJOR** (X.0.0): Breaking changes Examples: - 1.2.3 → 1.2.4 (patch) - 1.2.3 → 1.3.0 (minor) - 1.2.3 → 2.0.0 (major) If user specifies version directly (e.g., "v2.1.0"), use that version. ### Step 3: Update Version Files Use the universal version updater to update all detected files: ```bash python -X utf8 scripts/update_version.py ... ``` Example for Node.js: ```bash python -X utf8 scripts/update_version.py package.json 1.3.0 ``` Example for Unity (multiple files): ```bash python -X utf8 scripts/update_version.py version.json ProjectSettings/ProjectSettings.asset 1.3.0 ``` **Unity-specific:** After updating version.json, sync to ProjectSettings.asset: ```bash python -X utf8 scripts/sync_unity_version.py ``` This ensures version.json is the single source of truth. ### Step 4: Generate CHANGELOG (Optional) If user wants CHANGELOG updates or it's part of the workflow: ```bash python -X utf8 scripts/changelog_generator.py [since_tag] [changelog_path] ``` Examples: ```bash # Generate from last tag to HEAD python -X utf8 scripts/changelog_generator.py 1.3.0 v1.2.3 # Generate from all commits python -X utf8 scripts/changelog_generator.py 1.3.0 # Custom CHANGELOG path python -X utf8 scripts/changelog_generator.py 1.3.0 v1.2.3 CHANGELOG.ko.md ``` The script parses Conventional Commits and groups by type: - `feat:` → Added - `fix:` → Fixed - `refactor:` → Changed - `docs:` → Documentation ### Step 5: Git Operations Ask user which git operations to perform using AskUserQuestion tool: **Tool constraints:** - Header: "Git 작업" (6 characters ✅) - Options: 3 options (within 2-4 range ✅) - multiSelect: false **Options:** 1. **"커밋만"** (label: 2 words ✅) - Description: "버전 업데이트를 커밋만 합니다. 태그와 푸시는 나중에 직접 처리하겠습니다." - Action: Commit only 2. **"커밋+태그"** (label: 2 words ✅) - Description: "커밋과 태그를 생성합니다. 푸시는 나중에 직접 하겠습니다." - Action: Commit + Create tag 3. **"전체"** (label: 1 word ✅) - Description: "커밋, 태그 생성, 푸시까지 모든 작업을 자동으로 처리합니다. (권장)" - Action: Commit + Tag + Push Based on user selection: **Commit:** ```bash python -X utf8 scripts/git_operations.py commit "chore: bump version to Version updates: - Updated to 🤖 Generated with Claude Code Co-Authored-By: Claude " ``` **Create Tag:** ```bash python -X utf8 scripts/git_operations.py tag v "Release v" ``` **Push (branch + tags):** ```bash python -X utf8 scripts/git_operations.py push python -X utf8 scripts/git_operations.py push-tags ``` ### Step 6: GitHub Release (Optional) If user wants GitHub release, use `gh` CLI: ```bash gh release create v \ --title "v - " \ --notes "<Release notes from CHANGELOG>" ``` ## Project-Specific Workflows ### Unity Workflow Unity projects require special handling due to dual-file approach: 1. Detect Unity project (ProjectSettings.asset exists) 2. Update version.json first (source of truth) 3. Sync to ProjectSettings.asset using sync_unity_version.py 4. Commit both files together 5. Tag and push Reference: `references/unity-guide.md` for detailed Unity workflow. ### Unreal Workflow Unreal projects use .uproject JSON file: 1. Detect .uproject file 2. Update Version field in .uproject 3. Optionally sync to Config/DefaultGame.ini 4. Commit, tag, push Reference: `references/unreal-guide.md` for detailed Unreal workflow. ### Node.js / Python / Rust Workflow Standard workflow for web/backend projects: 1. Detect project type via package file 2. Update version field in package file 3. Generate CHANGELOG from commits 4. Commit, tag, push ## Error Handling Handle common errors: **Project not detected:** - Check if running in correct directory - Look for .git directory - Suggest creating VERSION file for generic projects **Version file not found:** - Suggest creating file from template (assets/) - For Unity: Create version.json from template **Git errors:** - Check if git repository exists - Verify remote is configured - Handle authentication issues **Script errors:** - Ensure Python 3.11+ is installed - Check file permissions - Verify file encodings (UTF-8) ## Bundled Resources ### Scripts All scripts are in `scripts/` directory and work cross-platform (Windows, macOS, Linux): - **detect_project.py**: Auto-detect project type - **update_version.py**: Universal version updater - **sync_unity_version.py**: Unity version synchronization - **git_operations.py**: Git workflow automation - **changelog_generator.py**: CHANGELOG generation ### References Detailed guides in `references/` directory: - **project-types.md**: All supported project types and version file locations - **unity-guide.md**: Unity-specific version management - **unreal-guide.md**: Unreal Engine version management Load these as needed for detailed information. ### Assets Templates in `assets/` directory: - **version.json.template**: Template for Unity/game projects - **CHANGELOG.md.template**: Template for new CHANGELOG files Use these when creating new version files. ## Best Practices - Always commit version files together (e.g., Unity's version.json + ProjectSettings.asset) - Use semantic versioning consistently - Write meaningful commit messages following Conventional Commits - Tag releases with `v` prefix (e.g., v1.2.3) - Keep CHANGELOG updated for user-facing changes - For Unity: version.json is source of truth, always sync to ProjectSettings.asset ## Notes - Scripts use Python 3.11+ with only stdlib dependencies - All file operations use UTF-8 encoding - Path handling uses pathlib for cross-platform compatibility - Git operations use subprocess for reliability - Unity YAML parsing uses regex for robustness