Add SteamKit PICS watcher

This commit is contained in:
seanbetts committed 2026-05-11 09:11:13 +01:00
1 parent d930c296b6
commit 9a66ff4f48
12 files changed
+880 -2

No files matched your search

+114
View File
@@ -0,0 +1,114 @@
#!/bin/sh
set -eu
if [ "$#" -lt 1 ]; then
echo "usage: $0 RUN_DIR" >&2
exit 1
fi
RUN_DIR="$1"
OUT_DIR="$RUN_DIR/api/steamkit"
REPORT_DIR="$RUN_DIR/reports"
SCRIPT_DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)"
REPO_DIR="$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)"
PROJECT_DIR="$REPO_DIR/tools/steamkit-pics"
mkdir -p "$OUT_DIR" "$REPORT_DIR"
ERROR_FILE="$REPORT_DIR/steamkit-pics-errors.txt"
REPORT_FILE="$REPORT_DIR/steamkit-pics-packages.tsv"
KEY_LINES_FILE="$REPORT_DIR/steamkit-pics-key-lines.txt"
: > "$ERROR_FILE"
: > "$REPORT_FILE"
: > "$KEY_LINES_FILE"
load_local_env() {
env_file="${STEAMKIT_ENV_FILE:-$REPO_DIR/.local/steamkit-env.sh}"
if [ -f "$env_file" ]; then
# shellcheck disable=SC1090
. "$env_file"
fi
}
write_unavailable_report() {
reason="$1"
detail="$2"
{
printf '%s\n' "type product id status changenumber related_ids details"
printf '%s\n' "app Steam Controller 4165870 $reason $detail"
printf '%s\n' "app Steam Frame 4165890 $reason $detail"
printf '%s\n' "app Steam Machine 4165910 $reason $detail"
printf '%s\n' "package Steam Controller 1558609 $reason $detail"
printf '%s\n' "package Steam Machine 1629446 $reason $detail"
printf '%s\n' "package Steam Machine 1629447 $reason $detail"
printf '%s\n' "package Steam Machine 1629458 $reason $detail"
printf '%s\n' "package Steam Machine 1629460 $reason $detail"
printf '%s\n' "package Steam Frame 1629484 $reason $detail"
printf '%s\n' "package Steam Frame 1629486 $reason $detail"
} > "$REPORT_FILE"
{
printf '%s\n' "SteamKit/PICS unavailable: $detail"
printf '%s\n' ""
printf '%s\n' "SteamKit/PICS package snapshot:"
sed -n '1,40p' "$REPORT_FILE"
} > "$KEY_LINES_FILE"
}
load_local_env
if [ -z "${STEAMKIT_USERNAME:-}" ] || { [ -z "${STEAMKIT_PASSWORD:-}" ] && [ -z "${STEAMKIT_ACCESS_TOKEN:-}" ]; }; then
detail="STEAMKIT_USERNAME/STEAMKIT_PASSWORD not set"
if [ -n "${STEAMKIT_USERNAME:-}" ] && [ -z "${STEAMKIT_PASSWORD:-}" ]; then
detail="STEAMKIT_PASSWORD or STEAMKIT_ACCESS_TOKEN not set"
fi
write_unavailable_report "missing_credentials" "$detail"
printf '%s\n' "$detail" >> "$ERROR_FILE"
printf '%s\n' \
"SteamKit/PICS unavailable: $detail" \
"Saved SteamKit/PICS report to $REPORT_FILE"
exit 0
fi
export STEAMKIT_USERNAME
if [ -n "${STEAMKIT_PASSWORD:-}" ]; then
export STEAMKIT_PASSWORD
fi
if [ -n "${STEAMKIT_ACCESS_TOKEN:-}" ]; then
export STEAMKIT_ACCESS_TOKEN
fi
if [ -n "${STEAMKIT_AUTH_CODE:-}" ]; then
export STEAMKIT_AUTH_CODE
fi
if [ -n "${STEAMKIT_TWO_FACTOR_CODE:-}" ]; then
export STEAMKIT_TWO_FACTOR_CODE
fi
if [ -n "${STEAMKIT_TIMEOUT_SECONDS:-}" ]; then
export STEAMKIT_TIMEOUT_SECONDS
fi
if ! command -v dotnet >/dev/null 2>&1; then
detail="dotnet CLI not found"
write_unavailable_report "missing_dotnet" "$detail"
printf '%s\n' "$detail" >> "$ERROR_FILE"
printf '%s\n' \
"SteamKit/PICS unavailable: $detail" \
"Saved SteamKit/PICS report to $REPORT_FILE"
exit 0
fi
if ! dotnet run --project "$PROJECT_DIR" -- \
--out-dir "$OUT_DIR" \
--report "$REPORT_FILE" \
--key-lines "$KEY_LINES_FILE" \
>> "$REPORT_DIR/steamkit-pics-dotnet.log" 2>> "$ERROR_FILE"; then
detail="SteamKit/PICS helper failed; see steamkit-pics-errors.txt and steamkit-pics-dotnet.log"
if [ ! -s "$REPORT_FILE" ]; then
write_unavailable_report "helper_failed" "$detail"
fi
printf '%s\n' "$detail" >> "$ERROR_FILE"
fi
printf '%s\n' \
"Saved SteamKit/PICS snapshots to $OUT_DIR" \
"Saved matching lines to $KEY_LINES_FILE" \
"Saved SteamKit/PICS report to $REPORT_FILE"
+1
View File
@@ -122,6 +122,7 @@ def build_summary(prev_dir: Path, curr_dir: Path):
deltas.extend(compare_report_sets(prev_dir, curr_dir, "Komodo controller media", "komodo-controller-media-interesting.tsv"))
deltas.extend(compare_report_sets(prev_dir, curr_dir, "Komodo machine media", "komodo-machine-media.tsv"))
deltas.extend(compare_report_sets(prev_dir, curr_dir, "Komodo frame media", "komodo-frame-media.tsv"))
deltas.extend(compare_text_lines(prev_dir, curr_dir, "SteamKit/PICS", "steamkit-pics-key-lines.txt"))
deltas.extend(compare_text_lines(prev_dir, curr_dir, "SteamDB", "steamdb-key-lines.txt"))
deltas.extend(compare_text_lines(prev_dir, curr_dir, "SteamVR depots", "steamvr-depots-key-lines.txt"))
deltas.extend(compare_text_lines(prev_dir, curr_dir, "SteamOS mirror", "steamos-mirror-key-lines.txt"))
+10
View File
@@ -46,6 +46,7 @@ def build_draft(run_dir: Path):
compare_lines = [line for line in read_lines(compare_file) if line.startswith("- ")][:12]
komodo_mods = first_n_nonempty(reports / "komodo-product-modified.tsv", 10)
steamkit_lines = first_n_nonempty(reports / "steamkit-pics-key-lines.txt", 10)
steamdb_lines = first_n_nonempty(reports / "steamdb-key-lines.txt", 8)
valve_lines = first_n_nonempty(reports / "valve-key-lines.txt", 8)
tracking_lines = first_n_nonempty(reports / "steamtracking-pairing-focus.txt", 8)
@@ -64,6 +65,7 @@ def build_draft(run_dir: Path):
blocked_count = count_lines(reports / "blocked-visual-assets.tsv")
manual_urls = blocked_asset_urls(reports / "blocked-visual-assets.tsv", 10)
komodo_blocked = has_nonempty(reports / "komodo-errors.txt")
steamkit_blocked = has_nonempty(reports / "steamkit-pics-errors.txt")
steamdb_blocked = has_nonempty(reports / "steamdb-errors.txt")
steamvr_blocked = has_nonempty(reports / "steamvr-depots-errors.txt")
steamos_blocked = has_nonempty(reports / "steamos-mirror-errors.txt")
@@ -104,6 +106,14 @@ def build_draft(run_dir: Path):
lines.append(f"- Retrieved visual assets: `{retrieved_count}`")
lines.append(f"- Blocked visual assets: `{blocked_count}`")
lines.extend(["", "#### SteamKit / PICS"])
if steamkit_blocked:
lines.append("- SteamKit/PICS was unavailable or failed in this run. See `steamkit-pics-errors.txt`.")
if steamkit_lines:
lines.extend([f"- `{line}`" for line in steamkit_lines])
elif not steamkit_blocked:
lines.append("- No SteamKit/PICS key-line report found.")
lines.extend(["", "#### SteamDB"])
if steamdb_blocked:
lines.append("- SteamDB had blocked or failed fetches in this run. See `steamdb-errors.txt`.")
+1
View File
@@ -44,6 +44,7 @@ printf '%s\n' "Run dir: $RUN_DIR"
printf '%s\n' "Run note: $RUN_NOTE"
"$SCRIPT_DIR/check_komodo.sh" "$RUN_DIR"
"$SCRIPT_DIR/check_steamkit_pics.sh" "$RUN_DIR"
"$SCRIPT_DIR/check_steamdb.sh" "$RUN_DIR"
"$SCRIPT_DIR/check_steamtracking.sh" "$RUN_DIR" "$TRACKING_DIR"
"$SCRIPT_DIR/check_steamvr_depots.sh" "$RUN_DIR"
+3
View File
@@ -119,6 +119,7 @@ def build(run_dir: Path):
"## At A Glance",
"",
f"- Komodo blocked: `{'yes' if count(reports / 'komodo-errors.txt') else 'no'}`",
f"- SteamKit/PICS blocked: `{'yes' if count(reports / 'steamkit-pics-errors.txt') else 'no'}`",
f"- SteamDB blocked: `{'yes' if count(reports / 'steamdb-errors.txt') else 'no'}`",
f"- SteamVR depot metadata blocked: `{'yes' if count(reports / 'steamvr-depots-errors.txt') else 'no'}`",
f"- SteamOS mirror metadata blocked: `{'yes' if count(reports / 'steamos-mirror-errors.txt') else 'no'}`",
@@ -136,6 +137,7 @@ def build(run_dir: Path):
f"- Retrieved assets: `{reports / 'retrieved-visual-assets.tsv'}`",
f"- Blocked assets: `{reports / 'blocked-visual-assets.tsv'}`",
f"- Manual retry URLs: `{reports / 'manual-asset-urls.txt'}`",
f"- SteamKit/PICS packages: `{reports / 'steamkit-pics-packages.tsv'}`",
f"- Customs shipments: `{reports / 'customs-shipments.md'}`",
]
@@ -145,6 +147,7 @@ def build(run_dir: Path):
lines.extend(["", "## Notable Lines", ""])
notable = []
notable.extend([f"- SteamKit/PICS: `{line}`" for line in filtered_first(reports / "steamkit-pics-key-lines.txt", 8)])
notable.extend([f"- SteamDB: `{line}`" for line in filtered_first(reports / "steamdb-key-lines.txt", 5)])
notable.extend([f"- SteamTracking: `{line}`" for line in filtered_first(reports / "steamtracking-pairing-focus.txt", 5)])
notable.extend([f"- SteamVR depots: `{line}`" for line in filtered_first(reports / "steamvr-depots-key-lines.txt", 5)])