Skip to main content

josh-compose

Run integration tests in this repo using "josh compose" tool. Use when the user requests to run integration tests.

来源信息

仓库
josh-project/josh
最近来源活动
2026年10月4日 19:49
检测到的 SKILL.md 语言
英语
星标
1,969
分支
85

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
josh-compose
description
Run integration tests in this repo using "josh compose" tool. Use when the user requests to run integration tests.
"josh compose" is a subcommand of "josh" CLI that runs a set of commands in defined environments. The commands and environments are defined in `.josh` files, most of which are in the root of the repo in the `/ws` directory. ## Obtaining access to `josh` binary When `josh` is available in current environment, use that command. When it's not available, use `cargo run --bin josh -- compose ...` to run the command. ## Test organization This repo uses `scrut` tool to run integration tests. `scrut` is a tool for snapshot testing. The tool takes cram-style .t files where shell commands are defined along with their expected output. When the output changes, `scrut` detects it. Test files live under `tests/` and are organized by subsystem: - `tests/filter/` — filter language tests (largest suite) - `tests/proxy/` — git proxy tests - `tests/cli/` — CLI tests - `tests/experimental/` — excluded from release tests ## Running tests via `josh compose run` Tests run inside an isolated podman container. Step results are cached; the cache key is the SHA of the filtered workspace tree, so the cache is automatically invalidated when source files change. ### Running all tests ``` josh compose run ``` To test a specific commit instead of the working tree, pass `--revision` (or `-r`): ``` josh compose run --revision HEAD ``` Other values you can pass include: - `.` (default) — working tree, including uncommitted changes - `+` — staged files (git index); useful to test only what you've `git add`ed - `HEAD` — last commit, ignoring any local changes ### Inspecting test output Each test file prints a result line in the `josh compose run` output: ``` Result: 1 document(s) with N testcase(s): N succeeded, 0 failed and 0 skipped ``` Followed at the end by `SUCCESS: <sha>` or `FAILED: <name>`. For failing tests, the scrut diff format shows the shell expression that failed, expected output (preceded by `-`), and actual output (preceded by `+`). The updated `.t` files are written back to the working directory, so you can inspect them directly. ### Iterating on a failing test 1. Edit the `.t` test file or the relevant source code. 2. Re-run `josh compose run` — the changed working tree produces a new SHA, so the cache is bypassed automatically. ### Do not use compose clean Never run `josh compose clean` or `josh compose clean --all`. The cache is reliable; clearing it just forces a full rebuild and wastes time. If something seems wrong that you believe a cache wipe would fix, stop and ask the user to run the clean in a separate terminal — do not run it yourself, ever.
在 GitHub 查看