2018-06-30 17:01:23 -06:00
|
|
|
#!/bin/bash
|
2018-08-01 17:50:09 -06:00
|
|
|
BASE="$PWD"
|
2018-06-30 17:01:23 -06:00
|
|
|
SRC="$BASE/src"
|
|
|
|
BUILD="$BASE/build"
|
2019-10-01 14:27:13 -06:00
|
|
|
CHROMIUM="$BASE/chromium"
|
2018-06-30 17:01:23 -06:00
|
|
|
MANIFEST_IN="$SRC/manifest.json"
|
|
|
|
MANIFEST_OUT="$BUILD/manifest.json"
|
|
|
|
|
2019-10-01 14:27:13 -06:00
|
|
|
strip_rc_ver() {
|
|
|
|
MANIFEST="$1"
|
2020-03-16 12:11:54 -06:00
|
|
|
if [[ "$2" == "rel" ]]; then
|
2019-10-05 00:31:01 -06:00
|
|
|
replace='s/("version":.*)rc\d+/$1/'
|
|
|
|
else
|
2019-11-01 07:52:29 -06:00
|
|
|
replace='s/("version":.*)(\d+)rc(\d+)/{$1 . ($2 == "0" ? "0" : ($2-1) . ".9" . sprintf("%03d", $3))}/e'
|
2019-10-05 00:31:01 -06:00
|
|
|
fi
|
|
|
|
perl -pi.bak -e "$replace" "$MANIFEST" && rm -f "$MANIFEST".bak
|
2019-10-01 14:27:13 -06:00
|
|
|
}
|
|
|
|
|
2018-07-08 06:05:04 -06:00
|
|
|
VER=$(grep '"version":' "$MANIFEST_IN" | sed -re 's/.*": "(.*?)".*/\1/')
|
2018-07-06 19:02:40 -06:00
|
|
|
if [ "$1" == "tag" ]; then
|
|
|
|
echo "Tagging at $VER"
|
2020-10-04 16:20:49 -06:00
|
|
|
git tag -a "$VER" -e -m"$(gitcl 2>/dev/null)"
|
2020-09-04 11:54:29 -06:00
|
|
|
git push origin "$VER"
|
2018-07-06 19:02:40 -06:00
|
|
|
exit 0
|
|
|
|
fi
|
2020-03-16 12:11:54 -06:00
|
|
|
if [[ "$1" =~ ^r(el(ease)?)?$ ]]; then
|
2019-10-05 00:31:01 -06:00
|
|
|
strip_rc_ver "$MANIFEST_IN" rel
|
2018-08-23 18:56:59 -06:00
|
|
|
"$0" && "$0" bump
|
|
|
|
exit
|
|
|
|
fi
|
2018-10-13 15:07:52 -06:00
|
|
|
|
|
|
|
if [[ "$1" == "bump" ]]; then
|
|
|
|
if [[ "$2" ]]; then
|
2018-08-25 16:37:52 -06:00
|
|
|
NEW_VER="$2"
|
|
|
|
if [[ "$2" == *.* ]]; then # full dotted version number
|
|
|
|
pattern='"\d+.*?'
|
|
|
|
NEW_VER='"'"$2"
|
|
|
|
elif [[ "$2" == *rc* ]]; then # new RC after release
|
|
|
|
if [[ "$2" == rc* ]]; then
|
2018-12-27 02:50:04 -07:00
|
|
|
if [[ ! "$VER" == *rc* ]]; then
|
|
|
|
echo >&2 "Please specify next release version (like 12rc1). Current is $VER"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
pattern='rc\d+'
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
pattern='\b(?:\d+rc)?\d+'
|
2018-08-25 16:37:52 -06:00
|
|
|
fi
|
|
|
|
else # incremental version
|
|
|
|
pattern='\b\d+'
|
|
|
|
fi
|
|
|
|
REPLACE_EXPR='s/(?<PREAMBLE>"version":.*)'"$pattern"'"/$+{PREAMBLE}'"$NEW_VER"'"/'
|
2018-10-12 14:34:42 -06:00
|
|
|
perl -pi.bak -e $REPLACE_EXPR "$MANIFEST_IN" && "$0" bump
|
|
|
|
rm -f "$MANIFEST_IN".bak
|
2018-08-25 16:37:52 -06:00
|
|
|
exit
|
|
|
|
fi
|
2018-07-08 06:05:04 -06:00
|
|
|
echo "Bumping to $VER"
|
|
|
|
git add "$MANIFEST_IN"
|
|
|
|
git commit -m "Version bump: $VER."
|
2018-10-05 18:47:31 -06:00
|
|
|
[[ $VER == *rc* ]] || "$0" tag
|
2018-08-23 18:56:59 -06:00
|
|
|
exit
|
2018-07-08 06:05:04 -06:00
|
|
|
fi
|
2018-06-30 17:01:23 -06:00
|
|
|
XPI_DIR="$BASE/xpi"
|
|
|
|
XPI="$XPI_DIR/noscript-$VER"
|
|
|
|
LIB="$SRC/lib"
|
2021-02-12 16:22:23 -07:00
|
|
|
NSCL_SUBMOD="$BASE/nscl"
|
|
|
|
NSCL="$SRC/nscl"
|
|
|
|
NSCL_SRC="$NSCL_SUBMOD/src/nscl"
|
|
|
|
if [[ "$1" == "nscl" ]]; then
|
2021-02-13 09:54:04 -07:00
|
|
|
nscl_cp() {
|
|
|
|
nscl_from="$NSCL_SRC/$1"
|
|
|
|
nscl_to="$NSCL/$1/"
|
|
|
|
mkdir -p "$nscl_to"
|
|
|
|
pushd "$nscl_from" >/dev/null 2>&1
|
|
|
|
shift
|
|
|
|
echo "Copying $@ to $nscl_to..."
|
|
|
|
cp -Rp $@ "$nscl_to"
|
|
|
|
popd >/dev/null 2>&1
|
|
|
|
}
|
2021-02-12 16:22:23 -07:00
|
|
|
echo "Updating and synchronizing nscl..."
|
|
|
|
pushd "$NSCL_SUBMOD" && git submodule update --init && git fetch && git merge && popd || exit 1
|
2021-02-13 09:54:04 -07:00
|
|
|
nscl_cp common tld.js RequestKey.js Sites.js Permissions.js Policy.js
|
|
|
|
nscl_cp lib punycode.*
|
|
|
|
nscl_cp content patchWindow.js
|
2021-02-12 16:22:23 -07:00
|
|
|
git add "$NSCL" && git commit -m'[nscl] Updated NoScript Common Library inclusions.'
|
|
|
|
exit
|
|
|
|
fi
|
2018-06-30 17:01:23 -06:00
|
|
|
|
2021-02-12 16:22:23 -07:00
|
|
|
if node "$NSCL_SUBMOD/TLD/update.js" "$NSCL/common/tld.js"; then
|
|
|
|
git add src/lib/tld.js && git commit -m'[nscl] Updated TLDs.'
|
2018-06-30 17:01:23 -06:00
|
|
|
fi
|
|
|
|
|
2020-08-28 13:00:01 -06:00
|
|
|
if ./html5_events/html5_events.pl; then
|
2020-12-02 15:00:52 -07:00
|
|
|
# update full event list as an array in src/lib/DocumentFreezer.js
|
2020-09-03 05:19:08 -06:00
|
|
|
EVENTS=$(grep '^on[a-z]\+$' html5_events/html5_events_archive.txt | sed "s/^on//;s/.*/'&'/;H;1h;"'$!d;x;s/\n/, /g');
|
2020-12-02 15:00:52 -07:00
|
|
|
perl -pi -e 's/(\bconst eventTypes\s*=\s*)\[.*?\]/$1\['"$EVENTS"'\]/' src/lib/DocumentFreezer.js
|
2020-08-28 13:00:01 -06:00
|
|
|
fi
|
2018-06-30 17:01:23 -06:00
|
|
|
|
2018-07-03 09:36:36 -06:00
|
|
|
rm -rf "$BUILD" "$XPI"
|
|
|
|
cp -pR "$SRC" "$BUILD"
|
|
|
|
cp -p LICENSE.txt GPL.txt "$BUILD"/
|
2018-06-30 17:01:23 -06:00
|
|
|
|
2018-08-23 18:56:59 -06:00
|
|
|
BUILD_CMD="web-ext"
|
2020-01-09 13:41:03 -07:00
|
|
|
BUILD_OPTS="build --overwrite-dest"
|
|
|
|
CHROMIUM_BUILD_OPTS="$BUILD_OPTS"
|
2018-10-05 18:47:31 -06:00
|
|
|
|
2018-06-30 17:01:23 -06:00
|
|
|
if [[ $VER == *rc* ]]; then
|
|
|
|
sed -re 's/^(\s+)"strict_min_version":.*$/\1"update_url": "https:\/\/secure.informaction.com\/update\/?v='$VER'",\n\0/' \
|
|
|
|
"$MANIFEST_IN" > "$MANIFEST_OUT"
|
2018-10-13 15:07:52 -06:00
|
|
|
if [[ "$1" == "sign" ]]; then
|
2018-08-23 18:56:59 -06:00
|
|
|
BUILD_CMD="$BASE/../../we-sign"
|
|
|
|
BUILD_OPTS=""
|
|
|
|
fi
|
2018-06-30 17:01:23 -06:00
|
|
|
else
|
|
|
|
grep -v '"update_url":' "$MANIFEST_IN" > "$MANIFEST_OUT"
|
2018-10-13 15:07:52 -06:00
|
|
|
if [[ "$1" == "sign" ]]; then
|
2018-08-23 18:56:59 -06:00
|
|
|
echo >&2 "WARNING: won't auto-sign a release version, please manually upload to AMO."
|
|
|
|
fi
|
2018-06-30 17:01:23 -06:00
|
|
|
fi
|
|
|
|
if ! grep '"id":' "$MANIFEST_OUT" >/dev/null; then
|
|
|
|
echo >&2 "Cannot build manifest.json"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2019-10-01 14:27:13 -06:00
|
|
|
if [ "$1" != "debug" ]; then
|
|
|
|
for file in "$SRC"/content/*.js; do
|
|
|
|
if grep -P '\/\/\s(REL|DEV)_ONLY' "$file" >/dev/null; then
|
|
|
|
sed -re 's/\s*\/\/\s*(\S.*)\s*\/\/\s*REL_ONLY.*/\1/' -e 's/.*\/\/\s*DEV_ONLY.*//' "$file" > "$BUILD/content/$(basename "$file")"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
2018-06-30 17:01:23 -06:00
|
|
|
|
|
|
|
echo "Creating $XPI.xpi..."
|
2018-07-03 09:36:36 -06:00
|
|
|
mkdir -p "$XPI_DIR"
|
2018-06-30 17:01:23 -06:00
|
|
|
|
2018-10-13 02:34:18 -06:00
|
|
|
if which cygpath; then
|
|
|
|
WEBEXT_IN="$(cygpath -w "$BUILD")"
|
|
|
|
WEBEXT_OUT="$(cygpath -w "$XPI_DIR")"
|
|
|
|
else
|
|
|
|
WEBEXT_IN="$BUILD"
|
|
|
|
WEBEXT_OUT="$XPI_DIR"
|
|
|
|
fi
|
|
|
|
|
2020-01-09 13:41:03 -07:00
|
|
|
COMMON_BUILD_OPTS="--ignore-files=test/XSS_test.js"
|
2019-10-05 00:31:01 -06:00
|
|
|
|
2019-10-06 13:31:57 -06:00
|
|
|
"$BUILD_CMD" $BUILD_OPTS --source-dir="$WEBEXT_IN" --artifacts-dir="$WEBEXT_OUT" $COMMON_BUILD_OPTS
|
2018-06-30 17:01:23 -06:00
|
|
|
SIGNED="$XPI_DIR/noscript_security_suite-$VER-an+fx.xpi"
|
|
|
|
if [ -f "$SIGNED" ]; then
|
|
|
|
mv "$SIGNED" "$XPI.xpi"
|
2018-10-14 17:40:20 -06:00
|
|
|
../../we-publish "$XPI.xpi"
|
2018-06-30 17:01:23 -06:00
|
|
|
elif [ -f "$XPI.zip" ]; then
|
2019-04-01 03:56:39 -06:00
|
|
|
[[ "$VER" == *rc* ]] && xpicmd="mv" || xpicmd="cp"
|
|
|
|
$xpicmd "$XPI.zip" "$XPI.xpi"
|
2018-06-30 17:01:23 -06:00
|
|
|
else
|
|
|
|
echo >&2 "ERROR: Could not create $XPI.xpi!"
|
|
|
|
exit 3
|
|
|
|
fi
|
|
|
|
echo "Created $XPI.xpi"
|
2019-10-01 14:27:13 -06:00
|
|
|
ln -fs $XPI.xpi "$BASE/latest.xpi"
|
|
|
|
# create chromium pre-release
|
|
|
|
rm -rf "$CHROMIUM"
|
|
|
|
strip_rc_ver "$MANIFEST_OUT"
|
2020-09-28 15:21:33 -06:00
|
|
|
# skip "application" manifest key and embeddingDocument.js
|
2020-01-09 13:41:03 -07:00
|
|
|
(grep -B1000 '"name": "NoScript"' "$MANIFEST_OUT"; \
|
2020-09-28 15:21:33 -06:00
|
|
|
grep -A2000 '"version":' "$MANIFEST_OUT" | grep -v 'content/embeddingDocument.js') > "$MANIFEST_OUT".tmp && \
|
2020-01-09 13:41:03 -07:00
|
|
|
mv "$MANIFEST_OUT.tmp" "$MANIFEST_OUT"
|
2019-10-01 14:27:13 -06:00
|
|
|
mv "$BUILD" "$CHROMIUM"
|
2020-01-09 13:41:03 -07:00
|
|
|
web-ext $CHROMIUM_BUILD_OPTS --source-dir="$CHROMIUM" --artifacts-dir="$WEBEXT_OUT" $COMMON_BUILD_OPTS
|