@shivaedev/vitest-rerun 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +4 -2
- package/dist/adapters/VitestRunner.d.ts.map +1 -1
- package/dist/adapters/VitestRunner.js +1 -1
- package/dist/adapters/VitestRunner.js.map +1 -1
- package/dist/flakyTests.d.ts +3 -0
- package/dist/flakyTests.d.ts.map +1 -1
- package/dist/flakyTests.js +1 -0
- package/dist/flakyTests.js.map +1 -1
- package/dist/internal/mergeAttempt.d.ts +2 -0
- package/dist/internal/mergeAttempt.d.ts.map +1 -1
- package/dist/internal/mergeAttempt.js +4 -3
- package/dist/internal/mergeAttempt.js.map +1 -1
- package/dist/internal/snapshot.d.ts +12 -4
- package/dist/internal/snapshot.d.ts.map +1 -1
- package/dist/internal/snapshot.js +6 -1
- package/dist/internal/snapshot.js.map +1 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +13 -9
- package/dist/options.js.map +1 -1
- package/package.json +4 -4
- package/src/adapters/VitestRunner.ts +7 -1
- package/src/flakyTests.ts +1 -0
- package/src/internal/mergeAttempt.ts +4 -3
- package/src/internal/snapshot.ts +7 -5
- package/src/options.ts +12 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0 - 2026-11-03
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Record every attempt's duration in milliseconds in each `flaky-tests.json` entry, including the final passing attempt.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Honor `--passWithNoTests` when a run finds no test files, so generated apps support the config smoke check before builds.
|
|
12
|
+
- Reject incomplete `--reruns` and `--output-dir` options with exit code 2 and a diagnostic naming the option before Vitest starts.
|
|
13
|
+
|
|
14
|
+
## 0.4.0 - 2026-11-02
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Invalid Vitest command-line arguments fail attempts with `VitestRerunError` and a diagnostic naming the argument.
|
|
19
|
+
|
|
20
|
+
### Breaking
|
|
21
|
+
|
|
22
|
+
- `runAttempt` requires `VitestRunner`; provide `VitestRunner.layer` from `/adapters/VitestRunner.ts` alongside the existing Node services. Move imports of `Files` and `Task` from `/internal/snapshot.ts` to `/adapters/tasks.ts`, `junitClassname` from `/internal/junit.ts` to `/internal/junitClassname.ts`, and `RerunJunitReporter` from `/internal/junit.ts` to `/adapters/RerunJunitReporter.ts`. Reporter, coverage and snapshot-summary adapters now live under `/adapters/` instead of `/internal/adapters/`.
|
|
23
|
+
|
|
3
24
|
## 0.3.0 - 2026-11-02
|
|
4
25
|
|
|
5
26
|
### Fixed
|
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ When a test fails once and then passes, the run succeeds and `test-results/flaky
|
|
|
19
19
|
"name": "checkout > charges the card once",
|
|
20
20
|
"file": "src/checkout.test.ts",
|
|
21
21
|
"attempts": 2,
|
|
22
|
+
"durations": [5001.2, 3.4],
|
|
22
23
|
"messages": ["expected 2 to be 1"]
|
|
23
24
|
}
|
|
24
25
|
]
|
|
@@ -32,7 +33,7 @@ The final JUnit and JSON reports still describe the whole run, so CI, coverage a
|
|
|
32
33
|
|
|
33
34
|
`vitest-rerun` runs `vitest run` once in a child process with Vitest's project retry set to `0`. If tests failed, it starts a new process that runs only the failed tests: tests that passed are skipped by their Vitest test IDs, including passing tests in a failed file. A file that failed to load runs again in full. A failed `beforeAll` or `afterAll`, at file level or in a nested suite, also reruns the whole file so its hooks run again. Tests that passed in that file run again too; any new failure counts. A hook that fails again keeps the run failed and its diagnostic in the final JUnit report. A hook skipped by the rerun keeps its earlier failure and diagnostic. Each rerun is one more attempt, and only tests still failing take part in the next one. The run ends when every test passes or the reruns are used up, and its exit code is the last attempt's: `0` when everything passed, `1` when a test is still failing, and `2` for invalid options.
|
|
34
35
|
|
|
35
|
-
An unhandled error, such as an exception thrown after a test finished, cannot be fixed by running a test again, so a run with one is not rerun and fails.
|
|
36
|
+
An unhandled error, such as an exception thrown after a test finished, cannot be fixed by running a test again, so a run with one is not rerun and fails. A crashed worker or a failure in setup outside a test file, such as `globalSetup`, also fails the run without a rerun, even when it would succeed on another attempt. A crashed worker also prevents other failed tests from being rerun.
|
|
36
37
|
|
|
37
38
|
Retries are global only, and every recovery is recorded in `flaky-tests.json`. Per-test and per-suite retry options that enable Vitest retries are refused: after an attempt, the run fails with a message naming every affected file and test, including tests that inherit a suite's retry. Remove those retry options and use `--reruns` to set the global fresh-process retry policy.
|
|
38
39
|
|
|
@@ -69,6 +70,7 @@ The file holds one entry per test that passed only on a rerun:
|
|
|
69
70
|
| `name` | The JUnit `name` of the test's `testcase`: its describe blocks and title joined by `>`. |
|
|
70
71
|
| `file` | The test file's path relative to the Vitest root, the same as the JUnit `file` attribute. |
|
|
71
72
|
| `attempts` | How many attempts the test took, counting the one that passed. |
|
|
73
|
+
| `durations` | Each attempt's duration in milliseconds, in order, including the final passing attempt. |
|
|
72
74
|
| `messages` | The error message of each failed attempt, in order. |
|
|
73
75
|
|
|
74
76
|
The JUnit `classname` is the file's path relative to the Vitest root. When the test runs in a named Vitest project, the project comes first, as in `|unit| src/checkout.test.ts`, so a file that runs in two projects has a distinct `classname` in each. A file that failed to load has no test to name, so it appears only in the job summary.
|
|
@@ -86,7 +88,7 @@ const flaky = Schema.decodeUnknownSync(Schema.fromJsonString(FlakyTests))(conten
|
|
|
86
88
|
|
|
87
89
|
Every source module is available through its `.ts` subpath, including modules under `internal/`.
|
|
88
90
|
|
|
89
|
-
The command line is a thin wrapper over two Effect functions. `parseOptions(args, cwd)` from `@shivaedev/vitest-rerun/options.ts` turns command-line arguments into `RerunOptions`, with the output directory resolved against `cwd`, the directory every attempt runs in, failing with a `VitestRerunError` from `/error.ts` for an invalid rerun count. `rerun(options)` from `/rerun.ts` performs the run and succeeds with its exit code; it needs `FileSystem` and `ChildProcessSpawner`, which `NodeServices.layer` from `@effect/platform-node` provides.
|
|
91
|
+
The command line is a thin wrapper over two Effect functions. `parseOptions(args, cwd)` from `@shivaedev/vitest-rerun/options.ts` turns command-line arguments into `RerunOptions`, with the output directory resolved against `cwd`, the directory every attempt runs in, failing with a `VitestRerunError` from `/error.ts` for an invalid rerun count or an incomplete `--reruns` or `--output-dir` option. The CLI prints the error and exits with code 2 before Vitest starts. `rerun(options)` from `/rerun.ts` performs the run and succeeds with its exit code; it needs `FileSystem` and `ChildProcessSpawner`, which `NodeServices.layer` from `@effect/platform-node` provides.
|
|
90
92
|
|
|
91
93
|
### Install and limits
|
|
92
94
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VitestRunner.d.ts","sourceRoot":"","sources":["../../src/adapters/VitestRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,UAAU,UAAU;IACnB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAMD,QAAA,MAAM,IAAI;qBAuBS,KAAK,WAAW,QAAQ,CAAC,SAAS,CAAC;wBAOhC,MAAM,WAAW,MAAM,WAAW,UAAU,CAAC,SAAS,CAAC;;;;;;;sBAYzD,SAAS,SAAS,EAAE;;
|
|
1
|
+
{"version":3,"file":"VitestRunner.d.ts","sourceRoot":"","sources":["../../src/adapters/VitestRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,UAAU,UAAU;IACnB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAMD,QAAA,MAAM,IAAI;qBAuBS,KAAK,WAAW,QAAQ,CAAC,SAAS,CAAC;wBAOhC,MAAM,WAAW,MAAM,WAAW,UAAU,CAAC,SAAS,CAAC;;;;;;;sBAYzD,SAAS,SAAS,EAAE;;sEAuBtC,CAAC;AAEH,eAAO,MAAM,YAAY;;yBA5CN,KAAK,WAAW,QAAQ,CAAC,SAAS,CAAC;4BAOhC,MAAM,WAAW,MAAM,WAAW,UAAU,CAAC,SAAS,CAAC;;;;;;;0BAYzD,SAAS,SAAS,EAAE;;;;;CA8BtC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC"}
|
|
@@ -55,7 +55,7 @@ const open = Effect.fn("VitestRerun.open")(function* (input) {
|
|
|
55
55
|
}
|
|
56
56
|
yield* promise("Vitest could not rerun the failed tests", () => vitest.runTestSpecifications(failed));
|
|
57
57
|
}),
|
|
58
|
-
start: () => promise("Vitest could not run the tests", () => vitest.start(filter)).pipe(Effect.asVoid),
|
|
58
|
+
start: () => promise("Vitest could not run the tests", () => vitest.start(filter)).pipe(Effect.catchTag("VitestRerunError", (error) => vitest.config.passWithNoTests && error.cause instanceof VitestNode.TestsNotFoundError ? Effect.void : Effect.fail(error)), Effect.asVoid),
|
|
59
59
|
};
|
|
60
60
|
});
|
|
61
61
|
export const VitestRunner = defineService({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VitestRunner.js","sourceRoot":"","sources":["../../src/adapters/VitestRunner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"VitestRunner.js","sourceRoot":"","sources":["../../src/adapters/VitestRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAc7D,SAAS,OAAO,CAAI,OAAe,EAAE,GAAqB;IACzD,OAAO,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAiB;IACtE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;QAChI,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;KACtE,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC1C,OAAO,CAAC,wBAAwB,EAAE,GAAG,EAAE,CACtC,UAAU,CAAC,YAAY,CACtB;QACC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACtC,SAAS,EAAE,CAAC,SAAS,EAAE,IAAI,iBAAiB,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;QACxF,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,KAAK;KACZ,EACD,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAChE,CACD,EACD,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CACpD,CAAC;IACF,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO;QACN,OAAO,EAAE,CAAC,KAAY,EAAE,OAA4B,EAAE,EAAE,CACvD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClF,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,SAAiB,EAAE,OAAe,EAAE,OAA8B,EAAE,EAAE,CAC9E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/E,KAAK,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAC7E,CAAC,CAAC;QACH,IAAI,EAAE,GAAG,EAAE,CACV,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YACzC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;SAChC,CAAC,CAAC;QACJ,KAAK,EAAE,CAAC,QAA8B,EAAE,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnB,KAAK,CAAC,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAChF,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,kCAAkC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACjH,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvE,OAAO,SAAS,KAAK,SAAS;oBAC7B,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxI,CAAC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,oDAAoD,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACtG,CAAC;YACD,KAAK,CAAC,CAAC,OAAO,CAAC,yCAAyC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;QACvG,CAAC,CAAC;QACH,KAAK,EAAE,GAAG,EAAE,CACX,OAAO,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACzE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC7C,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC,KAAK,YAAY,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CACxH,EACD,MAAM,CAAC,MAAM,CACb;KACF,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACzC,EAAE,EAAE,sCAAsC;IAC1C,UAAU,EAAE,MAAM,CAAC,IAAI;IACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACzB,QAAQ,EAAE,EAAE;CACZ,CAAC,CAAC"}
|
package/dist/flakyTests.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { Task } from "#adapters/tasks.ts";
|
|
|
3
3
|
export declare const FlakyTest: Schema.Struct<{
|
|
4
4
|
readonly attempts: Schema.Number;
|
|
5
5
|
readonly classname: Schema.String;
|
|
6
|
+
readonly durations: Schema.$Array<Schema.Number>;
|
|
6
7
|
readonly file: Schema.String;
|
|
7
8
|
readonly messages: Schema.$Array<Schema.String>;
|
|
8
9
|
readonly name: Schema.String;
|
|
@@ -11,6 +12,7 @@ export type FlakyTest = typeof FlakyTest.Type;
|
|
|
11
12
|
export declare const FlakyTests: Schema.$Array<Schema.Struct<{
|
|
12
13
|
readonly attempts: Schema.Number;
|
|
13
14
|
readonly classname: Schema.String;
|
|
15
|
+
readonly durations: Schema.$Array<Schema.Number>;
|
|
14
16
|
readonly file: Schema.String;
|
|
15
17
|
readonly messages: Schema.$Array<Schema.String>;
|
|
16
18
|
readonly name: Schema.String;
|
|
@@ -23,6 +25,7 @@ export declare function failureMessage(task: Task): string;
|
|
|
23
25
|
export declare const writeFlakyTests: (path: string, flaky: readonly {
|
|
24
26
|
readonly attempts: number;
|
|
25
27
|
readonly classname: string;
|
|
28
|
+
readonly durations: readonly number[];
|
|
26
29
|
readonly file: string;
|
|
27
30
|
readonly messages: readonly string[];
|
|
28
31
|
readonly name: string;
|
package/dist/flakyTests.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flakyTests.d.ts","sourceRoot":"","sources":["../src/flakyTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"flakyTests.d.ts","sourceRoot":"","sources":["../src/flakyTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,eAAO,MAAM,SAAS;;;;;;;EAOpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAE9C,eAAO,MAAM,UAAU;;;;;;;GAA0B,CAAC;AAElD,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,SAAS,SAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EAAE,CAKlH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEjD;AAID,eAAO,MAAM,eAAe;;;;;;;qHAG1B,CAAC"}
|
package/dist/flakyTests.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Effect, FileSystem, Schema } from "effect";
|
|
|
2
2
|
export const FlakyTest = Schema.Struct({
|
|
3
3
|
attempts: Schema.Number,
|
|
4
4
|
classname: Schema.String,
|
|
5
|
+
durations: Schema.Array(Schema.Number),
|
|
5
6
|
file: Schema.String,
|
|
6
7
|
messages: Schema.Array(Schema.String),
|
|
7
8
|
name: Schema.String,
|
package/dist/flakyTests.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flakyTests.js","sourceRoot":"","sources":["../src/flakyTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGpD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC,MAAM;CACnB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAElD,MAAM,UAAU,SAAS,CAAC,KAAsB,EAAE,SAAS,GAAG,EAAE;IAC/D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAU;IACxC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAY,EAAE,KAA2B;IAC3H,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"flakyTests.js","sourceRoot":"","sources":["../src/flakyTests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGpD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC,MAAM;CACnB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAElD,MAAM,UAAU,SAAS,CAAC,KAAsB,EAAE,SAAS,GAAG,EAAE;IAC/D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAU;IACxC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAY,EAAE,KAA2B;IAC3H,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC"}
|
|
@@ -13,6 +13,7 @@ export declare const mergeAttempt: (previous: {
|
|
|
13
13
|
readonly failures: {
|
|
14
14
|
readonly [x: string]: {
|
|
15
15
|
readonly attempts: number;
|
|
16
|
+
readonly durations: readonly number[];
|
|
16
17
|
readonly messages: readonly string[];
|
|
17
18
|
};
|
|
18
19
|
};
|
|
@@ -20,6 +21,7 @@ export declare const mergeAttempt: (previous: {
|
|
|
20
21
|
readonly flaky: readonly {
|
|
21
22
|
readonly attempts: number;
|
|
22
23
|
readonly classname: string;
|
|
24
|
+
readonly durations: readonly number[];
|
|
23
25
|
readonly file: string;
|
|
24
26
|
readonly messages: readonly string[];
|
|
25
27
|
readonly name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeAttempt.d.ts","sourceRoot":"","sources":["../../src/internal/mergeAttempt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"mergeAttempt.d.ts","sourceRoot":"","sources":["../../src/internal/mergeAttempt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,uBAAuB,CAAC;AA6ElF,UAAU,MAAM;IACf,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACrC;AAkCD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EAIR,MAAM,KAAK,IAAI,mDAiB9B,CAAC"}
|
|
@@ -44,14 +44,15 @@ function recordAttempts(file, retried, outcome) {
|
|
|
44
44
|
const classname = junitClassname(path, file.projectName ?? "");
|
|
45
45
|
for (const { name, task } of testcases(file.tasks).filter((testcase) => testcase.task.result?.state === "fail")) {
|
|
46
46
|
const again = retried.find((item) => item.id === task.id);
|
|
47
|
-
const prior = outcome.failures[task.id] ?? { attempts: 1, messages: [failureMessage(task)] };
|
|
47
|
+
const prior = outcome.failures[task.id] ?? { attempts: 1, durations: [task.result?.duration ?? 0], messages: [failureMessage(task)] };
|
|
48
|
+
const durations = [...prior.durations, again?.result?.duration ?? 0];
|
|
48
49
|
if (again?.result?.state === "pass") {
|
|
49
50
|
delete outcome.failures[task.id];
|
|
50
|
-
outcome.flaky.push({ attempts: prior.attempts + 1, classname, file: path, messages: prior.messages, name });
|
|
51
|
+
outcome.flaky.push({ attempts: prior.attempts + 1, classname, durations, file: path, messages: prior.messages, name });
|
|
51
52
|
outcome.summary(`- Flaky: ${classname} — ${name}`);
|
|
52
53
|
}
|
|
53
54
|
else if (again?.result?.state === "fail") {
|
|
54
|
-
outcome.failures[task.id] = { attempts: prior.attempts + 1, messages: [...prior.messages, failureMessage(again)] };
|
|
55
|
+
outcome.failures[task.id] = { attempts: prior.attempts + 1, durations, messages: [...prior.messages, failureMessage(again)] };
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeAttempt.js","sourceRoot":"","sources":["../../src/internal/mergeAttempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAkB,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAsC,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAWlF,SAAS,WAAW,CAAC,KAAW,EAAE,IAAU;IAC3C,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/F,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,KAAa;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,SAAS;QACV,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACrD,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACtH,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;QAC5B,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,IAAU,EAAE,IAAU;IACzC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IAC9E,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,IAAU,EAAE,OAAe,EAAE,OAAgB;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC;QACjH,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mergeAttempt.js","sourceRoot":"","sources":["../../src/internal/mergeAttempt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { Effect, FileSystem, Schema } from "effect";
|
|
2
2
|
import type { Task } from "#adapters/tasks.ts";
|
|
3
|
-
|
|
4
|
-
readonly attempts:
|
|
5
|
-
readonly
|
|
6
|
-
|
|
3
|
+
declare const FailureHistorySchema: Schema.Struct<{
|
|
4
|
+
readonly attempts: Schema.Number;
|
|
5
|
+
readonly durations: Schema.$Array<Schema.Number>;
|
|
6
|
+
readonly messages: Schema.$Array<Schema.String>;
|
|
7
|
+
}>;
|
|
8
|
+
export type FailureHistory = typeof FailureHistorySchema.Type;
|
|
7
9
|
declare const SnapshotSchema: Schema.Struct<{
|
|
8
10
|
readonly errors: Schema.$Array<Schema.Unknown>;
|
|
9
11
|
readonly failures: Schema.$Record<Schema.String, Schema.Struct<{
|
|
10
12
|
readonly attempts: Schema.Number;
|
|
13
|
+
readonly durations: Schema.$Array<Schema.Number>;
|
|
11
14
|
readonly messages: Schema.$Array<Schema.String>;
|
|
12
15
|
}>>;
|
|
13
16
|
readonly files: Schema.declare<import("vitest").RunnerTestFile[], import("vitest").RunnerTestFile[]>;
|
|
14
17
|
readonly flaky: Schema.$Array<Schema.Struct<{
|
|
15
18
|
readonly attempts: Schema.Number;
|
|
16
19
|
readonly classname: Schema.String;
|
|
20
|
+
readonly durations: Schema.$Array<Schema.Number>;
|
|
17
21
|
readonly file: Schema.String;
|
|
18
22
|
readonly messages: Schema.$Array<Schema.String>;
|
|
19
23
|
readonly name: Schema.String;
|
|
@@ -47,6 +51,7 @@ export declare const saveSnapshot: (path: string, snapshot: {
|
|
|
47
51
|
readonly failures: {
|
|
48
52
|
readonly [x: string]: {
|
|
49
53
|
readonly attempts: number;
|
|
54
|
+
readonly durations: readonly number[];
|
|
50
55
|
readonly messages: readonly string[];
|
|
51
56
|
};
|
|
52
57
|
};
|
|
@@ -54,6 +59,7 @@ export declare const saveSnapshot: (path: string, snapshot: {
|
|
|
54
59
|
readonly flaky: readonly {
|
|
55
60
|
readonly attempts: number;
|
|
56
61
|
readonly classname: string;
|
|
62
|
+
readonly durations: readonly number[];
|
|
57
63
|
readonly file: string;
|
|
58
64
|
readonly messages: readonly string[];
|
|
59
65
|
readonly name: string;
|
|
@@ -83,6 +89,7 @@ export declare const readSnapshot: (path: string) => Effect.Effect<{
|
|
|
83
89
|
readonly failures: {
|
|
84
90
|
readonly [x: string]: {
|
|
85
91
|
readonly attempts: number;
|
|
92
|
+
readonly durations: readonly number[];
|
|
86
93
|
readonly messages: readonly string[];
|
|
87
94
|
};
|
|
88
95
|
};
|
|
@@ -90,6 +97,7 @@ export declare const readSnapshot: (path: string) => Effect.Effect<{
|
|
|
90
97
|
readonly flaky: readonly {
|
|
91
98
|
readonly attempts: number;
|
|
92
99
|
readonly classname: string;
|
|
100
|
+
readonly durations: readonly number[];
|
|
93
101
|
readonly file: string;
|
|
94
102
|
readonly messages: readonly string[];
|
|
95
103
|
readonly name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/internal/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAK/C,MAAM,
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/internal/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAK/C,QAAA,MAAM,oBAAoB;;;;EAIxB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAE9D,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBlB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;AAOlD,eAAO,MAAM,WAAW,uJAKtB,CAAC;AAEH,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,EAAE,CAEpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAElD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8FAGvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8GAOvB,CAAC"}
|
|
@@ -3,9 +3,14 @@ import { Effect, FileSystem, Schema } from "effect";
|
|
|
3
3
|
import { failWith } from "#error.ts";
|
|
4
4
|
import { FlakyTest } from "#flakyTests.ts";
|
|
5
5
|
import { SnapshotFiles } from "./SnapshotFiles.js";
|
|
6
|
+
const FailureHistorySchema = Schema.Struct({
|
|
7
|
+
attempts: Schema.Number,
|
|
8
|
+
durations: Schema.Array(Schema.Number),
|
|
9
|
+
messages: Schema.Array(Schema.String),
|
|
10
|
+
});
|
|
6
11
|
const SnapshotSchema = Schema.Struct({
|
|
7
12
|
errors: Schema.Array(Schema.Unknown),
|
|
8
|
-
failures: Schema.Record(Schema.String,
|
|
13
|
+
failures: Schema.Record(Schema.String, FailureHistorySchema),
|
|
9
14
|
files: SnapshotFiles,
|
|
10
15
|
flaky: Schema.Array(FlakyTest),
|
|
11
16
|
summary: Schema.Struct({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/internal/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/internal/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,cAAc,IAAI,CAAC;AAShC,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,cAAc,IAAI,CAAC;AAShC,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,CA4BhH"}
|
package/dist/options.js
CHANGED
|
@@ -4,10 +4,10 @@ import { VitestRerunError } from "#error.ts";
|
|
|
4
4
|
export const DEFAULT_OUTPUT_DIR = "test-results";
|
|
5
5
|
export const DEFAULT_RERUNS = 1;
|
|
6
6
|
function option(arg, name, next) {
|
|
7
|
-
if (arg === name
|
|
8
|
-
return { consumed: 2, value: next };
|
|
7
|
+
if (arg === name) {
|
|
8
|
+
return { consumed: 2, name, value: next === "" || next?.startsWith("--") ? undefined : next };
|
|
9
9
|
}
|
|
10
|
-
return arg.startsWith(`${name}=`) ? { consumed: 1, value: arg.slice(name.length + 1) } : undefined;
|
|
10
|
+
return arg.startsWith(`${name}=`) ? { consumed: 1, name, value: arg.slice(name.length + 1) || undefined } : undefined;
|
|
11
11
|
}
|
|
12
12
|
export function parseOptions(args, cwd) {
|
|
13
13
|
let outputDir = DEFAULT_OUTPUT_DIR;
|
|
@@ -21,16 +21,20 @@ export function parseOptions(args, cwd) {
|
|
|
21
21
|
}
|
|
22
22
|
const output = option(arg, "--output-dir", args[index + 1]);
|
|
23
23
|
const count = option(arg, "--reruns", args[index + 1]);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
else if (count === undefined) {
|
|
24
|
+
const parsed = output ?? count;
|
|
25
|
+
if (parsed === undefined) {
|
|
28
26
|
vitestArgs.push(arg);
|
|
29
27
|
}
|
|
28
|
+
else if (parsed.value === undefined) {
|
|
29
|
+
return Effect.fail(new VitestRerunError({ message: `${parsed.name} expects a value` }));
|
|
30
|
+
}
|
|
31
|
+
else if (output === undefined) {
|
|
32
|
+
reruns = parsed.value;
|
|
33
|
+
}
|
|
30
34
|
else {
|
|
31
|
-
|
|
35
|
+
outputDir = parsed.value;
|
|
32
36
|
}
|
|
33
|
-
index +=
|
|
37
|
+
index += parsed?.consumed ?? 1;
|
|
34
38
|
}
|
|
35
39
|
if (!/^\d+$/u.test(reruns)) {
|
|
36
40
|
return Effect.fail(new VitestRerunError({ message: `--reruns expects a whole number, got ${JSON.stringify(reruns)}` }));
|
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAS7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,SAAS,MAAM,CAAC,GAAW,EAAE,IAAY,EAAE,IAAwB;IAClE,IAAI,GAAG,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/vitest-rerun",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Reruns failed Vitest tests in a fresh process and reports which tests were flaky",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/vitest-rerun#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"@effect/platform-node": "4.0.6",
|
|
50
50
|
"@effect/platform-node-shared": "4.0.6",
|
|
51
51
|
"@effect/vitest": "4.0.6",
|
|
52
|
-
"@shivaedev/quality": "0.
|
|
53
|
-
"@shivaedev/test": "0.
|
|
54
|
-
"@shivaedev/test-story": "0.
|
|
52
|
+
"@shivaedev/quality": "0.57.0",
|
|
53
|
+
"@shivaedev/test": "0.14.0",
|
|
54
|
+
"@shivaedev/test-story": "0.35.0",
|
|
55
55
|
"@types/node": "24.19.2",
|
|
56
56
|
"@vitest/coverage-v8": "5.0.5",
|
|
57
57
|
"effect": "4.0.6",
|
|
@@ -83,7 +83,13 @@ const open = Effect.fn("VitestRerun.open")(function* (input: RunOptions) {
|
|
|
83
83
|
}
|
|
84
84
|
yield* promise("Vitest could not rerun the failed tests", () => vitest.runTestSpecifications(failed));
|
|
85
85
|
}),
|
|
86
|
-
start: () =>
|
|
86
|
+
start: () =>
|
|
87
|
+
promise("Vitest could not run the tests", () => vitest.start(filter)).pipe(
|
|
88
|
+
Effect.catchTag("VitestRerunError", (error) =>
|
|
89
|
+
vitest.config.passWithNoTests && error.cause instanceof VitestNode.TestsNotFoundError ? Effect.void : Effect.fail(error),
|
|
90
|
+
),
|
|
91
|
+
Effect.asVoid,
|
|
92
|
+
),
|
|
87
93
|
};
|
|
88
94
|
});
|
|
89
95
|
|
package/src/flakyTests.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { Task } from "#adapters/tasks.ts";
|
|
|
4
4
|
export const FlakyTest = Schema.Struct({
|
|
5
5
|
attempts: Schema.Number,
|
|
6
6
|
classname: Schema.String,
|
|
7
|
+
durations: Schema.Array(Schema.Number),
|
|
7
8
|
file: Schema.String,
|
|
8
9
|
messages: Schema.Array(Schema.String),
|
|
9
10
|
name: Schema.String,
|
|
@@ -57,13 +57,14 @@ function recordAttempts(file: File, retried: Task[], outcome: Outcome) {
|
|
|
57
57
|
const classname = junitClassname(path, file.projectName ?? "");
|
|
58
58
|
for (const { name, task } of testcases(file.tasks).filter((testcase) => testcase.task.result?.state === "fail")) {
|
|
59
59
|
const again = retried.find((item) => item.id === task.id);
|
|
60
|
-
const prior = outcome.failures[task.id] ?? { attempts: 1, messages: [failureMessage(task)] };
|
|
60
|
+
const prior = outcome.failures[task.id] ?? { attempts: 1, durations: [task.result?.duration ?? 0], messages: [failureMessage(task)] };
|
|
61
|
+
const durations = [...prior.durations, again?.result?.duration ?? 0];
|
|
61
62
|
if (again?.result?.state === "pass") {
|
|
62
63
|
delete outcome.failures[task.id];
|
|
63
|
-
outcome.flaky.push({ attempts: prior.attempts + 1, classname, file: path, messages: prior.messages, name });
|
|
64
|
+
outcome.flaky.push({ attempts: prior.attempts + 1, classname, durations, file: path, messages: prior.messages, name });
|
|
64
65
|
outcome.summary(`- Flaky: ${classname} — ${name}`);
|
|
65
66
|
} else if (again?.result?.state === "fail") {
|
|
66
|
-
outcome.failures[task.id] = { attempts: prior.attempts + 1, messages: [...prior.messages, failureMessage(again)] };
|
|
67
|
+
outcome.failures[task.id] = { attempts: prior.attempts + 1, durations, messages: [...prior.messages, failureMessage(again)] };
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
}
|
package/src/internal/snapshot.ts
CHANGED
|
@@ -5,14 +5,16 @@ import { failWith } from "#error.ts";
|
|
|
5
5
|
import { FlakyTest } from "#flakyTests.ts";
|
|
6
6
|
import { SnapshotFiles } from "./SnapshotFiles.ts";
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const FailureHistorySchema = Schema.Struct({
|
|
9
|
+
attempts: Schema.Number,
|
|
10
|
+
durations: Schema.Array(Schema.Number),
|
|
11
|
+
messages: Schema.Array(Schema.String),
|
|
12
|
+
});
|
|
13
|
+
export type FailureHistory = typeof FailureHistorySchema.Type;
|
|
12
14
|
|
|
13
15
|
const SnapshotSchema = Schema.Struct({
|
|
14
16
|
errors: Schema.Array(Schema.Unknown),
|
|
15
|
-
failures: Schema.Record(Schema.String,
|
|
17
|
+
failures: Schema.Record(Schema.String, FailureHistorySchema),
|
|
16
18
|
files: SnapshotFiles,
|
|
17
19
|
flaky: Schema.Array(FlakyTest),
|
|
18
20
|
summary: Schema.Struct({
|
package/src/options.ts
CHANGED
|
@@ -12,11 +12,11 @@ export interface RerunOptions {
|
|
|
12
12
|
export const DEFAULT_OUTPUT_DIR = "test-results";
|
|
13
13
|
export const DEFAULT_RERUNS = 1;
|
|
14
14
|
|
|
15
|
-
function option(arg: string, name: string, next: string | undefined): { value: string; consumed: number } | undefined {
|
|
16
|
-
if (arg === name
|
|
17
|
-
return { consumed: 2, value: next };
|
|
15
|
+
function option(arg: string, name: string, next: string | undefined): { name: string; value: string | undefined; consumed: number } | undefined {
|
|
16
|
+
if (arg === name) {
|
|
17
|
+
return { consumed: 2, name, value: next === "" || next?.startsWith("--") ? undefined : next };
|
|
18
18
|
}
|
|
19
|
-
return arg.startsWith(`${name}=`) ? { consumed: 1, value: arg.slice(name.length + 1) } : undefined;
|
|
19
|
+
return arg.startsWith(`${name}=`) ? { consumed: 1, name, value: arg.slice(name.length + 1) || undefined } : undefined;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export function parseOptions(args: readonly string[], cwd: string): Effect.Effect<RerunOptions, VitestRerunError> {
|
|
@@ -31,14 +31,17 @@ export function parseOptions(args: readonly string[], cwd: string): Effect.Effec
|
|
|
31
31
|
}
|
|
32
32
|
const output = option(arg, "--output-dir", args[index + 1]);
|
|
33
33
|
const count = option(arg, "--reruns", args[index + 1]);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
} else if (count === undefined) {
|
|
34
|
+
const parsed = output ?? count;
|
|
35
|
+
if (parsed === undefined) {
|
|
37
36
|
vitestArgs.push(arg);
|
|
37
|
+
} else if (parsed.value === undefined) {
|
|
38
|
+
return Effect.fail(new VitestRerunError({ message: `${parsed.name} expects a value` }));
|
|
39
|
+
} else if (output === undefined) {
|
|
40
|
+
reruns = parsed.value;
|
|
38
41
|
} else {
|
|
39
|
-
|
|
42
|
+
outputDir = parsed.value;
|
|
40
43
|
}
|
|
41
|
-
index +=
|
|
44
|
+
index += parsed?.consumed ?? 1;
|
|
42
45
|
}
|
|
43
46
|
if (!/^\d+$/u.test(reruns)) {
|
|
44
47
|
return Effect.fail(new VitestRerunError({ message: `--reruns expects a whole number, got ${JSON.stringify(reruns)}` }));
|