1import { assert, it } from "@effect/vitest";
2import * as Effect from "effect/Effect";
3
4import { resolvePreviousReleaseTag } from "./resolve-previous-release-tag.ts";
5
6it.effect("selects the latest earlier stable tag and ignores nightlies", () =>
7 Effect.gen(function* () {
8 const previous = yield* resolvePreviousReleaseTag("stable", "v1.2.0", [
9 "v1.1.0",
10 "v1.1.1-nightly.20260619.1",
11 "v1.1.2",
12 "v1.2.0",
13 ]);
14
15 assert.equal(previous, "v1.1.2");
16 }),
17);
18
19it.effect("accepts legacy nightly tags when selecting the previous nightly", () =>
20 Effect.gen(function* () {
21 const previous = yield* resolvePreviousReleaseTag("nightly", "v1.2.0-nightly.20260620.2", [
22 "nightly-v1.2.0-nightly.20260620.1",
23 "v1.1.0-nightly.20260619.9",
24 ]);
25
26 assert.equal(previous, "nightly-v1.2.0-nightly.20260620.1");
27 }),
28);
29
30it.effect("keeps preview tags in their own series", () =>
31 Effect.gen(function* () {
32 const previous = yield* resolvePreviousReleaseTag("preview", "v1.2.0-preview.20260620.2", [
33 "v1.2.0-nightly.20260620.3",
34 "v1.2.0-preview.20260620.1",
35 "v1.1.9",
36 ]);
37 assert.equal(previous, "v1.2.0-preview.20260620.1");
38
39 const stable = yield* resolvePreviousReleaseTag("stable", "v1.2.0", [
40 "v1.1.9",
41 "v1.2.0-preview.20260620.1",
42 ]);
43 assert.equal(stable, "v1.1.9");
44 }),
45);