[PR #16] [MERGED] Add Compatibility Tools page #21

Closed
opened 2026-10-15 12:54:26 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/wolf-den/pull/16
Author: @JBailes
Created: 4/20/2026
Status: ✅ Merged
Merged: 4/22/2026
Merged by: @JBailes

Base: stable ← Head: aimee/session/40971c30


📝 Commits (1)

  • d32b7df Add Compatibility Tools page for managing Proton/compat tools

📊 Changes

10 files changed (+482 additions, -2 deletions)

View changed files

📝 README.md (+44 -0)
➕ WolfLeash/Components/Classes/CompatibilityToolsOptions.cs (+14 -0)
➕ WolfLeash/Components/Classes/CompatibilityToolsService.cs (+222 -0)
📝 WolfLeash/Components/Layout/MainLayout.razor (+2 -1)
➕ WolfLeash/Components/Pages/CompatibilityTools/CompatibilityTools.razor (+116 -0)
➕ WolfLeash/Components/Pages/CompatibilityTools/SubComponent/CompatibilityToolUpload.razor (+69 -0)
📝 WolfLeash/Components/_Imports.razor (+1 -0)
📝 WolfLeash/Program.cs (+6 -0)
📝 WolfLeash/WolfLeash.csproj (+1 -0)
📝 WolfLeash/appsettings.json (+7 -1)

📄 Description

Summary

  • New Compatibility Tools page (/CompatibilityTools) that lists, uploads, and deletes Steam-style compatibility tools (Proton-GE, Luxtorpeda, Boxtron, Roberta, etc.) in per-OS host directories.
  • Extraction via SharpCompress so uploads accept .tar.gz, .tar.xz, .tar.bz2, .tar, and .zip.
  • Targets are configurable via appsettings.json (CompatibilityTools:Targets) or the WOLF_CompatibilityTools__Targets__* env-var shape. Ships with defaults for Fedora 43 → /etc/wolf/compatibilitytools.d/fedora43 and Ubuntu → /etc/wolf/compatibilitytools.d/ubuntu.
  • Auto-provisioning: on startup, Wolf Den creates each target directory only if the host-mount root (grandparent) is present — avoids creating phantom dirs inside the container when the mount is missing.
  • README updated with the single new volume (/etc/wolf/compatibilitytools.d:/etc/wolf/compatibilitytools.d) and an !IMPORTANT note that each Steam app's runner container must mount the matching OS directory at Steam's compatibilitytools.d location — that mount is outside Wolf Den's authority and has to be added per-app via Apps → Edit → Mounts.

Safety: the extraction path strips absolute / .. entries, quarantines to a temp dir before moving into place, and resolves delete requests under the configured root.

Test plan

  • dotnet build WolfLeash/WolfLeash.csproj — I don't have .NET locally, so this has not been compiler-verified.
  • Launch Wolf Den, confirm the Compatibility Tools nav entry appears and the page loads with Fedora 43 / Ubuntu tabs.
  • With /etc/wolf/compatibilitytools.d mounted, confirm the two OS subdirs are auto-created on startup.
  • Upload a .tar.gz (Proton-GE) — confirm it extracts, appears in the table with correct size, and lands at /etc/wolf/compatibilitytools.d/<os>/<tool-name>/ on the host.
  • Upload a .tar.xz (Luxtorpeda) — confirm SharpCompress handles it.
  • Delete a tool from the UI — confirm the host directory is removed.
  • Wire a Steam app with the matching mount (see README), launch it, and confirm Steam lists the tool under Compatibility.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/wolf-den/pull/16 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 4/20/2026 **Status:** ✅ Merged **Merged:** 4/22/2026 **Merged by:** [@JBailes](https://github.com/JBailes) **Base:** `stable` ← **Head:** `aimee/session/40971c30` --- ### 📝 Commits (1) - [`d32b7df`](https://github.com/games-on-whales/wolf-den/commit/d32b7dfc738aca1778bf4ae6d2b196b41ed951a8) Add Compatibility Tools page for managing Proton/compat tools ### 📊 Changes **10 files changed** (+482 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `README.md` (+44 -0) ➕ `WolfLeash/Components/Classes/CompatibilityToolsOptions.cs` (+14 -0) ➕ `WolfLeash/Components/Classes/CompatibilityToolsService.cs` (+222 -0) 📝 `WolfLeash/Components/Layout/MainLayout.razor` (+2 -1) ➕ `WolfLeash/Components/Pages/CompatibilityTools/CompatibilityTools.razor` (+116 -0) ➕ `WolfLeash/Components/Pages/CompatibilityTools/SubComponent/CompatibilityToolUpload.razor` (+69 -0) 📝 `WolfLeash/Components/_Imports.razor` (+1 -0) 📝 `WolfLeash/Program.cs` (+6 -0) 📝 `WolfLeash/WolfLeash.csproj` (+1 -0) 📝 `WolfLeash/appsettings.json` (+7 -1) </details> ### 📄 Description ## Summary - New **Compatibility Tools** page (`/CompatibilityTools`) that lists, uploads, and deletes Steam-style compatibility tools (Proton-GE, Luxtorpeda, Boxtron, Roberta, etc.) in per-OS host directories. - Extraction via **SharpCompress** so uploads accept `.tar.gz`, `.tar.xz`, `.tar.bz2`, `.tar`, and `.zip`. - Targets are configurable via `appsettings.json` (`CompatibilityTools:Targets`) or the `WOLF_CompatibilityTools__Targets__*` env-var shape. Ships with defaults for **Fedora 43** → `/etc/wolf/compatibilitytools.d/fedora43` and **Ubuntu** → `/etc/wolf/compatibilitytools.d/ubuntu`. - Auto-provisioning: on startup, Wolf Den creates each target directory *only if* the host-mount root (grandparent) is present — avoids creating phantom dirs inside the container when the mount is missing. - README updated with the single new volume (`/etc/wolf/compatibilitytools.d:/etc/wolf/compatibilitytools.d`) and an `!IMPORTANT` note that each Steam app's runner container must mount the matching OS directory at Steam's `compatibilitytools.d` location — that mount is outside Wolf Den's authority and has to be added per-app via Apps → Edit → Mounts. Safety: the extraction path strips absolute / `..` entries, quarantines to a temp dir before moving into place, and resolves delete requests under the configured root. ## Test plan - [x] `dotnet build WolfLeash/WolfLeash.csproj` — I don't have .NET locally, so this has not been compiler-verified. - [x] Launch Wolf Den, confirm the **Compatibility Tools** nav entry appears and the page loads with Fedora 43 / Ubuntu tabs. - [x] With `/etc/wolf/compatibilitytools.d` mounted, confirm the two OS subdirs are auto-created on startup. - [x] Upload a `.tar.gz` (Proton-GE) — confirm it extracts, appears in the table with correct size, and lands at `/etc/wolf/compatibilitytools.d/<os>/<tool-name>/` on the host. - [ ] Upload a `.tar.xz` (Luxtorpeda) — confirm SharpCompress handles it. - [x] Delete a tool from the UI — confirm the host directory is removed. - [ ] Wire a Steam app with the matching mount (see README), launch it, and confirm Steam lists the tool under Compatibility. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 12:54:26 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/wolf-den#21
No description provided.