fix(auto-update): implement channel-based version fetching
Add support for npm dist-tag channels (@beta, @next, @canary) in auto-update mechanism. Users pinned to oh-my-opencode@beta now correctly fetch and compare against beta channel instead of stable latest. - Add extractChannel() to detect channel from version string - Modify getLatestVersion() to accept channel parameter - Update auto-update flow to use channel-aware fetching - Add comprehensive tests for channel detection and fetching - Resolves #687 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { describe, test, expect } from "bun:test"
|
||||
import { isPrereleaseVersion, isDistTag, isPrereleaseOrDistTag } from "./index"
|
||||
import { isPrereleaseVersion, isDistTag, isPrereleaseOrDistTag, extractChannel } from "./index"
|
||||
|
||||
describe("auto-update-checker", () => {
|
||||
describe("isPrereleaseVersion", () => {
|
||||
@@ -150,4 +150,105 @@ describe("auto-update-checker", () => {
|
||||
expect(result).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe("extractChannel", () => {
|
||||
test("extracts beta from dist-tag", () => {
|
||||
// #given beta dist-tag
|
||||
const version = "beta"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns beta
|
||||
expect(result).toBe("beta")
|
||||
})
|
||||
|
||||
test("extracts next from dist-tag", () => {
|
||||
// #given next dist-tag
|
||||
const version = "next"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns next
|
||||
expect(result).toBe("next")
|
||||
})
|
||||
|
||||
test("extracts canary from dist-tag", () => {
|
||||
// #given canary dist-tag
|
||||
const version = "canary"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns canary
|
||||
expect(result).toBe("canary")
|
||||
})
|
||||
|
||||
test("extracts beta from prerelease version", () => {
|
||||
// #given beta prerelease version
|
||||
const version = "3.0.0-beta.1"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns beta
|
||||
expect(result).toBe("beta")
|
||||
})
|
||||
|
||||
test("extracts alpha from prerelease version", () => {
|
||||
// #given alpha prerelease version
|
||||
const version = "1.0.0-alpha"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns alpha
|
||||
expect(result).toBe("alpha")
|
||||
})
|
||||
|
||||
test("extracts rc from prerelease version", () => {
|
||||
// #given rc prerelease version
|
||||
const version = "2.0.0-rc.1"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns rc
|
||||
expect(result).toBe("rc")
|
||||
})
|
||||
|
||||
test("returns latest for stable version", () => {
|
||||
// #given stable version
|
||||
const version = "2.14.0"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns latest
|
||||
expect(result).toBe("latest")
|
||||
})
|
||||
|
||||
test("returns latest for null", () => {
|
||||
// #given null version
|
||||
const version = null
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns latest
|
||||
expect(result).toBe("latest")
|
||||
})
|
||||
|
||||
test("handles complex prerelease identifiers", () => {
|
||||
// #given complex prerelease
|
||||
const version = "3.0.0-beta.1.experimental"
|
||||
|
||||
// #when extracting channel
|
||||
const result = extractChannel(version)
|
||||
|
||||
// #then returns beta
|
||||
expect(result).toBe("beta")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user