First tagged release since 0.4.1 (2019). ANS now runs on .NET 8 (LTS), with native Ubuntu 22.04+ support and no EOL-library workarounds required.
Highlights
- .NET 8 migration:
netcoreapp3.0→net8.0across every project; all NuGet dependencies updated to current stable versions - Fixed a socket leak:
AdamantApiused to allocate a newHttpClientper request and never dispose it — confirmed on production as a steady leak intoCLOSE-WAIT. Now reuses a single shared client - Fixed missing node failover: a single unreachable ADM node used to crash the whole service; it now retries against another configured node instead
- EF Core / MySQL provider swap: replaced the deprecated
MySql.Data.EntityFrameworkCore(EF Core 2.x-only, abandoned upstream, and confirmed not to run at all on .NET 8) withPomelo.EntityFrameworkCore.MySqlon EF Core 8 - Privacy fixes: removed three log statements that were printing a device token, a decrypted signal payload, or a certificate password
- Graceful shutdown: both workers now handle
SIGTERMcleanly instead of always exiting non-zero ondocker stop/systemctl restart - Post-deployment hardening: fixed
~path expansion on headless servers, a startup edge case that could burst-notify devices about old transactions, a thread-safety issue in node selection, a missingHttpClienttimeout, and a null reference on an unparseable APNs error response - Version tracking: builds now carry a real, centralized version number (previously every build silently shipped as
1.0.0.0) and log it at startup - Tests: two new test projects, 35 tests total, including a runtime EF Core/SQLite smoke test that caught the .NET 8 incompatibility before it could reach production
Security
Security audited by cryptofoundry.
Upgrading
Deployment now needs the .NET 8 runtime (or a self-contained net8.0 publish) instead of the old netcoreapp3.0 setup. No configuration or database schema changes are required.
Full diff: 0.4.1...v0.5.0