[PR #49] [MERGED] Bundle helper scripts in the versioned txz so plugin updates refresh them #63

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

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/unraid-plugin/pull/49
Author: @JBailes
Created: 6/5/2026
Status: ✅ Merged
Merged: 6/5/2026
Merged by: @JBailes

Base: main ← Head: fix/bundle-scripts-in-txz


📝 Commits (1)

  • 9c07533 Bundle helper scripts in the versioned txz so updates refresh them

📊 Changes

7 files changed (+61 additions, -57 deletions)

View changed files

📝 .github/workflows/auto-release.yml (+9 -0)
📝 .gitignore (+4 -0)
📝 DEVELOPING.md (+21 -25)
📝 gow.plg (+11 -31)
📝 scripts/deploy.sh (+2 -0)
📝 scripts/install.sh (+7 -0)
📝 scripts/vars.sh (+7 -1)

📄 Description

Problem

deploy.sh and the other helper scripts were delivered as constant-path <FILE> downloads in gow.plg, with no checksum. Unraid caches checksum-less <FILE> downloads and does not re-fetch them on update unless the path or MD5 changes. The script path is identical on every version, so once a user had the scripts on the flash drive, plugin updates never replaced them. Only settings-ui.txz refreshed reliably, because its filename embeds the version.

How it surfaced (#47)

A user updated the plugin to the release carrying the #48 NVIDIA driver-volume rebuild fix, but kept executing the pre-fix deploy.sh:

==> NVIDIA driver volume already exists — skipping build

That string only exists in the old deploy.sh; the fixed one prints was built for ... — rebuilding. Their plugin version bumped and the UI updated (the txz refreshed), but the cached deploy.sh did not, so the stale 580 driver volume was never rebuilt against the 610 host driver, and Wolf kept hitting CUDA_ERROR_SYSTEM_DRIVER_MISMATCH / EGL BAD_ALLOC.

This affected all six scripts on every in-place update, not just deploy.sh.

Fix

Ship the scripts inside the version-stamped settings-ui.txz so they inherit its reliable refresh:

  • gow.plg: removed the six loose script <FILE> downloads and the now-unused gitPkgURL entity. The install block installpkgs the versioned package first, which lays the scripts down at the same /boot/config/plugins/gow/scripts/ path the UI and remove handler already use, then runs preinstall.sh / install.sh.
  • auto-release.yml: stage scripts/*.sh into the package tree before fmakepkg. .gitignore keeps the staged copies untracked so scripts/ stays the single source of truth.
  • install.sh: install the package only if missing, so there's no double install at boot now that gow.plg owns it.

Safeguard

So a stale-script situation is visible next time instead of needing a docker volume inspect to catch:

  • vars.sh: read GOW_VERSION from the installed gow.plg at runtime, instead of a hardcoded value (it was stuck at 2026.05.25 and the release workflow never updated it).
  • deploy.sh: print ==> GoW plugin <version> at the top of every run.
  • DEVELOPING.md: updated install-flow, dev-install, build, and release docs.

Verification

  • Package builds and contains all scripts at boot/config/plugins/gow/scripts/ plus the gow.page UI.
  • gitPkgURL and the loose script <FILE> entries are gone; installpkg runs before the scripts.
  • bash -n passes on changed scripts; version parse resolves against a real .plg and falls back to unknown when absent.

Note: branched off current main (2026.06.05), so this builds on top of the #48 driver-rebuild fix rather than reverting it.

🤖 Generated with Claude Code


🔄 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/unraid-plugin/pull/49 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 6/5/2026 **Status:** ✅ Merged **Merged:** 6/5/2026 **Merged by:** [@JBailes](https://github.com/JBailes) **Base:** `main` ← **Head:** `fix/bundle-scripts-in-txz` --- ### 📝 Commits (1) - [`9c07533`](https://github.com/games-on-whales/unraid-plugin/commit/9c075335e3b45d1ed5e1e08ff9d8338872bd42d2) Bundle helper scripts in the versioned txz so updates refresh them ### 📊 Changes **7 files changed** (+61 additions, -57 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/auto-release.yml` (+9 -0) 📝 `.gitignore` (+4 -0) 📝 `DEVELOPING.md` (+21 -25) 📝 `gow.plg` (+11 -31) 📝 `scripts/deploy.sh` (+2 -0) 📝 `scripts/install.sh` (+7 -0) 📝 `scripts/vars.sh` (+7 -1) </details> ### 📄 Description ## Problem `deploy.sh` and the other helper scripts were delivered as constant-path `<FILE>` downloads in `gow.plg`, with no checksum. Unraid caches checksum-less `<FILE>` downloads and does **not** re-fetch them on update unless the path or MD5 changes. The script path is identical on every version, so once a user had the scripts on the flash drive, plugin updates never replaced them. Only `settings-ui.txz` refreshed reliably, because its filename embeds the version. ### How it surfaced (#47) A user updated the plugin to the release carrying the #48 NVIDIA driver-volume rebuild fix, but kept executing the **pre-fix** `deploy.sh`: ``` ==> NVIDIA driver volume already exists — skipping build ``` That string only exists in the old `deploy.sh`; the fixed one prints `was built for ... — rebuilding`. Their plugin version bumped and the UI updated (the txz refreshed), but the cached `deploy.sh` did not, so the stale 580 driver volume was never rebuilt against the 610 host driver, and Wolf kept hitting `CUDA_ERROR_SYSTEM_DRIVER_MISMATCH` / EGL `BAD_ALLOC`. This affected all six scripts on every in-place update, not just `deploy.sh`. ## Fix Ship the scripts **inside** the version-stamped `settings-ui.txz` so they inherit its reliable refresh: - **`gow.plg`**: removed the six loose script `<FILE>` downloads and the now-unused `gitPkgURL` entity. The install block `installpkg`s the versioned package first, which lays the scripts down at the same `/boot/config/plugins/gow/scripts/` path the UI and remove handler already use, then runs `preinstall.sh` / `install.sh`. - **`auto-release.yml`**: stage `scripts/*.sh` into the package tree before `fmakepkg`. `.gitignore` keeps the staged copies untracked so `scripts/` stays the single source of truth. - **`install.sh`**: install the package only if missing, so there's no double install at boot now that `gow.plg` owns it. ## Safeguard So a stale-script situation is visible next time instead of needing a `docker volume inspect` to catch: - **`vars.sh`**: read `GOW_VERSION` from the installed `gow.plg` at runtime, instead of a hardcoded value (it was stuck at `2026.05.25` and the release workflow never updated it). - **`deploy.sh`**: print `==> GoW plugin <version>` at the top of every run. - **`DEVELOPING.md`**: updated install-flow, dev-install, build, and release docs. ## Verification - Package builds and contains all scripts at `boot/config/plugins/gow/scripts/` plus the `gow.page` UI. - `gitPkgURL` and the loose script `<FILE>` entries are gone; `installpkg` runs before the scripts. - `bash -n` passes on changed scripts; version parse resolves against a real `.plg` and falls back to `unknown` when absent. > Note: branched off current `main` (`2026.06.05`), so this builds on top of the #48 driver-rebuild fix rather than reverting it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 12:55:18 +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/unraid-plugin#63
No description provided.