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 查看