@@ -162,6 +162,50 @@ jobs:
162162 provenance : mode=max
163163 push : true
164164
165+ - name : Smoke test amd64 runtime workspace templates
166+ shell : bash
167+ env :
168+ IMAGE_REFS : ${{ steps.tags.outputs.value }}
169+ run : |
170+ set -euo pipefail
171+ mapfile -t image_refs <<< "${IMAGE_REFS}"
172+ image_ref="${image_refs[0]}"
173+ if [[ -z "${image_ref}" ]]; then
174+ echo "::error::No amd64 image ref resolved for runtime template smoke"
175+ exit 1
176+ fi
177+ docker run --rm --entrypoint /bin/sh "${image_ref}" -lc '
178+ set -eu
179+ test -f /app/src/agents/templates/HEARTBEAT.md
180+ temp_root="$(mktemp -d)"
181+ trap "rm -rf \"${temp_root}\"" EXIT
182+ mkdir -p "${temp_root}/home" "${temp_root}/cwd"
183+ cd "${temp_root}/cwd"
184+ set +e
185+ HOME="${temp_root}/home" \
186+ USERPROFILE="${temp_root}/home" \
187+ OPENCLAW_HOME="${temp_root}/home" \
188+ OPENCLAW_NO_ONBOARD=1 \
189+ OPENCLAW_SUPPRESS_NOTES=1 \
190+ OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 \
191+ OPENCLAW_DISABLE_BUNDLED_ENTRY_SOURCE_FALLBACK=1 \
192+ AWS_EC2_METADATA_DISABLED=true \
193+ AWS_SHARED_CREDENTIALS_FILE="${temp_root}/home/.aws/credentials" \
194+ AWS_CONFIG_FILE="${temp_root}/home/.aws/config" \
195+ node /app/openclaw.mjs agent --message "workspace bootstrap smoke" --session-id "workspace-bootstrap-smoke" --local --timeout 1 --json \
196+ >"${temp_root}/out.log" 2>&1
197+ status="$?"
198+ set -e
199+ if grep -F "Missing workspace template:" "${temp_root}/out.log"; then
200+ cat "${temp_root}/out.log"
201+ exit 1
202+ fi
203+ test -f "${temp_root}/home/.openclaw/workspace/HEARTBEAT.md"
204+ if [ "${status}" -ne 0 ]; then
205+ cat "${temp_root}/out.log"
206+ fi
207+ '
208+
165209 # Build arm64 image. Default and slim tags point to the same slim runtime.
166210 build-arm64 :
167211 needs : [approve_manual_backfill]
@@ -260,6 +304,50 @@ jobs:
260304 provenance : mode=max
261305 push : true
262306
307+ - name : Smoke test arm64 runtime workspace templates
308+ shell : bash
309+ env :
310+ IMAGE_REFS : ${{ steps.tags.outputs.value }}
311+ run : |
312+ set -euo pipefail
313+ mapfile -t image_refs <<< "${IMAGE_REFS}"
314+ image_ref="${image_refs[0]}"
315+ if [[ -z "${image_ref}" ]]; then
316+ echo "::error::No arm64 image ref resolved for runtime template smoke"
317+ exit 1
318+ fi
319+ docker run --rm --entrypoint /bin/sh "${image_ref}" -lc '
320+ set -eu
321+ test -f /app/src/agents/templates/HEARTBEAT.md
322+ temp_root="$(mktemp -d)"
323+ trap "rm -rf \"${temp_root}\"" EXIT
324+ mkdir -p "${temp_root}/home" "${temp_root}/cwd"
325+ cd "${temp_root}/cwd"
326+ set +e
327+ HOME="${temp_root}/home" \
328+ USERPROFILE="${temp_root}/home" \
329+ OPENCLAW_HOME="${temp_root}/home" \
330+ OPENCLAW_NO_ONBOARD=1 \
331+ OPENCLAW_SUPPRESS_NOTES=1 \
332+ OPENCLAW_DISABLE_BUNDLED_PLUGINS=1 \
333+ OPENCLAW_DISABLE_BUNDLED_ENTRY_SOURCE_FALLBACK=1 \
334+ AWS_EC2_METADATA_DISABLED=true \
335+ AWS_SHARED_CREDENTIALS_FILE="${temp_root}/home/.aws/credentials" \
336+ AWS_CONFIG_FILE="${temp_root}/home/.aws/config" \
337+ node /app/openclaw.mjs agent --message "workspace bootstrap smoke" --session-id "workspace-bootstrap-smoke" --local --timeout 1 --json \
338+ >"${temp_root}/out.log" 2>&1
339+ status="$?"
340+ set -e
341+ if grep -F "Missing workspace template:" "${temp_root}/out.log"; then
342+ cat "${temp_root}/out.log"
343+ exit 1
344+ fi
345+ test -f "${temp_root}/home/.openclaw/workspace/HEARTBEAT.md"
346+ if [ "${status}" -ne 0 ]; then
347+ cat "${temp_root}/out.log"
348+ fi
349+ '
350+
263351 # Create multi-platform manifests
264352 create-manifest :
265353 needs : [approve_manual_backfill, build-amd64, build-arm64]
0 commit comments