Antithesis Launch 是一个用于启动 Antithesis 测试运行的技能,版本为 2026-09-23 a8fe900。
用途 该技能的目标是按固定顺序启动一次 Antithesis 运行:先执行 docker compose build(若被指示使用预构建镜像则跳过),再运行 snouty validate,若校验失败则停止并报告错误,最后执行 snouty launch。
前置条件 技能明确要求:如果未安装 snouty,不要继续。安装选项参见 https://raw.githubusercontent.com/antithesishq/snouty/refs/heads/main/README.md。需要先运行 snouty doctor,它会检查容器运行时和 compose CLI;技能要求将两者报告给用户,并使用同一组合进行构建。该技能写的是 docker compose;当 snouty 指定的 CLI 是 docker-compose 时,应改用 docker-compose。
必需输入 时长(分钟)是必需参数。如果用户未提供,必须在提交运行前询问。
发现配置 从用户提供的路径、命令或 Antithesis 目录名开始。否则检查仓库以了解 harness 的接线方式,在选择命令前查看附近的 AGENTS.md、README*、Makefile* 以及 Antithesis 专用脚本。通过定位用于 Antithesis 的 docker-compose.yaml 来找到配置目录,优先使用 antithesis/config 之类的目录,但也支持非标准布局。以下被视为强 Antithesis 信号:附近的 scratchbook/ 或 test/ 目录、compose 内容提及 /opt/antithesis、ANTITHESIS_ 环境变量、setup_complete 或现有 snouty 示例。如果多个 compose 文件看起来都合理,优先选择仓库文档或现有 snouty launch 示例引用的那个;如果仍然不明确,应询问用户而不是猜测。使用包含 docker-compose.yaml 的目录作为 snouty validate <CONFIG> 和 snouty launch --config <CONFIG> 的参数。针对该确切文件构建:docker compose -f <CONFIG>/docker-compose.yaml build。
镜像与引擎 snouty 从不构建或拉取镜像,因此每个镜像必须已经存在于 snouty 所选引擎的存储中。当 podman 和 docker 都安装时,snouty 优先使用 podman。可使用 SNOUTY_CONTAINER_ENGINE=docker 强制 snouty 使用 docker 的存储。使用 podman 时,用 podman compose -f <CONFIG>/docker-compose.yaml build 构建;该包装器会针对 podman 的 API socket 执行 Docker Compose v2,因此镜像会进入 podman 的存储。需先检查 provider:podman compose version 必须打印 Docker Compose version ...,因为当 podman 找不到 Compose v2 二进制文件时会回退到 podman-compose Python 工具。
运行参数 按以下顺序确定 webhook:用户显式输入、现有仓库文档/脚本/示例,否则在使用 docker-compose.yaml 文件时默认为 basic_test,在使用 kubernetes 设置时默认为 basic_k8s_test。如果被明确指示针对预构建镜像启动运行,则运行 snouty launch --config-image <CONFIG_IMAGE> 并使用用户提供的镜像引用。否则使用 snouty launch --config <CONFIG>,这需要 ANTITHESIS_REPOSITORY。如果当前环境已设置则复用;如果未设置,则停止并询问用户。始终显式设置以下所有参数:--duration(用户提供的时长)、--source(仓库名)、--test-name(仓库名加分支或配置名)、--description(简短可读的运行描述,包含分支名、当前目标或自上次运行以来的更改等细节)。允许覆盖:当用户或调用此技能的其他技能指定了启动参数时,使用他们给出的值而不是上述默认值。
执行 这些命令可能耗时很长。优先使用后台执行或宽松的超时,而不是假设快速完成。除非构建成功且 snouty validate 成功退出,否则不要运行 snouty launch。命令序列为:docker compose -f "$CONFIG_DIR/docker-compose.yaml" build;snouty validate "$CONFIG_DIR";snouty launch --json --webhook "$WEBHOOK" --config "$CONFIG_DIR" --duration "$DURATION" --source "$SOURCE" --test-name "$TEST_NAME" --description "$DESCRIPTION"。
输出 在提交前报告配置目录、compose 构建命令、校验命令以及最终 snouty launch 命令的形态。如果校验失败,立即停止并显示失败的命令及关键错误。--json 标志使 snouty launch 输出包含 run_id 的机器可读结果。解析并报告 run_id——运行完成后进行分诊时需要它。
自检 所选配置目录确实是包含 Antithesis docker-compose.yaml 的目录。构建、校验和运行步骤都指向同一配置。在调用 snouty launch 之前 snouty validate 已成功。运行显式设置了 source、test-name、description 和 duration,优先使用调用方提供的值而非默认值,以及调用方提供的任何附加参数。构建使用了 snouty doctor 报告的 compose CLI 和容器引擎。缺失的阻塞项(如 duration、ANTITHESIS_REPOSITORY 或配置位置不明确)导致停止,而不是错误提交。
适用场景与限制 该技能适用于需要按规范流程启动 Antithesis 测试运行的场景,尤其是需要确保构建、校验、提交顺序正确,并显式记录运行元数据的情况。限制包括:必须已安装 snouty;必须提供时长;使用 --config 时需要 ANTITHESIS_REPOSITORY;镜像必须预先存在于所选引擎存储中;配置位置不明确时必须询问用户而不能猜测。