62 Commits

Author SHA1 Message Date
ProxMenuxBot 48fd8579c5 Update helpers_cache.json 2026-05-28 07:16:42 +00:00
ProxMenuxBot 62bf372e1d Update helpers_cache.json 2026-05-27 18:44:04 +00:00
ProxMenuxBot 3a4654141f Update helpers_cache.json 2026-05-27 13:04:44 +00:00
ProxMenuxBot 967dcfcb37 Update helpers_cache.json 2026-05-27 07:23:05 +00:00
ProxMenuxBot d7faf186f8 Update helpers_cache.json 2026-05-26 18:46:39 +00:00
ProxMenuxBot f819aa68d5 Update helpers_cache.json 2026-05-26 12:55:36 +00:00
ProxMenuxBot 975ad20d5a Update helpers_cache.json 2026-05-25 00:33:36 +00:00
ProxMenuxBot a94106ae61 Update helpers_cache.json 2026-05-24 18:19:55 +00:00
ProxMenuxBot 777e830aec Update helpers_cache.json 2026-05-24 00:32:25 +00:00
ProxMenuxBot bbf2dc903a Update helpers_cache.json 2026-05-23 00:32:41 +00:00
ProxMenuxBot 8fb05858c8 Update helpers_cache.json 2026-05-22 12:45:25 +00:00
ProxMenuxBot d0d0f30d64 Update helpers_cache.json 2026-05-21 18:35:52 +00:00
ProxMenuxBot 04185f9a31 Update helpers_cache.json 2026-05-21 13:02:35 +00:00
ProxMenuxBot 5227a1370c Update helpers_cache.json 2026-05-20 12:47:52 +00:00
ProxMenuxBot c33f306944 Update helpers_cache.json 2026-05-19 13:01:03 +00:00
ProxMenuxBot 3306780507 Update helpers_cache.json 2026-05-19 07:09:35 +00:00
ProxMenuxBot 84d7b60cd2 Update helpers_cache.json 2026-05-18 18:34:18 +00:00
ProxMenuxBot 0d435a5d4a Update helpers_cache.json 2026-05-18 13:08:58 +00:00
ProxMenuxBot 4994543d56 Update helpers_cache.json 2026-05-18 07:19:20 +00:00
ProxMenuxBot 026ceab2ef Update helpers_cache.json 2026-05-18 00:31:31 +00:00
ProxMenuxBot c92bf504fb Update helpers_cache.json 2026-05-17 12:17:49 +00:00
ProxMenuxBot a7eac42c9d Update helpers_cache.json 2026-05-17 00:30:19 +00:00
ProxMenuxBot f20550d5f6 Update helpers_cache.json 2026-05-14 18:35:05 +00:00
ProxMenuxBot 742b08c86d Update helpers_cache.json 2026-05-13 12:40:43 +00:00
ProxMenuxBot a85ddcd6c1 Update helpers_cache.json 2026-05-13 00:31:38 +00:00
ProxMenuxBot 758ac4ab62 Update helpers_cache.json 2026-05-12 00:29:10 +00:00
ProxMenuxBot 56e5d7ff54 Update helpers_cache.json 2026-05-11 18:35:26 +00:00
ProxMenuxBot 596a8ba21d Update helpers_cache.json 2026-05-11 12:55:43 +00:00
ProxMenuxBot 19b67b3c8a Update helpers_cache.json 2026-05-11 07:07:56 +00:00
ProxMenuxBot eaa97ce301 Update helpers_cache.json 2026-05-11 00:29:24 +00:00
ProxMenuxBot a05d16a789 Update helpers_cache.json 2026-05-10 12:16:31 +00:00
ProxMenuxBot f11aa77e3a Update helpers_cache.json 2026-05-07 18:32:01 +00:00
MacRimi 1bbcf60e58 Update attribution clause in LICENSE 2026-05-07 17:16:56 +02:00
ProxMenuxBot c90ee58bc0 Update helpers_cache.json 2026-05-07 12:34:40 +00:00
ProxMenuxBot 2983e20695 Update helpers_cache.json 2026-05-06 17:56:15 +00:00
MacRimi 4e7570cb26 Refactor install_methods variable and split_notes function 2026-05-06 19:55:33 +02:00
ProxMenuxBot 7987b61345 Update helpers_cache.json 2026-05-05 12:22:52 +00:00
ProxMenuxBot 6fbd47ed8a Update helpers_cache.json 2026-05-05 06:43:37 +00:00
ProxMenuxBot bada4ef524 Update helpers_cache.json 2026-05-05 00:27:53 +00:00
ProxMenuxBot 8918d37bb6 Update helpers_cache.json 2026-05-04 18:29:56 +00:00
ProxMenuxBot b0d94a3594 Update helpers_cache.json 2026-05-04 06:59:01 +00:00
ProxMenuxBot 1291204d2b Update helpers_cache.json 2026-05-04 00:27:30 +00:00
ProxMenuxBot 804f201589 Update helpers_cache.json 2026-05-03 18:16:18 +00:00
ProxMenuxBot 65779b1eb6 Update helpers_cache.json 2026-05-03 00:27:17 +00:00
ProxMenuxBot 7eac978950 Update helpers_cache.json 2026-05-02 18:16:00 +00:00
ProxMenuxBot b1d0cfa2e7 Update helpers_cache.json 2026-05-02 12:16:12 +00:00
ProxMenuxBot 282b1c2b0a Update helpers_cache.json 2026-05-02 00:27:19 +00:00
ProxMenuxBot b4b0d4cd7e Update helpers_cache.json 2026-04-30 18:27:38 +00:00
ProxMenuxBot 6a66ee75ac Update helpers_cache.json 2026-04-30 12:29:27 +00:00
ProxMenuxBot 45dcdcccbb Update helpers_cache.json 2026-04-30 06:50:16 +00:00
ProxMenuxBot 5d47f1dfca Update helpers_cache.json 2026-04-29 12:29:45 +00:00
ProxMenuxBot 1e07e5f17b Update helpers_cache.json 2026-04-28 12:33:16 +00:00
ProxMenuxBot 8adb1b9730 Update helpers_cache.json 2026-04-28 06:52:18 +00:00
ProxMenuxBot 9d3720b6a1 Update helpers_cache.json 2026-04-26 18:12:46 +00:00
ProxMenuxBot 6496601e4e Update helpers_cache.json 2026-04-26 12:12:36 +00:00
ProxMenuxBot b96df3b501 Update helpers_cache.json 2026-04-26 00:23:40 +00:00
ProxMenuxBot 489460f509 Update helpers_cache.json 2026-04-24 18:13:16 +00:00
ProxMenuxBot 192870d658 Update helpers_cache.json 2026-04-24 12:18:50 +00:00
ProxMenuxBot bed4b5ee49 Update helpers_cache.json 2026-04-22 12:19:08 +00:00
ProxMenuxBot f0eb402100 Update helpers_cache.json 2026-04-22 06:35:40 +00:00
MacRimi e73486904b Revise changelog for ProxMenux v1.2.1 release
Updated the changelog for ProxMenux v1.2.1 to clarify community-reported fixes and improvements.
2026-04-21 22:27:33 +02:00
github-actions[bot] 1119a45e93 Update AppImage release build (2026-04-21 19:28:24) 2026-04-21 19:28:24 +00:00
6 changed files with 4832 additions and 1171 deletions
+43 -16
View File
@@ -67,9 +67,9 @@ def fetch_all_records(url: str, *, expand: str | None = None, per_page: int = 50
return items return items
def normalize_os_variants(install_methods_json: list[dict[str, Any]]) -> list[str]: def normalize_os_variants(install_methods: list[dict[str, Any]]) -> list[str]:
os_values: list[str] = [] os_values: list[str] = []
for item in install_methods_json: for item in install_methods:
if not isinstance(item, dict): if not isinstance(item, dict):
continue continue
resources = item.get("resources", {}) resources = item.get("resources", {})
@@ -83,6 +83,31 @@ def normalize_os_variants(install_methods_json: list[dict[str, Any]]) -> list[st
return os_values return os_values
def split_notes(notes_raw: list[dict[str, Any]]) -> tuple[list[str], list[str]]:
"""Split PocketBase notes into (info_notes, warnings).
Each entry has shape ``{"text": str, "type": "warning"|...}``. Anything
flagged ``type == "warning"`` lands in the warnings list so the bash
menu can render those in red with a dedicated WARNINGS header. Other
notes go to the regular notes list.
"""
info: list[str] = []
warns: list[str] = []
for note in notes_raw or []:
if not isinstance(note, dict):
continue
text = note.get("text")
if not isinstance(text, str) or not text.strip():
continue
text = text.strip()
ntype = (note.get("type") or "").strip().lower()
if ntype == "warning":
warns.append(text)
else:
info.append(text)
return info, warns
def build_script_path(type_name: str, slug: str) -> str: def build_script_path(type_name: str, slug: str) -> str:
type_name = (type_name or "").strip().lower() type_name = (type_name or "").strip().lower()
slug = (slug or "").strip() slug = (slug or "").strip()
@@ -138,19 +163,19 @@ def main() -> int:
full_script_url = f"{SCRIPT_BASE}/{script_path}" full_script_url = f"{SCRIPT_BASE}/{script_path}"
script_url_mirror = to_mirror_url(full_script_url) script_url_mirror = to_mirror_url(full_script_url)
install_methods_json = raw.get("install_methods_json", []) # Sprint 11.7: PocketBase exposes these as `install_methods` and
if not isinstance(install_methods_json, list): # `notes`, not `install_methods_json` / `notes_json`. The legacy field
install_methods_json = [] # names silently returned [] for every entry, which is why the cache
# had empty notes and missing OS variants for every script.
install_methods = raw.get("install_methods", [])
if not isinstance(install_methods, list):
install_methods = []
notes_json = raw.get("notes_json", []) notes_raw = raw.get("notes", [])
if not isinstance(notes_json, list): if not isinstance(notes_raw, list):
notes_json = [] notes_raw = []
notes = [ notes, warnings = split_notes(notes_raw)
note.get("text", "")
for note in notes_json
if isinstance(note, dict) and isinstance(note.get("text"), str) and note.get("text", "").strip()
]
category_ids = raw.get("categories", []) category_ids = raw.get("categories", [])
if not isinstance(category_ids, list): if not isinstance(category_ids, list):
@@ -193,6 +218,7 @@ def main() -> int:
"categories": category_ids, "categories": category_ids,
"category_names": category_names, "category_names": category_names,
"notes": notes, "notes": notes,
"warnings": warnings,
"port": raw.get("port", 0), "port": raw.get("port", 0),
"website": raw.get("website", ""), "website": raw.get("website", ""),
"documentation": raw.get("documentation", ""), "documentation": raw.get("documentation", ""),
@@ -210,7 +236,7 @@ def main() -> int:
# Emit one entry per install method so the menu shell can offer an # Emit one entry per install method so the menu shell can offer an
# explicit OS choice. When there is only one method (or none), a # explicit OS choice. When there is only one method (or none), a
# single entry is emitted with os="" (script decides at runtime). # single entry is emitted with os="" (script decides at runtime).
os_variants = normalize_os_variants(install_methods_json) os_variants = normalize_os_variants(install_methods)
if len(os_variants) > 1: if len(os_variants) > 1:
for os_name in os_variants: for os_name in os_variants:
@@ -228,11 +254,12 @@ def main() -> int:
with OUTPUT_FILE.open("w", encoding="utf-8") as f: with OUTPUT_FILE.open("w", encoding="utf-8") as f:
json.dump(cache, f, ensure_ascii=False, indent=2) json.dump(cache, f, ensure_ascii=False, indent=2)
total_notes = sum(len(e.get("notes", [])) for e in cache)
total_warns = sum(len(e.get("warnings", [])) for e in cache)
print(f"\n✅ helpers_cache.json → {OUTPUT_FILE}") print(f"\n✅ helpers_cache.json → {OUTPUT_FILE}")
print(f" Guardados: {len(cache)}") print(f" Guardados: {len(cache)} entries, {total_notes} notes, {total_warns} warnings")
return 0 return 0
if __name__ == "__main__": if __name__ == "__main__":
sys.exit(main()) sys.exit(main())
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
0024ebd5201dc3b504aaa760b18ff6651338e3cae21e26e3cb8f4cc8b613b04a ProxMenux-1.2.0.AppImage db5bc199adba9c231f344428ac902a0cbf7473778e8a79a4535263599d975449 ProxMenux-1.2.0.AppImage
+2 -2
View File
@@ -3,7 +3,7 @@
### New version ProxMenux v1.2.1 — *SR-IOV Awareness & GPU Passthrough Hardening* ### New version ProxMenux v1.2.1 — *SR-IOV Awareness & GPU Passthrough Hardening*
Targeted release on top of **v1.2.0** addressing three community-reported areas that needed fixing before the next stable cycle: full SR-IOV awareness across the GPU/PCI subsystem, robust handling of GPU + audio companions during passthrough attach and detach (Intel iGPU with chipset audio, discrete cards with HDMI audio, mixed-GPU VMs), and compatibility fixes for the AI notification providers (OpenAI-compatible custom endpoints such as LiteLLM/MLX/LM Studio, OpenAI reasoning models, and Gemini 2.5+/3.x thinking models). Also bundles quality-of-life fixes in the NVIDIA installer, the disk health monitor, and the LXC lifecycle helpers used by the passthrough wizards. Targeted release on top of **v1.2.0** addressing three community-reported areas: complete SR-IOV awareness across the GPU/PCI subsystem, robust handling of GPU + audio companions during passthrough attach and detach (Intel iGPU with chipset audio, discrete cards with HDMI audio, mixed-GPU VMs), and compatibility fixes for AI notification providers (OpenAI-compatible custom endpoints such as LiteLLM/MLX/LM Studio, OpenAI reasoning models, and Gemini 2.5+/3.x thinking models). Also includes quality-of-life improvements in the NVIDIA installer, the disk health monitor, and the LXC lifecycle helpers used by the passthrough wizards.
--- ---
@@ -1062,4 +1062,4 @@ Disks now display tags like ⚠ In use, ⚠ RAID, ⚠ LVM, or ⚠ ZFS, making it
## [1.0.0] - 2024-12-18 ## [1.0.0] - 2024-12-18
### Added ### Added
- Initial release of **ProxMenux**. - Initial release of **ProxMenux**.
- Created a script to add **Coral TPU drivers** to Proxmox. - Created a script to add **Coral TPU drivers** to Proxmox.
+3 -2
View File
@@ -16,7 +16,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
Under this license: Under this license:
1. Attribution: You must give appropriate credit to the original author (MacRimi). 1. Attribution: You must give appropriate credit to the original author (MacRimi)
and to all contributors involved in the development of the project.
2. Copyleft: If you remix, transform, or build upon ProxMenux, you must 2. Copyleft: If you remix, transform, or build upon ProxMenux, you must
distribute your contributions under the same GPL-3.0 license. distribute your contributions under the same GPL-3.0 license.
3. Source Code: Anyone distributing a modified version must make the 3. Source Code: Anyone distributing a modified version must make the
@@ -34,4 +35,4 @@ FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING
FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.
+4783 -1150
View File
File diff suppressed because it is too large Load Diff