spawn/aws
Ahmed Abushagur 22b6a402f4
feat: E2E test harness, QA pipeline integration, macOS compat linter (#1425)
* feat: add QA upgrade — macOS compat linter, per-agent mock assertions

Layer 1: macOS compat linter (test/macos-compat.sh)
- 12 rules (MC001–MC012) catching bash 3.2 incompatibilities
- Detects: base64 -w0 file args, non-portable echo flags, source <(),
  ((var++)), read -d, nounset flag, sed -i, date %N, local -n,
  declare -A, ${var,,}, and |&
- Added to CI lint.yml in warn-only mode for burn-in
- Integrated as Phase 0.5 in qa-dry-run.sh

Layer 2: Per-agent mock assertions
- test/fixtures/_shared_agent_assertions.sh with install checks
  for all 15 agents (claude, openclaw, aider, goose, etc.)
- Integrated into test/mock.sh via _run_agent_assertions()

Also includes branch fixes:
- Fix base64 -w0 to use stdin redirect (aws, daytona, fly)
- Fix fly/openclaw to use npm install instead of broken curl|bash

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add E2E test harness and integrate into QA pipeline

Add test/e2e.sh — a full E2E test harness that provisions real servers,
installs agents, and verifies setup across all clouds. Features:
- Smoke test (one canary agent per cloud) and full matrix modes
- Credential auto-detection for 8 clouds
- Per-cloud preflight validation (sequential) then parallel agent tests
- Stale server cleanup, timing history, cross-cloud comparison
- Auto-fix and optimization phases via Claude agents
- macOS bash 3.2 compatible

Integrate E2E as Phase 5 in both qa-cycle.sh and qa-dry-run.sh:
- Runs after mock tests pass, gated on cloud credentials
- Phase 5b auto-fixes failures using per-agent worktree branches
- Parses results and includes in QA summary

Also fixes:
- shared/common.sh: honour SPAWN_NON_INTERACTIVE=1 in safe_read()
- aws/lib/common.sh: fix SSH key import (use cat instead of base64,
  handle race condition on concurrent imports)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:41:07 -05:00
..
lib feat: E2E test harness, QA pipeline integration, macOS compat linter (#1425) 2026-02-17 20:41:07 -05:00
aider.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
amazonq.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
claude.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
cline.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
codex.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
continue.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
gemini.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
goose.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
gptme.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
interpreter.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
kilocode.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
nanoclaw.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
openclaw.sh ux: wait for OpenClaw gateway to be ready before launching TUI (#1385) 2026-02-17 03:49:53 -05:00
opencode.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
plandex.sh feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00
README.md feat: prioritize clouds with CLI installed + hcloud CLI integration (#1375) 2026-02-16 20:12:35 -08:00

AWS Lightsail

AWS Lightsail instances via AWS CLI. AWS Lightsail

Uses 'ubuntu' user instead of 'root'. Requires AWS CLI installed and configured.

Agents

Claude Code

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/claude.sh)

OpenClaw

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/openclaw.sh)

NanoClaw

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/nanoclaw.sh)

Aider

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/aider.sh)

Goose

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/goose.sh)

Codex CLI

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/codex.sh)

Open Interpreter

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/interpreter.sh)

Gemini CLI

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/gemini.sh)

Amazon Q CLI

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/amazonq.sh)

Cline

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/cline.sh)

gptme

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/gptme.sh)

OpenCode

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/opencode.sh)

Plandex

bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/plandex.sh)

Non-Interactive Mode

LIGHTSAIL_SERVER_NAME=dev-mk1 \
OPENROUTER_API_KEY=sk-or-v1-xxxxx \
  bash <(curl -fsSL https://openrouter.ai/labs/spawn/aws/claude.sh)