Awake Engine Release Process & Branching Guidelines
This document serves as the canonical source of truth for repository branching, versioning, changelogs, release operations, and GitHub milestone tracking across Awake Engine.
1. Branching Strategy & Release Flow
To maintain high development velocity while ensuring release stability:
-
mainBranch (Source of Truth):- Always compilable, tested, and passing all CI quality checks (
./gradlew check). - All changes enter
mainvia Pull Requests from topic branches.
- Always compilable, tested, and passing all CI quality checks (
-
Feature & Topic Branches:
- Short-lived branches formatted as
feat/*,fix/*,refactor/*, ordocs/*(e.g.feat/webgpu-swapchain,fix/vulkan-sync-hazard). - Merged into
mainusing Squash and Merge or linear rebase to keep history clean.
- Short-lived branches formatted as
-
Release Branches (Major & Minor Cuts):
- Cut a dedicated branch when preparing major or minor releases (e.g.
release/v0.1.0orrelease/v0.2.0). - Only bug fixes, documentation, and release polish land on the release branch.
- Tags (
v0.1.0-rc.1,v0.1.0) are created directly on the release branch, then merged back intomain.
- Cut a dedicated branch when preparing major or minor releases (e.g.
2. Versioning & Lifecycle Scheme
Version numbers are derived dynamically from Git tags using git describe in build.gradle.kts:
| Phase | Tag Format | Maven Version | Description |
|---|---|---|---|
| Development | v0.1.0-dev.10 |
0.1.0-dev.10 |
Regular development tags cut from main. |
| Alpha | v0.1.0-alpha.1 |
0.1.0-alpha.1 |
Feature-complete for milestone; backend validation. |
| Beta | v0.1.0-beta.1 |
0.1.0-beta.1 |
Public API frozen; memory leak, performance, & doc focus. |
| Release Candidate | v0.1.0-rc.1 |
0.1.0-rc.1 |
Final sanity checks before production release. |
| Stable Release | v0.1.0 |
0.1.0 |
Production general availability release on Maven Central. |
SNAPSHOT Behavior: Any local or CI commit after a tag automatically appends
-SNAPSHOT(e.g.,0.1.0-dev.11-SNAPSHOT), ensuring unreleased local builds never collide with published releases.
3. GitHub Milestones & Subsystem Roadmap
Active milestones on GitHub represent concrete version boundaries organized by subsystem capability:
Milestone 0: v0.1.0-dev — Engine Foundations & Infrastructure (COMPLETED)
- Subsystem: Core Engine & Math (
awake:core:math,awake:ecs)[x]Vec3f,Mat4,Quat,Bounds,Ray,AABBgeometry primitives.[x]Multiplatform ECS World, Systems, queries, and family pooling.
- Subsystem: Compose Engine & UI (
awake:compose:*,awake:ui:shadcn)[x]Retained Compose layout engine, local theme/density providers, 23+ Shadcn Compose components.[x]app:studioIDE shell, dock panels, and inspector integration.
- Subsystem: Namespace & Repository Transfer
[x]com.awakekt.awakepackage migration andawakekt/awaketransfer.[x]Pre-release dev cuts (v0.1.0-dev.1throughv0.1.0-dev.10).
Milestone 1: v0.1.0-alpha.1 — First Public Maven Release (COMPLETED)
- Subsystem: Maven Central Distribution (
com.awakekt)[x]Publishcom.awakekt.awake:*libraries to Maven Central viabuild-and-publish.yml.[x]Verifyawake-templateconsumer build against published Maven Central artifacts.
- Subsystem: Multi-OS Desktop Vulkan (
awake:backend:vulkan)[x]Multi-OS Vulkan native binaries (macOS ARM64, macOS x86_64, Linux x86_64).[x]Out-of-the-box Desktop JVM sample verification (samples:engine-showcase).
Milestone 2: v0.2.0 — *WebGPU Backend &
Web Demos Preview*
- Subsystem: Rendering Engine (
awake:backend:webgpu)[ ]WebGPU WasmJs browser runtime stability in Chrome/Edge.[ ]Naga SPIR-V → WGSL shader compilation pipeline.
- Subsystem: Web Hosting & Preview
[ ]Automated Cloudflare Pages deployment fordemo.awakekt.com(Engine & UI Showcases).
Milestone 3: v0.3.0 — *Physics & Character
Controller Maturity*
- Subsystem: Physics Simulation (
awake:backend:jolt,awake:physics:api)[ ]Heightfield terrain colliders, raycasting, character controller.
- Subsystem: Asset Pipeline (
awake:asset:gltf)[ ]glTF 2.0 skinned skeletal mesh animations and socket attachments.
Milestone 4: v0.4.0 — *Studio IDE Maturity &
Prefabs System*
- Subsystem: Editor IDE (
app:studio)[ ]Undo/Redo command stack (UndoManager).[ ]Scene Prefabs instantiation (.prefab.json).[ ]Asset drag-and-drop cooking & scale/rotate gizmos.
Milestone 5: v0.5.0 — *3D Spatial Audio &
Open World Terrain*
- Subsystem: Audio Engine (
awake:core:audio)[ ]3D spatial positional audio, attenuation curves, audio bus mixing.
- Subsystem: Terrain & AI (
awake:asset:terrain,awake:navigation)[ ]Concentric geometry clipmap LODs, 4-weight terrain splatting, 3D NavMesh baking.
Milestone 6: v0.6.0 — *Multiplayer
Synchronization & Networking*
- Subsystem: Networking (
awake:net:api,samples:server)[ ]Client prediction, entity delta serialization, authoritative server harness.
Milestone 7: v1.0.0 — *Production Stable
Engine & Ecosystem*
- Subsystem: API Stability & Ecosystem
[ ]Full platform matrix (JVM, Android, iOS MoltenVK, Web Wasm).[ ]Dokka API reference documentation ondocs.awakekt.com.[ ]100% automated headless render parity gate.
4. Changelog Rules & Sample Inclusion Policy
-
Handwritten Prose under
[Unreleased]:- As work lands, write clean, human-readable entries under
## [Unreleased]inCHANGELOG.md. - Group entries into
### Added,### Changed, or### Fixed.
- As work lands, write clean, human-readable entries under
-
Inclusion of Sample & Tooling Updates:
- Updates to official sample applications (
samples:engine-showcase,samples:ui-showcase,samples:compose-showcase) and Studio IDE (app:studio) belong inCHANGELOG.md. - Omit internal chores (
chore:), unit test tweaks (test:), and private code cleanups.
- Updates to official sample applications (
5. Automated Release Cutter
To cut a release from the current [Unreleased] batch, run:
./scripts/release.py cut [--channel dev|alpha|beta|rc|stable] [--bump patch|minor|major]
This command automatically:
- Reads handwritten prose under
## [Unreleased]inCHANGELOG.md. - Promotes
## [Unreleased]to## [vX.Y.Z-channel.N] - YYYY-MM-DD. - Prepend a fresh empty
## [Unreleased]section at the top. - Commits
CHANGELOG.mdalone (chore(release): cut vX.Y.Z-channel.N). - Creates an annotated Git tag
vX.Y.Z-channel.N.
6. Repository Hygiene: GitHub Milestones vs. In-Repo Docs
To maintain a clean, readable Git history and prevent commit bloat:
The Rule of Thumb
| Use GitHub Milestones & Issues for: | Keep In-Repo Docs (docs/) for: |
|---|---|
🎯 Release targets (v0.1.0-alpha.1, v0.2.0) |
🏛️ Architecture Decision Records (ADRs) |
| 📋 To-do items, progress checklists, & burndown | 📐 Hardware Abstraction Layer (HAL) & Render contracts |
| 🐛 Bug reports, triage, & fixes | 📖 API Guides, tutorials, & setup references |
| 💬 Design discussions before code lands | 📜 Official release CHANGELOG.md |
| ⏱️ Ephemeral task lists & assignment | 🤖 AI Agent Rules & Skills (.agents/skills/) |
Guidelines for AI Agents and Contributors
- Zero Checkbox Churn in Git: Do not commit scratch
.mdtask checklist files intodocs/or commit every individual checkbox check-off. Track operational progress via GitHub Issues assigned to the relevant GitHub Milestone. - Atomic Commits & PR Squashing: Feature work on topic branches must be squashed upon merging into
main. Never push rapid micro-commits (style: reword comment,fix typo) directly tomain. - Milestone Association: Every issue and pull request should be associated with an active GitHub Milestone (
https://github.com/awakekt/awake/milestones). Closing an issue updates the milestone progress automatically without touching Git history.