4 Commits

Author SHA1 Message Date
Ludwig Lehnert
1eadb00989 (hopefully) finally fixed installation queueing
All checks were successful
Release / build-release (push) Successful in 5s
2026-07-03 10:29:43 +00:00
Ludwig Lehnert
81bd495af9 fix: retry busy queue requests
All checks were successful
Release / build-release (push) Successful in 3s
2026-07-01 15:39:14 +00:00
Ludwig Lehnert
b41bab4285 fix: harden queue and request handling
All checks were successful
Release / build-release (push) Successful in 3s
2026-07-01 15:03:29 +00:00
Ludwig Lehnert
b603f4d39c replace daemon with request drop
All checks were successful
Release / build-release (push) Successful in 3s
2026-07-01 14:19:27 +00:00
4 changed files with 1175 additions and 767 deletions

View File

@@ -20,6 +20,8 @@ jobs:
- name: Build dist
run: make dist
env:
SOFTKAT_BUILD_COMMIT: ${{ github.sha }}
- name: Package release zip
run: |

View File

@@ -2,7 +2,7 @@
Windows self-service software catalog backed by `winget`.
Users install approved software through a small GUI or request helper. A SYSTEM scheduled task runs a named-pipe daemon, authenticates the connecting Windows user, validates requests against Group Policy, then queues work for a SYSTEM `winget` worker.
Users install approved software through a small GUI or request helper. User tools write request files to a controlled drop directory. A SYSTEM scheduled task validates those requests against Group Policy, queues approved work, then runs a SYSTEM `winget` worker.
## What It Does
@@ -14,6 +14,7 @@ Users install approved software through a small GUI or request helper. A SYSTEM
- Shows current queue task and progress in the GUI.
- Runs `winget upgrade --all` every 2 hours.
- Tracks installed state from `winget export`, not from request history.
- Polls user request files every minute; no long-lived user-facing daemon is required.
## Policy
@@ -71,8 +72,16 @@ Generated files are written to:
C:\ProgramData\__Softwarekatalog\
```
Runtime request files are written below:
```text
C:\ProgramData\__Softwarekatalog\Requests\
C:\ProgramData\__Softwarekatalog\Processed\
C:\ProgramData\__Softwarekatalog\Failed\
```
## Notes
- Requires Windows, Desktop App Installer, and `winget`.
- The daemon runs as `LocalSystem`; keep catalog policy restricted to trusted admins.
- SYSTEM scheduled tasks validate and execute requests; keep catalog policy restricted to trusted admins.
- Package IDs and silent machine-scope support depend on upstream `winget` packages.

View File

@@ -4,20 +4,35 @@ set -euo pipefail
src="${1:-setup.ps1}"
out="${2:-dist/setup.ps1}"
out_dir="$(dirname "$out")"
build_commit="${SOFTKAT_BUILD_COMMIT:-${GITHUB_SHA:-}}"
if [ -z "$build_commit" ] && git rev-parse --verify HEAD >/dev/null 2>&1; then
build_commit="$(git rev-parse HEAD)"
fi
if [ -z "$build_commit" ]; then
build_commit="unknown"
fi
mkdir -p "$out_dir"
payload_src="$(mktemp)"
trap 'rm -f "$payload_src"' EXIT
printf '# Softwarekatalog build commit: %s\n' "$build_commit" > "$payload_src"
cat "$src" >> "$payload_src"
if base64 --help 2>&1 | grep -q -- '-w'; then
payload="$(base64 -w 0 "$src")"
payload="$(base64 -w 0 "$payload_src")"
else
payload="$(base64 "$src" | tr -d '\n')"
payload="$(base64 "$payload_src" | tr -d '\n')"
fi
cat > "$out" <<EOF
# Softwarekatalog build commit: $build_commit
# ASCII-only bootstrap generated from setup.ps1. Do not edit.
[CmdletBinding()]
param(
[ValidateSet('Install','Daemon','UpgradeAll','ApplyPolicy','ProcessQueue','ProcessRequest')]
[ValidateSet('Install','UpgradeAll','ApplyPolicy','ProcessQueue','ProcessRequest','ProcessRequests')]
[string]\$Mode = 'Install',
[ValidateSet('Install','Uninstall')]
[string]\$RequestAction = 'Install',

1878
setup.ps1

File diff suppressed because it is too large Load Diff