Merged in chore/fix-semver (pull request #3393)

Chore/fix semver

* fix semver versioning

* fix semver versioning

* Merge branch 'chore/fix-semver' of bitbucket.org:scandic-swap/web into chore/fix-semver

* Merge branch 'master' of bitbucket.org:scandic-swap/web into chore/fix-semver

* reset to master


Approved-by: Linus Flood
This commit is contained in:
Joakim Jäderberg
2026-01-07 10:49:14 +00:00
parent ffef566316
commit 1ba94ff70a
8 changed files with 111 additions and 8 deletions

View File

@@ -40,6 +40,7 @@
"./stores/*": "./stores/*.ts",
"./telemetry": "./telemetry/index.ts",
"./tokenManager": "./tokenManager/index.ts",
"./utils/getSemver": "./utils/getSemver.ts",
"./utils/stringEquals": "./utils/stringEquals.ts",
"./utils/chunk": "./utils/chunk.ts",
"./utils/dateFormatting": "./utils/dateFormatting.ts",

View File

@@ -0,0 +1,50 @@
import { describe, expect, it } from "vitest"
import { getSemver } from "./getSemver"
describe("getSemver", () => {
it("should return undefined if version is undefined", () => {
expect(getSemver(undefined, "master")).toBeUndefined()
})
it("should return undefined if version is not a string", () => {
// @ts-expect-error Testing invalid input
expect(getSemver(123, "master")).toBeUndefined()
})
it("should strip 'v' prefix from version", () => {
expect(getSemver("v1.0.0", "master")).toBe("1.0.0")
})
it("should return undefined if version format is invalid", () => {
expect(getSemver("invalid-version", "master")).toBeUndefined()
})
it("should return the version as-is for named branches", () => {
expect(getSemver("1.0.0", "release")).toBe("1.0.0")
expect(getSemver("1.0.0", "master")).toBe("1.0.0")
expect(getSemver("1.0.0", "test")).toBe("1.0.0")
expect(getSemver("1.0.0", "stage")).toBe("1.0.0")
expect(getSemver("1.0.0", "prod")).toBe("1.0.0")
})
it("should append cleaned branch name for non-named branches", () => {
expect(getSemver("1.0.0", "feature/my-feature")).toBe(
"1.0.0-feature-my-feature"
)
})
it("should handle special characters in non-named branches", () => {
expect(getSemver("1.0.0", "fix/bug#123")).toBe("1.0.0-fix-bug-123")
})
it("should lowercase and trim non-named branches", () => {
expect(getSemver("1.0.0", " MY-BRANCH ")).toBe("1.0.0-my-branch")
})
it("should truncate long branch names", () => {
expect(
getSemver("1.0.0", "feature/very-long-branch-name-that-exceeds-limit")
).toBe("1.0.0-feature-very-long-br")
})
})

View File

@@ -0,0 +1,32 @@
const namedBranches = ["release", "master", "test", "stage", "prod"] as const
type NamedBranch = (typeof namedBranches)[number] | (string & {})
export function getSemver(
version: string | undefined,
branch: NamedBranch
): string | undefined {
if (!version || typeof version !== "string") {
return undefined
}
if (version.startsWith("v")) {
version = version.substring(1)
}
if (!/^\d+\.\d+\.\d+/.test(version)) {
return undefined
}
if (!namedBranches.includes(branch as any)) {
let cleanedBranch = branch
.substring(0, 20)
.trim()
.replace(/[^a-zA-Z0-9]/g, "-")
.toLowerCase()
return `${version}-${cleanedBranch}`
}
return version
}