1+ #! /usr/bin/env bash
2+ set -e
3+
4+ # This script takes a target platform as an argument, and then
5+ # builds the server for that platform - installing the correct
6+ # native-built modules for the platform as appropriate.
7+
8+ # ------------------------------------------------------------------------
9+ # Configure everything for the target platform
10+ # ------------------------------------------------------------------------
11+
12+ TARGET_PLATFORM=$1
13+
14+ echo " CONFIGURING FOR $TARGET_PLATFORM "
15+
16+ if [ -z " $TARGET_PLATFORM " ]; then
17+ echo ' A target platform (linux/win32/darwin) is required'
18+ exit 1
19+ fi
20+
21+ TARGET_ARCH=` node -e ' console.log(process.arch)' `
22+
23+ export PATH=./node_modules/.bin:$PATH
24+
25+ # Pick the target platform for prebuild-install:
26+ export npm_config_platform=$TARGET_PLATFORM
27+ # Pick the target platform for node-pre-gyp:
28+ export npm_config_target_platform=$TARGET_PLATFORM
29+
30+ TARGET=$TARGET_PLATFORM -$TARGET_ARCH
31+
32+ # ------------------------------------------------------------------------
33+ # Clean the existing build workspace, to keep targets 100% independent
34+ # ------------------------------------------------------------------------
35+
36+ rm -r ./tmp || true
37+
38+ # ------------------------------------------------------------------------
39+ # Build the package for this platform
40+ # ------------------------------------------------------------------------
41+
42+ env | grep -E ' npm_|TARGET_'
43+
44+ echo
45+ echo " BUILDING FOR $TARGET_PLATFORM "
46+ echo
47+
48+ oclif-dev pack --targets=$TARGET
49+
50+ echo
51+ echo " BUILT"
52+ echo
53+
54+ # ------------------------------------------------------------------------
55+ # Confirm that the installed binaries all support the target platform.
56+ # This is not 100% by any means, but catches obvious mistakes.
57+ # ------------------------------------------------------------------------
58+
59+ # Whitelist (as a regex) for packages that may include binaries for other platforms
60+ PACKAGE_WHITELIST=' '
61+
62+ case " $TARGET_PLATFORM " in
63+ linux)
64+ EXPECTED_BIN_STRING=" ELF"
65+ # Builds raw on non-Windows, but never used
66+ PACKAGE_WHITELIST=" registry-js"
67+ ;;
68+ win32)
69+ EXPECTED_BIN_STRING=" MS Windows"
70+ PACKAGE_WHITELIST=" "
71+ ;;
72+ darwin)
73+ EXPECTED_BIN_STRING=" Mach-O"
74+ # Builds raw on non-Windows, but never used
75+ PACKAGE_WHITELIST=" registry-js"
76+ ;;
77+ * )
78+ echo " Unknown platform $TARGET_PLATFORM "
79+ exit 1
80+ ;;
81+ esac
82+
83+ echo " CHECKING FOR BAD CONFIG"
84+ echo " EXPECTING: $EXPECTED_BIN_STRING "
85+ echo " WHITELIST: $PACKAGE_WHITELIST "
86+
87+ # Find all *.node files in the build that `file` doesn't describe with the above
88+ NATIVE_BINARIES=$(
89+ find ./tmp/$TARGET / \
90+ -name ' *.node' \
91+ -type f \
92+ -exec file {} \;
93+ )
94+ echo " NATIVE BINS: $NATIVE_BINARIES "
95+
96+ BAD_BINS=$( echo " $NATIVE_BINARIES " | grep -v " $EXPECTED_BIN_STRING " || true)
97+
98+ if [[ ! -z " $PACKAGE_WHITELIST " ]]; then
99+ BAD_BINS=$( echo " $BAD_BINS " | grep -E -v " $PACKAGE_WHITELIST " || true)
100+ fi
101+
102+ if [ ` echo " $BAD_BINS " | wc -w` -ne 0 ]; then
103+ echo
104+ echo " ***** BUILD FAILED *****"
105+ echo
106+ echo " Invalid build! $TARGET_PLATFORM build has binaries for the wrong platform."
107+ echo " Bad binaries are:"
108+ echo " $BAD_BINS "
109+ echo
110+ echo " ---"
111+
112+ exit 1
113+ fi
114+
115+ echo " BUILD SUCCESSFUL"
0 commit comments