From 3de5ea818daf5e84846c743d9e49d916815b7319 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 23 Jan 2026 09:05:13 +0000 Subject: [PATCH] ci: speed up install smoke on PRs --- .github/workflows/install-smoke.yml | 1 + scripts/docker/install-sh-nonroot/run.sh | 7 +++- scripts/docker/install-sh-smoke/run.sh | 29 +++++++++++----- scripts/test-install-sh-docker.sh | 42 +++++++++++++++++------- 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/.github/workflows/install-smoke.yml b/.github/workflows/install-smoke.yml index b7e8e274e..84d1b7f32 100644 --- a/.github/workflows/install-smoke.yml +++ b/.github/workflows/install-smoke.yml @@ -29,5 +29,6 @@ jobs: CLAWDBOT_INSTALL_CLI_URL: https://clawd.bot/install-cli.sh CLAWDBOT_NO_ONBOARD: "1" CLAWDBOT_INSTALL_SMOKE_SKIP_CLI: "1" + CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT: ${{ github.event_name == 'pull_request' && '1' || '0' }} CLAWDBOT_INSTALL_SMOKE_PREVIOUS: "2026.1.11-4" run: pnpm test:install:smoke diff --git a/scripts/docker/install-sh-nonroot/run.sh b/scripts/docker/install-sh-nonroot/run.sh index a04b89c15..82e2275ae 100644 --- a/scripts/docker/install-sh-nonroot/run.sh +++ b/scripts/docker/install-sh-nonroot/run.sh @@ -19,7 +19,12 @@ echo "==> Verify git installed" command -v git >/dev/null echo "==> Verify clawdbot installed" -LATEST_VERSION="$(npm view clawdbot version)" +EXPECTED_VERSION="${CLAWDBOT_INSTALL_EXPECT_VERSION:-}" +if [[ -n "$EXPECTED_VERSION" ]]; then + LATEST_VERSION="$EXPECTED_VERSION" +else + LATEST_VERSION="$(npm view clawdbot version)" +fi CMD_PATH="$(command -v clawdbot || true)" if [[ -z "$CMD_PATH" && -x "$HOME/.npm-global/bin/clawdbot" ]]; then CMD_PATH="$HOME/.npm-global/bin/clawdbot" diff --git a/scripts/docker/install-sh-smoke/run.sh b/scripts/docker/install-sh-smoke/run.sh index 370ddae4b..36426b10b 100755 --- a/scripts/docker/install-sh-smoke/run.sh +++ b/scripts/docker/install-sh-smoke/run.sh @@ -6,23 +6,36 @@ SMOKE_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_SMOKE_PREVIOUS:-}" SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}" echo "==> Resolve npm versions" -LATEST_VERSION="$(npm view clawdbot version)" if [[ -n "$SMOKE_PREVIOUS_VERSION" ]]; then + LATEST_VERSION="$(npm view clawdbot version)" PREVIOUS_VERSION="$SMOKE_PREVIOUS_VERSION" else - PREVIOUS_VERSION="$(node - <<'NODE' -const { execSync } = require("node:child_process"); - -const versions = JSON.parse(execSync("npm view clawdbot versions --json", { encoding: "utf8" })); -if (!Array.isArray(versions) || versions.length === 0) { + VERSIONS_JSON="$(npm view clawdbot versions --json)" + read -r LATEST_VERSION PREVIOUS_VERSION < <(node - <<'NODE' +const raw = process.env.VERSIONS_JSON || "[]"; +let versions; +try { + versions = JSON.parse(raw); +} catch { + versions = raw ? [raw] : []; +} +if (!Array.isArray(versions)) { + versions = [versions]; +} +if (versions.length === 0) { process.exit(1); } -const previous = versions.length >= 2 ? versions[versions.length - 2] : versions[0]; -process.stdout.write(previous); +const latest = versions[versions.length - 1]; +const previous = versions.length >= 2 ? versions[versions.length - 2] : latest; +process.stdout.write(`${latest} ${previous}`); NODE )" fi +if [[ -n "${CLAWDBOT_INSTALL_LATEST_OUT:-}" ]]; then + printf "%s" "$LATEST_VERSION" > "$CLAWDBOT_INSTALL_LATEST_OUT" +fi + echo "latest=$LATEST_VERSION previous=$PREVIOUS_VERSION" if [[ "$SKIP_PREVIOUS" == "1" ]]; then diff --git a/scripts/test-install-sh-docker.sh b/scripts/test-install-sh-docker.sh index adf2989cd..ba87eeb65 100755 --- a/scripts/test-install-sh-docker.sh +++ b/scripts/test-install-sh-docker.sh @@ -6,6 +6,9 @@ SMOKE_IMAGE="${CLAWDBOT_INSTALL_SMOKE_IMAGE:-clawdbot-install-smoke:local}" NONROOT_IMAGE="${CLAWDBOT_INSTALL_NONROOT_IMAGE:-clawdbot-install-nonroot:local}" INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://clawd.bot/install.sh}" CLI_INSTALL_URL="${CLAWDBOT_INSTALL_CLI_URL:-https://clawd.bot/install-cli.sh}" +SKIP_NONROOT="${CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT:-0}" +LATEST_DIR="$(mktemp -d)" +LATEST_FILE="${LATEST_DIR}/latest" echo "==> Build smoke image (upgrade, root): $SMOKE_IMAGE" docker build \ @@ -15,31 +18,48 @@ docker build \ echo "==> Run installer smoke test (root): $INSTALL_URL" docker run --rm -t \ + -v "${LATEST_DIR}:/out" \ -e CLAWDBOT_INSTALL_URL="$INSTALL_URL" \ + -e CLAWDBOT_INSTALL_LATEST_OUT="/out/latest" \ -e CLAWDBOT_INSTALL_SMOKE_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_PREVIOUS:-}" \ -e CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}" \ -e CLAWDBOT_NO_ONBOARD=1 \ -e DEBIAN_FRONTEND=noninteractive \ "$SMOKE_IMAGE" -echo "==> Build non-root image: $NONROOT_IMAGE" -docker build \ - -t "$NONROOT_IMAGE" \ - -f "$ROOT_DIR/scripts/docker/install-sh-nonroot/Dockerfile" \ - "$ROOT_DIR/scripts/docker/install-sh-nonroot" +LATEST_VERSION="" +if [[ -f "$LATEST_FILE" ]]; then + LATEST_VERSION="$(cat "$LATEST_FILE")" +fi -echo "==> Run installer non-root test: $INSTALL_URL" -docker run --rm -t \ - -e CLAWDBOT_INSTALL_URL="$INSTALL_URL" \ - -e CLAWDBOT_NO_ONBOARD=1 \ - -e DEBIAN_FRONTEND=noninteractive \ - "$NONROOT_IMAGE" +if [[ "$SKIP_NONROOT" == "1" ]]; then + echo "==> Skip non-root installer smoke (CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT=1)" +else + echo "==> Build non-root image: $NONROOT_IMAGE" + docker build \ + -t "$NONROOT_IMAGE" \ + -f "$ROOT_DIR/scripts/docker/install-sh-nonroot/Dockerfile" \ + "$ROOT_DIR/scripts/docker/install-sh-nonroot" + + echo "==> Run installer non-root test: $INSTALL_URL" + docker run --rm -t \ + -e CLAWDBOT_INSTALL_URL="$INSTALL_URL" \ + -e CLAWDBOT_INSTALL_EXPECT_VERSION="$LATEST_VERSION" \ + -e CLAWDBOT_NO_ONBOARD=1 \ + -e DEBIAN_FRONTEND=noninteractive \ + "$NONROOT_IMAGE" +fi if [[ "${CLAWDBOT_INSTALL_SMOKE_SKIP_CLI:-0}" == "1" ]]; then echo "==> Skip CLI installer smoke (CLAWDBOT_INSTALL_SMOKE_SKIP_CLI=1)" exit 0 fi +if [[ "$SKIP_NONROOT" == "1" ]]; then + echo "==> Skip CLI installer smoke (non-root image skipped)" + exit 0 +fi + echo "==> Run CLI installer non-root test (same image)" docker run --rm -t \ --entrypoint /bin/bash \