179 lines
3.4 KiB
TypeScript
179 lines
3.4 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
|
|
import { changeset, select, type Release } from "./opencode-changesets"
|
|
|
|
const releases: Release[] = [
|
|
{ tag_name: "v1.2.3", body: "Patch release" },
|
|
{ tag_name: "v1.2.2", body: "\r\n## Core\r\n\r\n- Fix issue\r\n" },
|
|
{ tag_name: "1.2.1", body: "Old tag without prefix" },
|
|
{ tag_name: "v1.2.0", body: "Base release" },
|
|
{ tag_name: "v1.2.4", body: "Draft release", draft: true },
|
|
{ tag_name: "v1.2.5", body: "Prerelease", prerelease: true },
|
|
]
|
|
|
|
describe("opencode changesets", () => {
|
|
test("selects releases in semver range with normalized tags", () => {
|
|
expect(select(releases, "1.2.0", "v1.2.3")).toEqual([
|
|
{ tag_name: "v1.2.1", body: "Old tag without prefix" },
|
|
{ tag_name: "v1.2.2", body: "\r\n## Core\r\n\r\n- Fix issue\r\n" },
|
|
{ tag_name: "v1.2.3", body: "Patch release" },
|
|
])
|
|
})
|
|
|
|
test("excludes prereleases", () => {
|
|
expect(() => select(releases, "1.2.3", "1.2.5")).toThrow("Target opencode release does not exist")
|
|
})
|
|
|
|
test("requires the target release to exist", () => {
|
|
expect(() => select(releases, "1.2.0", "99.9.9")).toThrow("Target opencode release does not exist")
|
|
})
|
|
|
|
test("requires the starting release to exist", () => {
|
|
expect(() => select(releases, "1.1.9", "1.2.3")).toThrow("Starting opencode release does not exist")
|
|
})
|
|
|
|
test("formats changeset markdown", () => {
|
|
expect(changeset([{ tag_name: "v1.2.2", body: "\r\n## Core\r\n\r\n- Fix issue\r\n" }], "1.2.1", "1.2.2")).toBe(`---
|
|
"@kilocode/cli": patch
|
|
"kilo-code": patch
|
|
---
|
|
|
|
Changes from opencode v1.2.1 to v1.2.2 upstream:
|
|
|
|
- Core: Fix issue
|
|
`)
|
|
})
|
|
|
|
test("filters ignored sections and contributor thanks", () => {
|
|
expect(
|
|
changeset(
|
|
[
|
|
{
|
|
tag_name: "v1.2.2",
|
|
body: `## Core
|
|
|
|
- Keep this
|
|
|
|
## Desktop
|
|
|
|
- Drop this
|
|
|
|
## SDK
|
|
|
|
- Drop sdk
|
|
|
|
**Thank you to 1 community contributor:**
|
|
|
|
- @user:
|
|
- Helped
|
|
`,
|
|
},
|
|
],
|
|
"1.2.1",
|
|
"1.2.2",
|
|
),
|
|
).toBe(`---
|
|
"@kilocode/cli": patch
|
|
"kilo-code": patch
|
|
---
|
|
|
|
Changes from opencode v1.2.1 to v1.2.2 upstream:
|
|
|
|
- Core: Keep this
|
|
`)
|
|
})
|
|
|
|
test("bundles release notes into shared sections", () => {
|
|
expect(
|
|
changeset(
|
|
[
|
|
{
|
|
tag_name: "v1.2.1",
|
|
body: `## Core
|
|
|
|
### Bugfixes
|
|
|
|
- Fix first
|
|
|
|
## TUI
|
|
|
|
### Improvements
|
|
|
|
- Improve first
|
|
`,
|
|
},
|
|
{
|
|
tag_name: "v1.2.2",
|
|
body: `## Core
|
|
|
|
### Bugfixes
|
|
|
|
- Fix second
|
|
|
|
### Improvements
|
|
|
|
- Improve core
|
|
|
|
## TUI
|
|
|
|
### Improvements
|
|
|
|
- Improve second
|
|
`,
|
|
},
|
|
],
|
|
"1.2.0",
|
|
"1.2.2",
|
|
),
|
|
).toBe(`---
|
|
"@kilocode/cli": patch
|
|
"kilo-code": patch
|
|
---
|
|
|
|
Changes from opencode v1.2.0 to v1.2.2 upstream:
|
|
|
|
- Core Bugfixes: Fix first
|
|
- Core Bugfixes: Fix second
|
|
- Core Improvements: Improve core
|
|
- TUI Improvements: Improve first
|
|
- TUI Improvements: Improve second
|
|
`)
|
|
})
|
|
|
|
test("preserves multiline markdown blocks", () => {
|
|
expect(
|
|
changeset(
|
|
[
|
|
{
|
|
tag_name: "v1.2.2",
|
|
body: `## Core
|
|
|
|
### Improvements
|
|
|
|
- Parent item
|
|
- Nested item
|
|
|
|
Continuation paragraph
|
|
- Second item
|
|
`,
|
|
},
|
|
],
|
|
"1.2.1",
|
|
"1.2.2",
|
|
),
|
|
).toBe(`---
|
|
"@kilocode/cli": patch
|
|
"kilo-code": patch
|
|
---
|
|
|
|
Changes from opencode v1.2.1 to v1.2.2 upstream:
|
|
|
|
- Core Improvements: Parent item
|
|
- Nested item
|
|
|
|
Continuation paragraph
|
|
- Core Improvements: Second item
|
|
`)
|
|
})
|
|
})
|