mirror of
https://git.quad4.io/RNS-Things/MeshChatX.git
synced 2026-06-07 08:52:48 +00:00
chore(release): bump version to 4.6.0
This commit is contained in:
@@ -2,6 +2,52 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [4.6.0] - 2026-04-24
|
||||
|
||||
### TL;DR
|
||||
|
||||
- **File downloads**: When you save or export things (including from archives), filenames are **cleaned up** so odd characters are less likely to break saves, and you get **clearer feedback** when a download wraps up.
|
||||
- **NomadNet favourites**: You can **import and export** your NomadNet favourites list so you are not stuck re-building it by hand on a new device; **contact sharing** wording is clearer across several languages.
|
||||
|
||||
### Downloads, archives, and frontend utilities
|
||||
|
||||
- **Downloads**: File download flow adds **persistence**, **user notifications**, and **filename sanitization** so exports land predictably and bad names are rejected or normalized safely.
|
||||
- **Refactors**: Download helpers and **time formatting** utilities consolidated; UI elements updated where downloads surface.
|
||||
- **Tests**: **`DownloadUtils`** unit tests; **`Utils`** tests updated for formatting helpers; **`ArchivesPage`** test accounts for delayed **`downloadTextAsFile`** behaviour.
|
||||
|
||||
### NomadNet and locales
|
||||
|
||||
- **Favourites**: **Import/export** for NomadNet favourites from the app.
|
||||
- **Locales**: **Contact sharing** options and related strings refreshed across supported languages.
|
||||
|
||||
### Android
|
||||
|
||||
- **Gradle**: **Product flavors** removed; **Python sync** task simplified to match the single packaging path.
|
||||
- **Paths**: **Taskfile** and CI workflows updated for the new **APK** / Python directory layout.
|
||||
- **Docs**: Android README sections updated so they no longer talk about removed flavors.
|
||||
|
||||
### Repository server and bundled wheels
|
||||
|
||||
- **Bundling**: Logic to **stage a local MeshChatX wheel** into the bundled directory and refreshed **download** behaviour for repository assets.
|
||||
|
||||
### CI, release automation, and supply chain
|
||||
|
||||
- **GitHub Actions**: **Migrated** primary workflows from **Gitea**; obsolete Gitea workflow files removed.
|
||||
- **Workflow hygiene**: **Flatpak** CI cleaned up; deprecated **Snap** build scripts removed from the tree.
|
||||
- **Caching**: **Node.js** and **Poetry** caches added where workflows install tooling.
|
||||
- **Docker publish**: Workflow gains **Docker Hub** integration, **tag generation**, and a **login** fix so credential detection output is used consistently.
|
||||
- **Android release**: Workflow updates for **tag handling**, **signing secret** detection, and **APK upload** behaviour.
|
||||
- **Benchmarks**: **Taskfile** default **benchmark** task and workflow trigger alignment.
|
||||
- **Draft releases**: Script sets **`GH_REPO`** from **`GITHUB_REPOSITORY`** when unset.
|
||||
- **Trivy**: Install script gains **upstream verification** and **cosign** integration.
|
||||
- **pip-audit**: **`CVE-2026-3219`** ignored temporarily with a documented rationale until an upstream fix lands.
|
||||
- **Tests**: Minor **formatting** tidy-ups in the test tree; **`test_app_status_tracking`** uses **`4.6.0`** as the example **`changelog_seen_version`** stamp so it tracks the release.
|
||||
|
||||
### Docker, compose, and documentation
|
||||
|
||||
- **Dockerfile**: Optional **reproducible native build** target wiring; **OCI**-style metadata and **image source** hints refined; **`docker-compose.yml`** image source updated.
|
||||
- **Docs**: **README** and translated READMEs add **Docker Hub** / **GHCR** guidance; **official GitHub mirror** links refreshed; **GitHub Actions** references replace Gitea-era wording; **security policy** and **SECURITY** formatting polish; **Raspberry Pi** install examples use **`bash`** fences consistently.
|
||||
|
||||
## [4.5.1] - 2026-04-24
|
||||
|
||||
### Identity switching
|
||||
|
||||
@@ -321,7 +321,7 @@ task build:all
|
||||
|
||||
## Versioning
|
||||
|
||||
Current version in this repo is `4.5.1`.
|
||||
Current version in this repo is `4.6.0`.
|
||||
|
||||
- `package.json` is the JavaScript/Electron version source.
|
||||
- `meshchatx/src/version.py` is synced from `package.json` using:
|
||||
|
||||
@@ -61,17 +61,17 @@ source ~/.profile
|
||||
|
||||
## 3) Install MeshChatX with pipx (recommended)
|
||||
|
||||
Preferred option (recommended): install from a release wheel (4.5.1 or newer),
|
||||
Preferred option (recommended): install from a release wheel (4.6.0 or newer),
|
||||
because the wheel bundles frontend assets.
|
||||
|
||||
```bash
|
||||
pipx install /path/to/reticulum_meshchatx-<version>-py3-none-any.whl
|
||||
```
|
||||
|
||||
Direct example (v4.5.1):
|
||||
Direct example (v4.6.0):
|
||||
|
||||
```bash
|
||||
pipx install "https://git.quad4.io/RNS-Things/MeshChatX/releases/download/v4.5.1/reticulum_meshchatx-4.5.1-py3-none-any.whl"
|
||||
pipx install "https://git.quad4.io/RNS-Things/MeshChatX/releases/download/v4.6.0/reticulum_meshchatx-4.6.0-py3-none-any.whl"
|
||||
```
|
||||
|
||||
`py3-none-any` wheels are architecture-independent, so the same wheel artifact
|
||||
|
||||
+1
-1
@@ -290,7 +290,7 @@ task build:all
|
||||
|
||||
## Versionierung
|
||||
|
||||
Aktuelle Version in diesem Repository: `4.5.1`.
|
||||
Aktuelle Version in diesem Repository: `4.6.0`.
|
||||
|
||||
- `package.json` ist die Quelle fuer die JavaScript/Electron-Version.
|
||||
- `meshchatx/src/version.py` wird aus `package.json` synchronisiert mit:
|
||||
|
||||
+1
-1
@@ -290,7 +290,7 @@ Scorciatoie `Makefile`:
|
||||
|
||||
## Versioning
|
||||
|
||||
Versione attuale nel repository: `4.5.1`.
|
||||
Versione attuale nel repository: `4.6.0`.
|
||||
|
||||
- La fonte della versione JavaScript/Electron e `package.json`.
|
||||
- `meshchatx/src/version.py` e sincronizzato da `package.json` con:
|
||||
|
||||
+1
-1
@@ -290,7 +290,7 @@ task build:all
|
||||
|
||||
## バージョン管理
|
||||
|
||||
このリポジトリの現在のバージョンは `4.5.1` です。
|
||||
このリポジトリの現在のバージョンは `4.6.0` です。
|
||||
|
||||
- JavaScript / Electron のバージョンソースは `package.json`。
|
||||
- `meshchatx/src/version.py` は次で `package.json` と同期します:
|
||||
|
||||
+1
-1
@@ -290,7 +290,7 @@ task build:all
|
||||
|
||||
## Версионирование
|
||||
|
||||
Текущая версия в репозитории: `4.5.1`.
|
||||
Текущая версия в репозитории: `4.6.0`.
|
||||
|
||||
- Источник версии JS/Electron — `package.json`.
|
||||
- `meshchatx/src/version.py` синхронизируется из `package.json`:
|
||||
|
||||
+1
-1
@@ -290,7 +290,7 @@ task build:all
|
||||
|
||||
## 版本
|
||||
|
||||
本仓库当前版本: `4.5.1`。
|
||||
本仓库当前版本: `4.6.0`。
|
||||
|
||||
- JavaScript/Electron 版本以 `package.json` 为准。
|
||||
- `meshchatx/src/version.py` 通过以下命令与 `package.json` 同步:
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
"""Reticulum MeshChatX - A mesh network communications app."""
|
||||
|
||||
__version__ = "4.5.1"
|
||||
__version__ = "4.6.0"
|
||||
|
||||
@@ -76,7 +76,7 @@ pycparser 3.0
|
||||
pyserial 3.5
|
||||
License: BSD
|
||||
Author: Chris Liechti
|
||||
reticulum-meshchatx 4.5.1
|
||||
reticulum-meshchatx 4.6.0
|
||||
License: 0BSD AND MIT
|
||||
Author: Quad4
|
||||
rns 1.1.9
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
Do not edit by hand. Run: pnpm run version:sync
|
||||
"""
|
||||
|
||||
__version__ = "4.5.1"
|
||||
__version__ = "4.6.0"
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "reticulum-meshchatx",
|
||||
"version": "4.5.1",
|
||||
"version": "4.6.0",
|
||||
"description": "A simple mesh network communications app powered by the Reticulum Network Stack",
|
||||
"homepage": "https://git.quad4.io/RNS-Things/MeshChatX",
|
||||
"desktopName": "reticulum-meshchatx.desktop",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Maintainer: Ivan <ivan@quad4.io>
|
||||
pkgname=reticulum-meshchatx-git
|
||||
_pkgname=reticulum-meshchatx
|
||||
pkgver=4.5.1.r0.gebacc00
|
||||
pkgver=4.6.0.r0.gebacc00
|
||||
pkgrel=1
|
||||
pkgdesc="A simple mesh network communications app powered by the Reticulum Network Stack"
|
||||
arch=('x86_64' 'aarch64')
|
||||
@@ -19,7 +19,7 @@ sha256sums=('SKIP'
|
||||
pkgver() {
|
||||
cd "$_pkgname"
|
||||
git describe --long --tags 2>/dev/null | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' || \
|
||||
printf "4.5.1.r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
|
||||
printf "4.6.0.r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
|
||||
}
|
||||
|
||||
prepare() {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "reticulum-meshchatx"
|
||||
version = "4.5.1"
|
||||
version = "4.6.0"
|
||||
description = "A simple mesh network communications app powered by the Reticulum Network Stack"
|
||||
authors = [
|
||||
{name = "Quad4"}
|
||||
|
||||
@@ -96,8 +96,8 @@ async def test_app_status_endpoints(mock_rns_minimal, temp_dir):
|
||||
app_instance.config.set("tutorial_seen", True)
|
||||
assert app_instance.config.get("tutorial_seen") == "true"
|
||||
|
||||
app_instance.config.set("changelog_seen_version", "4.5.1")
|
||||
assert app_instance.config.get("changelog_seen_version") == "4.5.1"
|
||||
app_instance.config.set("changelog_seen_version", "4.6.0")
|
||||
assert app_instance.config.get("changelog_seen_version") == "4.6.0"
|
||||
|
||||
# Test app_info returns these values
|
||||
with ExitStack() as info_stack:
|
||||
@@ -113,4 +113,4 @@ async def test_app_status_endpoints(mock_rns_minimal, temp_dir):
|
||||
assert val == "true"
|
||||
|
||||
val = app_instance.config.get("changelog_seen_version")
|
||||
assert val == "4.5.1"
|
||||
assert val == "4.6.0"
|
||||
|
||||
@@ -62,9 +62,9 @@ describe("App.vue Modals", () => {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
app_info: {
|
||||
version: "4.5.1",
|
||||
version: "4.6.0",
|
||||
tutorial_seen: true,
|
||||
changelog_seen_version: "4.5.1",
|
||||
changelog_seen_version: "4.6.0",
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -94,7 +94,7 @@ describe("App.vue Modals", () => {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
app_info: {
|
||||
version: "4.5.1",
|
||||
version: "4.6.0",
|
||||
tutorial_seen: false,
|
||||
changelog_seen_version: "0.0.0",
|
||||
},
|
||||
@@ -153,7 +153,7 @@ describe("App.vue Modals", () => {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
app_info: {
|
||||
version: "4.5.1",
|
||||
version: "4.6.0",
|
||||
tutorial_seen: true,
|
||||
changelog_seen_version: "3.9.0",
|
||||
},
|
||||
@@ -161,7 +161,7 @@ describe("App.vue Modals", () => {
|
||||
});
|
||||
}
|
||||
if (url === "/api/v1/app/changelog") {
|
||||
return Promise.resolve({ data: { html: "<h1>New Features</h1>", version: "4.5.1" } });
|
||||
return Promise.resolve({ data: { html: "<h1>New Features</h1>", version: "4.6.0" } });
|
||||
}
|
||||
if (url === "/api/v1/config") return Promise.resolve({ data: { config: { theme: "dark" } } });
|
||||
if (url === "/api/v1/auth/status") return Promise.resolve({ data: { auth_enabled: false } });
|
||||
|
||||
@@ -78,7 +78,7 @@ describe("ChangelogModal.vue", () => {
|
||||
axiosMock.get.mockResolvedValue({
|
||||
data: {
|
||||
html: "<h1>Test</h1>",
|
||||
version: "4.5.1",
|
||||
version: "4.6.0",
|
||||
},
|
||||
});
|
||||
|
||||
@@ -95,7 +95,7 @@ describe("ChangelogModal.vue", () => {
|
||||
axiosMock.get.mockResolvedValue({
|
||||
data: {
|
||||
html: "<h1>Test</h1>",
|
||||
version: "4.5.1",
|
||||
version: "4.6.0",
|
||||
},
|
||||
});
|
||||
|
||||
@@ -114,7 +114,7 @@ describe("ChangelogModal.vue", () => {
|
||||
axiosMock.get.mockResolvedValue({
|
||||
data: {
|
||||
html: "<h1>Test</h1>",
|
||||
version: "4.5.1",
|
||||
version: "4.6.0",
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user