mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
270 lines
9.6 KiB
Markdown
270 lines
9.6 KiB
Markdown
# Spine Runtime Changelog Generation
|
|
|
|
## Output File
|
|
Add changes to `/spine-runtimes/CHANGELOG.md` at the TOP of the file, under the current version heading (e.g., `# 4.3`).
|
|
Each language gets a `##` section, each engine integration gets a `###` subsection under its language.
|
|
|
|
**CRITICAL**: If entries already exist for the current version:
|
|
- **PRESERVE all existing human-written entries** - they may contain important manual additions
|
|
- **ADD new entries** to the appropriate sections
|
|
- **MOVE entries** if needed to maintain correct ordering, but NEVER delete or modify existing text
|
|
- **MERGE** your generated entries with existing ones, don't replace
|
|
|
|
## Step 1: Determine Comparison Branch
|
|
```bash
|
|
cd /spine-runtimes
|
|
git branch -r | grep origin | grep -E "^ origin/[0-9]\.[0-9]" | sort -V
|
|
```
|
|
Ask user: "Which branch to compare against? (typically the previous version, e.g., 4.2 for 4.3 changes)"
|
|
|
|
## Step 2: Analyze Java Reference Implementation
|
|
```bash
|
|
git diff COMPARE_BRANCH..CURRENT_BRANCH -- spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/
|
|
```
|
|
|
|
### What to Look For:
|
|
- **Public API changes** (public/protected methods, fields, classes)
|
|
- **Ignore**: private methods, internal implementation, formatting, comments
|
|
- **New files**: Check if they contain public classes
|
|
- **Deleted files**: Note if public classes were removed
|
|
- **Method signature changes**: Parameters added/removed/changed
|
|
|
|
## Step 3: Generate Changelog Entries
|
|
|
|
### Process Order:
|
|
1. Start with Java reference implementation changes
|
|
2. Port these to all language runtimes (with language-specific syntax)
|
|
3. Add language runtime specific changes
|
|
4. Add engine-specific changes
|
|
5. **Check off each item in the checklist as you complete it**
|
|
|
|
### Runtime Checklist (follows changelog.md structure):
|
|
|
|
- [ ] **C** (`spine-c/`) - C wrapper around C++ runtime
|
|
- [ ] **SFML** (`spine-sfml/c/`)
|
|
- [ ] **SDL** (`spine-sdl/`)
|
|
- [ ] **GLFW** (`spine-glfw/`)
|
|
|
|
- [ ] **C++** (`spine-cpp/`) - Check `src/spine/*.cpp` and `include/spine/*.h`
|
|
- [ ] **Cocos2d-x** (in examples if present)
|
|
- [ ] **SFML** (`spine-sfml/cpp/`)
|
|
- [ ] **UE** (`spine-ue/`)
|
|
- [ ] **Godot** (`spine-godot/`)
|
|
|
|
- [ ] **C#** (`spine-csharp/src/`) - Check all `.cs` files
|
|
- [ ] **Unity** (`spine-unity/`)
|
|
- [ ] **MonoGame** (`spine-monogame/`)
|
|
- [ ] **XNA** (`spine-xna/`)
|
|
|
|
- [ ] **Dart** (`spine-flutter/src/`) - Dart runtime
|
|
- [ ] **Flutter** (`spine-flutter/`) - Flutter-specific integration
|
|
|
|
- [ ] **Haxe** (`spine-haxe/spine-haxe/`) - Check all `.hx` files
|
|
|
|
- [ ] **Java** (`spine-libgdx/spine-libgdx/src/`) - Reference implementation
|
|
- [ ] **libGDX** (`spine-libgdx/`) - libGDX-specific integration
|
|
- [ ] **Android** (`spine-android/`)
|
|
|
|
- [ ] **Swift** (`spine-ios/spine-ios/`) - Swift/Objective-C runtime
|
|
- [ ] **iOS** (`spine-ios/`) - iOS-specific integration
|
|
|
|
- [ ] **TypeScript/JavaScript** (`spine-ts/spine-core/src/`) - Check all `.ts` files
|
|
- [ ] **WebGL backend** (`spine-ts/spine-webgl/`)
|
|
- [ ] **Canvas backend** (`spine-ts/spine-canvas/`)
|
|
- [ ] **CanvasKit backend** (`spine-ts/spine-canvaskit/`)
|
|
- [ ] **Three.js backend** (`spine-ts/spine-threejs/`)
|
|
- [ ] **Player** (`spine-ts/spine-player/`)
|
|
- [ ] **Pixi v7** (`spine-ts/spine-pixi-v7/`)
|
|
- [ ] **Pixi v8** (`spine-ts/spine-pixi-v8/`)
|
|
- [ ] **Phaser v3** (`spine-ts/spine-phaser-v3/`)
|
|
- [ ] **Phaser v4** (`spine-ts/spine-phaser-v4/`)
|
|
- [ ] **Web Components** (`spine-ts/spine-webcomponents/`)
|
|
|
|
## Entry Format Hierarchy
|
|
|
|
The changelog has a **strict two-level hierarchy**:
|
|
|
|
1. **Top level**: Language runtime (## C, ## C++, ## C#, ## Dart, ## Haxe, ## Java, ## Swift, ## TypeScript/JavaScript)
|
|
- Contains changes to the core runtime implementation
|
|
- All public API changes from Java reference must be ported here
|
|
|
|
2. **Second level**: Engine/platform integrations under their language (### Unity, ### libGDX, ### Godot)
|
|
- Contains ONLY engine-specific changes
|
|
- Does NOT repeat language runtime changes
|
|
|
|
### Example Structure:
|
|
```markdown
|
|
## C
|
|
|
|
- **Additions**
|
|
- Added `spSkeleton_findSlider()` to query sliders by name (ported from Java)
|
|
- Added `spSlider` and `spSliderData` types (ported from Java)
|
|
- **Breaking changes**
|
|
- `spSkeleton_updateWorldTransform()` now requires `spPhysics` parameter (ported from Java)
|
|
- Renamed `spTransformMode` to `spInherit` and all `SP_TRANSFORMMODE_*` to `SP_INHERIT_*`
|
|
- **Changes of default values**
|
|
- Changed default mix duration from 0 to 0.2 seconds
|
|
- **Deprecated**
|
|
- Deprecated `spBone_worldToLocalRotationX()` and `spBone_worldToLocalRotationY()`
|
|
- **Restructuring (Non-Breaking)**
|
|
- Moved internal math utilities to separate module
|
|
|
|
### SFML
|
|
|
|
- **Additions**
|
|
- Added example showing physics integration
|
|
- New rendering optimization for batched sprites
|
|
|
|
### SDL
|
|
|
|
- **Additions**
|
|
- Added SDL3 support
|
|
- **Breaking changes**
|
|
- Removed SDL1 support
|
|
|
|
## C++
|
|
|
|
- **Additions**
|
|
- Added `Skeleton::findSlider()` to query sliders by name (ported from Java)
|
|
- Added `Slider` and `SliderData` classes (ported from Java)
|
|
- **Breaking changes**
|
|
- `Skeleton::updateWorldTransform()` now requires `Physics` parameter (ported from Java)
|
|
- Renamed `TransformMode` to `Inherit` and all `TransformMode_*` to `Inherit_*`
|
|
- **Deprecated**
|
|
- Deprecated `Bone::worldToLocalRotationX()` and `Bone::worldToLocalRotationY()`
|
|
|
|
### UE
|
|
|
|
- **Additions**
|
|
- Added Blueprint node for physics constraints
|
|
- Compatible with Unreal Engine 5.4
|
|
- **Breaking changes**
|
|
- Minimum Unreal Engine version is now 5.2
|
|
|
|
## C#
|
|
|
|
- **Additions**
|
|
- Added `Skeleton.FindSlider()` to query sliders by name (ported from Java)
|
|
- Added `Slider` and `SliderData` classes (ported from Java)
|
|
- **Breaking changes**
|
|
- `Skeleton.UpdateWorldTransform()` now requires `Physics` parameter (ported from Java)
|
|
- Renamed `TrackEntry.AttachmentThreshold` to `TrackEntry.MixAttachmentThreshold`
|
|
- **Changes of default values**
|
|
- Changed default `SkeletonGraphic.MeshScale` from 1.0 to calculated value
|
|
- **Deprecated**
|
|
- Deprecated `Bone.WorldToLocalRotationX` and `Bone.WorldToLocalRotationY`
|
|
- **Restructuring (Non-Breaking)**
|
|
- Reorganized shader files into subdirectories
|
|
|
|
### Unity
|
|
|
|
- **Additions**
|
|
- Added URP 2D shader variant
|
|
- New Inspector property `Layout Scale Mode` for SkeletonGraphic
|
|
- **Breaking changes**
|
|
- Changed default materials to have `CanvasGroup Compatible` disabled
|
|
- **Changes of default values**
|
|
- Changed default atlas texture workflow from PMA to straight alpha textures
|
|
|
|
### MonoGame
|
|
|
|
- **Additions**
|
|
- Updated to MonoGame 3.8.2
|
|
- **Restructuring (Non-Breaking)**
|
|
- Updated project structure to use .NET 6
|
|
```
|
|
|
|
## Language-Specific Naming
|
|
|
|
### Java (Reference)
|
|
- Instance method: `Skeleton#updateWorldTransform()`
|
|
- Static method: `Skeleton.someStaticMethod()`
|
|
- Field: `skeleton.time`
|
|
|
|
### C
|
|
- Function: `spSkeleton_updateWorldTransform()`
|
|
- Type: `spPhysics`
|
|
- Enum: `SP_PHYSICS_UPDATE`
|
|
|
|
### C++
|
|
- Method: `Skeleton::updateWorldTransform()`
|
|
- Namespace: `spine::`
|
|
- Enum: `Physics::Update`
|
|
|
|
### C#
|
|
- Method: `Skeleton.UpdateWorldTransform()`
|
|
- Property: `Skeleton.Time`
|
|
- Namespace: `Spine`
|
|
|
|
### TypeScript/JavaScript
|
|
- Method: `skeleton.updateWorldTransform()`
|
|
- Property: `skeleton.time`
|
|
- Enum: `Physics.update`
|
|
|
|
### Dart
|
|
- Method: `skeleton.updateWorldTransform()`
|
|
- Property: `skeleton.time`
|
|
- Class: `Skeleton`
|
|
|
|
### Haxe
|
|
- Method: `skeleton.updateWorldTransform()`
|
|
- Property: `skeleton.time`
|
|
- Package: `spine`
|
|
|
|
### Swift
|
|
- Method: `skeleton.updateWorldTransform()`
|
|
- Property: `skeleton.time`
|
|
- Class: `Skeleton`
|
|
|
|
### Godot (GDScript)
|
|
- Method: `skeleton.update_world_transform()`
|
|
- Signal: `animation_completed`
|
|
- Property: `skeleton.time`
|
|
|
|
## Key Rules
|
|
1. **Only document public API changes** - ignore private/internal
|
|
2. **One line per change** - be concise
|
|
3. **Group related changes** with sub-bullets
|
|
4. **Omit empty categories**
|
|
5. **Use backticks** for all code references
|
|
6. **Check existing entries** in CHANGELOG.md for style reference
|
|
|
|
## Complete Execution Workflow
|
|
|
|
1. **Setup**:
|
|
- Navigate to `/spine-runtimes/`
|
|
- Determine current branch: `git branch --show-current`
|
|
- List available branches: `git branch -r | grep origin | grep -E "^ origin/[0-9]\.[0-9]" | sort -V`
|
|
- Ask user which branch to compare against
|
|
- **Check CHANGELOG.md for existing entries under current version** - these must be preserved
|
|
- Load checklist state from this document
|
|
|
|
2. **Check Java Reference Status**:
|
|
- If **Java** is unchecked in the checklist:
|
|
- **MUST process Java first** - it's the reference implementation
|
|
- Run: `git diff COMPARE_BRANCH..CURRENT_BRANCH -- spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/`
|
|
- Document public API changes in Java section
|
|
- Check off Java in checklist
|
|
- If Java is already checked, proceed to step 3
|
|
|
|
3. **Select Runtime to Process**:
|
|
- Show user all **unchecked items** from the checklist
|
|
- Ask: "Which runtime would you like to process? Options:"
|
|
- List all unchecked language runtimes
|
|
- List all unchecked engine integrations (grouped by language)
|
|
- User selects one or multiple runtimes to process
|
|
|
|
4. **Process Selected Runtime(s)**:
|
|
- For **language runtime**:
|
|
- Port Java reference changes with language-specific syntax
|
|
- Check for additional language-specific changes
|
|
- Write entries under `## LanguageName` in CHANGELOG.md
|
|
- For **engine integration**:
|
|
- Check for engine-specific changes ONLY
|
|
- Write entries under `### EngineName` in CHANGELOG.md
|
|
- Check off processed items in checklist
|
|
|
|
5. **Repeat or Finalize**:
|
|
- If unchecked items remain, ask if user wants to continue
|
|
- If yes, return to step 3
|
|
- If no or all complete, save CHANGELOG.md and updated checklist |