Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:18:47 +08:00
commit aca019f43d
14 changed files with 1826 additions and 0 deletions

View File

@@ -0,0 +1,160 @@
# Supported Project Types
This document describes all project types supported by auto-release-manager and their version file locations.
## Web & Backend
### Node.js
- **Detection file**: `package.json`
- **Version location**: `package.json``version` field
- **Format**: JSON
- **Example**:
```json
{
"name": "my-project",
"version": "1.2.3"
}
```
### Python
- **Detection files**: `pyproject.toml` or `setup.py`
- **Version location**:
- `pyproject.toml` → `project.version` or `tool.poetry.version`
- `setup.py` → `version=` parameter
- **Format**: TOML or Python
- **Example**:
```toml
[project]
name = "my-project"
version = "1.2.3"
```
### Rust
- **Detection file**: `Cargo.toml`
- **Version location**: `Cargo.toml` → `package.version`
- **Format**: TOML
- **Example**:
```toml
[package]
name = "my-project"
version = "1.2.3"
```
### Go
- **Detection file**: `go.mod`
- **Version location**: `VERSION` file (custom)
- **Format**: Plain text
- **Note**: Go doesn't have built-in versioning in go.mod
## Game Engines
### Unity
- **Detection file**: `ProjectSettings/ProjectSettings.asset`
- **Version locations**:
1. `version.json` (Primary source of truth) → `version` field
2. `ProjectSettings/ProjectSettings.asset` → `bundleVersion` field
- **Format**: JSON + Unity YAML
- **Workflow**: Update `version.json` first, then sync to `ProjectSettings.asset`
- **Example**:
`version.json`:
```json
{
"version": "1.2.3",
"buildNumber": 42
}
```
`ProjectSettings.asset`:
```yaml
PlayerSettings:
bundleVersion: 1.2.3
```
### Unreal Engine
- **Detection file**: `*.uproject`
- **Version location**: `<ProjectName>.uproject` → `Version` or `EngineAssociation`
- **Format**: JSON
- **Example**:
```json
{
"FileVersion": 3,
"EngineAssociation": "5.3",
"Version": "1.2.3"
}
```
### Godot
- **Detection file**: `project.godot`
- **Version location**: `project.godot` → `config/version`
- **Format**: INI-like
- **Example**:
```ini
[application]
config/name="MyGame"
config/version="1.2.3"
```
## Plugins & Extensions
### Claude Code Plugin
- **Detection file**: `.claude-plugin/plugin.json`
- **Version location**: `.claude-plugin/plugin.json` → `version`
- **Format**: JSON
- **Example**:
```json
{
"name": "my-plugin",
"version": "1.2.3",
"description": "..."
}
```
### VS Code Extension
- **Detection file**: `package.json` + `package.nls.json`
- **Version location**: `package.json` → `version`
- **Format**: JSON
- **Same as Node.js projects**
### Browser Extension
- **Detection file**: `manifest.json`
- **Version location**: `manifest.json` → `version`
- **Format**: JSON
- **Example**:
```json
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.2.3"
}
```
## Generic Projects
### Plain VERSION file
- **Detection file**: `VERSION` or `version.txt`
- **Version location**: Content of file
- **Format**: Plain text
- **Example**:
```
1.2.3
```
## Version Format
All projects follow **Semantic Versioning (semver)**:
```
MAJOR.MINOR.PATCH
1.2.3
│ │ │
│ │ └─ PATCH: Bug fixes
│ └─── MINOR: New features (backward compatible)
└───── MAJOR: Breaking changes
```
Examples:
- `1.0.0` → `1.0.1` (patch: bug fix)
- `1.0.1` → `1.1.0` (minor: new feature)
- `1.1.0` → `2.0.0` (major: breaking change)

View File

@@ -0,0 +1,140 @@
# Unity Project Version Management
## Overview
Unity projects use a dual-file approach for version management:
1. **`version.json`** - Single source of truth (easy to read/edit)
2. **`ProjectSettings/ProjectSettings.asset`** - Auto-synced (used by Unity builds)
## File Structure
```
MyUnityProject/
├── version.json # Primary source
├── ProjectSettings/
│ └── ProjectSettings.asset # Auto-synced
└── Assets/
└── ...
```
## version.json (Primary)
Create this file at project root:
```json
{
"version": "1.2.3",
"buildNumber": 42,
"releaseDate": "2025-10-20"
}
```
**Fields:**
- `version` (required): Semantic version (MAJOR.MINOR.PATCH)
- `buildNumber` (optional): Incremental build number
- `releaseDate` (optional): Release date in YYYY-MM-DD format
## ProjectSettings.asset (Auto-sync)
The `bundleVersion` field in this file is automatically synced from `version.json`:
```yaml
PlayerSettings:
bundleVersion: 1.2.3
AndroidBundleVersionCode: 42
buildNumber:
iOS: 42
```
## Workflow
### Manual Update
1. Edit `version.json`:
```json
{
"version": "1.3.0"
}
```
2. Run sync script:
```bash
python scripts/sync_unity_version.py
```
3. Commit both files:
```bash
git add version.json ProjectSettings/ProjectSettings.asset
git commit -m "chore: bump version to 1.3.0"
```
### Automatic Update (with auto-release-manager)
The skill handles everything automatically:
```
1. Update version.json → 1.3.0
2. Sync to ProjectSettings.asset
3. Git commit both files
4. Create tag v1.3.0
5. Push to remote
```
## Benefits of Dual-File Approach
✅ **Easy Version Management**
- `version.json` is simple JSON, easy to read/edit
- Clean git diffs
✅ **Unity Integration**
- `ProjectSettings.asset` is used by Unity builds
- Version automatically appears in build
✅ **Automated Sync**
- Scripts ensure consistency
- No manual errors
✅ **Extended Metadata**
- `version.json` can store additional info (buildNumber, releaseDate)
- `ProjectSettings.asset` only has bundleVersion
## Common Issues
### Q: Why not just use ProjectSettings.asset?
A: ProjectSettings.asset is a YAML file that's hard to read and edit manually. It also contains hundreds of other settings, making git diffs noisy.
### Q: Can I use only version.json?
A: No. Unity reads bundleVersion from ProjectSettings.asset for builds. Both files are needed.
### Q: What if files get out of sync?
A: Run `python scripts/sync_unity_version.py` to sync from version.json (source of truth) to ProjectSettings.asset.
## Example: Version Update
**Before:**
```json
// version.json
{
"version": "1.2.3",
"buildNumber": 42
}
```
**After:**
```json
// version.json
{
"version": "1.3.0",
"buildNumber": 43
}
```
**Auto-synced:**
```yaml
# ProjectSettings.asset
PlayerSettings:
bundleVersion: 1.3.0 # ← Automatically updated
```

View File

@@ -0,0 +1,152 @@
# Unreal Engine Project Version Management
## Overview
Unreal Engine projects use `.uproject` JSON file for project configuration and versioning.
## File Structure
```
MyUnrealProject/
├── MyGame.uproject # Project file with version
├── Config/
│ └── DefaultGame.ini # Game config
├── Source/
│ └── ...
└── Content/
└── ...
```
## .uproject File
The project file is a JSON file containing project metadata:
```json
{
"FileVersion": 3,
"EngineAssociation": "5.3",
"Category": "",
"Description": "",
"Version": "1.2.3",
"Modules": [
{
"Name": "MyGame",
"Type": "Runtime",
"LoadingPhase": "Default"
}
],
"Plugins": [
...
]
}
```
**Version Fields:**
- `Version` (custom): Semantic version of your project
- `EngineAssociation`: Unreal Engine version (e.g., "5.3", "5.4")
## Version Update Workflow
### Manual Update
1. Edit `.uproject` file:
```json
{
"Version": "1.3.0"
}
```
2. Commit:
```bash
git add MyGame.uproject
git commit -m "chore: bump version to 1.3.0"
```
### Automatic Update (with auto-release-manager)
```
1. Detect .uproject file
2. Update Version field → 1.3.0
3. Git commit
4. Create tag v1.3.0
5. Push to remote
```
## DefaultGame.ini
Optional: You can also store version in `Config/DefaultGame.ini`:
```ini
[/Script/EngineSettings.GeneralProjectSettings]
ProjectID=...
ProjectName=MyGame
ProjectVersion=1.2.3
CompanyName=MyCompany
```
This is useful for in-game version display.
## Build Versioning
For packaging builds, you may want to configure:
**Config/DefaultGame.ini:**
```ini
[/Script/UnrealEd.ProjectPackagingSettings]
BuildConfiguration=PPBC_Shipping
ProjectVersion=1.2.3
```
## Example: Full Update
When updating version from 1.2.3 to 1.3.0:
**Files to update:**
1. `MyGame.uproject` → `Version: "1.3.0"`
2. `Config/DefaultGame.ini` → `ProjectVersion=1.3.0` (if used)
**auto-release-manager handles:**
- Detecting .uproject file
- Updating Version field
- Git commit + tag
- Push to remote
## Common Issues
### Q: Is Version field required in .uproject?
A: No, it's optional. But recommended for version tracking.
### Q: What about EngineAssociation?
A: EngineAssociation is the UE version (e.g., "5.3"). Don't confuse it with your project version.
### Q: Can I use multiple version fields?
A: Yes! You can maintain:
- `.uproject` → Version (project version)
- `DefaultGame.ini` → ProjectVersion (in-game display)
- `version.json` → Custom metadata
Just ensure they stay synced.
## Recommended Approach
**Best Practice:**
1. Use `.uproject` → Version as primary
2. Optionally sync to `DefaultGame.ini` for in-game display
3. Use auto-release-manager to keep everything consistent
**Example:**
```json
// MyGame.uproject
{
"Version": "1.3.0"
}
```
```ini
; Config/DefaultGame.ini
[/Script/EngineSettings.GeneralProjectSettings]
ProjectVersion=1.3.0
```