fix: make branded icon generation deterministic

This commit is contained in:
mirivlad 2026-07-15 19:24:59 +08:00
parent bf965e8bf3
commit ba0ba5f8c4
6 changed files with 50 additions and 1 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -0,0 +1,22 @@
## Highlights
- Made branded tray and application icon generation deterministic: repeated
local builds no longer leave timestamp-only changes in the working tree.
- The packaging checks now verify that all PNG and ICO icon outputs are stable
across consecutive generations.
## Главное
- Генерация фирменных значков трея и приложения стала детерминированной:
повторная локальная сборка больше не оставляет в рабочем дереве изменения,
отличающиеся только временной меткой.
- Проверки упаковки теперь убеждаются, что PNG и ICO остаются одинаковыми при
последовательных генерациях.
## Packages / Пакеты
This prerelease provides a portable Windows archive, a Debian package, and an
AppImage for Linux.
В этот prerelease входят переносимый архив для Windows, Debian-пакет и AppImage
для Linux.

View File

@ -18,7 +18,7 @@ render_png() {
local size="$1"
local target="$2"
mkdir -p "$(dirname "$target")"
"$MAGICK" -background none "$SOURCE" -resize "${size}x${size}" "PNG32:$target"
"$MAGICK" -background none "$SOURCE" -resize "${size}x${size}" -strip "PNG32:$target"
}
render_ico() {

22
scripts/test-brand-icons.sh Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
ICONS=(
"$ROOT/internal/shell/tray/verstak.png"
"$ROOT/internal/shell/tray/verstak.ico"
"$ROOT/build/appicon.png"
"$ROOT/build/windows/icon.ico"
)
"$ROOT/scripts/generate-brand-icons.sh"
first="$(sha256sum "${ICONS[@]}")"
"$ROOT/scripts/generate-brand-icons.sh"
second="$(sha256sum "${ICONS[@]}")"
if [[ "$first" != "$second" ]]; then
echo "brand icon generation is not deterministic" >&2
exit 1
fi
echo "desktop brand icon generation is deterministic"

View File

@ -55,6 +55,7 @@ grep -Fq 'package-deb.sh' "$ROOT/scripts/release.sh"
grep -Fq 'package-appimage.sh' "$ROOT/scripts/release.sh"
grep -Fq 'generate-brand-icons.sh' "$ROOT/scripts/build.sh"
grep -Fq 'generate-brand-icons.sh' "$ROOT/scripts/build-windows.sh"
test -x "$ROOT/scripts/test-brand-icons.sh"
grep -Fq 'package-windows-portable.sh' "$ROOT/scripts/release.sh"
git -C "$ROOT" check-ignore -q verstak-desktop-res.syso
grep -Fq 'chmod -R a+rX' "$ROOT/scripts/build-linux-bundle.sh"

View File

@ -39,6 +39,10 @@ OUTPUT=$(cd "$ROOT" && go test -count=1 -v ./... 2>&1) || GO_TEST_STATUS=$?
echo "$OUTPUT" | grep -E '(FAIL|PASS|---)' || true
report "go test" "$GO_TEST_STATUS"
BRAND_ICONS_STATUS=0
(cd "$ROOT" && ./scripts/test-brand-icons.sh) || BRAND_ICONS_STATUS=$?
report "desktop brand icon generation" "$BRAND_ICONS_STATUS"
WAILS_BINDINGS_STATUS=0
(cd "$ROOT" && node frontend/tests/wails-bindings-test.mjs) || WAILS_BINDINGS_STATUS=$?
report "Wails notification bindings" "$WAILS_BINDINGS_STATUS"