@@ -41,12 +41,16 @@ show_help() {
41
41
REMOTE_USER=" root"
42
42
REMOTE_PATH=" /userdata/jetkvm/bin"
43
43
SKIP_UI_BUILD=false
44
+ SKIP_UI_BUILD_RELEASE=0
44
45
SKIP_NATIVE_BUILD=0
45
46
RESET_USB_HID_DEVICE=false
46
47
LOG_TRACE_SCOPES=" ${LOG_TRACE_SCOPES:- jetkvm,cloud,websocket,native,jsonrpc} "
47
48
RUN_GO_TESTS=false
48
49
RUN_GO_TESTS_ONLY=false
49
50
INSTALL_APP=false
51
+ BUILD_IN_DOCKER=false
52
+ DOCKER_BUILD_DEBUG=false
53
+ DOCKER_BUILD_TAG=ghcr.io/jetkvm/buildkit:latest
50
54
51
55
# Parse command line arguments
52
56
while [[ $# -gt 0 ]]; do
@@ -71,6 +75,14 @@ while [[ $# -gt 0 ]]; do
71
75
RESET_USB_HID_DEVICE=true
72
76
shift
73
77
;;
78
+ --build-in-docker)
79
+ BUILD_IN_DOCKER=true
80
+ shift
81
+ ;;
82
+ --docker-build-debug)
83
+ DOCKER_BUILD_DEBUG=true
84
+ shift
85
+ ;;
74
86
--run-go-tests)
75
87
RUN_GO_TESTS=true
76
88
shift
@@ -103,11 +115,59 @@ if [ -z "$REMOTE_HOST" ]; then
103
115
exit 1
104
116
fi
105
117
118
+ # check if the current CPU architecture is x86_64
119
+ if [ " $( uname -m) " != " x86_64" ]; then
120
+ msg_warn " Warning: This script is only supported on x86_64 architecture"
121
+ BUILD_IN_DOCKER=true
122
+ fi
123
+
124
+ if [ " $BUILD_IN_DOCKER " = true ]; then
125
+ if [ " $JETKVM_INSIDE_DOCKER " = 1 ]; then
126
+ msg_err " Error: already running inside Docker"
127
+ exit
128
+ fi
129
+
130
+ BUILD_ARGS=" --build-arg BUILDPLATFORM=linux/amd64"
131
+ if [ " $DOCKER_BUILD_DEBUG " = true ]; then
132
+ BUILD_ARGS=" $BUILD_ARGS --progress=plain --no-cache"
133
+ fi
134
+
135
+ msg_info " Checking if Docker is available ..."
136
+ if ! command -v docker & > /dev/null; then
137
+ msg_err " Error: Docker is not installed"
138
+ exit 1
139
+ fi
140
+ msg_info " ▶ Building build environment ..."
141
+ TMP_DIR=$( mktemp -d)
142
+ cp -r .devcontainer " ${TMP_DIR} "
143
+ cp go.mod go.sum Dockerfile.build " ${TMP_DIR} "
144
+ pushd " ${TMP_DIR} " > /dev/null
145
+ docker build $BUILD_ARGS -t ${DOCKER_BUILD_TAG} -f Dockerfile.build .
146
+ popd > /dev/null
147
+ rm -rf " ${TMP_DIR} "
148
+ fi
149
+
150
+ do_make () {
151
+ if [ " $BUILD_IN_DOCKER " = true ]; then
152
+ msg_info " ▶ Building the project in Docker ..."
153
+ docker run \
154
+ --interactive \
155
+ --tty \
156
+ --rm \
157
+ --env JETKVM_INSIDE_DOCKER=1 \
158
+ -v " $( pwd) :/build" \
159
+ ${DOCKER_BUILD_TAG} make " $@ "
160
+ else
161
+ make " $@ "
162
+ fi
163
+ }
164
+
106
165
# Build the development version on the host
107
166
# When using `make build_release`, the frontend will be built regardless of the `SKIP_UI_BUILD` flag
108
- if [[ " $SKIP_UI_BUILD " = false && " $INSTALL_APP " = false ]]; then
167
+ if [[ " $SKIP_UI_BUILD " = false && " $JETKVM_INSIDE_DOCKER " != 1 ]]; then
109
168
msg_info " ▶ Building frontend"
110
- make frontend
169
+ make frontend SKIP_UI_BUILD=0
170
+ SKIP_UI_BUILD_RELEASE=1
111
171
fi
112
172
113
173
if [ " $RUN_GO_TESTS " = true ]; then
155
215
if [ " $INSTALL_APP " = true ]
156
216
then
157
217
msg_info " ▶ Building release binary"
158
- make build_release SKIP_NATIVE_IF_EXISTS=${SKIP_NATIVE_BUILD}
218
+ do_make build_release SKIP_NATIVE_IF_EXISTS=${SKIP_NATIVE_BUILD} SKIP_UI_BUILD= ${SKIP_UI_BUILD_RELEASE }
159
219
160
220
# Copy the binary to the remote host as if we were the OTA updater.
161
221
ssh " ${REMOTE_USER} @${REMOTE_HOST} " " cat > /userdata/jetkvm/jetkvm_app.update" < bin/jetkvm_app
164
224
ssh " ${REMOTE_USER} @${REMOTE_HOST} " " reboot"
165
225
else
166
226
msg_info " ▶ Building development binary"
167
- make build_dev SKIP_NATIVE_IF_EXISTS=${SKIP_NATIVE_BUILD}
227
+ do_make build_dev SKIP_NATIVE_IF_EXISTS=${SKIP_NATIVE_BUILD} SKIP_UI_BUILD= ${SKIP_UI_BUILD_RELEASE }
168
228
169
229
# Kill any existing instances of the application
170
230
ssh " ${REMOTE_USER} @${REMOTE_HOST} " " killall jetkvm_app_debug || true"
0 commit comments