PakFu uses numeric-only version identifiers so Qt QVersionNumber comparisons
stay stable for updater decisions.
Rules:
VERSIONmust always be numeric dot-segments only (nov, no suffixes).- Git tags are always
v<version>. - Stable releases use
MAJOR.MINOR.PATCH. - Nightly releases use
MAJOR.MINOR.PATCH.BUILD.
Nightly version generation:
- Computed by
scripts/nightly_version.py. - Base (
MAJOR.MINOR.PATCH) is derived from Conventional Commit bump rules relative to the latest stable tag. BUILDincrements for each nightly on that base.- Nightly runs only publish when meaningful commits exist since the previous
nightly tag (
chore(release): ...commits are ignored).
Stable/beta/dev manual version generation:
- Computed by
scripts/next_version.pyforauto_version.yml.
CHANGELOG.mdremains the source of truth.- Nightly release notes include:
- The generated nightly changelog entry.
- The full
CHANGELOG.mdcontent.
- Changelog/release-note rendering scripts:
scripts/update_changelog.pyscripts/nightly_release_notes.pyscripts/release_notes.py(manual channel releases)
Packaged artifacts must follow this canonical pattern:
pakfu-<version>-<platform>-<arch>-<kind>.<ext>
Required assets per platform:
- Windows:
portable.zipandinstaller.msi - macOS:
portable.zipandinstaller.pkg - Linux:
portable.tar.gzandinstaller.AppImage
Current updater behavior prefers installer assets and falls back to portable archives when needed.
The release pipeline also emits:
pakfu-<version>-release-manifest.json(checksums + distribution metadata)CHANGELOG-<version>.md
Validation tooling:
scripts/validate_build.pyscripts/validate_release_assets.pyscripts/release_manifest.py
Nightly automation:
- Workflow:
.github/workflows/nightly.yml - Trigger: scheduled nightly + manual dispatch (
forceoptional) - Stages:
prepare: compute nightly version + change gatebuild: compile on Windows/macOS/Linuxvalidate: run CLI smoke checks on each platform build (and optionally--run-practical-qafor UI file-ops smoke checks)package: build installer + portable assets per platformrelease: tag, validate completeness, publish nightly release with full changelog context
Manual release channels:
- Workflow:
.github/workflows/auto_version.yml - Trigger: manual dispatch only
- Purpose: stable/beta/dev tagged releases from selected channel policy
Manual rebuild of an existing ref:
- Workflow:
.github/workflows/release.yml
Preview manual next version:
python scripts/next_version.py --channel devPreview nightly decision/version:
python scripts/nightly_version.py --format json