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