summaryrefslogtreecommitdiff
path: root/docs/handbook/meshmc/release-notes.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/handbook/meshmc/release-notes.md')
-rw-r--r--docs/handbook/meshmc/release-notes.md222
1 files changed, 222 insertions, 0 deletions
diff --git a/docs/handbook/meshmc/release-notes.md b/docs/handbook/meshmc/release-notes.md
new file mode 100644
index 0000000000..02391fca2c
--- /dev/null
+++ b/docs/handbook/meshmc/release-notes.md
@@ -0,0 +1,222 @@
+# Release Notes
+
+## Versioning Scheme
+
+MeshMC follows a three-component version scheme:
+
+```
+MAJOR.MINOR.HOTFIX
+```
+
+Defined in the top-level `CMakeLists.txt`:
+
+```cmake
+set(MeshMC_VERSION_MAJOR 7)
+set(MeshMC_VERSION_MINOR 0)
+set(MeshMC_VERSION_HOTFIX 0)
+set(MeshMC_VERSION_NAME "${MeshMC_VERSION_MAJOR}.${MeshMC_VERSION_MINOR}.${MeshMC_VERSION_HOTFIX}")
+```
+
+| Component | When Incremented |
+|---|---|
+| **MAJOR** | Breaking changes, major feature overhauls |
+| **MINOR** | New features, significant improvements |
+| **HOTFIX** | Bug fixes, security patches |
+
+### Build Metadata
+
+Additional version metadata is generated at build time:
+
+```cmake
+set(MeshMC_BUILD_PLATFORM "${CMAKE_SYSTEM_NAME}") # Linux, Darwin, Windows
+set(MeshMC_GIT_COMMIT ...) # Git commit hash
+set(MeshMC_GIT_TAG ...) # Git tag if on a tag
+```
+
+The full version string displayed in the About dialog includes platform and git info.
+
+## Update System
+
+MeshMC uses a dual-source update checking system.
+
+### UpdateChecker
+
+```cpp
+class UpdateChecker : public QObject
+{
+ Q_OBJECT
+public:
+ void checkForUpdate(QString updateUrl, bool notifyNoUpdate);
+
+ bool hasNewUpdate() const;
+ QString getLatestVersion() const;
+ QString getDownloadUrl() const;
+ QString getChangelog() const;
+
+signals:
+ void updateAvailable(QString version, QString url, QString changelog);
+ void noUpdateAvailable();
+ void updateCheckFailed();
+
+private:
+ void parseRSSFeed(const QByteArray& data);
+ void parseGitHubRelease(const QJsonObject& release);
+
+ QString m_currentVersion;
+ QString m_latestVersion;
+ QString m_downloadUrl;
+ QString m_changelog;
+ bool m_hasUpdate = false;
+};
+```
+
+### Update Sources
+
+#### RSS Feed
+
+Primary update channel — an RSS/Atom feed listing available versions:
+
+```
+https://projecttick.org/feed/meshmc.xml
+```
+
+The feed contains:
+- Version number
+- Download URLs per platform
+- Changelog summary
+
+#### GitHub Releases
+
+Fallback/alternative update source using the GitHub Releases API:
+
+```
+https://api.github.com/repos/Project-Tick/MeshMC/releases/latest
+```
+
+Returns:
+- Tag name (version)
+- Release body (changelog in Markdown)
+- Asset download URLs
+
+### Update Check Flow
+
+```
+Application startup (if AutoUpdate enabled)
+ │
+ └── UpdateChecker::checkForUpdate()
+ │
+ ├── Fetch RSS feed
+ │ ├── Parse version from <item> entries
+ │ ├── Compare with current version
+ │ └── Extract download URL + changelog
+ │
+ ├── OR Fetch GitHub release
+ │ ├── Parse tag_name for version
+ │ ├── Compare with current version
+ │ └── Extract asset URL + body
+ │
+ ├── If new version available:
+ │ └── emit updateAvailable(version, url, changelog)
+ │ └── MainWindow shows update notification
+ │
+ └── If no update:
+ └── emit noUpdateAvailable()
+```
+
+### Update Settings
+
+```cpp
+m_settings->registerSetting("AutoUpdate", true);
+m_settings->registerSetting("UpdateChannel", "stable");
+```
+
+| Setting | Values | Description |
+|---|---|---|
+| `AutoUpdate` | `true`/`false` | Check for updates on startup |
+| `UpdateChannel` | `stable`/`beta` | Which release channel to follow |
+
+### Update Dialog
+
+When an update is available, `UpdateDialog` is shown:
+
+- Displays current version vs. available version
+- Shows changelog (rendered from Markdown via cmark)
+- "Update Now" button → opens download URL in browser
+- "Skip This Version" → suppresses notification for this version
+- "Remind Me Later" → dismisses until next startup
+
+### Sparkle (macOS)
+
+On macOS, updates are handled by the Sparkle framework instead of the built-in `UpdateChecker`:
+
+- Native macOS update UI
+- Differential updates (only download changed parts)
+- Code signature verification
+- Appcast feed (XML similar to RSS)
+- Background update installation
+
+```cpp
+#ifdef Q_OS_MACOS
+ // Use Sparkle for updates instead of built-in checker
+ SUUpdater* updater = [SUUpdater sharedUpdater];
+ [updater setAutomaticallyChecksForUpdates:autoUpdate];
+ [updater checkForUpdatesInBackground];
+#endif
+```
+
+## Distribution
+
+### Build Artifacts
+
+| Platform | Artifact | Format |
+|---|---|---|
+| Linux | AppImage | `.AppImage` |
+| Linux | Tarball | `.tar.gz` |
+| Linux | Nix | Flake output |
+| macOS | Disk Image | `.dmg` (app bundle) |
+| Windows | Installer | `.exe` (NSIS) |
+| Windows | Portable | `.zip` |
+
+### Release Branches
+
+| Branch | Purpose |
+|---|---|
+| `develop` | Active development |
+| `release-7.x` | Current stable release line |
+| Tagged releases | `v7.0.0`, `v7.0.1`, etc. |
+
+Backports from `develop` to `release-*` branches are automated via GitHub Actions (see [Contributing](contributing.md#backporting)).
+
+## Changelog Format
+
+Release changelogs follow this structure:
+
+```markdown
+## MeshMC 7.0.0
+
+### New Features
+- Feature description
+
+### Bug Fixes
+- Fix description
+
+### Internal Changes
+- Change description
+
+### Dependencies
+- Updated Qt to 6.7.x
+```
+
+## Current Version
+
+**MeshMC 7.0.0** — Initial release as MeshMC (fork of PrismLauncher/MultiMC).
+
+Key features:
+- C++23 codebase with Qt6
+- Microsoft Account authentication via OAuth2
+- Multi-platform support (Linux, macOS, Windows)
+- Instance management with component system
+- Mod management with CurseForge, Modrinth, ATLauncher, FTB, Technic integration
+- Customizable themes and icon packs
+- Managed Java downloads
+- Automatic update checking