summaryrefslogtreecommitdiffstats
path: root/tools/make-mv3.sh
blob: 13f82f4db33c59d1459168998402dcc7f599bb09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/usr/bin/env bash
#
# This script assumes a linux environment

set -e
shopt -s extglob

echo "*** uBOLite.mv3: Creating extension"

PLATFORM="chromium"

for i in "$@"; do
  case $i in
    quick)
      QUICK="yes"
      ;;
    full)
      FULL="yes"
      ;;
    firefox)
      PLATFORM="firefox"
      ;;
    chromium)
      PLATFORM="chromium"
      ;;
    uBOLite_+([0-9]).+([0-9]).+([0-9]).+([0-9]))
      TAGNAME="$i"
      FULL="yes"
      ;;
    before=+([[:print:]]))
      BEFORE="${i:7}"
      ;;
  esac
done

echo "PLATFORM=$PLATFORM"
echo "TAGNAME=$TAGNAME"
echo "BEFORE=$BEFORE"

DES="dist/build/uBOLite.$PLATFORM"

if [ "$QUICK" != "yes" ]; then
    rm -rf $DES
fi

mkdir -p $DES
cd $DES
DES=$(pwd)
cd - > /dev/null

mkdir -p "$DES"/css/fonts
mkdir -p "$DES"/js
mkdir -p "$DES"/img

if [ -n "$UBO_VERSION" ]; then
    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"
    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
    cd - > /dev/null
else
    UBO_DIR=.
fi

echo "*** uBOLite.mv3: Copying common files"
cp -R "$UBO_DIR"/src/css/fonts/* "$DES"/css/fonts/
cp "$UBO_DIR"/src/css/themes/default.css "$DES"/css/
cp "$UBO_DIR"/src/css/common.css "$DES"/css/
cp "$UBO_DIR"/src/css/dashboard-common.css "$DES"/css/
cp "$UBO_DIR"/src/css/fa-icons.css "$DES"/css/

cp "$UBO_DIR"/src/js/dom.js "$DES"/js/
cp "$UBO_DIR"/src/js/fa-icons.js "$DES"/js/
cp "$UBO_DIR"/src/js/i18n.js "$DES"/js/
cp "$UBO_DIR"/src/lib/punycode.js "$DES"/js/

cp -R "$UBO_DIR/src/img/flags-of-the-world" "$DES"/img

cp LICENSE.txt "$DES"/

echo "*** uBOLite.mv3: Copying mv3-specific files"
if [ "$PLATFORM" = "firefox" ]; then
    cp platform/mv3/firefox/background.html "$DES"/
fi
cp platform/mv3/extension/*.html "$DES"/
cp platform/mv3/extension/*.json "$DES"/
cp platform/mv3/extension/css/* "$DES"/css/
cp -R platform/mv3/extension/js/* "$DES"/js/
cp platform/mv3/extension/img/* "$DES"/img/
cp -R platform/mv3/extension/_locales "$DES"/
cp platform/mv3/README.md "$DES/"

if [ "$QUICK" != "yes" ]; then
    echo "*** uBOLite.mv3: Generating rulesets"
    TMPDIR=$(mktemp -d)
    mkdir -p "$TMPDIR"
    if [ "$PLATFORM" = "chromium" ]; then
        cp platform/mv3/chromium/manifest.json "$DES"/
    elif [ "$PLATFORM" = "firefox" ]; then
        cp platform/mv3/firefox/manifest.json "$DES"/
    fi
    ./tools/make-nodejs.sh "$TMPDIR"
    cp platform/mv3/package.json "$TMPDIR"/
    cp platform/mv3/*.js "$TMPDIR"/
    cp platform/mv3/*.mjs "$TMPDIR"/
    cp platform/mv3/extension/js/utils.js "$TMPDIR"/js/
    cp "$UBO_DIR"/assets/assets.json "$TMPDIR"/
    cp "$UBO_DIR"/assets/resources/scriptlets.js "$TMPDIR"/
    cp -R platform/mv3/scriptlets "$TMPDIR"/
    mkdir -p "$TMPDIR"/web_accessible_resources
    cp "$UBO_DIR"/src/web_accessible_resources/* "$TMPDIR"/web_accessible_resources/
    cd "$TMPDIR"
    node --no-warnings make-rulesets.js output="$DES" platform="$PLATFORM"
    if [ -n "$BEFORE" ]; then
        echo "*** uBOLite.mv3: salvaging rule ids to minimize diff size"
        echo "    before=$BEFORE/$PLATFORM"
        echo "    after=$DES"
        node salvage-ruleids.mjs before="$BEFORE"/"$PLATFORM" after="$DES"
    fi
    cd - > /dev/null
    rm -rf "$TMPDIR"
fi

echo "*** uBOLite.mv3: extension ready"
echo "Extension location: $DES/"

# Local build: use a different extension id than the official one
if [ -z "$TAGNAME" ] && [ "$PLATFORM" = "firefox" ]; then
    tmp=$(mktemp)
    jq '.browser_specific_settings.gecko.id = "uBOLite.dev@raymondhill.net"' "$DES/manifest.json"  > "$tmp" \
        && mv "$tmp" "$DES/manifest.json"
fi

if [ "$FULL" = "yes" ]; then
    EXTENSION="zip"
    if [ "$PLATFORM" = "firefox" ]; then
        EXTENSION="xpi"
    fi
    echo "*** uBOLite.mv3: Creating publishable package..."
    if [ -z "$TAGNAME" ]; then
        TAGNAME="uBOLite_$(jq -r .version "$DES"/manifest.json)"
    else
        tmp=$(mktemp)
        jq --arg version "${TAGNAME:8}" '.version = $version' "$DES/manifest.json"  > "$tmp" \
            && mv "$tmp" "$DES/manifest.json"
    fi
    PACKAGENAME="$TAGNAME.$PLATFORM.mv3.$EXTENSION"
    TMPDIR=$(mktemp -d)
    mkdir -p "$TMPDIR"
    cp -R "$DES"/* "$TMPDIR"/
    cd "$TMPDIR" > /dev/null
    zip "$PACKAGENAME" -qr ./*
    cd - > /dev/null
    cp "$TMPDIR"/"$PACKAGENAME" dist/build/
    rm -rf "$TMPDIR"
    echo "Package location: $(pwd)/dist/build/$PACKAGENAME"
fi