39 lines
1.6 KiB
Markdown
39 lines
1.6 KiB
Markdown
# Step 10: CLI Commands
|
|
|
|
Prerequisites: steps 04, 05, 06.
|
|
Read `README.md` and `00-legacy-analysis.md` first.
|
|
|
|
## Goal
|
|
|
|
CLI parity for interactive use without the server.
|
|
|
|
## Design
|
|
|
|
New picocli subcommands (Spring components in `commands/`, wired like the existing ones):
|
|
|
|
- `status` — print the latest build per branch as a table (branch, status, commit, time, duration); `--history` for all builds.
|
|
Reads `BuildResultRepository` directly; works while a server instance runs (file-based store, read-only).
|
|
- `build [<branch>]` — one-shot: fetch, checkout, build the given branch (default: current), print the log to the console, exit with the build's exit code.
|
|
Replaces legacy `--stay` and explicit branch arguments.
|
|
Support the legacy partial-name matching: resolve unique branch-name fragments, list candidates on ambiguity (legacy `resolve_branch_name`).
|
|
- `retry` — re-enqueue/build branches whose latest build failed (legacy `--retry`).
|
|
- Update the root command's subcommand list and `--help` texts.
|
|
|
|
Exit codes: 0 on success, 1 on build failure, 2 on usage/config errors (align with `CliRunner`'s `ExitCodeGenerator` contract).
|
|
|
|
## Out of Scope
|
|
|
|
- Talking to a running server over HTTP; direct file/executor access is sufficient for now.
|
|
- Shell completion.
|
|
|
|
## Tests
|
|
|
|
- Command unit tests with MockK-ed services (pattern of `InitCommandTest`).
|
|
- Branch fragment resolution: unique match, ambiguity handling, no match.
|
|
- Exit code assertions.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- `./gradlew ktlintFormat` then `./gradlew build` is green.
|
|
- `java -jar ... status` and `java -jar ... build` work in this repository (manual smoke test; document in this file).
|