Repository navigation
feat: run several flows in one command, with JSON selection and a CI summary - #18
Merged
Merged
Conversation
…summary lest run takes flow ids, --tag and --affected together, runs the selection one at a time or up to --max-parallel at once, and exits with the worst result (cancelled over could not run over failed). With a selection, -o is a directory of per-flow reports and --junit one file with a test suite per flow. lest list and lest affected print --json for a CI matrix, and a run appends a Markdown table to GITHUB_STEP_SUMMARY when it is set.
Member
Author
|
Review of the diff, with dispositions:
Test note, correcting the body: |
piekstra
marked this pull request as ready for review
October 26, 2026 17:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
lest runran one flow, so CI had to loop in shell, merge exit codes by hand and write one JUnit file per flow. This lets one command select and run a set of flows and report them in forms CI reads.lest run a b c,--tag <t>(repeatable) and--affected <ref>, in any mix, deduplicated in that order. Every selected flow and every flow it calls is validated before any runs. A missing flow or a tag no flow has exits 4, a validation error exits 2, and an--affectedselection that matches nothing exits 0.--max-parallel <n>runs up to n at once; then each run prints only its result line and sign-ins never wait for input. Ctrl-C cancels running flows and queued ones never start.--inputvalues it declares; an input no selected flow declares is a usage error.-ois a directory of<flow>.jsonreports and--junitone file with a<testsuite>per flow in<testsuites>. Naming exactly one flow keeps the existing single-file behavior. A summary table (flow, result, duration, run, failed step, why) closes a multi-flow run.GITHUB_STEP_SUMMARYis set, the run appends a Markdown table built from the (already redacted) reports, with cells flattened to one line, pipes escaped and capped at 300 characters.lest list --jsonandlest affected --jsonprint one line, an array of objects withid(plusname,path,tagsorreasons), forfromJSONin a matrix.preflighttest case in the suite'stestsanderrorsattributes.docs/ci.md now shows a single job using
--affectedand a select-then-matrix pair; README, flow-format.md, development.md and the agent guide mention the new forms.Tests
crates/lest/tests/cli.rsdrives the built binary against a temporary project: several flows with per-flow reports, multi-suite JUnit and the step summary (including an escaped pipe); exit precedence;--tagwith--max-parallel 2; selection mistakes failing before anything runs; per-flow inputs; single-flow outputs unchanged;list --json; andaffected --jsonplusrun --affectedin a git repository. A unit test covers exit precedence.make checkpasses. Two timing-based runner tests in lest-core (parallel_group_runs_concurrentlyand one other, different each time) failed while the machine's load average was above 9; they pass with--test-threads=1and this change does not touch lest-core's runner.