name: Install Smoke on: push: branches: [main] pull_request: workflow_dispatch: concurrency: group: install-smoke-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: docs-scope: runs-on: blacksmith-16vcpu-ubuntu-2404 outputs: docs_only: ${{ steps.check.outputs.docs_only }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 fetch-tags: false - name: Ensure docs-scope base commit uses: ./.github/actions/ensure-base-commit with: base-sha: ${{ github.event_name == 'push' && github.event.before || github.event.pull_request.base.sha }} fetch-ref: ${{ github.event_name == 'push' && github.ref_name || github.event.pull_request.base.ref }} - name: Detect docs-only changes id: check uses: ./.github/actions/detect-docs-changes install-smoke: needs: [docs-scope] if: needs.docs-scope.outputs.docs_only != 'true' runs-on: blacksmith-16vcpu-ubuntu-2404 steps: - name: Checkout CLI uses: actions/checkout@v4 - name: Set up Docker Builder uses: useblacksmith/setup-docker-builder@v1 - name: Build root Dockerfile smoke image uses: useblacksmith/build-push-action@v2 with: context: . file: ./Dockerfile tags: openclaw-dockerfile-smoke:local load: true push: false provenance: false cache-from: type=gha,scope=install-smoke-root-dockerfile cache-to: type=gha,mode=max,scope=install-smoke-root-dockerfile - name: Run root Dockerfile CLI smoke run: | docker run --rm --entrypoint sh openclaw-dockerfile-smoke:local -lc 'which openclaw && openclaw --version' # This smoke only validates that the build-arg path preinstalls selected # extension deps without breaking image build or basic CLI startup. It # does not exercise runtime loading/registration of diagnostics-otel. - name: Build extension Dockerfile smoke image uses: useblacksmith/build-push-action@v2 with: context: . file: ./Dockerfile build-args: | OPENCLAW_EXTENSIONS=diagnostics-otel tags: openclaw-ext-smoke:local load: true push: false provenance: false cache-from: type=gha,scope=install-smoke-root-dockerfile-ext cache-to: type=gha,mode=max,scope=install-smoke-root-dockerfile-ext - name: Smoke test Dockerfile with extension build arg run: | docker run --rm --entrypoint sh openclaw-ext-smoke:local -lc 'which openclaw && openclaw --version' - name: Build installer smoke image uses: useblacksmith/build-push-action@v2 with: context: ./scripts/docker file: ./scripts/docker/install-sh-smoke/Dockerfile tags: openclaw-install-smoke:local load: true push: false provenance: false cache-from: type=gha,scope=install-smoke-installer-root cache-to: type=gha,mode=max,scope=install-smoke-installer-root - name: Build installer non-root image if: github.event_name != 'pull_request' uses: useblacksmith/build-push-action@v2 with: context: ./scripts/docker file: ./scripts/docker/install-sh-nonroot/Dockerfile tags: openclaw-install-nonroot:local load: true push: false provenance: false cache-from: type=gha,scope=install-smoke-installer-nonroot cache-to: type=gha,mode=max,scope=install-smoke-installer-nonroot - name: Run installer docker tests env: CLAWDBOT_INSTALL_URL: https://openclaw.ai/install.sh CLAWDBOT_INSTALL_CLI_URL: https://openclaw.ai/install-cli.sh CLAWDBOT_NO_ONBOARD: "1" CLAWDBOT_INSTALL_SMOKE_SKIP_CLI: "1" CLAWDBOT_INSTALL_SMOKE_SKIP_IMAGE_BUILD: "1" CLAWDBOT_INSTALL_NONROOT_SKIP_IMAGE_BUILD: ${{ github.event_name == 'pull_request' && '0' || '1' }} CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT: ${{ github.event_name == 'pull_request' && '1' || '0' }} CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS: "1" run: bash scripts/test-install-sh-docker.sh