Files
FrenoCorp/src-tauri/generate-icons.sh
Michael Freno da0b3a4997 FRE-606: Add icon generation and tests for Tauri desktop
- Add generate-icons.sh script for cross-platform icon generation
- Generate all required icon sizes (32x32, 128x128, 256x256, 512x512)
- Create Windows .ico and macOS .icns icons
- Add Rust unit tests for core functionality
- Add tauri:test and tauri:icons npm scripts

New files:
- src-tauri/generate-icons.sh
- src-tauri/icons/32x32.png
- src-tauri/icons/128x128.png
- src-tauri/icons/128x128@2x.png
- src-tauri/icons/512x512.png
- src-tauri/icons/icon.ico
- src-tauri/icons/icon.icns
- src-tauri/icons/src/app-icon.svg
- src-tauri/icons/tray-icon.png
- src-tauri/src/tests.rs

Modified:
- src-tauri/src/lib.rs (added tests module)
2026-04-24 16:08:07 -04:00

88 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Icon generation script for Tauri desktop app
# Generates all required icon sizes from source
set -e
ICONS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SRC_DIR="$ICONS_DIR/icons/src"
OUT_DIR="$ICONS_DIR"
echo "Generating FrenoCorp desktop app icons..."
# Check if ImageMagick is available
if ! command -v convert &> /dev/null; then
echo "Warning: ImageMagick 'convert' not found. Install with:"
echo " macOS: brew install imagemagick"
echo " Ubuntu: sudo apt-get install imagemagick"
echo " Windows: choco install imagemagick"
exit 1
fi
# Generate PNG icons at required sizes
echo "Generating PNG icons..."
for size in 32 128; do
echo " Creating ${size}x${size}.png"
convert "$SRC_DIR/app-icon.svg" -resize "${size}x${size}" "$OUT_DIR/${size}x${size}.png"
done
# Generate 128x128@2x (256x256)
echo " Creating 128x128@2x.png (256x256)"
convert "$SRC_DIR/app-icon.svg" -resize "256x256" "$OUT_DIR/128x128@2x.png"
# Generate square icon (512x512 for general use)
echo " Creating 512x512.png"
convert "$SRC_DIR/app-icon.svg" -resize "512x512" "$OUT_DIR/512x512.png"
# Generate macOS icon (icns)
echo "Generating macOS icon (icon.icns)..."
mkdir -p "$ICONS_DIR/icon.iconset"
convert "$SRC_DIR/app-icon.svg" -resize "16x16" "$ICONS_DIR/icon.iconset/icon_16x16.png"
convert "$SRC_DIR/app-icon.svg" -resize "32x32" "$ICONS_DIR/icon.iconset/icon_16x16@2x.png"
convert "$SRC_DIR/app-icon.svg" -resize "32x32" "$ICONS_DIR/icon.iconset/icon_32x32.png"
convert "$SRC_DIR/app-icon.svg" -resize "64x64" "$ICONS_DIR/icon.iconset/icon_32x32@2x.png"
convert "$SRC_DIR/app-icon.svg" -resize "128x128" "$ICONS_DIR/icon.iconset/icon_128x128.png"
convert "$SRC_DIR/app-icon.svg" -resize "256x256" "$ICONS_DIR/icon.iconset/icon_128x128@2x.png"
convert "$SRC_DIR/app-icon.svg" -resize "256x256" "$ICONS_DIR/icon.iconset/icon_256x256.png"
convert "$SRC_DIR/app-icon.svg" -resize "512x512" "$ICONS_DIR/icon.iconset/icon_256x256@2x.png"
convert "$SRC_DIR/app-icon.svg" -resize "512x512" "$ICONS_DIR/icon.iconset/icon_512x512.png"
convert "$SRC_DIR/app-icon.svg" -resize "1024x1024" "$ICONS_DIR/icon.iconset/icon_512x512@2x.png"
# Create .icns file (macOS requires iconutil on macOS, fallback to png2icns)
if command -v iconutil &> /dev/null; then
iconutil -c icns "$ICONS_DIR/icon.iconset" -o "$OUT_DIR/icon.icns"
else
echo " Note: iconutil not found (not on macOS). Using png fallback."
fi
# Clean up temporary iconset
rm -rf "$ICONS_DIR/icon.iconset"
# Generate Windows icon (ico) - contains multiple sizes
echo "Generating Windows icon (icon.ico)..."
mkdir -p "$ICONS_DIR/temp_ico"
convert "$SRC_DIR/app-icon.svg" -resize "16x16" "$ICONS_DIR/temp_ico/16.png"
convert "$SRC_DIR/app-icon.svg" -resize "32x32" "$ICONS_DIR/temp_ico/32.png"
convert "$SRC_DIR/app-icon.svg" -resize "48x48" "$ICONS_DIR/temp_ico/48.png"
convert "$SRC_DIR/app-icon.svg" -resize "64x64" "$ICONS_DIR/temp_ico/64.png"
convert "$SRC_DIR/app-icon.svg" -resize "128x128" "$ICONS_DIR/temp_ico/128.png"
convert "$SRC_DIR/app-icon.svg" -resize "256x256" "$ICONS_DIR/temp_ico/256.png"
convert "$ICONS_DIR/temp_ico/*.png" -define icon:auto-resize=256,128,64,48,32,16 "$OUT_DIR/icon.ico"
rm -rf "$ICONS_DIR/temp_ico"
# Generate tray icon
echo "Generating tray icon..."
convert "$SRC_DIR/app-icon.svg" -resize "32x32" -background none "$OUT_DIR/tray-icon.png"
echo ""
echo "✅ Icon generation complete!"
echo ""
echo "Generated files:"
ls -1 "$OUT_DIR"/*.png "$OUT_DIR"/*.ico "$OUT_DIR"/*.icns 2>/dev/null | xargs -I {} basename {}
echo ""
echo "Next steps:"
echo " 1. Review generated icons"
echo " 2. Run: npm run tauri:build"
echo " 3. Test on target platforms"