From 94f5f53ca9875d8b32ac441e96b792e7e8737e45 Mon Sep 17 00:00:00 2001 From: damocles Date: Thu, 21 May 2026 21:24:41 +0200 Subject: [PATCH] harness: rasterize SVG icon to PNG for Forgejo avatar upload (fixes #197) --- nix/templates/harness-base.nix | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/nix/templates/harness-base.nix b/nix/templates/harness-base.nix index e1bd287..b5f2175 100644 --- a/nix/templates/harness-base.nix +++ b/nix/templates/harness-base.nix @@ -431,7 +431,7 @@ path = [ pkgs.curl pkgs.coreutils - pkgs.python3 + pkgs.librsvg ]; script = '' ICON=/etc/hyperhive/icon.svg @@ -452,9 +452,16 @@ exit 0 fi TOKEN=$(cat "$TOKEN_FILE") - # Base64-encode the SVG and wrap in a data URI. - IMAGE=$(base64 -w 0 < "$ICON") - DATA_URI="data:image/svg+xml;base64,$IMAGE" + # Rasterize SVG → PNG (Forgejo's Go image library can't decode SVG). + PNG=$(mktemp --suffix=.png) + if ! rsvg-convert -f png -w 256 -h 256 "$ICON" -o "$PNG" 2>/dev/null; then + echo "forge-avatar-sync: rsvg-convert failed; skipping" + rm -f "$PNG" + exit 0 + fi + IMAGE=$(base64 -w 0 < "$PNG") + rm -f "$PNG" + DATA_URI="data:image/png;base64,$IMAGE" RESP=$(curl -sf --max-time 10 \ -X POST "$FORGE_URL/api/v1/user/avatar" \ -H "Authorization: token $TOKEN" \