From 94f5f53ca9875d8b32ac441e96b792e7e8737e45 Mon Sep 17 00:00:00 2001 From: damocles Date: Thu, 21 May 2026 21:24:41 +0200 Subject: [PATCH 1/2] 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 e1bd2879..b5f2175b 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" \ From 2d3a87f5452650f33ddb15ea2d1d9a2e0eb488d7 Mon Sep 17 00:00:00 2001 From: damocles Date: Thu, 21 May 2026 22:37:08 +0200 Subject: [PATCH 2/2] forge-avatar-sync: rasterize SVG at 512px --- nix/templates/harness-base.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/templates/harness-base.nix b/nix/templates/harness-base.nix index b5f2175b..b1ad1dd8 100644 --- a/nix/templates/harness-base.nix +++ b/nix/templates/harness-base.nix @@ -454,7 +454,7 @@ TOKEN=$(cat "$TOKEN_FILE") # 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 + if ! rsvg-convert -f png -w 512 -h 512 "$ICON" -o "$PNG" 2>/dev/null; then echo "forge-avatar-sync: rsvg-convert failed; skipping" rm -f "$PNG" exit 0