@@ -1826,6 +1826,75 @@ grep -qx -- "OPENCLAW_E2E_COMMAND_TIMEOUT=23s" "$TMPDIR/package-args"
|
1826 | 1826 | ); |
1827 | 1827 | }); |
1828 | 1828 | |
| 1829 | +it("reuses the shared bare image for multi-node update targeted runs", () => { |
| 1830 | +const workDir = mkdtempSync(join(tmpdir(), "openclaw-multi-node-shared-image-")); |
| 1831 | + |
| 1832 | +try { |
| 1833 | +const rootDir = process.cwd(); |
| 1834 | +mkdirSync(join(workDir, "bin")); |
| 1835 | +writeFileSync(join(workDir, "openclaw-current.tgz"), "fake package"); |
| 1836 | +writeFileSync( |
| 1837 | +join(workDir, "bin", "docker"), |
| 1838 | +`#!/usr/bin/env bash |
| 1839 | +printf "%s\\n" "$*" >>"$TMPDIR/docker-seen" |
| 1840 | +case "$1 $2" in |
| 1841 | + "image inspect") |
| 1842 | + exit 0 |
| 1843 | + ;; |
| 1844 | + "run "*) |
| 1845 | + exit 0 |
| 1846 | + ;; |
| 1847 | +esac |
| 1848 | +exit 9 |
| 1849 | +`, |
| 1850 | +); |
| 1851 | +writeFileSync( |
| 1852 | +join(workDir, "bin", "timeout"), |
| 1853 | +`#!/usr/bin/env bash |
| 1854 | +case "\${1:-}" in |
| 1855 | + --kill-after=1s) |
| 1856 | + exit 0 |
| 1857 | + ;; |
| 1858 | + --kill-after=30s) |
| 1859 | + shift 2 |
| 1860 | + ;; |
| 1861 | + *) |
| 1862 | + shift |
| 1863 | + ;; |
| 1864 | +esac |
| 1865 | +exec "$@" |
| 1866 | +`, |
| 1867 | +); |
| 1868 | +chmodSync(join(workDir, "bin", "docker"), 0o755); |
| 1869 | +chmodSync(join(workDir, "bin", "timeout"), 0o755); |
| 1870 | + |
| 1871 | +const script = ` |
| 1872 | +set -euo pipefail |
| 1873 | +ROOT_DIR=${shellQuote(rootDir)} |
| 1874 | +TMPDIR=${shellQuote(workDir)} |
| 1875 | +export ROOT_DIR TMPDIR |
| 1876 | +export PATH="$TMPDIR/bin:$PATH" |
| 1877 | +export OPENCLAW_SKIP_DOCKER_BUILD=1 |
| 1878 | +export OPENCLAW_DOCKER_E2E_IMAGE=shared-bare |
| 1879 | +export OPENCLAW_CURRENT_PACKAGE_TGZ="$TMPDIR/openclaw-current.tgz" |
| 1880 | +export OPENCLAW_MULTI_NODE_ARTIFACT_DIR="$TMPDIR/artifacts" |
| 1881 | + |
| 1882 | +bash "$ROOT_DIR/scripts/e2e/multi-node-update-docker.sh" |
| 1883 | + |
| 1884 | +grep -q '^image inspect shared-bare$' "$TMPDIR/docker-seen" |
| 1885 | +grep -Fq ' shared-bare ' "$TMPDIR/docker-seen" |
| 1886 | +if grep -Fq 'openclaw-multi-node-update-e2e' "$TMPDIR/docker-seen"; then |
| 1887 | + echo "multi-node update lane ignored the shared targeted image" >&2 |
| 1888 | + exit 1 |
| 1889 | +fi |
| 1890 | +`; |
| 1891 | + |
| 1892 | +execFileSync("bash", ["-lc", script], { encoding: "utf8" }); |
| 1893 | +} finally { |
| 1894 | +rmSync(workDir, { recursive: true, force: true }); |
| 1895 | +} |
| 1896 | +}); |
| 1897 | + |
1829 | 1898 | it("bounds upgrade survivor foreground OpenClaw CLI calls", () => { |
1830 | 1899 | const runner = readFileSync(UPGRADE_SURVIVOR_DOCKER_E2E_PATH, "utf8"); |
1831 | 1900 | const publishedRunner = readFileSync(UPGRADE_SURVIVOR_RUN_SCRIPT, "utf8"); |
|