This document explains the project's versioning rules, changelog maintenance, and CI/CD automation process for maintainers to quickly get started.
This project distinguishes between Display Version (Version) and Semantic Version (SerVersion) to balance user clarity and Windows build requirements.
- Version (V): Used for public display, Git Tag, and GitHub Release titles.
- Stable: Three-part version, e.g.,
1.2.0. - Test: Format is
a.b.c-YYmMMx.YY: Last two digits of release year.MM: Release month.x: Test sequence for the expected stable version in the month (a, b, c...).- Example:
1.2.0-26m01ameans the first test version for 1.2.0 released in January 2026.
- Stable: Three-part version, e.g.,
- SerVersion (SV): Four-part version (
a.b.c.d) for MSI, EXE, and system recognition.- Stable: Fourth part
dis0. - Test: Fourth part
dmatches the test sequence in Version (a=1, b=2...).
- Stable: Fourth part
The changelog is stored in src/main/resources/updates.json. This file is used both for in-app reading and as the data source for CI to generate Release Body.
- Data Structure:
Map<String, Map<String, String>> - Format: Key is
Version, value is an object withreleaseDateanddescription.
Note: The CI/CD process strictly matches the pushed Tag name (Version) with this file. Ensure the key matches the Tag exactly.
Example:
{
"1.2.0-26m01a": {
"releaseDate": "2026-01-01 01:01",
"description": "First development snapshot, integrated basic UI framework."
},
"1.2.0": {
"releaseDate": "2026-01-02 13:02",
"description": "Official 1.2.0 release, fixed known memory leak issues."
}
}The pipeline executes as follows:
- Trigger: Open terminal, run
git tag <Version>thengit push origin <Version>. - Fetch Code: Tag push triggers GitHub Actions, fetching the latest code for the Tag.
- Version Conversion: Script automatically converts
VersiontoSerVersion. - Environment Setup: Sets up JDK and automatically downloads WiX Toolset and Enigma packaging tools.
- Property Overwrite: Automatically overwrites
<app.display.version>and<app.semantic.version>inpom.xml.- Note: These properties are currently only used for cloud prompts of the current version.
- Build: Calls
.build/build.ps1script to generate software in various distribution formats. - Log Generation: Reads date and description from
updates.jsonfor the currentVersion, concatenates, and outputs torelease_body.txt. - Release: Uses
release_body.txtas the release note and uploads generated files to GitHub Release.
A: If build fails due to code or configuration issues, follow these steps:
- Fix the issues locally and commit the code.
- Edit the
$TagNameparameter inscripts/retag.ps1to the version you want to re-release. - Run
retag.ps1.- The script will automatically delete the old local Tag and the corresponding remote Tag.
- It will re-tag based on the latest code and push, triggering the CI/CD process again.