Add deploy a windows service
Summary
Branch: feature/deploy-windows-service
Add first-class Squid.DeployWindowsService support for Windows Tentacle targets.
This PR adds the Windows service deploy action handler, embedded PowerShell payload, script builder, and package-reference bridge for Halibut direct script execution.
The new action supports Tentacle Polling and Tentacle Listening transports, requires Windows + PowerShell capabilities, and rejects known non-Windows Tentacle targets with an actionable error.
The deployment script can create or reconfigure a Windows service, set display name/description/start mode/dependencies/account args, resolve package content from package-references.json, and start or stop the service based on DesiredStatus.
Coverage was added across unit, integration, contract E2E, and Windows real-host E2E layers.
Review found 2 blocking issues to fix before merge:
- Existing services are stopped after package purge/extract, which can fail when service files are locked.
- Action-level package references with empty
PackageReferenceNameare filtered out, so standard selected packages may not be uploaded.
Test plan
Diff hygiene:
git diff main...HEAD --check
Result: passed.
Focused unit coverage:
dotnet test tests/Squid.UnitTests/Squid.UnitTests.csproj --no-restore --filter "FullyQualifiedName~WindowsServiceDeploy|FullyQualifiedName~WindowsServiceActionRegistration|FullyQualifiedName~ExecuteStepsPhasePackageReferences|FullyQualifiedName~PackageAcquisitionInjector"
Result: 57 passed, 0 failed.
Note: first sandboxed run failed on MSBuild named-pipe permissions; rerun with elevated execution succeeded. Windows real-host E2E was not run in this local macOS review environment.