2022-09-06 17:47:52 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
#
|
|
|
|
|
# This script assumes a linux environment
|
|
|
|
|
|
|
|
|
|
set -e
|
2023-09-09 13:47:38 +00:00
|
|
|
shopt -s extglob
|
2022-09-06 17:47:52 +00:00
|
|
|
|
2022-09-19 15:08:34 +00:00
|
|
|
echo "*** uBOLite.mv3: Creating extension"
|
2022-09-06 17:47:52 +00:00
|
|
|
|
2023-04-07 14:19:43 +00:00
|
|
|
PLATFORM="chromium"
|
2022-09-07 14:15:36 +00:00
|
|
|
|
2023-04-07 14:19:43 +00:00
|
|
|
for i in "$@"; do
|
|
|
|
|
case $i in
|
2023-04-07 17:24:57 +00:00
|
|
|
full)
|
|
|
|
|
FULL="yes"
|
|
|
|
|
;;
|
2023-04-07 14:19:43 +00:00
|
|
|
firefox)
|
|
|
|
|
PLATFORM="firefox"
|
|
|
|
|
;;
|
|
|
|
|
chromium)
|
|
|
|
|
PLATFORM="chromium"
|
|
|
|
|
;;
|
2025-03-08 15:43:59 +00:00
|
|
|
edge)
|
|
|
|
|
PLATFORM="edge"
|
|
|
|
|
;;
|
2025-04-19 17:08:59 +00:00
|
|
|
safari)
|
|
|
|
|
PLATFORM="safari"
|
|
|
|
|
;;
|
2024-02-14 19:27:36 +00:00
|
|
|
uBOLite_+([0-9]).+([0-9]).+([0-9]).+([0-9]))
|
2023-09-09 13:47:38 +00:00
|
|
|
TAGNAME="$i"
|
|
|
|
|
FULL="yes"
|
|
|
|
|
;;
|
2024-03-12 02:22:57 +00:00
|
|
|
before=+([[:print:]]))
|
2024-02-14 19:27:36 +00:00
|
|
|
BEFORE="${i:7}"
|
|
|
|
|
;;
|
2023-04-07 14:19:43 +00:00
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
2024-03-12 02:22:57 +00:00
|
|
|
echo "PLATFORM=$PLATFORM"
|
|
|
|
|
echo "TAGNAME=$TAGNAME"
|
|
|
|
|
echo "BEFORE=$BEFORE"
|
|
|
|
|
|
2025-04-25 11:46:46 +00:00
|
|
|
UBOL_DIR="dist/build/uBOLite.$PLATFORM"
|
2023-04-07 14:19:43 +00:00
|
|
|
|
2025-04-19 18:17:46 +00:00
|
|
|
if [ "$PLATFORM" = "edge" ]; then
|
|
|
|
|
MANIFEST_DIR="chromium"
|
|
|
|
|
else
|
|
|
|
|
MANIFEST_DIR="$PLATFORM"
|
|
|
|
|
fi
|
|
|
|
|
|
2025-04-25 11:46:46 +00:00
|
|
|
rm -rf $UBOL_DIR
|
2022-09-07 14:15:36 +00:00
|
|
|
|
2025-04-25 11:46:46 +00:00
|
|
|
mkdir -p $UBOL_DIR
|
|
|
|
|
cd $UBOL_DIR
|
|
|
|
|
UBOL_DIR=$(pwd)
|
2022-09-06 17:47:52 +00:00
|
|
|
cd - > /dev/null
|
|
|
|
|
|
2025-04-25 11:46:46 +00:00
|
|
|
mkdir -p "$UBOL_DIR"/css/fonts
|
|
|
|
|
mkdir -p "$UBOL_DIR"/js
|
|
|
|
|
mkdir -p "$UBOL_DIR"/img
|
2022-09-06 17:47:52 +00:00
|
|
|
|
2023-08-25 15:17:15 +00:00
|
|
|
if [ -n "$UBO_VERSION" ]; then
|
2023-08-11 17:22:25 +00:00
|
|
|
UBO_REPO="https://github.com/gorhill/uBlock.git"
|
|
|
|
|
UBO_DIR=$(mktemp -d)
|
|
|
|
|
echo "*** uBOLite.mv3: Fetching uBO $UBO_VERSION from $UBO_REPO into $UBO_DIR"
|
2023-08-19 12:50:20 +00:00
|
|
|
cd "$UBO_DIR"
|
|
|
|
|
git init -q
|
|
|
|
|
git remote add origin "https://github.com/gorhill/uBlock.git"
|
|
|
|
|
git fetch --depth 1 origin "$UBO_VERSION"
|
|
|
|
|
git checkout -q FETCH_HEAD
|
2023-08-19 13:15:15 +00:00
|
|
|
cd - > /dev/null
|
2023-08-11 17:22:25 +00:00
|
|
|
else
|
|
|
|
|
UBO_DIR=.
|
|
|
|
|
fi
|
2023-08-10 17:08:15 +00:00
|
|
|
|
2022-09-19 15:08:34 +00:00
|
|
|
echo "*** uBOLite.mv3: Copying common files"
|
2025-04-25 11:46:46 +00:00
|
|
|
cp -R "$UBO_DIR"/src/css/fonts/* "$UBOL_DIR"/css/fonts/
|
|
|
|
|
cp "$UBO_DIR"/src/css/themes/default.css "$UBOL_DIR"/css/
|
|
|
|
|
cp "$UBO_DIR"/src/css/common.css "$UBOL_DIR"/css/
|
|
|
|
|
cp "$UBO_DIR"/src/css/dashboard-common.css "$UBOL_DIR"/css/
|
|
|
|
|
cp "$UBO_DIR"/src/css/fa-icons.css "$UBOL_DIR"/css/
|
2022-09-13 21:44:24 +00:00
|
|
|
|
2025-04-25 11:46:46 +00:00
|
|
|
cp "$UBO_DIR"/src/js/dom.js "$UBOL_DIR"/js/
|
|
|
|
|
cp "$UBO_DIR"/src/js/fa-icons.js "$UBOL_DIR"/js/
|
|
|
|
|
cp "$UBO_DIR"/src/js/i18n.js "$UBOL_DIR"/js/
|
|
|
|
|
cp "$UBO_DIR"/src/js/urlskip.js "$UBOL_DIR"/js/
|
|
|
|
|
cp "$UBO_DIR"/src/lib/punycode.js "$UBOL_DIR"/js/
|
2022-09-07 14:15:36 +00:00
|
|
|
|
2025-04-25 11:46:46 +00:00
|
|
|
cp -R "$UBO_DIR/src/img/flags-of-the-world" "$UBOL_DIR"/img
|
2023-06-11 13:20:10 +00:00
|
|
|
|
2025-04-25 11:46:46 +00:00
|
|
|
cp LICENSE.txt "$UBOL_DIR"/
|
2022-09-06 17:47:52 +00:00
|
|
|
|
2022-09-19 15:08:34 +00:00
|
|
|
echo "*** uBOLite.mv3: Copying mv3-specific files"
|
2025-04-25 11:46:46 +00:00
|
|
|
cp platform/mv3/"$MANIFEST_DIR"/manifest.json "$UBOL_DIR"/
|
|
|
|
|
cp platform/mv3/extension/*.html "$UBOL_DIR"/
|
|
|
|
|
cp platform/mv3/extension/*.json "$UBOL_DIR"/
|
|
|
|
|
cp platform/mv3/extension/css/* "$UBOL_DIR"/css/
|
|
|
|
|
cp -R platform/mv3/extension/js/* "$UBOL_DIR"/js/
|
|
|
|
|
cp platform/mv3/"$PLATFORM"/ext-compat.js "$UBOL_DIR"/js/ 2>/dev/null || :
|
|
|
|
|
cp platform/mv3/extension/img/* "$UBOL_DIR"/img/
|
|
|
|
|
cp -R platform/mv3/extension/_locales "$UBOL_DIR"/
|
|
|
|
|
cp platform/mv3/README.md "$UBOL_DIR/"
|
2022-09-07 14:15:36 +00:00
|
|
|
|
2025-03-08 15:43:59 +00:00
|
|
|
echo "*** uBOLite.mv3: Generating rulesets"
|
2025-04-25 11:46:46 +00:00
|
|
|
UBOL_BUILD_DIR=$(mktemp -d)
|
|
|
|
|
mkdir -p "$UBOL_BUILD_DIR"
|
|
|
|
|
./tools/make-nodejs.sh "$UBOL_BUILD_DIR"
|
|
|
|
|
cp platform/mv3/*.json "$UBOL_BUILD_DIR"/
|
|
|
|
|
cp platform/mv3/*.js "$UBOL_BUILD_DIR"/
|
|
|
|
|
cp platform/mv3/*.mjs "$UBOL_BUILD_DIR"/
|
|
|
|
|
cp platform/mv3/extension/js/utils.js "$UBOL_BUILD_DIR"/js/
|
|
|
|
|
cp -R "$UBO_DIR"/src/js/resources "$UBOL_BUILD_DIR"/js/
|
|
|
|
|
cp -R platform/mv3/scriptlets "$UBOL_BUILD_DIR"/
|
|
|
|
|
mkdir -p "$UBOL_BUILD_DIR"/web_accessible_resources
|
|
|
|
|
cp "$UBO_DIR"/src/web_accessible_resources/* "$UBOL_BUILD_DIR"/web_accessible_resources/
|
|
|
|
|
cd "$UBOL_BUILD_DIR"
|
|
|
|
|
node --no-warnings make-rulesets.js output="$UBOL_DIR" platform="$PLATFORM"
|
2025-03-08 15:43:59 +00:00
|
|
|
if [ -n "$BEFORE" ]; then
|
|
|
|
|
echo "*** uBOLite.mv3: salvaging rule ids to minimize diff size"
|
|
|
|
|
echo " before=$BEFORE/$PLATFORM"
|
2025-04-25 11:46:46 +00:00
|
|
|
echo " after=$UBOL_DIR"
|
|
|
|
|
node salvage-ruleids.mjs before="$BEFORE"/"$PLATFORM" after="$UBOL_DIR"
|
2025-03-08 15:43:59 +00:00
|
|
|
fi
|
|
|
|
|
cd - > /dev/null
|
2025-04-25 11:46:46 +00:00
|
|
|
rm -rf "$UBOL_BUILD_DIR"
|
2025-03-08 15:43:59 +00:00
|
|
|
|
|
|
|
|
# For Edge, declared rulesets must be at package root
|
|
|
|
|
if [ "$PLATFORM" = "edge" ]; then
|
|
|
|
|
echo "*** uBOLite.edge: Modify reference implementation for Edge compatibility"
|
2025-04-25 11:46:46 +00:00
|
|
|
mv "$UBOL_DIR"/rulesets/main/* "$UBOL_DIR/"
|
|
|
|
|
rmdir "$UBOL_DIR/rulesets/main"
|
2025-03-08 15:43:59 +00:00
|
|
|
node tools/make-edge.mjs
|
2022-09-07 14:15:36 +00:00
|
|
|
fi
|
2022-09-06 17:47:52 +00:00
|
|
|
|
2025-03-08 15:43:59 +00:00
|
|
|
echo "*** uBOLite.$PLATFORM: extension ready"
|
2025-04-25 11:46:46 +00:00
|
|
|
echo "Extension location: $UBOL_DIR/"
|
2022-09-06 17:47:52 +00:00
|
|
|
|
2024-07-29 18:54:46 +00:00
|
|
|
# Local build
|
|
|
|
|
if [ -z "$TAGNAME" ]; then
|
|
|
|
|
# Enable DNR rule debugging
|
2024-03-06 17:46:12 +00:00
|
|
|
tmp=$(mktemp)
|
2024-07-29 18:54:46 +00:00
|
|
|
jq '.permissions += ["declarativeNetRequestFeedback"]' \
|
2025-04-25 11:46:46 +00:00
|
|
|
"$UBOL_DIR/manifest.json" > "$tmp" \
|
|
|
|
|
&& mv "$tmp" "$UBOL_DIR/manifest.json"
|
2024-07-29 18:54:46 +00:00
|
|
|
# Use a different extension id than the official one
|
|
|
|
|
if [ "$PLATFORM" = "firefox" ]; then
|
|
|
|
|
tmp=$(mktemp)
|
2025-04-25 11:46:46 +00:00
|
|
|
jq '.browser_specific_settings.gecko.id = "uBOLite.dev@raymondhill.net"' "$UBOL_DIR/manifest.json" > "$tmp" \
|
|
|
|
|
&& mv "$tmp" "$UBOL_DIR/manifest.json"
|
2024-07-29 18:54:46 +00:00
|
|
|
fi
|
2024-03-06 17:46:12 +00:00
|
|
|
fi
|
|
|
|
|
|
2023-04-07 17:24:57 +00:00
|
|
|
if [ "$FULL" = "yes" ]; then
|
2023-04-07 17:34:27 +00:00
|
|
|
EXTENSION="zip"
|
|
|
|
|
if [ "$PLATFORM" = "firefox" ]; then
|
|
|
|
|
EXTENSION="xpi"
|
|
|
|
|
fi
|
2023-04-07 17:24:57 +00:00
|
|
|
echo "*** uBOLite.mv3: Creating publishable package..."
|
2023-09-09 13:47:38 +00:00
|
|
|
if [ -z "$TAGNAME" ]; then
|
2025-04-25 11:46:46 +00:00
|
|
|
TAGNAME="uBOLite_$(jq -r .version "$UBOL_DIR"/manifest.json)"
|
2023-09-09 13:47:38 +00:00
|
|
|
else
|
|
|
|
|
tmp=$(mktemp)
|
2025-04-25 11:46:46 +00:00
|
|
|
jq --arg version "${TAGNAME:8}" '.version = $version' "$UBOL_DIR/manifest.json" > "$tmp" \
|
|
|
|
|
&& mv "$tmp" "$UBOL_DIR/manifest.json"
|
2023-09-09 13:47:38 +00:00
|
|
|
fi
|
2025-04-25 11:46:46 +00:00
|
|
|
UBOL_PACKAGE_NAME="$TAGNAME.$PLATFORM.mv3.$EXTENSION"
|
|
|
|
|
UBOL_PACKAGE_DIR=$(mktemp -d)
|
|
|
|
|
mkdir -p "$UBOL_PACKAGE_DIR"
|
|
|
|
|
cp -R "$UBOL_DIR"/* "$UBOL_PACKAGE_DIR"/
|
|
|
|
|
cd "$UBOL_PACKAGE_DIR" > /dev/null
|
2024-11-20 17:55:13 +00:00
|
|
|
rm -f ./log.txt
|
2025-04-25 11:46:46 +00:00
|
|
|
zip "$UBOL_PACKAGE_NAME" -qr ./*
|
2022-09-07 14:23:40 +00:00
|
|
|
cd - > /dev/null
|
2025-04-25 11:46:46 +00:00
|
|
|
cp "$UBOL_PACKAGE_DIR"/"$UBOL_PACKAGE_NAME" dist/build/
|
|
|
|
|
rm -rf "$UBOL_PACKAGE_DIR"
|
|
|
|
|
echo "Package location: $(pwd)/dist/build/$UBOL_PACKAGE_NAME"
|
2022-09-07 14:23:40 +00:00
|
|
|
fi
|