release: propose 3.0.0-beta changelog (RFC) - #521
Conversation
Extends the existing git-describe block in CMakeLists.txt with a second `git describe --tags --exact-match HEAD` call. When HEAD sits on a tag, override the SVN/GIT placeholders with the tag name so artifact filenames, the About dialog string, the tray menu label, and the Windows version resource all reflect the release. Tagless builds (normal source clones, dev branches) keep "SVN"/"GIT" — the existing dev marker is unchanged. Also forwards an AMULE_TAGGED_RELEASE flag via config.h.cm so ClientVersion.h can suppress the __SVN__ dev marker on tagged builds without touching ClientVersion.h on every release. Side benefit: the "RELEASERS: REMOVE THE DEFINE ON THE RELEASES" comment in ClientVersion.h becomes obsolete — the release process now just tags a commit and lets CMake figure out the right macros. Future releases need only a CHANGELOG entry plus the tag.
… on tagged builds Bumps the integer version triplet from 2.4.0 (the never-shipped in-tree next-dev marker, in place since 2.3.3) to 3.0.0. The triplet surfaces in five user- and peer-visible places: - Windows .exe Properties → File Version - tray-icon menu label - ed2k version integer broadcast to peers and the server - the "Your aMule version is X.Y.Z" log line - the .rc resource on Windows so it has to match the planned release line, not be left at the prior in-tree placeholder. Also makes the __SVN__ dev marker conditional on AMULE_TAGGED_RELEASE, which CMake now derives from `git describe --tags --exact-match` and forwards via config.h. Source / dev builds keep __SVN__ defined and MOD_VERSION_LONG = "aMule SVN" (existing behaviour); tagged release builds get __SVN__ suppressed automatically and MOD_VERSION_LONG becomes "aMule <tag>" (e.g. "aMule 3.0.0-beta"). Tarball builds with no .git can still pass -DAMULE_TAGGED_RELEASE on the cmake command line if needed. The hardcoded `#define VERSION "2.4.0"` fallback is updated to "3.0.0-dev" — it's only used when config.h doesn't define VERSION (e.g. when ClientVersion.h is included from windres processing the .rc file with RC_INVOKED), so the value matters cosmetically rather than functionally, but matching the next-dev triplet keeps it self-consistent.
Replaces the empty 2.3.4 placeholder (dated 2021-??-??, never shipped) with a 3.0.0-beta entry covering the 5+ years of work since 2.3.3 (2021-02-07): 98 merged PRs, 284 commits, +65k / -100k lines (net -35k). Format breaks with the existing per-author bullet style and adopts Keep-a-Changelog topic sections. Headlines: throughput rewrite (peer- to-peer upload ~300x, download 2-4x depending on platform), CMake replacing autotools, native binaries for Linux / macOS / Windows, HTTPS download stack rebuilt on wxWebRequest, Kad parallel searches, MaxMindDB replacing deprecated GeoIP. Date placeholder "2026-MM-DD" — to be filled in when the maintainers approve and tag.
On a tagged build, the existing SVNDATE git-describe block produces
"rev. <tag>", and MuleVersion.h's `#ifdef SVNDATE` gate appends
"(Snapshot: <SVNDATE>)" to the version string. Result on tagged
builds was:
Initialising aMule 3.0.0-beta compiled with wxGTK3 v3.2.6 \
and Boost 1.74 (Snapshot: rev. 3.0.0-beta)
"Snapshot:" is misleading on a tagged release (a release is not a
snapshot) and the version string is duplicated. Two-line fix:
- In CMakeLists.txt's tagged-release detection block, `unset
(SVNDATE)` after detecting the tag. The earlier git-describe
call had set it to "rev. <tag>"; clearing it on tagged builds
prevents that value from flowing through to the banner.
- In config.h.cm, change `#define SVNDATE "${SVNDATE}"` to
`#cmakedefine SVNDATE "${SVNDATE}"`. Without this, an unset
SVNDATE would still produce `#define SVNDATE ""` in config.h
(empty string, but still defined), which keeps the `#ifdef`
true and renders "(Snapshot: )" with empty content.
`#cmakedefine` produces `/* #undef SVNDATE */` for unset
variables, which finally lets MuleVersion.h's `#ifdef` skip
the segment entirely.
After this commit the tagged-build banner becomes:
Initialising aMule 3.0.0-beta compiled with wxGTK3 v3.2.6 \
and Boost 1.74
Source / dev builds are unchanged — the SVNDATE block still runs and
produces "rev. <git describe>" as before, and the trailer renders
normally.
005621b to
df8f937
Compare
|
Hi @got3nks , Excelent work! Congratulations. As for your questions, of course, I answer for myself, we should also hear the others:
I've been thinking about that aMule release from the pace of last week work, and there is something bothering me. We still have not managed to get admin access to the organization. That limits our capabilities in some ways. I believe we are able to produce a formal release, but there are lots of configurations I cannot do, e.g. I cannot add people to the team, which clearly sucks at the moment. I also cannot create the wiki, which is too bad since we have people willing to work on that too (e.g. @frnjjq) and the aMule wiki site and forum are mostly abandoned. So, @gonosztopi , I hope you are well, and if you are there, please give me or @Vollstrecker or @sc0w admin access so that we can go on with the work. Regards. |
|
Thanks @mrjimenez for the kind words — much appreciated. Following up on this PR with a practical question. Acknowledging up front that the upper levels of the To be explicit, I'm not advocating for a fork in any way. aMule has 22 years of history reaching back to xMule and lMule, a recognised name, an installed user base, and a contributor lineage that's worth preserving. The whole point of the work in #510–520 (and this PR closing it out) is to ship a proper release under the original project, not to splinter off. So the practical question for the active maintainers: Do you have enough permissions on the
If yes — great, I'll align with whatever review cadence works for you and we can move at your pace. If org-admin involvement is required for tagging or publishing and there's a path to reach them, I'll follow whatever process you suggest. No urgency on this PR specifically — happy to wait on the |
|
Hi @got3nks , I am also not advocating a fork. I've been around for quite a while, and I know how hard it is to appear people good enough to help and add value to a project. These opportunities are rare, and should not be ignored. I see that we have one such opportunity right now, for both code and documentation. I have just checked, and it seems that I am able to release, since the button appears to me. So from the release front, we are ok to go. We used to have a large translator base and just before release, there used to be a general call for translators to update their work. I guess we are close to need them now, but I don't know how to call them, if they are still around. |
|
Again I'm late to the party. I agree with the jump to 3, as it contains foundational changes. However I not that happy with calling it beta, as mayn distros tend to ignore betas, so the testing would mostly be done by users following git. My vote would be for a plain 3.0.0 and when reports appear 3.0.1 etc. For the translators: I can try to scratch them out of the forums and from notes in the .po-files. For the ones that can be found on github I'll open an issue where they can be tagged, otherwise I'll use the email from forums to try to contact them. For the repo ownership: If we need to fork to get more members into the team and make use of more helpful features, I wouldn't hesitate this and give the one the rights to elevate us some time. On the other hand a new release would be the right time to so, as users don't need to adjust with the 3.0 series. I would suggest something like amule-org to stay as close to the original as possible and also add gono and scow there to enable them to participate. For the content of this PR:
|
|
A few follow-ups now that I've had a moment to digest:
Repo ownership — refining the position from my earlier comment, I'd propose a middle path that captures both concerns: Tag and publish Then, once the release is out, fork to @mrjimenez has confirmed he can push tags and create Releases on Contributors prominently mentioned — making sure I'm reading you right: do you mean in the CHANGELOG entry's Contributors section, in Packaging follow-up (zip download without |
|
Quick status: the |
Following PR #521's review discussion (see comments thread), dropping the `-beta` suffix and shipping as plain `3.0.0`, with `3.0.x` for follow-up fixes. Vollstrecker's argument carried the day: distros tend to ignore betas, so a beta cycle would route most testing through users following git directly, which is the same pool that's been involved across the development cycle anyway. Plain `3.0.0` reaches the wider distro packagers immediately; issues found post-release become `3.0.1` etc. Three trivial edits, one mechanical theme: - `docs/CHANGELOG.md`: "Version 3.0.0-beta" → "Version 3.0.0" in the entry header; drop the "published as a beta to gather wider testing before declaring stable" sentence from the lead paragraph; rename the "Known Limitations (3.0.0-beta)" section header to plain "Known Limitations" and rework its lead from "This release is published as **beta**..." to a plain "Known caveats users should be aware of for this release:". The bullet points themselves (macOS notarization, Flathub, AppImage launcher, libayatana-appindicator deprecation) stay — they're real limitations regardless of beta classification. - `.github/workflows/packaging.yml`: two illustrative comments in the post-build smoke-test step previously read "aMuleD 3.0.0-beta ..." as their tagged-release example; updated to "aMuleD 3.0.0 ...". The grep pattern (`'^aMuleD '`) accepts any tagged release shape unchanged; this is comment-only.
|
Since we seem to agree on the name, and it has been mentioned here, I took the liberty to create the organization before someone outside tried to do so. So |
|
Great that you grabbed One coordination flag for whoever ends up tagging and releasing 3.0.0: please give me a heads-up before you push the tag. #522 wired the version-check probe to a hardcoded |
|
@got3nks , it's your call. You tell me when to tag, I am not in a hurry, no pressure. We will do it properly and well. Also, we need to give @Vollstrecker some time to warn translators, so @Vollstrecker , it is your call too. I am not tagging before you both say it's ok. |
|
Yes I’d wait @Vollstrecker to give us his ok too before we proceed. 👍 |
|
Oh, @got3nks , I am sorry, I see I did not answer your point. I don't have a closed opinion on that matter (which URL should be used). Since we are going for the middle-ground solution, maybe we should leave it pointing to here, and if we start using a repo on amule-org, the next binaries would point there, but I'd like to hear @Vollstrecker and others for that. |
|
@mrjimenez fair point that "next binaries point elsewhere" is operationally simpler — but I want to flag a wrinkle that changes the math: Once 3.0.0 ships, every binary in users' hands has the URL hardcoded. There's no remote-config or follow-up patch we can apply. So the choice we make for 3.0.0 specifically is permanent for that cohort:
My position: keep the release of 3.0.0 on While I was at it I grepped for the broader picture — every
The two CHANGELOG-history hits ( Out of these, the Flatpak manifest URL is the only one that affects runtime builds (it's where So if we're flipping the version-check URL pre-3.0.0, the natural follow-on is one batched migration PR covering all 8 of these in lockstep. I'd propose doing that work as a single atomic "migrate references to amule-org" PR, ready to land the moment the canonical URL is settled. Curious for @Vollstrecker's take here too — version-check URL surfaces sooner than the broader sweep but the consequence per shipped binary is irreversible. |
|
My take is clear to point to the new org before releasing anything. One clean "Turn off the lights" commit, then release, then mirgate the codebase. |
|
Heads-up @mrjimenez @Vollstrecker — opened #526 (Draft) with the two-commit prep we discussed:
Staying in Draft until |
|
@mrjimenez one more low-priority ask for whenever you have a moment after bootstrapping This is what |
|
amule-org/amule-org.github.io has been created. |
|
hi all btw, I have the rights here too, to do new releases about new org, to avoid the same problem in the future, I think the new org must be some owners, not only one. maybe to avoid missundersanding is better to rename aMule to other name, like aMula for example, because there is online a lot of official webs, bugtracker, forums... without our control, what do you think? If finally the change sucess, to avoid more contributions here, maybe we need one commit to remove everything with only one readme file which explains the migration here about the name, maybe sound better thename-dev instead -org :) |
|
Hi @sc0w , Hum, sorry, things went very fast, the org was created this morning because the name was mentioned explicitly and I was affraid someone took the name just for fun. Btw, you have an invitation. @got3nks , notice that you can change anything you want in the site, I just created it with a dark theme so that my monitor and eyes don't burn. |
|
I don’t agree with changing the app name. We’re not forking — we’re continuing the work of the previous developers and maintainers. We’re only forced to use a new repo because all the admins are MIA, and we could switch back here if any of them reappear. I’d suggest a transition period where people can still download the upcoming v3.0.0 from this repo. Eventually, yes, this repo could become just a redirect to the new repo URL. amule-dev instead of amule-org could be nice, but we’ve already started some work under the amule-org name. That said, it’s still open for discussion based on your preferences. |
ok, it makes sense :)
I said -dev instead -org, because... amule-org sounds like the web www.amule.org which we dont have write access... We can change it, but as soon as possible if all of us are agree, there is a button to do the job, in settings of organization, at the bottom, in danger zone: "rename organization" and in the name... aMule development :) |
|
I agree with @sc0w amule-org could be misleading because we have no access to amule.org, but the same applies to amule.dev (which points to nothing at the moment though) Will wait for comments from @Vollstrecker and @mrjimenez |
|
I've put amule-org on the table because it's near to the old homepage to signalize it's still the same. First thought about -dev: Sounds a bit like always beta. Overall, as long as it's still amule I have no hard feelings about the naming. |
|
Settling on a name — three reasons I'd argue for sticking with
Worth noting: PR #526 already wires ~200 files at |
|
ok, lets keep amule-org, sorry for the noise, and long life for aMule! |
Following the org-migration discussion on PR #521, point all source / docs / packaging URLs at the new `amule-org` GitHub org that @mrjimenez bootstrapped on 2026-05-04. Two motivating reasons (per the thread): 1. The new active maintainer team needs proper write/admin access that the existing amule-project upper-level admins have been unreachable to grant. 2. The version-check probe added in #522 hardcodes its target URL into every shipped binary. If that URL stays at amule-project while future releases land on amule-org, the cohort of users on 3.0.0 will be permanently stranded querying a dead-end endpoint and never learn about 3.0.1+ via the in-app prompt. Flipping the URL pre-3.0.0-tag is the only way to keep them informed without dual-publishing maintenance burden. Seven references updated in lockstep: - `src/amule.cpp` — version-check probe URL. - `packaging/linux/flatpak/org.amule.aMule.yaml.in` — Flatpak manifest's git source URL (load-bearing — `flatpak-builder` clones from this URL at build time). - `org.amule.aMule.metainfo.xml` — AppStream bug-tracker URL, surfaces in Flathub / GNOME Software / KDE Discover. - `README.md` — logo image URL on raw.githubusercontent.com plus the Issues and Pull Requests link references. - `docs/INSTALL.md` — upstream-issue-tracker doc reference. - `docs/README.md` — GitHub Issues doc reference. Left as-is: - `src/HTTPDownload.cpp:252` — code comment referencing issue `#455` for historical context. The issue itself stays at amule-project regardless of where future development happens; the comment is a citation, not a forward reference. - The `amule-project.de` / `amule-project.net` mentions in `docs/CHANGELOG.md` 2003-era entries — those are old DNS domain references unrelated to the GitHub org. Note: this commit assumes `amule-org/amule` will exist as a real repo by the time this PR merges. The org was created 2026-05-04 with zero repos; the Flatpak build URL change in particular will fail the Packaging workflow until the repo is bootstrapped.
|
3.0.0 ready for tag and release. Where we are:
Translator outreach — non-blocker for 3.0.0Quantified what landed: 43 new msgids total over the whole 3.0.0 cycle (1624 → 1651 in @Vollstrecker — happy to defer to your judgement here, but flagging this so it's not blocking on outreach if you'd rather move forward. Dual-release plan for 3.0.0 (middle path we agreed on)Per the thread consensus — and to maximize reach for the "we're alive again" announcement to the existing
I'll send a small follow-up commit / PR adding a "the project's new home is at amule-org" pointer to @mrjimenez — happy to coordinate the actual tag + release with you (you mentioned upthread the Release button is visible to you; sc0w confirmed similar permissions). Just let me know how you'd like to proceed. |
|
Ok, let's wait for @Vollstrecker take on translations, if the agrees, we make a step-by-step here so that I don't screw things up :D If I understand it correctly, both repos are sync'd and we just have to tag both with the proper name, right? |
|
Yes, exactly that — both repos are sync'd at Step-by-step:
Order doesn't matter; you can push both tags in succession. If anything looks off, release.yml supports Concrete commands (assuming you have the repos cloned with both remotes): git tag -a 3.0.0 b71935541 -m "aMule 3.0.0 — alive again"
git push <amule-project-remote> 3.0.0
git push <amule-org-remote> 3.0.0Plain |
|
Personally, I believe in a "non-commital" beta or alpha release before fanfare announcements, so I'm wondering why there is nothing like that on the Releases pages already. But, regardless - is there a timeline for an upcoming release? |
|
Hello. First and most important thanks to you all. This release is amazing, I am so impressed with the work done. The changes have been major, and many bugs could arise I think a beta is the way to go. I agree with the movement to a new org and the "no fork" just a name change to be able to continue the project. I will contribute in the new org with presence and wiki content. |
Summary
RFC for the next aMule release. It's been 5+ years since 2.3.3 (2021-02-07). This PR proposes shipping the accumulated work as 3.0.0-beta and adds the CHANGELOG entry, the version bump, and the CMake plumbing so future releases need only a tag plus a CHANGELOG entry — no source-bump dance required.
Four commits, smallest first:
cmake: derive VERSION/PACKAGE_VERSION from git tag when HEAD is on one— extends the existing git-describe block so tagged builds automatically inherit the tag name inVERSION/PACKAGE_VERSION/PACKAGE_STRING. Tagless builds keep the existingSVN/GITplaceholders. Also forwards anAMULE_TAGGED_RELEASEflag throughconfig.h.cmso the next commit can self-manage the__SVN__dev marker.release: bump VERSION_MJR/MIN/UPDATE to 3.0.0 + auto-suppress __SVN__ on tagged builds— bumps the integer triplet to 3.0.0 (was 2.4.0, the never-shipped in-tree marker since 2.3.3), and makes__SVN__conditional onAMULE_TAGGED_RELEASE. Source builds still show "aMule SVN"; tagged release builds show "aMule <tag>" automatically. Together with 1, this means future releases are tag-only.docs: add 3.0.0-beta CHANGELOG entry— the 5-year retrospective. Format breaks with the per-author bullet style of older entries and adopts Keep-a-Changelog topic sections.cmake: suppress "(Snapshot: ...)" trailer on tagged release builds— discovered during fork testing of the AppImage banner: tagged builds were rendering"Initialising aMule 3.0.0-beta ... (Snapshot: rev. 3.0.0-beta)", with the version string duplicated and "Snapshot:" misleading on a real release. Pairs anunset(SVNDATE)in the cmake tagged-release block with a#define→#cmakedefinechange inconfig.h.cmso the#ifdef SVNDATEgate in MuleVersion.h drops the trailer entirely. Source/dev builds keep the trailer (still useful for identifying which dev revision a build came from).Highlights of what's in 3.0.0-beta
Throughput rewrite. Disk I/O moved off the main thread, ASIO/EPOLLET races fixed, throttlers replaced with proper token-bucket limiters. Headline numbers (peer-to-peer on the same hardware/network):
CUploadDiskIOThreadport (Port eMule CUploadDiskIOThread + adaptive chunks and ASIO race/EPOLLET fixes #451), which alone delivered ~130× on the in-house benchmark.MaxUpload,MaxDownload) were also broken pre-fix —MaxUpload=0capped at "current rate + 5 KB/s",MaxDownloadwas a ratio controller rather than a literal cap. Both rewritten (upload: make MaxUpload=0 mean literal unlimited #461, download: enforce MaxDownload as a literal byte/sec global cap #491).CMake replaces autotools. Single build system, modern toolchain — minimum CMake 3.10, minimum wxWidgets 3.2.0.
Native binaries for every major desktop. AppImage (x86_64 + aarch64), Flatpak (x86_64 + aarch64), macOS Universal2 .dmg, Windows portable .zip (x64 + ARM64). First-run desktop integration prompt for AppImage.
HTTPS works again.
CHTTPDownloadThreadrewritten on top ofwxWebRequest; the hand-rolled stack had silently stopped working against modern TLS.Kad parallel searches with alpha-frontier widening; new "More" button to ask additional peers for results.
MaxMindDB replaces deprecated GeoIP for IP→country.
Full breakdown across 98 merged PRs / 284 commits / +65k −100k lines (net −35k) in the proposed CHANGELOG entry.
RFC: questions for maintainers
1. Version number
3.0.0-beta vs 2.4.0-beta vs something else? I lean 3.0.0 because:
The semver-purist counter-argument is "no breaking changes to user state, so 2.4.0". I think the project isn't a strict-semver project (no API consumers), so versioning is signaling rather than contract — and the 3.0.0 signal is what matches the substance. Happy to renumber if you'd prefer 2.4.0-beta.
2. Beta vs stable
Proposing beta because:
A short beta period (2-4 weeks) before declaring 3.0.0 stable feels right. Could also skip beta and go straight to stable if you'd prefer.
3. Date
Currently `2026-MM-DD` placeholder in the changelog. Fill in when you tag.
4. Tagline
`"alive again"` follows the existing snarky-tagline convention (`"delayed too many times"`, `"can we have two releases in the same year?"`). Open to other suggestions or no tagline.
Builds on top of merged #520
#520 (
ci: add tag-triggered release.yml workflow) is now merged into master — the tag → packaging-matrix → draft-Release pipeline is live. Tagging the merge commit of this PR will fire it automatically.How to verify the cmake plumbing
Test plan
git describe --tags --exact-match HEADsemantics verified locally (off-tag = exits non-zero withERROR_QUIETswallowing; on-tag = returns the tag string).amuledagainst this branch (Homebrew env percmake/cryptopp.cmake's knownCPATH/LIBRARY_PATHrequirement on Apple Silicon):git revision rev. 2.3.3-292-gceab4ee68 foundand nobuilding tagged release: ...line; generatedconfig.hhas/* #undef AMULE_TAGGED_RELEASE */and#define SVNDATE "rev. 2.3.3-292-gceab4ee68";amuled --versionprintsaMuleD GIT compiled with wxBase(OSX Cocoa) v3.3.2 and Boost 1.90 (Snapshot: rev. 2.3.3-292-gceab4ee68) (OS: macOS). Dev path preserved —VERSIONis the"GIT"placeholder, SVNDATE trailer is intact.3.0.0-betatag at branch tip, .dmg downloaded from the fork CI run): mounted Universal2 .dmg locally,amuled --versionprintsaMuleD 3.0.0-beta compiled with wxBase(OSX Cocoa) v3.3.2 and Boost 1.90 (OS: macOS). Release path correct —VERSIONcarries the tag, Snapshot trailer suppressed by commit 4.VERSION(string) flows throughconfig.h.cm→ About dialog &--version;VERSION_MJR/MIN/UPDATE(integers) feed Windows.exeFile Version, tray menu, ed2k peer announcements, server login, log line, andversion.rc.3.0.0-betaon the combined ci: add tag-triggered release.yml workflow #520 + release: propose 3.0.0-beta changelog (RFC) #521 branch (run 25277950923):aMule-3.0.0-beta-aarch64.AppImage,aMule-3.0.0-beta-macOS-universal2.dmg,aMule-3.0.0-beta-Windows-{x64,arm64}.zipetc.--versionbanner: mounted the fresh Universal2 .dmg locally, ranaMuled --version→aMuled 3.0.0-beta compiled with wxBase(OSX Cocoa) v3.3.2 and Boost 1.90 (OS: macOS). The CMake auto-detection (commit 1) flowed the tag intoVERSIONcorrectly.(Snapshot: ...)suppression confirmed: the same banner has no trailing(Snapshot: rev. 3.0.0-beta). Compare to the off-tag dev-build banner which still appends(Snapshot: rev. 2.3.3-NN-gXXXXXX)as before.libdbusmenuSSL connection timeout againstgit.launchpad.net— known launchpad outage tracked in flatpak: vendor launchpad-only deps (intltool + libdbusmenu) to fix CI flakiness #517 (vendoring rejected, deferred until ecosystem stabilises). No code change in this PR or ci: add tag-triggered release.yml workflow #520 affects the Flatpak path; expectation is it'll succeed on the upstream side once launchpad recovers. Retry loop scheduled to keep trying every 30 min.3.0.0-betaon the merge commit; release.yml (already in master from ci: add tag-triggered release.yml workflow #520) fires; draft GitHub Release lands with 7 platform artifacts for review and publish.