Add cross-browser popup status handling
This commit is contained in:
parent
9c65a61ebb
commit
7e17470356
38 changed files with 1242 additions and 199 deletions
113
build.sh
Executable file
113
build.sh
Executable file
|
|
@ -0,0 +1,113 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
release_dir="$script_dir/release"
|
||||
logo_source="$script_dir/public/logo.png"
|
||||
firefox_manifest="$script_dir/public/manifest.firefox.json"
|
||||
chromium_manifest="$script_dir/public/manifest.chromium.json"
|
||||
|
||||
for command_name in npm zip; do
|
||||
if ! command -v "$command_name" >/dev/null 2>&1; then
|
||||
echo "$command_name is required to build release packages." >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if command -v magick >/dev/null 2>&1; then
|
||||
image_tool=(magick)
|
||||
elif command -v convert >/dev/null 2>&1; then
|
||||
image_tool=(convert)
|
||||
else
|
||||
echo "ImageMagick (magick or convert) is required to process public/logo.png." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$logo_source" ]]; then
|
||||
echo "Logo not found at $logo_source. Place the source PNG there before building." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for manifest in "$firefox_manifest" "$chromium_manifest"; do
|
||||
if [[ ! -f "$manifest" ]]; then
|
||||
echo "Manifest not found: $manifest" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
manifest_version() {
|
||||
local manifest="$1"
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
jq -er '.version // empty' "$manifest"
|
||||
elif command -v python3 >/dev/null 2>&1; then
|
||||
python3 -c 'import json, sys; print(json.load(open(sys.argv[1], encoding="utf-8")).get("version", ""))' "$manifest"
|
||||
else
|
||||
echo "jq or python3 is required to read manifest versions." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
firefox_version="$(manifest_version "$firefox_manifest")"
|
||||
chromium_version="$(manifest_version "$chromium_manifest")"
|
||||
|
||||
if [[ -z "$firefox_version" || -z "$chromium_version" ]]; then
|
||||
echo "Both manifests must contain a version." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$firefox_version" != "$chromium_version" ]]; then
|
||||
echo "Firefox and Chromium manifest versions differ: $firefox_version vs $chromium_version" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
version="$firefox_version"
|
||||
|
||||
echo "Building Firefox package..."
|
||||
(cd "$script_dir" && npm run build:firefox)
|
||||
echo "Building Chromium package..."
|
||||
(cd "$script_dir" && npm run build:chromium)
|
||||
|
||||
for browser in firefox chromium; do
|
||||
dist_dir="$script_dir/dist/$browser"
|
||||
if [[ ! -f "$dist_dir/manifest.json" ]]; then
|
||||
echo "Build output is missing manifest.json: $dist_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
process_icons() {
|
||||
local browser="$1"
|
||||
local dist_dir="$script_dir/dist/$browser"
|
||||
local icon_dir="$dist_dir/icons"
|
||||
|
||||
mkdir -p "$icon_dir"
|
||||
for size in 16 32 48 64 96 128; do
|
||||
"${image_tool[@]}" "$logo_source" \
|
||||
-resize "${size}x${size}^" \
|
||||
-gravity center \
|
||||
-background none \
|
||||
-extent "${size}x${size}" \
|
||||
"$icon_dir/logo${size}.png"
|
||||
done
|
||||
}
|
||||
|
||||
process_icons firefox
|
||||
process_icons chromium
|
||||
|
||||
mkdir -p "$release_dir"
|
||||
|
||||
package_browser() {
|
||||
local browser="$1"
|
||||
local dist_dir="$script_dir/dist/$browser"
|
||||
local archive="$release_dir/vibeguard-$browser-$version.zip"
|
||||
|
||||
rm -f "$archive"
|
||||
(
|
||||
cd "$dist_dir"
|
||||
zip -q -9 -r "$archive" .
|
||||
)
|
||||
echo "Built $archive"
|
||||
}
|
||||
|
||||
package_browser firefox
|
||||
package_browser chromium
|
||||
Loading…
Reference in a new issue