-
Notifications
You must be signed in to change notification settings - Fork 48
/
build_addon.sh
executable file
·142 lines (109 loc) · 4.21 KB
/
build_addon.sh
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
#!/bin/bash
ARCH=${1:-armv7l}
BUILD_DIR=`cd ${0%/*} && pwd -P`
VERSION_ADDON=`jq -r '.version' package.json`
NODE_VERSION=`jq -r '.engines.node' package.json`
echo ""
echo "Build RedMatic v$VERSION_ADDON ($ARCH)"
echo ""
case $ARCH in
x86_64)
NODE_NAME=node-v${NODE_VERSION}-linux-x64
;;
aarch64)
NODE_NAME=node-v${NODE_VERSION}-linux-arm64
;;
*)
NODE_NAME=node-v${NODE_VERSION}-linux-${ARCH}
;;
esac
case $ARCH in
armv6l)
NODE_URL=https://unofficial-builds.nodejs.org/download/release/v${NODE_VERSION}/${NODE_NAME}.tar.xz
PREBUILT=$BUILD_DIR/prebuilt/$ARCH
;;
x86_64)
NODE_URL=https://nodejs.org/dist/v${NODE_VERSION}/${NODE_NAME}.tar.xz
PREBUILT=$BUILD_DIR/prebuilt/$ARCH
;;
*)
NODE_URL=https://nodejs.org/dist/v${NODE_VERSION}/${NODE_NAME}.tar.xz
PREBUILT=$BUILD_DIR/prebuilt/$ARCH
;;
esac
ADDON_FILES=$BUILD_DIR/addon_files
ADDON_TMP=$BUILD_DIR/addon_tmp
VERSION_FILE=$ADDON_TMP/redmatic/versions
mkdir $ADDON_TMP 2> /dev/null || rm -r $ADDON_TMP/*
echo "node version on build system: `node --version`"
echo "download and extract Node.js $NODE_URL ..."
curl --silent $NODE_URL | tar -xJf - -C $ADDON_TMP || exit 1
mv $ADDON_TMP/$NODE_NAME $ADDON_TMP/redmatic
rm $ADDON_TMP/redmatic/README.md
rm $ADDON_TMP/redmatic/CHANGELOG.md
mv $ADDON_TMP/redmatic/LICENSE $BUILD_DIR/licenses/nodejs
echo "copying files to tmp dir..."
cp -r $ADDON_FILES/* $ADDON_TMP/
echo "copying assets to tmp dir..."
cp $BUILD_DIR/assets/redmatic5* $ADDON_TMP/redmatic/www/
cp $BUILD_DIR/assets/favicon/apple-icon-180x180.png $ADDON_TMP/redmatic/www/
cp $BUILD_DIR/assets/favicon/favicon-96x96.png $ADDON_TMP/redmatic/www/
echo "installing node modules..."
if [ "$ARCH" == "x86_64" ]; then
echo "removing Raspberry Pi specific modules..."
mv $ADDON_TMP/redmatic/lib/package.json $ADDON_TMP/redmatic/lib/package.json.tmp
cat $ADDON_TMP/redmatic/lib/package.json.tmp | jq 'del(.dependencies."node-red-contrib-johnny-five",.dependencies."node-red-contrib-rcswitch2")' > $ADDON_TMP/redmatic/lib/package.json
rm $ADDON_TMP/redmatic/lib/package.json.tmp
fi
cd $ADDON_TMP/redmatic/lib
npm install --no-package-lock --production --no-optional --global-style
npm install --no-package-lock --production --global-style ain2
if [ "$ARCH" == "x86_64" ]; then
cd $ADDON_TMP/redmatic/lib/node_modules/ain2
npm install --no-package-lock --no-save unix-dgram
fi
rm $ADDON_TMP/redmatic/lib/package.json
echo "installing additional Node-RED nodes..."
cd $ADDON_TMP/redmatic/var
npm install --silent --no-package-lock --production --no-optional --global-style
echo "installing www node modules"
cd $ADDON_TMP/redmatic/www
npm install --silent --no-package-lock --production --no-optional
cd $BUILD_DIR
echo "creating version file"
RED_VERSION=`jq -r '.version' $ADDON_TMP/redmatic/lib/node_modules/node-red/package.json`
cat > $VERSION_FILE <<EOL
export NODE_VERSION=$NODE_VERSION
export VERSION_ADDON=$VERSION_ADDON
export RED_VERSION=$RED_VERSION
EOL
echo "copying prebuilt binaries for $ARCH to tmp dir..."
cp -r $PREBUILT/* $ADDON_TMP/redmatic/
cd $ADDON_TMP
ln -s redmatic/bin/update_addon ./
echo "bundling packages..."
node $BUILD_DIR/build_packages.js $ARCH
echo "adapt Node-RED..."
INSTALLER=$ADDON_TMP/redmatic/lib/node_modules/node-red/node_modules/@node-red/registry/lib/installer.js
sed "s/var args = \['install'/var args = ['install','--no-package-lock','--global-style'/" $INSTALLER > $INSTALLER.tmp && mv $INSTALLER.tmp $INSTALLER
sed "s/var args = \['remove'/var args = ['remove','--no-package-lock'/" $INSTALLER > $INSTALLER.tmp && mv $INSTALLER.tmp $INSTALLER
cd $BUILD_DIR
if [ "$ARCH" == "armv7l" ]; then
ADDON_FILE=redmatic-$VERSION_ADDON.tar.gz
else
ADDON_FILE=redmatic-$ARCH-$VERSION_ADDON.tar.gz
fi
echo "compressing addon package $ADDON_FILE ..."
cd $ADDON_TMP
if [[ "$OSTYPE" == "darwin"* ]]; then
if [[ -f /usr/local/bin/gtar ]]; then
gtar --exclude=.DS_Store --owner=root --group=root -czf $BUILD_DIR/dist/$ADDON_FILE *
else
tar --exclude=.DS_Store -czf $BUILD_DIR/dist/$ADDON_FILE *
fi
else
tar --owner=root --group=root -czf $BUILD_DIR/dist/$ADDON_FILE *
fi
cd $BUILD_DIR
sha256sum $BUILD_DIR/dist/$ADDON_FILE > $BUILD_DIR/dist/$ADDON_FILE.sha256
echo "done."