Re-add Dell Display and Peripheral Manager Windows FMA, validate on client-OS runner (#50313)

<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** NA (Windows FMA workstream; follow-up to #49127,
which dropped DDPM)

Re-adds **Dell Display and Peripheral Manager**
(`Dell.DisplayAndPeripheralManager` 2.2.2.8) as a Windows
Fleet-maintained app, and adds a `requires_client_os` routing override
so its CI validation always runs on the `windows-11-arm` runner.

## Why DDPM was dropped before, and why it's viable now

DDPM was dropped from the earlier re-add because its InstallShield setup
aborted with `0x80042000` under every documented silent switch, which
was diagnosed at the time as a .NET-prerequisite/headless-chaining
problem. A new debug run with Dell's own `/CreateDebugLog` switch shows
the real cause: the setup evaluates the OS at `OFUIBefore` and
terminates because the runner reports **Microsoft Windows Server 2025**.
DDPM is a Windows 10/11 client application and refuses to install on
Server SKUs — which is exactly what GitHub's x64 `windows-latest` image
is.

```
OSetUMode() 0 AP:2.2.2.8
OFUIBefore
Os Major10 Minor0
OS - 44444
// End Log File...
```

## `requires_client_os` CI routing

- New optional winget input field `requires_client_os: true` (documented
in `ee/maintained-apps/README.md` and on the Go input struct; ignored by
ingestion).
- `.github/scripts/partition-fma-apps.sh` routes any app with this flag
to `windows-11-arm` — the only GitHub-hosted client-OS Windows runner —
regardless of `installer_arch`. The x64 installer runs there under Prism
emulation; DDPM's gate is the OS SKU, not the architecture.
- Verified locally: partitioning the full 421-app Windows catalog
reroutes only `dell-display-and-peripheral-manager/windows`.

## App identity (verified against the real installer)

- Downloaded `DDPM-Setup_2.2.2.8.exe` from `dl.dell.com` (Chrome UA per
#49123); SHA256 matches the winget manifest.
- Embedded InstallShield `[Application]` block: `Name=Dell Display and
Peripheral Manager`, `Company=Dell Technologies`; ProductCode matches
the manifest GUID. The setup log reports `AP:2.2.2.8` as the registering
version.
- Installs with Dell's documented managed-deployment switches `/Silent
/HeadlessMode=true /TelemetryConsent=false /TurnOffCA` — the final
pre-drop iteration (6d0f2c00af), which also declines telemetry and
disables DDPM's self-updater on Fleet-managed hosts. Uninstalls via
`msiexec /x` on the ProductCode looked up in the registry by
DisplayName.

Input/uninstall script/icon are restored from the pre-drop state; the
install script is the final pre-drop iteration with its root-cause
comment corrected (Server-SKU OS gate, not headless-SYSTEM chaining).
Output regenerated (winget still at 2.2.2.8; script refs verified).

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements), JS
inline code is prevented especially for url redirects, and untrusted
data interpolated into shell scripts/commands is validated against shell
metacharacters.
- [x] Timeouts are implemented and retries are limited to avoid infinite
loops

## Testing

- [x] QA'd all new/changed functionality manually (partition script
exercised locally over the full catalog and a mixed PR-style slug list;
ingester regenerated with no output drift; `go test
./ee/maintained-apps/ingesters/winget/` passes)
- [ ] `test-fma-windows-pr-only` validates DDPM on the `windows-11-arm`
runner in this PR's CI


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added Dell Display and Peripheral Manager to the Windows software
catalog, including installation, uninstallation, detection, metadata,
and an app icon.
* Added support for routing applications that require a Windows client
operating system to the appropriate Windows 11 ARM test environment.

* **Documentation**
* Documented Windows client operating system routing behavior and test
environment architecture details.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Allen Houchins
2026-08-05 12:21:55 -05:00
committed by GitHub
parent c9001b4e46
commit bc3eee5f32
13 changed files with 242 additions and 4 deletions
+16
View File
@@ -11,6 +11,13 @@
# ee/maintained-apps/inputs/winget/7-zip.json (.installer_arch).
# Slugs whose input file or installer_arch is missing default to
# the x64 runner.
#
# Exception: inputs with "requires_client_os": true always route
# to windows-11-arm regardless of installer_arch. The x64 runner
# image is Windows Server, and some installers (e.g. Dell Display
# and Peripheral Manager) refuse to install on Server SKUs;
# windows-11-arm is the only GitHub-hosted client-OS Windows
# runner, and it runs x64/x86 installers under Prism emulation.
# darwin All apps run on macos-latest (arm64; x86-only casks run under
# Rosetta 2, matching how customer Macs run them). No architecture
# partitioning is needed.
@@ -112,11 +119,20 @@ case "$PLATFORM" in
name="${slug%/windows}"
input_file="${WINGET_INPUTS_DIR}/${name}.json"
arch=""
requires_client_os="false"
if [ -f "$input_file" ]; then
arch=$(jq -r '.installer_arch // empty' "$input_file" 2>/dev/null || echo "")
requires_client_os=$(jq -r '.requires_client_os // false' "$input_file" 2>/dev/null || echo "false")
else
echo "Warning: no winget input file for '$slug' at $input_file, assuming x64" >&2
fi
if [ "$requires_client_os" == "true" ]; then
# The app won't install on Windows Server (the x64 runner
# image), so validate it on the client-OS arm64 runner.
arm64_slugs+=("$slug")
echo " - $slug -> windows-11-arm (requires_client_os)"
continue
fi
case "$arch" in
arm64)
arm64_slugs+=("$slug")